diff options
Diffstat (limited to 'recipes-bsp/u-boot/u-boot-v2012.04.01/0052-i.MX28-Reorder-battery-status-functions-in-SPL.patch')
-rw-r--r-- | recipes-bsp/u-boot/u-boot-v2012.04.01/0052-i.MX28-Reorder-battery-status-functions-in-SPL.patch | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/recipes-bsp/u-boot/u-boot-v2012.04.01/0052-i.MX28-Reorder-battery-status-functions-in-SPL.patch b/recipes-bsp/u-boot/u-boot-v2012.04.01/0052-i.MX28-Reorder-battery-status-functions-in-SPL.patch new file mode 100644 index 0000000..6c7d89a --- /dev/null +++ b/recipes-bsp/u-boot/u-boot-v2012.04.01/0052-i.MX28-Reorder-battery-status-functions-in-SPL.patch @@ -0,0 +1,162 @@ +From cd97dc62732fe84ee4a979e002515c89f37fc477 Mon Sep 17 00:00:00 2001 +From: Marek Vasut <marek.vasut@gmail.com> +Date: Tue, 1 May 2012 11:09:50 +0000 +Subject: [PATCH 52/56] i.MX28: Reorder battery status functions in SPL + +Signed-off-by: Marek Vasut <marek.vasut@gmail.com> +Cc: Detlev Zundel <dzu@denx.de> +Cc: Fabio Estevam <fabio.estevam@freescale.com> +Cc: Stefano Babic <sbabic@denx.de> +Cc: Wolfgang Denk <wd@denx.de> +--- + arch/arm/cpu/arm926ejs/mx28/spl_power_init.c | 120 ++++++++++++-------------- + 1 file changed, 56 insertions(+), 64 deletions(-) + +diff --git a/arch/arm/cpu/arm926ejs/mx28/spl_power_init.c b/arch/arm/cpu/arm926ejs/mx28/spl_power_init.c +index dfb62eb..ac942b4 100644 +--- a/arch/arm/cpu/arm926ejs/mx28/spl_power_init.c ++++ b/arch/arm/cpu/arm926ejs/mx28/spl_power_init.c +@@ -104,6 +104,62 @@ void mx28_power_set_linreg(void) + POWER_VDDIOCTRL_LINREG_OFFSET_1STEPS_BELOW); + } + ++int mx28_get_batt_volt(void) ++{ ++ struct mx28_power_regs *power_regs = ++ (struct mx28_power_regs *)MXS_POWER_BASE; ++ uint32_t volt = readl(&power_regs->hw_power_battmonitor); ++ volt &= POWER_BATTMONITOR_BATT_VAL_MASK; ++ volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET; ++ volt *= 8; ++ return volt; ++} ++ ++int mx28_is_batt_ready(void) ++{ ++ return (mx28_get_batt_volt() >= 3600); ++} ++ ++int mx28_is_batt_good(void) ++{ ++ struct mx28_power_regs *power_regs = ++ (struct mx28_power_regs *)MXS_POWER_BASE; ++ uint32_t volt = mx28_get_batt_volt(); ++ ++ if ((volt >= 2400) && (volt <= 4300)) ++ return 1; ++ ++ clrsetbits_le32(&power_regs->hw_power_5vctrl, ++ POWER_5VCTRL_CHARGE_4P2_ILIMIT_MASK, ++ 0x3 << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET); ++ writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK, ++ &power_regs->hw_power_5vctrl_clr); ++ ++ clrsetbits_le32(&power_regs->hw_power_charge, ++ POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK, ++ POWER_CHARGE_STOP_ILIMIT_10MA | 0x3); ++ ++ writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_clr); ++ writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK, ++ &power_regs->hw_power_5vctrl_clr); ++ ++ early_delay(500000); ++ ++ volt = mx28_get_batt_volt(); ++ ++ if (volt >= 3500) ++ return 0; ++ ++ if (volt >= 2400) ++ return 1; ++ ++ writel(POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK, ++ &power_regs->hw_power_charge_clr); ++ writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_set); ++ ++ return 0; ++} ++ + void mx28_power_setup_5v_detect(void) + { + struct mx28_power_regs *power_regs = +@@ -486,22 +542,6 @@ void mx28_handle_5v_conflict(void) + } + } + +-int mx28_get_batt_volt(void) +-{ +- struct mx28_power_regs *power_regs = +- (struct mx28_power_regs *)MXS_POWER_BASE; +- uint32_t volt = readl(&power_regs->hw_power_battmonitor); +- volt &= POWER_BATTMONITOR_BATT_VAL_MASK; +- volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET; +- volt *= 8; +- return volt; +-} +- +-int mx28_is_batt_ready(void) +-{ +- return (mx28_get_batt_volt() >= 3600); +-} +- + void mx28_5v_boot(void) + { + struct mx28_power_regs *power_regs = +@@ -553,54 +593,6 @@ void mx28_switch_vddd_to_dcdc_source(void) + POWER_VDDDCTRL_DISABLE_STEPPING); + } + +-int mx28_is_batt_good(void) +-{ +- struct mx28_power_regs *power_regs = +- (struct mx28_power_regs *)MXS_POWER_BASE; +- uint32_t volt; +- +- volt = readl(&power_regs->hw_power_battmonitor); +- volt &= POWER_BATTMONITOR_BATT_VAL_MASK; +- volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET; +- volt *= 8; +- +- if ((volt >= 2400) && (volt <= 4300)) +- return 1; +- +- clrsetbits_le32(&power_regs->hw_power_5vctrl, +- POWER_5VCTRL_CHARGE_4P2_ILIMIT_MASK, +- 0x3 << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET); +- writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK, +- &power_regs->hw_power_5vctrl_clr); +- +- clrsetbits_le32(&power_regs->hw_power_charge, +- POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK, +- POWER_CHARGE_STOP_ILIMIT_10MA | 0x3); +- +- writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_clr); +- writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK, +- &power_regs->hw_power_5vctrl_clr); +- +- early_delay(500000); +- +- volt = readl(&power_regs->hw_power_battmonitor); +- volt &= POWER_BATTMONITOR_BATT_VAL_MASK; +- volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET; +- volt *= 8; +- +- if (volt >= 3500) +- return 0; +- +- if (volt >= 2400) +- return 1; +- +- writel(POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK, +- &power_regs->hw_power_charge_clr); +- writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_set); +- +- return 0; +-} +- + void mx28_power_configure_power_source(void) + { + mx28_src_power_init(); +-- +1.7.10 + |