power_supply: collie_battery: convert to gpio_request_array() / gpio_free_array()
RFC PATCH 1/1 power_supply: 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 <[email protected]>
---
hi,
I don't have this hardware handy, I appreciate if someone can test this patch.
Thanks,
Axel
drivers/power/collie_battery.c | 53 ++++++++++------------------------------ 1 files changed, 13 insertions(+), 40 deletions(-)
drivers/power/collie_battery.c +13 -40
@@ -277,18 +277,13 @@ static struct collie_bat collie_bat_bu = { .adc_temp_divider = -1, }; -static struct { -int gpio; -char *name; -bool output; -int value; -} gpios[] = { - {COLLIE_GPIO_CO ,"main battery full" ,0 ,0 }, - {COLLIE_GPIO_MAIN_BAT_LOW ,"main battery low" ,0 ,0 }, - {COLLIE_GPIO_CHARGE_ON ,"main charge on" ,1 ,0 }, - {COLLIE_GPIO_MBAT_ON ,"main battery" ,1 ,0 }, - {COLLIE_GPIO_TMP_ON ,"main battery temp" ,1 ,0 }, - {COLLIE_GPIO_BBAT_ON ,"backup battery" ,1 ,0 }, +static struct gpio collie_batt_gpios[] = { + {COLLIE_GPIO_CO ,GPIOF_IN ,"main battery full" }, + {COLLIE_GPIO_MAIN_BAT_LOW ,GPIOF_IN ,"main battery low" }, + {COLLIE_GPIO_CHARGE_ON ,GPIOF_OUT_INIT_LOW ,"main charge on" }, + {COLLIE_GPIO_MBAT_ON ,GPIOF_OUT_INIT_LOW ,"main battery" }, + {COLLIE_GPIO_TMP_ON ,GPIOF_OUT_INIT_LOW ,"main battery temp" }, + {COLLIE_GPIO_BBAT_ON ,GPIOF_OUT_INIT_LOW ,"backup battery" }, };#ifdef CONFIG_PM
@@ -313,29 +308,16 @@ static int collie_bat_resume(struct ucb1x00_dev *dev)static int __devinit collie_bat_probe (struct ucb1x00_dev *dev) {int ret; -int i;if (!machine_is_collie ())return -ENODEV ; ucb = dev->ucb; -for (i =0 ; i <ARRAY_SIZE (gpios); i++) { - ret =gpio_request (gpios[i].gpio, gpios[i].name); -if (ret) { - i--; - goto err_gpio; - } - -if (gpios[i].output) - ret =gpio_direction_output (gpios[i].gpio, - gpios[i].value); -else - ret =gpio_direction_input (gpios[i].gpio); - -if (ret) - goto err_gpio; - } + ret =gpio_request_array (collie_batt_gpios, +ARRAY_SIZE (collie_batt_gpios)); +if (ret) +return ret;mutex_init (&collie_bat_main.work_lock);
@@ -363,19 +345,12 @@ err_psy_reg_main:/* see comment in collie_bat_remove */ cancel_work_sync (&bat_work); - - i--; -err_gpio: -for (; i >=0 ; i--) -gpio_free (gpios[i].gpio); - +gpio_free_array (collie_batt_gpios,ARRAY_SIZE (collie_batt_gpios));return ret; } static void __devexit collie_bat_remove(struct ucb1x00_dev *dev) { -int i; -free_irq (gpio_to_irq (COLLIE_GPIO_CO ), &collie_bat_main);power_supply_unregister (&collie_bat_bu.psy);
@@ -387,9 +362,7 @@ static void __devexit collie_bat_remove(struct ucb1x00_dev *dev)* unregistered now. */ cancel_work_sync (&bat_work); - -for (i =ARRAY_SIZE (gpios) -1 ; i >=0 ; i--) -gpio_free (gpios[i].gpio); +gpio_free_array (collie_batt_gpios,ARRAY_SIZE (collie_batt_gpios)); }static struct ucb1x00_driver collie_bat_driver = {
Signature · 1 line
1.7.4.1