From patchwork Tue Nov 13 13:22:09 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?=C5=81ukasz_Majewski?= X-Patchwork-Id: 198660 X-Patchwork-Delegate: agust@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 77EDE2C00D2 for ; Wed, 14 Nov 2012 00:25:41 +1100 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 0A4944A1B9; Tue, 13 Nov 2012 14:25:31 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id tX2qPFa-zjCm; Tue, 13 Nov 2012 14:25:30 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id A50C74A1D4; Tue, 13 Nov 2012 14:24:18 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 532CD4A130 for ; Tue, 13 Nov 2012 14:24:11 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2WxTsP7uKaNB for ; Tue, 13 Nov 2012 14:24:10 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mailout2.samsung.com (mailout2.samsung.com [203.254.224.25]) by theia.denx.de (Postfix) with ESMTP id D07AC4A126 for ; Tue, 13 Nov 2012 14:23:32 +0100 (CET) Received: from epcpsbgm1.samsung.com (epcpsbgm1 [203.254.230.26]) by mailout2.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MDF005X7H5HJYA0@mailout2.samsung.com> for u-boot@lists.denx.de; Tue, 13 Nov 2012 22:23:31 +0900 (KST) X-AuditID: cbfee61a-b7fa66d0000004cf-5f-50a249d3581b Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id 6C.B3.01231.3D942A05; Tue, 13 Nov 2012 22:23:31 +0900 (KST) Received: from mcdsrvbld02.digital.local ([106.116.37.23]) by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0MDF00AK5H593U10@mmp1.samsung.com> for u-boot@lists.denx.de; Tue, 13 Nov 2012 22:23:31 +0900 (KST) From: Lukasz Majewski To: u-boot@lists.denx.de Date: Tue, 13 Nov 2012 14:22:09 +0100 Message-id: <1352812937-15998-19-git-send-email-l.majewski@samsung.com> X-Mailer: git-send-email 1.7.10 In-reply-to: <1352812937-15998-1-git-send-email-l.majewski@samsung.com> References: <1352812937-15998-1-git-send-email-l.majewski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrEJMWRmVeSWpSXmKPExsVy+t9jAd3LnosCDKack7F4u7eT3YHR4+yd HYwBjFFcNimpOZllqUX6dglcGc/a9rEVLBWtuHT9L1MD4wTBLkZODgkBE4mLJ44wQthiEhfu rWfrYuTiEBJYxCjx4egZJghnMZPEvP4mVpAqNgE9ic93nzKB2CICEhK/+q8yghQxC9xhlPh/ 7QVYQlggTKJp+1SWLkYODhYBVYmXSxNAwrwC7hLH1raxQ2yTl3h6v48NpIQTKP7nPFinkICb xOadR5knMPIuYGRYxSiaWpBcUJyUnmuoV5yYW1yal66XnJ+7iRHs82dSOxhXNlgcYhTgYFTi 4b3hsjBAiDWxrLgy9xCjBAezkgjvebdFAUK8KYmVValF+fFFpTmpxYcYpTlYlMR5mz1SAoQE 0hNLUrNTUwtSi2CyTBycUg2M3EGiu4KVdsYfeLjCxvjTVKf8KuvYK9l9quGZXculNXb4Gj3N 1f8WHeCy++/C3GCLyAvr+fj2sk+KPbz2kN5JnYTlckWlPpnpffvDjsjN/9FVsvK4SNa/CQK/ js+7ZmRi85N7ThifIOt6DrUn63vc152ulFx7b8udT8+yZn545MRrIbq/bMU+JZbijERDLeai 4kQAo2VJzfUBAAA= Cc: Kyungmin Park , Tom Rini Subject: [U-Boot] [PATCH v7 18/26] pmic:max8997: Support for MAX8997 internal charger control X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de Support for MAX8997 built-in charger. Signed-off-by: Lukasz Majewski Signed-off-by: Kyungmin Park Cc: Stefano Babic --- Changes for v2: - power_init_battery() method added to be called from MAX8997 struct pmic instance Changes for v3: - change code according to struct pmic redesign Changes for v4: - None Changes for v5: - None Changes for v6: - None Changes for v7: - None --- drivers/power/pmic/pmic_max8997.c | 59 ++++++++++++++++++++++++++++++++++++- 1 files changed, 58 insertions(+), 1 deletions(-) diff --git a/drivers/power/pmic/pmic_max8997.c b/drivers/power/pmic/pmic_max8997.c index 2e46884..4e5c6d6 100644 --- a/drivers/power/pmic/pmic_max8997.c +++ b/drivers/power/pmic/pmic_max8997.c @@ -43,6 +43,62 @@ unsigned char max8997_reg_ldo(int uV) return ret; } +static int pmic_charger_state(struct pmic *p, int state, int current) +{ + unsigned char fc; + u32 val = 0; + + if (pmic_probe(p)) + return -1; + + if (state == CHARGER_DISABLE) { + puts("Disable the charger.\n"); + pmic_reg_read(p, MAX8997_REG_MBCCTRL2, &val); + val &= ~(MBCHOSTEN | VCHGR_FC); + pmic_reg_write(p, MAX8997_REG_MBCCTRL2, val); + + return -1; + } + + if (current < CHARGER_MIN_CURRENT || current > CHARGER_MAX_CURRENT) { + printf("%s: Wrong charge current: %d [mA]\n", + __func__, current); + return -1; + } + + fc = (current - CHARGER_MIN_CURRENT) / CHARGER_CURRENT_RESOLUTION; + fc = fc & 0xf; /* up to 950 mA */ + + printf("Enable the charger @ %d [mA]\n", fc * CHARGER_CURRENT_RESOLUTION + + CHARGER_MIN_CURRENT); + + val = fc | MBCICHFCSET; + pmic_reg_write(p, MAX8997_REG_MBCCTRL4, val); + + pmic_reg_read(p, MAX8997_REG_MBCCTRL2, &val); + val = MBCHOSTEN | VCHGR_FC; /* enable charger & fast charge */ + pmic_reg_write(p, MAX8997_REG_MBCCTRL2, val); + + return 0; +} + +static int pmic_charger_bat_present(struct pmic *p) +{ + u32 val; + + if (pmic_probe(p)) + return -1; + + pmic_reg_read(p, MAX8997_REG_STATUS4, &val); + + return !(val & DETBAT); +} + +static struct power_chrg power_chrg_pmic_ops = { + .chrg_bat_present = pmic_charger_bat_present, + .chrg_state = pmic_charger_state, +}; + int pmic_init(unsigned char bus) { static const char name[] = "MAX8997_PMIC"; @@ -53,7 +109,7 @@ int pmic_init(unsigned char bus) return -ENOMEM; } - puts("Board PMIC init\n"); + debug("Board PMIC init\n"); p->name = name; p->interface = PMIC_I2C; @@ -62,5 +118,6 @@ int pmic_init(unsigned char bus) p->hw.i2c.tx_num = 1; p->bus = bus; + p->chrg = &power_chrg_pmic_ops; return 0; }