ASoC: pcm3168a: Update the RST gpio handling to align with documentation
authorPeter Ujfalusi <peter.ujfalusi@ti.com>
Wed, 20 Nov 2019 13:17:53 +0000 (15:17 +0200)
committerMark Brown <broonie@kernel.org>
Wed, 20 Nov 2019 17:08:21 +0000 (17:08 +0000)
The RST (reset-gpios) is low active so the driver must handle it
accordingly.

Add comments to explain clearly how the line is used.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Link: https://lore.kernel.org/r/20191120131753.6831-3-peter.ujfalusi@ti.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/pcm3168a.c

index f347513..9711fab 100644 (file)
@@ -707,11 +707,15 @@ int pcm3168a_probe(struct device *dev, struct regmap *regmap)
        dev_set_drvdata(dev, pcm3168a);
 
        /*
-        * Request the RST gpio line as non exclusive as the same reset line
-        * might be connected to multiple pcm3168a codec
+        * Request the reset (connected to RST pin) gpio line as non exclusive
+        * as the same reset line might be connected to multiple pcm3168a codec
+        *
+        * The RST is low active, we want the GPIO line to be high initially, so
+        * request the initial level to LOW which in practice means DEASSERTED:
+        * The deasserted level of GPIO_ACTIVE_LOW is HIGH.
         */
-       pcm3168a->gpio_rst = devm_gpiod_get_optional(dev, "rst",
-                                               GPIOD_OUT_HIGH |
+       pcm3168a->gpio_rst = devm_gpiod_get_optional(dev, "reset",
+                                               GPIOD_OUT_LOW |
                                                GPIOD_FLAGS_BIT_NONEXCLUSIVE);
        if (IS_ERR(pcm3168a->gpio_rst)) {
                ret = PTR_ERR(pcm3168a->gpio_rst);
@@ -814,7 +818,13 @@ void pcm3168a_remove(struct device *dev)
 {
        struct pcm3168a_priv *pcm3168a = dev_get_drvdata(dev);
 
-       gpiod_set_value_cansleep(pcm3168a->gpio_rst, 0);
+       /*
+        * The RST is low active, we want the GPIO line to be low when the
+        * driver is removed, so set level to 1 which in practice means
+        * ASSERTED:
+        * The asserted level of GPIO_ACTIVE_LOW is LOW.
+        */
+       gpiod_set_value_cansleep(pcm3168a->gpio_rst, 1);
        pm_runtime_disable(dev);
 #ifndef CONFIG_PM
        pcm3168a_disable(dev);