Letux Kernel

View fix-twl4030_madc_battery.patch

1From 1ee99876ffa0bfcb223e4f52265453724e1f5018 Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?Lukas=20M=C3=A4rdian?= <lukas@goldelico.com>
3Date: Fri, 16 Aug 2013 16:20:53 +0200
4Subject: [PATCH] drivers: twl4030_madc_battery: cleanup and fix reading values
5MIME-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
8
9Signed-off-by: Lukas Märdian <lukas@goldelico.com>
10---
11 drivers/power/twl4030_madc_battery.c | 134 +++++++++++++++++++++--------------
12 1 file changed, 81 insertions(+), 53 deletions(-)
13
14diff --git a/drivers/power/twl4030_madc_battery.c b/drivers/power/twl4030_madc_battery.c
15index a022a8a..4dc264d 100644
16--- a/drivers/power/twl4030_madc_battery.c
17+++ b/drivers/power/twl4030_madc_battery.c
18@@ -55,55 +55,66 @@ struct twl4030_madc_battery {
19 14 Reserved
20 15 VRUSB Supply/Speaker left/Speaker right polarization level
21 */
22-enum channel { BTYPE=0, BTEMP=1, VBUS=8, VBKP=9, ICHG=10, VCHG=11, VBAT=12, VRUSB=15 };
23+enum channel {
24+BTYPE = 0,
25+BTEMP = 1,
26+VBUS = 8,
27+VBKP = 9,
28+ICHG = 10,
29+VCHG = 11,
30+VBAT = 12,
31+VRUSB = 15
32+};
33
34 static int madc_read(int index)
35 {
36- struct twl4030_madc_request req;
37- int val;
38+struct twl4030_madc_request req = {
39+.channels = 1 << index,
40+.method = TWL4030_MADC_SW2,
41+.type = TWL4030_MADC_WAIT,
42+};
43+int val;
44
45- req.channels = (1 << index);
46- req.method = TWL4030_MADC_SW2;
47- req.func_cb = NULL;
48- val = twl4030_madc_conversion(&req);
49- if (val < 0)
50- return val;
51+val = twl4030_madc_conversion(&req);
52+if (val < 0)
53+return val;
54
55- return req.rbuf[index];
56+return req.rbuf[index];
57 }
58
59 static int twl4030_madc_bat_get_charging_status(void)
60 {
61- int curr;
62- curr = madc_read(ICHG);
63- if (curr > 0)
64- return 1;
65- else
66- return 0;
67+int curr;
68+curr = madc_read(ICHG);
69+if (curr > 0)
70+return 1;
71+else
72+return 0;
73 }
74
75 static int twl4030_madc_bat_get_voltage(void)
76 {
77- return madc_read(VBAT) * 1000;
78+return madc_read(VBAT) * 1000;
79 }
80
81 static int twl4030_madc_bat_get_current(void)
82 {
83- return madc_read(ICHG) * 1000;
84+return madc_read(ICHG) * 1000;
85 }
86
87 static int twl4030_madc_bat_get_temp(void)
88 {
89- return madc_read(BTEMP) * 10;
90+return madc_read(BTEMP) * 10;
91 }
92
93-static int twl4030_madc_bat_voltscale(struct twl4030_madc_battery *bat, int volt)
94+static int twl4030_madc_bat_voltscale(
95+struct twl4030_madc_battery *bat, int volt)
96 {
97 struct twl4030_madc_bat_calibration *calibration;
98 int i, res = 0;
99
100- /* choose charging curve */
101- if (twl4030_madc_bat_get_charging_status())
102+/* choose charging curve */
103+if (twl4030_madc_bat_get_charging_status())
104 calibration = bat->pdata->charging;
105 else
106 calibration = bat->pdata->discharging;
107@@ -113,11 +124,15 @@ static int twl4030_madc_bat_voltscale(struct twl4030_madc_battery *bat, int volt
108 res = calibration[0].level;
109 else
110 for (i = 0; calibration[i+1].voltage >= 0; i++) {
111-if (volt <= calibration[i].voltage && volt >= calibration[i+1].voltage) {
112+if (volt <= calibration[i].voltage &&
113+volt >= calibration[i+1].voltage) {
114 /* interval found - interpolate within range */
115-res = calibration[i].level - ((calibration[i].voltage - volt)*
116-(calibration[i].level - calibration[i+1].level))/
117-(calibration[i].voltage - calibration[i+1].voltage);
118+res = calibration[i].level -
119+((calibration[i].voltage - volt)*
120+(calibration[i].level -
121+calibration[i+1].level))/
122+(calibration[i].voltage -
123+calibration[i+1].voltage);
124 break;
125 }
126 }
127@@ -125,23 +140,24 @@ static int twl4030_madc_bat_voltscale(struct twl4030_madc_battery *bat, int volt
128 }
129
130 static int twl4030_madc_bat_get_property(struct power_supply *psy,
131- enum power_supply_property psp,
132- union power_supply_propval *val)
133+enum power_supply_property psp,
134+union power_supply_propval *val)
135 {
136-struct twl4030_madc_battery *bat = container_of(psy, struct twl4030_madc_battery, psy);
137-
138-switch(psp) {
139+struct twl4030_madc_battery *bat = container_of(psy,
140+struct twl4030_madc_battery, psy);
141+
142+switch (psp) {
143
144 case POWER_SUPPLY_PROP_STATUS:
145- if (twl4030_madc_bat_voltscale(bat, twl4030_madc_bat_get_voltage()/1000) > 95)
146- val->intval = POWER_SUPPLY_STATUS_FULL;
147- else
148- {
149- if (twl4030_madc_bat_get_charging_status())
150- val->intval = POWER_SUPPLY_STATUS_CHARGING;
151- else
152- val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
153- }
154+if (twl4030_madc_bat_voltscale(bat,
155+twl4030_madc_bat_get_voltage()/1000) > 95)
156+val->intval = POWER_SUPPLY_STATUS_FULL;
157+else {
158+if (twl4030_madc_bat_get_charging_status())
159+val->intval = POWER_SUPPLY_STATUS_CHARGING;
160+else
161+val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
162+}
163 break;
164 case POWER_SUPPLY_PROP_VOLTAGE_NOW:
165 val->intval = twl4030_madc_bat_get_voltage();
166@@ -153,17 +169,22 @@ static int twl4030_madc_bat_get_property(struct power_supply *psy,
167 val->intval = twl4030_madc_bat_get_current();
168 break;
169 case POWER_SUPPLY_PROP_PRESENT:
170-/* val->intval = twl4030_madc_bat_get_temp() < 560; /* madc appears to report 56C for a missing battery (i.e. no thermistor connected) */
171-/* but only during charging! */
172-val->intval = 1;/* assume battery is always present */
173+/* val->intval = twl4030_madc_bat_get_temp() < 560; */
174+/* madc appears to report 56C for a missing battery
175+(i.e. no thermistor connected) but only during charging! */
176+
177+/* assume battery is always present */
178+val->intval = 1;
179 break;
180 case POWER_SUPPLY_PROP_CHARGE_NOW: {
181-int percent = twl4030_madc_bat_voltscale(bat, twl4030_madc_bat_get_voltage()/1000);
182+int percent = twl4030_madc_bat_voltscale(bat,
183+twl4030_madc_bat_get_voltage()/1000);
184 val->intval = (percent * bat->pdata->capacity) / 100;
185 break;
186 }
187 case POWER_SUPPLY_PROP_CAPACITY:
188-val->intval = twl4030_madc_bat_voltscale(bat, twl4030_madc_bat_get_voltage()/1000);
189+val->intval = twl4030_madc_bat_voltscale(bat,
190+twl4030_madc_bat_get_voltage()/1000);
191 break;
192 case POWER_SUPPLY_PROP_CHARGE_FULL:
193 val->intval = bat->pdata->capacity;
194@@ -173,9 +194,13 @@ static int twl4030_madc_bat_get_property(struct power_supply *psy,
195 break;
196 case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW: {
197 /* take care against numeric overflows! */
198-int percent = twl4030_madc_bat_voltscale(bat, twl4030_madc_bat_get_voltage()/1000);
199-int charge = (percent * (bat->pdata->capacity / 1000)) /100;/* in mAh */
200-val->intval = (3600l * charge) / 400;/* assume discharge with 400 mA (ca. 1.5W) */
201+int percent = twl4030_madc_bat_voltscale(bat,
202+twl4030_madc_bat_get_voltage()/1000);
203+
204+/* in mAh */
205+int chg = (percent * (bat->pdata->capacity/1000))/100;
206+/* assume discharge with 400 mA (ca. 1.5W) */
207+val->intval = (3600l * chg) / 400;
208 break;
209 }
210 default:
211@@ -187,7 +212,8 @@ static int twl4030_madc_bat_get_property(struct power_supply *psy,
212
213 static void twl4030_madc_bat_ext_changed(struct power_supply *psy)
214 {
215-struct twl4030_madc_battery *bat = container_of(psy, struct twl4030_madc_battery, psy);
216+struct twl4030_madc_battery *bat = container_of(psy,
217+struct twl4030_madc_battery, psy);
218 power_supply_changed(&bat->psy);
219 }
220
221@@ -202,9 +228,11 @@ static int twl4030_madc_battery_probe(struct platform_device *pdev)
222 twl4030_madc_bat->psy.name = "twl4030_battery";
223 twl4030_madc_bat->psy.type = POWER_SUPPLY_TYPE_BATTERY;
224 twl4030_madc_bat->psy.properties = twl4030_madc_bat_props;
225-twl4030_madc_bat->psy.num_properties = ARRAY_SIZE(twl4030_madc_bat_props);
226+twl4030_madc_bat->psy.num_properties =
227+ARRAY_SIZE(twl4030_madc_bat_props);
228 twl4030_madc_bat->psy.get_property = twl4030_madc_bat_get_property;
229-twl4030_madc_bat->psy.external_power_changed = twl4030_madc_bat_ext_changed;
230+twl4030_madc_bat->psy.external_power_changed =
231+twl4030_madc_bat_ext_changed;
232
233 twl4030_madc_bat->pdata = pdev->dev.platform_data;
234 platform_set_drvdata(pdev, twl4030_madc_bat);
235@@ -227,8 +255,8 @@ static int twl4030_madc_battery_remove(struct platform_device *pdev)
236 .driver = {
237 .name = "twl4030_madc_battery",
238 },
239-.probe = twl4030_madc_battery_probe,
240-.remove = twl4030_madc_battery_remove,
241+.probe = twl4030_madc_battery_probe,
242+.remove = twl4030_madc_battery_remove,
243 };
244
245 static int __init twl4030_madc_battery_init(void)
246--
2471.8.1.6
248

Archive Download this file

Attachment to issue 476

Created: 12 years 5 months ago by Lukas M