From patchwork Tue Nov 13 13:22:11 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [U-Boot, v7, 20/26] arm:trats:pmic: Support for charging battery at Samsung's TRATS board Date: Tue, 13 Nov 2012 03:22:11 -0000 From: =?utf-8?q?=C5=81ukasz_Majewski?= X-Patchwork-Id: 198663 Message-Id: <1352812937-15998-21-git-send-email-l.majewski@samsung.com> To: u-boot@lists.denx.de Cc: Kyungmin Park , Tom Rini The battery connected to Samsung's Trats development board is now charged when voltage drops below threshold. Signed-off-by: Lukasz Majewski Signed-off-by: Kyungmin Park Cc: Minkyu Kang --- Changes for v2: - Define separate *p_{} pointer instances for each power device available at Trats - Only basic checks performed - Core responsible for battery charging moved to separate file - ./drivers/power/bat_trats.c Changes for v3: - change code according to struct pmic redesign Changes for v4: - None Changes for v5: - None Changes for v6: - Code indentation improvement Changes for v7: - Check return value from pmic_get() --- board/samsung/trats/trats.c | 49 ++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 48 insertions(+), 1 deletions(-) diff --git a/board/samsung/trats/trats.c b/board/samsung/trats/trats.c index 226b529..e540190 100644 --- a/board/samsung/trats/trats.c +++ b/board/samsung/trats/trats.c @@ -298,7 +298,9 @@ static int pmic_init_max8997(void) int power_init_board(void) { - int ret; + int chrg, ret; + struct power_battery *pb; + struct pmic *p_fg, *p_chrg, *p_muic, *p_bat; ret = pmic_init(I2C_5); ret |= pmic_init_max8997(); @@ -308,6 +310,51 @@ int power_init_board(void) if (ret) return ret; + p_fg = pmic_get("MAX17042_FG"); + if (!p_fg) { + puts("MAX17042_FG: Not found\n"); + return -ENODEV; + } + + p_chrg = pmic_get("MAX8997_PMIC"); + if (!p_chrg) { + puts("MAX8997_PMIC: Not found\n"); + return -ENODEV; + } + + p_muic = pmic_get("MAX8997_MUIC"); + if (!p_muic) { + puts("MAX8997_MUIC: Not found\n"); + return -ENODEV; + } + + p_bat = pmic_get("BAT_TRATS"); + if (!p_bat) { + puts("BAT_TRATS: Not found\n"); + return -ENODEV; + } + + p_fg->parent = p_bat; + p_chrg->parent = p_bat; + p_muic->parent = p_bat; + + p_bat->low_power_mode = trats_low_power_mode; + p_bat->pbat->battery_init(p_bat, p_fg, p_chrg, p_muic); + + pb = p_bat->pbat; + chrg = p_muic->chrg->chrg_type(p_muic); + debug("CHARGER TYPE: %d\n", chrg); + + if (!p_chrg->chrg->chrg_bat_present(p_chrg)) { + puts("No battery detected\n"); + return -1; + } + + p_fg->fg->fg_battery_check(p_fg, p_bat); + + if (pb->bat->state == CHARGE && chrg == CHARGER_USB) + puts("CHARGE Battery !\n"); + return 0; }