1 From cd97dc62732fe84ee4a979e002515c89f37fc477 Mon Sep 17 00:00:00 2001
2 From: Marek Vasut <marek.vasut@gmail.com>
3 Date: Tue, 1 May 2012 11:09:50 +0000
4 Subject: [PATCH 52/56] i.MX28: Reorder battery status functions in SPL
6 Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
7 Cc: Detlev Zundel <dzu@denx.de>
8 Cc: Fabio Estevam <fabio.estevam@freescale.com>
9 Cc: Stefano Babic <sbabic@denx.de>
10 Cc: Wolfgang Denk <wd@denx.de>
12 arch/arm/cpu/arm926ejs/mx28/spl_power_init.c | 120 ++++++++++++--------------
13 1 file changed, 56 insertions(+), 64 deletions(-)
15 diff --git a/arch/arm/cpu/arm926ejs/mx28/spl_power_init.c b/arch/arm/cpu/arm926ejs/mx28/spl_power_init.c
16 index dfb62eb..ac942b4 100644
17 --- a/arch/arm/cpu/arm926ejs/mx28/spl_power_init.c
18 +++ b/arch/arm/cpu/arm926ejs/mx28/spl_power_init.c
19 @@ -104,6 +104,62 @@ void mx28_power_set_linreg(void)
20 POWER_VDDIOCTRL_LINREG_OFFSET_1STEPS_BELOW);
23 +int mx28_get_batt_volt(void)
25 + struct mx28_power_regs *power_regs =
26 + (struct mx28_power_regs *)MXS_POWER_BASE;
27 + uint32_t volt = readl(&power_regs->hw_power_battmonitor);
28 + volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
29 + volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
34 +int mx28_is_batt_ready(void)
36 + return (mx28_get_batt_volt() >= 3600);
39 +int mx28_is_batt_good(void)
41 + struct mx28_power_regs *power_regs =
42 + (struct mx28_power_regs *)MXS_POWER_BASE;
43 + uint32_t volt = mx28_get_batt_volt();
45 + if ((volt >= 2400) && (volt <= 4300))
48 + clrsetbits_le32(&power_regs->hw_power_5vctrl,
49 + POWER_5VCTRL_CHARGE_4P2_ILIMIT_MASK,
50 + 0x3 << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET);
51 + writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
52 + &power_regs->hw_power_5vctrl_clr);
54 + clrsetbits_le32(&power_regs->hw_power_charge,
55 + POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK,
56 + POWER_CHARGE_STOP_ILIMIT_10MA | 0x3);
58 + writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_clr);
59 + writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
60 + &power_regs->hw_power_5vctrl_clr);
62 + early_delay(500000);
64 + volt = mx28_get_batt_volt();
72 + writel(POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK,
73 + &power_regs->hw_power_charge_clr);
74 + writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_set);
79 void mx28_power_setup_5v_detect(void)
81 struct mx28_power_regs *power_regs =
82 @@ -486,22 +542,6 @@ void mx28_handle_5v_conflict(void)
86 -int mx28_get_batt_volt(void)
88 - struct mx28_power_regs *power_regs =
89 - (struct mx28_power_regs *)MXS_POWER_BASE;
90 - uint32_t volt = readl(&power_regs->hw_power_battmonitor);
91 - volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
92 - volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
97 -int mx28_is_batt_ready(void)
99 - return (mx28_get_batt_volt() >= 3600);
102 void mx28_5v_boot(void)
104 struct mx28_power_regs *power_regs =
105 @@ -553,54 +593,6 @@ void mx28_switch_vddd_to_dcdc_source(void)
106 POWER_VDDDCTRL_DISABLE_STEPPING);
109 -int mx28_is_batt_good(void)
111 - struct mx28_power_regs *power_regs =
112 - (struct mx28_power_regs *)MXS_POWER_BASE;
115 - volt = readl(&power_regs->hw_power_battmonitor);
116 - volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
117 - volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
120 - if ((volt >= 2400) && (volt <= 4300))
123 - clrsetbits_le32(&power_regs->hw_power_5vctrl,
124 - POWER_5VCTRL_CHARGE_4P2_ILIMIT_MASK,
125 - 0x3 << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET);
126 - writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
127 - &power_regs->hw_power_5vctrl_clr);
129 - clrsetbits_le32(&power_regs->hw_power_charge,
130 - POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK,
131 - POWER_CHARGE_STOP_ILIMIT_10MA | 0x3);
133 - writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_clr);
134 - writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
135 - &power_regs->hw_power_5vctrl_clr);
137 - early_delay(500000);
139 - volt = readl(&power_regs->hw_power_battmonitor);
140 - volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
141 - volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
150 - writel(POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK,
151 - &power_regs->hw_power_charge_clr);
152 - writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_set);
157 void mx28_power_configure_power_source(void)
159 mx28_src_power_init();