aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/power/collie_battery.c
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@gmail.com>2011-08-26 03:52:48 -0400
committerAnton Vorontsov <cbouatmailru@gmail.com>2011-11-24 14:30:22 -0500
commit389cd203d611db376c8226e6a7363104ca3769de (patch)
tree83ec524c86e954b93ec0f1ad377b54a46aa3062f /drivers/power/collie_battery.c
parent7ab2f0207dd493e9ac8bae78324cf5592fa92650 (diff)
collie_battery: Convert to gpio_request_array() / gpio_free_array()
As suggested by Igor Grinberg, this change make the implementation looks simpler. Signed-off-by: Axel Lin <axel.lin@gmail.com> Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>
Diffstat (limited to 'drivers/power/collie_battery.c')
-rw-r--r--drivers/power/collie_battery.c53
1 files changed, 13 insertions, 40 deletions
diff --git a/drivers/power/collie_battery.c b/drivers/power/collie_battery.c
index 548d263b1ad0..1b4c17b527c1 100644
--- a/drivers/power/collie_battery.c
+++ b/drivers/power/collie_battery.c
@@ -277,18 +277,13 @@ static struct collie_bat collie_bat_bu = {
277 .adc_temp_divider = -1, 277 .adc_temp_divider = -1,
278}; 278};
279 279
280static struct { 280static struct gpio collie_batt_gpios[] = {
281 int gpio; 281 { COLLIE_GPIO_CO, GPIOF_IN, "main battery full" },
282 char *name; 282 { COLLIE_GPIO_MAIN_BAT_LOW, GPIOF_IN, "main battery low" },
283 bool output; 283 { COLLIE_GPIO_CHARGE_ON, GPIOF_OUT_INIT_LOW, "main charge on" },
284 int value; 284 { COLLIE_GPIO_MBAT_ON, GPIOF_OUT_INIT_LOW, "main battery" },
285} gpios[] = { 285 { COLLIE_GPIO_TMP_ON, GPIOF_OUT_INIT_LOW, "main battery temp" },
286 { COLLIE_GPIO_CO, "main battery full", 0, 0 }, 286 { COLLIE_GPIO_BBAT_ON, GPIOF_OUT_INIT_LOW, "backup battery" },
287 { COLLIE_GPIO_MAIN_BAT_LOW, "main battery low", 0, 0 },
288 { COLLIE_GPIO_CHARGE_ON, "main charge on", 1, 0 },
289 { COLLIE_GPIO_MBAT_ON, "main battery", 1, 0 },
290 { COLLIE_GPIO_TMP_ON, "main battery temp", 1, 0 },
291 { COLLIE_GPIO_BBAT_ON, "backup battery", 1, 0 },
292}; 287};
293 288
294#ifdef CONFIG_PM 289#ifdef CONFIG_PM
@@ -313,29 +308,16 @@ static int collie_bat_resume(struct ucb1x00_dev *dev)
313static int __devinit collie_bat_probe(struct ucb1x00_dev *dev) 308static int __devinit collie_bat_probe(struct ucb1x00_dev *dev)
314{ 309{
315 int ret; 310 int ret;
316 int i;
317 311
318 if (!machine_is_collie()) 312 if (!machine_is_collie())
319 return -ENODEV; 313 return -ENODEV;
320 314
321 ucb = dev->ucb; 315 ucb = dev->ucb;
322 316
323 for (i = 0; i < ARRAY_SIZE(gpios); i++) { 317 ret = gpio_request_array(collie_batt_gpios,
324 ret = gpio_request(gpios[i].gpio, gpios[i].name); 318 ARRAY_SIZE(collie_batt_gpios));
325 if (ret) { 319 if (ret)
326 i--; 320 return ret;
327 goto err_gpio;
328 }
329
330 if (gpios[i].output)
331 ret = gpio_direction_output(gpios[i].gpio,
332 gpios[i].value);
333 else
334 ret = gpio_direction_input(gpios[i].gpio);
335
336 if (ret)
337 goto err_gpio;
338 }
339 321
340 mutex_init(&collie_bat_main.work_lock); 322 mutex_init(&collie_bat_main.work_lock);
341 323
@@ -363,19 +345,12 @@ err_psy_reg_main:
363 345
364 /* see comment in collie_bat_remove */ 346 /* see comment in collie_bat_remove */
365 cancel_work_sync(&bat_work); 347 cancel_work_sync(&bat_work);
366 348 gpio_free_array(collie_batt_gpios, ARRAY_SIZE(collie_batt_gpios));
367 i--;
368err_gpio:
369 for (; i >= 0; i--)
370 gpio_free(gpios[i].gpio);
371
372 return ret; 349 return ret;
373} 350}
374 351
375static void __devexit collie_bat_remove(struct ucb1x00_dev *dev) 352static void __devexit collie_bat_remove(struct ucb1x00_dev *dev)
376{ 353{
377 int i;
378
379 free_irq(gpio_to_irq(COLLIE_GPIO_CO), &collie_bat_main); 354 free_irq(gpio_to_irq(COLLIE_GPIO_CO), &collie_bat_main);
380 355
381 power_supply_unregister(&collie_bat_bu.psy); 356 power_supply_unregister(&collie_bat_bu.psy);
@@ -387,9 +362,7 @@ static void __devexit collie_bat_remove(struct ucb1x00_dev *dev)
387 * unregistered now. 362 * unregistered now.
388 */ 363 */
389 cancel_work_sync(&bat_work); 364 cancel_work_sync(&bat_work);
390 365 gpio_free_array(collie_batt_gpios, ARRAY_SIZE(collie_batt_gpios));
391 for (i = ARRAY_SIZE(gpios) - 1; i >= 0; i--)
392 gpio_free(gpios[i].gpio);
393} 366}
394 367
395static struct ucb1x00_driver collie_bat_driver = { 368static struct ucb1x00_driver collie_bat_driver = {