power: supply: generic-adc-battery: Use GPIO descriptors
authorLinus Walleij <linus.walleij@linaro.org>
Fri, 30 Oct 2020 12:24:24 +0000 (13:24 +0100)
committerSebastian Reichel <sebastian.reichel@collabora.com>
Mon, 30 Nov 2020 01:42:42 +0000 (02:42 +0100)
This driver uses platform data to pass GPIO lines using the
deprecated global GPIO numbers. There are no in-tree users
of this platform data.

Any out-of-tree or coming users of this driver can easily be
migrated to use machine descriptor tables as described in
Documentation/driver-api/gpio/board.rst
section "platform data".

Cc: Anish Kumar <anish198519851985@gmail.com>
Cc: H. Nikolaus Schaller <hns@goldelico.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/supply/generic-adc-battery.c
include/linux/power/generic-adc-battery.h

index caa8297..0032069 100644 (file)
@@ -12,7 +12,7 @@
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
 #include <linux/power_supply.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/err.h>
 #include <linux/timer.h>
 #include <linux/jiffies.h>
@@ -52,6 +52,7 @@ struct gab {
        int     level;
        int     status;
        bool cable_plugged;
+       struct gpio_desc *charge_finished;
 };
 
 static struct gab *to_generic_bat(struct power_supply *psy)
@@ -91,13 +92,9 @@ static const enum power_supply_property gab_dyn_props[] = {
 
 static bool gab_charge_finished(struct gab *adc_bat)
 {
-       struct gab_platform_data *pdata = adc_bat->pdata;
-       bool ret = gpio_get_value(pdata->gpio_charge_finished);
-       bool inv = pdata->gpio_inverted;
-
-       if (!gpio_is_valid(pdata->gpio_charge_finished))
+       if (!adc_bat->charge_finished)
                return false;
-       return ret ^ inv;
+       return gpiod_get_value(adc_bat->charge_finished);
 }
 
 static int gab_get_status(struct gab *adc_bat)
@@ -327,18 +324,17 @@ static int gab_probe(struct platform_device *pdev)
 
        INIT_DELAYED_WORK(&adc_bat->bat_work, gab_work);
 
-       if (gpio_is_valid(pdata->gpio_charge_finished)) {
+       adc_bat->charge_finished = devm_gpiod_get_optional(&pdev->dev,
+                                                          "charged", GPIOD_IN);
+       if (adc_bat->charge_finished) {
                int irq;
-               ret = gpio_request(pdata->gpio_charge_finished, "charged");
-               if (ret)
-                       goto gpio_req_fail;
 
-               irq = gpio_to_irq(pdata->gpio_charge_finished);
+               irq = gpiod_to_irq(adc_bat->charge_finished);
                ret = request_any_context_irq(irq, gab_charged,
                                IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
                                "battery charged", adc_bat);
                if (ret < 0)
-                       goto err_gpio;
+                       goto gpio_req_fail;
        }
 
        platform_set_drvdata(pdev, adc_bat);
@@ -348,8 +344,6 @@ static int gab_probe(struct platform_device *pdev)
                        msecs_to_jiffies(0));
        return 0;
 
-err_gpio:
-       gpio_free(pdata->gpio_charge_finished);
 gpio_req_fail:
        power_supply_unregister(adc_bat->psy);
 err_reg_fail:
@@ -367,14 +361,11 @@ static int gab_remove(struct platform_device *pdev)
 {
        int chan;
        struct gab *adc_bat = platform_get_drvdata(pdev);
-       struct gab_platform_data *pdata = adc_bat->pdata;
 
        power_supply_unregister(adc_bat->psy);
 
-       if (gpio_is_valid(pdata->gpio_charge_finished)) {
-               free_irq(gpio_to_irq(pdata->gpio_charge_finished), adc_bat);
-               gpio_free(pdata->gpio_charge_finished);
-       }
+       if (adc_bat->charge_finished)
+               free_irq(gpiod_to_irq(adc_bat->charge_finished), adc_bat);
 
        for (chan = 0; chan < ARRAY_SIZE(gab_chan_name); chan++) {
                if (adc_bat->channel[chan])
index 40f9c76..c68cbf3 100644 (file)
  * @battery_info:         recommended structure to specify static power supply
  *                        parameters
  * @cal_charge:           calculate charge level.
- * @gpio_charge_finished: gpio for the charger.
- * @gpio_inverted:        Should be 1 if the GPIO is active low otherwise 0
  * @jitter_delay:         delay required after the interrupt to check battery
  *                       status.Default set is 10ms.
  */
 struct gab_platform_data {
        struct power_supply_info battery_info;
        int     (*cal_charge)(long value);
-       int     gpio_charge_finished;
-       bool    gpio_inverted;
        int     jitter_delay;
 };