]> code.ossystems Code Review - meta-freescale.git/blob
6c7d89a874fde58019037c384d2de8ae44cea7f4
[meta-freescale.git] /
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
5
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>
11 ---
12  arch/arm/cpu/arm926ejs/mx28/spl_power_init.c |  120 ++++++++++++--------------
13  1 file changed, 56 insertions(+), 64 deletions(-)
14
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);
21  }
22  
23 +int mx28_get_batt_volt(void)
24 +{
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;
30 +       volt *= 8;
31 +       return volt;
32 +}
33 +
34 +int mx28_is_batt_ready(void)
35 +{
36 +       return (mx28_get_batt_volt() >= 3600);
37 +}
38 +
39 +int mx28_is_batt_good(void)
40 +{
41 +       struct mx28_power_regs *power_regs =
42 +               (struct mx28_power_regs *)MXS_POWER_BASE;
43 +       uint32_t volt = mx28_get_batt_volt();
44 +
45 +       if ((volt >= 2400) && (volt <= 4300))
46 +               return 1;
47 +
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);
53 +
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);
57 +
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);
61 +
62 +       early_delay(500000);
63 +
64 +       volt = mx28_get_batt_volt();
65 +
66 +       if (volt >= 3500)
67 +               return 0;
68 +
69 +       if (volt >= 2400)
70 +               return 1;
71 +
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);
75 +
76 +       return 0;
77 +}
78 +
79  void mx28_power_setup_5v_detect(void)
80  {
81         struct mx28_power_regs *power_regs =
82 @@ -486,22 +542,6 @@ void mx28_handle_5v_conflict(void)
83         }
84  }
85  
86 -int mx28_get_batt_volt(void)
87 -{
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;
93 -       volt *= 8;
94 -       return volt;
95 -}
96 -
97 -int mx28_is_batt_ready(void)
98 -{
99 -       return (mx28_get_batt_volt() >= 3600);
100 -}
101 -
102  void mx28_5v_boot(void)
103  {
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);
107  }
108  
109 -int mx28_is_batt_good(void)
110 -{
111 -       struct mx28_power_regs *power_regs =
112 -               (struct mx28_power_regs *)MXS_POWER_BASE;
113 -       uint32_t volt;
114 -
115 -       volt = readl(&power_regs->hw_power_battmonitor);
116 -       volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
117 -       volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
118 -       volt *= 8;
119 -
120 -       if ((volt >= 2400) && (volt <= 4300))
121 -               return 1;
122 -
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);
128 -
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);
132 -
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);
136 -
137 -       early_delay(500000);
138 -
139 -       volt = readl(&power_regs->hw_power_battmonitor);
140 -       volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
141 -       volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
142 -       volt *= 8;
143 -
144 -       if (volt >= 3500)
145 -               return 0;
146 -
147 -       if (volt >= 2400)
148 -               return 1;
149 -
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);
153 -
154 -       return 0;
155 -}
156 -
157  void mx28_power_configure_power_source(void)
158  {
159         mx28_src_power_init();
160 -- 
161 1.7.10
162