aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-bsp/u-boot/u-boot-v2012.04.01/0052-i.MX28-Reorder-battery-status-functions-in-SPL.patch
diff options
context:
space:
mode:
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.patch162
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
+