ASoC: codecs: cs4270: move to GPIO consumer API
authorDaniel Mack <daniel@zonque.org>
Thu, 6 Dec 2018 12:24:26 +0000 (13:24 +0100)
committerMark Brown <broonie@kernel.org>
Thu, 6 Dec 2018 20:08:31 +0000 (20:08 +0000)
Get the reset GPIO through the GPIO consumer API. This allows specifying the
DT property as "reset-gpios" without breaking existing DT users.

Signed-off-by: Daniel Mack <daniel@zonque.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/cs4270.c

index 3c266eeb89bfb2eaec708783b4974a2d72e1b6a2..33d74f163bd753820bb77bd81d8f0a28461410e5 100644 (file)
@@ -29,8 +29,8 @@
 #include <linux/i2c.h>
 #include <linux/delay.h>
 #include <linux/regulator/consumer.h>
+#include <linux/gpio/consumer.h>
 #include <linux/of_device.h>
-#include <linux/of_gpio.h>
 
 /*
  * The codec isn't really big-endian or little-endian, since the I2S
@@ -658,8 +658,8 @@ static const struct regmap_config cs4270_regmap = {
 static int cs4270_i2c_probe(struct i2c_client *i2c_client,
        const struct i2c_device_id *id)
 {
-       struct device_node *np = i2c_client->dev.of_node;
        struct cs4270_private *cs4270;
+       struct gpio_desc *reset_gpiod;
        unsigned int val;
        int ret, i;
 
@@ -678,20 +678,11 @@ static int cs4270_i2c_probe(struct i2c_client *i2c_client,
        if (ret < 0)
                return ret;
 
-       /* See if we have a way to bring the codec out of reset */
-       if (np) {
-               enum of_gpio_flags flags;
-               int gpio = of_get_named_gpio_flags(np, "reset-gpio", 0, &flags);
-
-               if (gpio_is_valid(gpio)) {
-                       ret = devm_gpio_request_one(&i2c_client->dev, gpio,
-                                    flags & OF_GPIO_ACTIVE_LOW ?
-                                       GPIOF_OUT_INIT_LOW : GPIOF_OUT_INIT_HIGH,
-                                    "cs4270 reset");
-                       if (ret < 0)
-                               return ret;
-               }
-       }
+       reset_gpiod = devm_gpiod_get_optional(&i2c_client->dev, "reset",
+                                             GPIOD_OUT_HIGH);
+       if (IS_ERR(reset_gpiod) &&
+           PTR_ERR(reset_gpiod) == -EPROBE_DEFER)
+               return -EPROBE_DEFER;
 
        cs4270->regmap = devm_regmap_init_i2c(i2c_client, &cs4270_regmap);
        if (IS_ERR(cs4270->regmap))