OSDN Git Service

ASoC: simple-card-utils: switch to using gpiod API
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 6 Sep 2022 19:06:09 +0000 (12:06 -0700)
committerMark Brown <broonie@kernel.org>
Wed, 7 Sep 2022 11:42:22 +0000 (12:42 +0100)
This patch switches the driver away from legacy gpio/of_gpio API to
gpiod API, and removes use of of_get_named_gpio_flags() which I want to
make private to gpiolib.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/YxeaITtlJexygQo9@google.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/generic/simple-card-utils.c

index 1b201dd..bef1683 100644 (file)
@@ -9,7 +9,6 @@
 #include <linux/gpio/consumer.h>
 #include <linux/module.h>
 #include <linux/of.h>
-#include <linux/of_gpio.h>
 #include <linux/of_graph.h>
 #include <sound/jack.h>
 #include <sound/pcm_params.h>
@@ -729,12 +728,12 @@ int asoc_simple_init_jack(struct snd_soc_card *card,
                          char *pin)
 {
        struct device *dev = card->dev;
-       enum of_gpio_flags flags;
+       struct gpio_desc *desc;
        char prop[128];
        char *pin_name;
        char *gpio_name;
        int mask;
-       int det;
+       int error;
 
        if (!prefix)
                prefix = "";
@@ -742,36 +741,39 @@ int asoc_simple_init_jack(struct snd_soc_card *card,
        sjack->gpio.gpio = -ENOENT;
 
        if (is_hp) {
-               snprintf(prop, sizeof(prop), "%shp-det-gpio", prefix);
+               snprintf(prop, sizeof(prop), "%shp-det", prefix);
                pin_name        = pin ? pin : "Headphones";
                gpio_name       = "Headphone detection";
                mask            = SND_JACK_HEADPHONE;
        } else {
-               snprintf(prop, sizeof(prop), "%smic-det-gpio", prefix);
+               snprintf(prop, sizeof(prop), "%smic-det", prefix);
                pin_name        = pin ? pin : "Mic Jack";
                gpio_name       = "Mic detection";
                mask            = SND_JACK_MICROPHONE;
        }
 
-       det = of_get_named_gpio_flags(dev->of_node, prop, 0, &flags);
-       if (det == -EPROBE_DEFER)
-               return -EPROBE_DEFER;
+       desc = gpiod_get_optional(dev, prop, GPIOD_IN);
+       error = PTR_ERR_OR_ZERO(desc);
+       if (error)
+               return error;
+
+       if (desc) {
+               error = gpiod_set_consumer_name(desc, gpio_name);
+               if (error)
+                       return error;
 
-       if (gpio_is_valid(det)) {
                sjack->pin.pin          = pin_name;
                sjack->pin.mask         = mask;
 
                sjack->gpio.name        = gpio_name;
                sjack->gpio.report      = mask;
-               sjack->gpio.gpio        = det;
-               sjack->gpio.invert      = !!(flags & OF_GPIO_ACTIVE_LOW);
+               sjack->gpio.desc        = desc;
                sjack->gpio.debounce_time = 150;
 
                snd_soc_card_jack_new_pins(card, pin_name, mask, &sjack->jack,
                                           &sjack->pin, 1);
 
-               snd_soc_jack_add_gpios(&sjack->jack, 1,
-                                      &sjack->gpio);
+               snd_soc_jack_add_gpios(&sjack->jack, 1, &sjack->gpio);
        }
 
        return 0;