]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: tas5086: use sleeping variants of gpiod API
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 20 Aug 2024 01:13:47 +0000 (18:13 -0700)
committerMark Brown <broonie@kernel.org>
Tue, 20 Aug 2024 11:59:17 +0000 (12:59 +0100)
The driver does not access reset GPIO in atomic contexts so it is usable
with GPIOs that may sleep during access. Switch to using
gpiod_set_value_cansleep().

Also the reset GPIO is configured as output at the time it is acquired,
there is no need to use gpiod_direction_output() when executing reset
sequence.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Link: https://patch.msgid.link/ZsPty8oNMQk4YTl1@google.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/tas5086.c

index 4bc1fdd232bb78feb476d0c1178805be597def3e..b97c0e885713869b93577d5e1b1a1c5413b3bfe2 100644 (file)
@@ -463,9 +463,9 @@ static void tas5086_reset(struct tas5086_private *priv)
 {
        if (priv->reset) {
                /* Reset codec - minimum assertion time is 400ns */
-               gpiod_direction_output(priv->reset, 1);
+               gpiod_set_value_cansleep(priv->reset, 1);
                udelay(1);
-               gpiod_set_value(priv->reset, 0);
+               gpiod_set_value_cansleep(priv->reset, 0);
 
                /* Codec needs ~15ms to wake up */
                msleep(15);
@@ -866,9 +866,10 @@ static void tas5086_remove(struct snd_soc_component *component)
 {
        struct tas5086_private *priv = snd_soc_component_get_drvdata(component);
 
-       if (priv->reset)
+       if (priv->reset) {
                /* Set codec to the reset state */
-               gpiod_set_value(priv->reset, 1);
+               gpiod_set_value_cansleep(priv->reset, 1);
+       }
 
        regulator_bulk_disable(ARRAY_SIZE(priv->supplies), priv->supplies);
 };