Message ID | 20250324-wcd-gpiod-v2-2-773f67ce3b56@nxp.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | ASoC: codec: wcd93xx: Convert to GPIO descriptors | expand |
Hi Peng, On Mon, Mar 24, 2025 at 6:52 AM Peng Fan (OSS) <peng.fan@oss.nxp.com> wrote: > > From: Peng Fan <peng.fan@nxp.com> > > of_gpio.h is deprecated, update the driver to use GPIO descriptors. > - Use dev_gpiod_get to get GPIO descriptor. > - Use gpiod_set_value to configure output value. > > With legacy of_gpio API, the driver set gpio value 0 to assert reset, > and 1 to deassert reset. And the reset-gpios use GPIO_ACTIVE_LOW flag in > DTS, so set GPIOD_OUT_LOW when get GPIO descriptors, and set value 1 means > output low, set value 0 means output high with gpiod API. > > The in-tree DTS files have the right polarity set up already so we > can expect this to "just work". > > Reviewed-by: Linus Walleij <linus.walleij@linaro.org> > Signed-off-by: Peng Fan <peng.fan@nxp.com> > --- > sound/soc/codecs/wcd938x.c | 13 ++++++------- > 1 file changed, 6 insertions(+), 7 deletions(-) > > diff --git a/sound/soc/codecs/wcd938x.c b/sound/soc/codecs/wcd938x.c > index 1ae498c323912ed799dcc033e7777936d90c9284..955a0d3a77d7cb45932faa0c7a6f5060232d33b4 100644 > --- a/sound/soc/codecs/wcd938x.c > +++ b/sound/soc/codecs/wcd938x.c > @@ -11,7 +11,6 @@ > #include <linux/pm_runtime.h> > #include <linux/component.h> > #include <sound/tlv.h> > -#include <linux/of_gpio.h> > #include <linux/of.h> > #include <sound/jack.h> > #include <sound/pcm.h> > @@ -171,7 +170,7 @@ struct wcd938x_priv { > int flyback_cur_det_disable; > int ear_rx_path; > int variant; > - int reset_gpio; > + struct gpio_desc *reset_gpio; > struct gpio_desc *us_euro_gpio; > u32 micb1_mv; > u32 micb2_mv; > @@ -3251,9 +3250,9 @@ static int wcd938x_populate_dt_data(struct wcd938x_priv *wcd938x, struct device > struct wcd_mbhc_config *cfg = &wcd938x->mbhc_cfg; > int ret; > > - wcd938x->reset_gpio = of_get_named_gpio(dev->of_node, "reset-gpios", 0); > - if (wcd938x->reset_gpio < 0) > - return dev_err_probe(dev, wcd938x->reset_gpio, > + wcd938x->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); > + if (IS_ERR(wcd938x->reset_gpio)) > + return dev_err_probe(dev, PTR_ERR(wcd938x->reset_gpio), > "Failed to get reset gpio\n"); > > wcd938x->us_euro_gpio = devm_gpiod_get_optional(dev, "us-euro", > @@ -3297,10 +3296,10 @@ static int wcd938x_populate_dt_data(struct wcd938x_priv *wcd938x, struct device > > static int wcd938x_reset(struct wcd938x_priv *wcd938x) > { > - gpio_direction_output(wcd938x->reset_gpio, 0); > + gpiod_set_value(wcd938x->reset_gpio, 1); > /* 20us sleep required after pulling the reset gpio to LOW */ > usleep_range(20, 30); > - gpio_set_value(wcd938x->reset_gpio, 1); > + gpiod_set_value(wcd938x->reset_gpio, 0); > /* 20us sleep required after pulling the reset gpio to HIGH */ > usleep_range(20, 30); > > > -- > 2.37.1 > I can verify that with v2 applied, I do still have working audio on the Thinkpad X13s. Apologies for not replying earlier, it was unfortunately my night time. For the record though, I do not use the firmware dtb files, but explicitly list the kernel that I am using and/or testing to be used on each boot. Tested-by: Steev Klimaszewski <steev@kali.org> Thanks! -- steev
> Subject: Re: [PATCH v2 2/3] ASoC: codec: wcd938x: Convert to GPIO > descriptors > ... > > > I can verify that with v2 applied, I do still have working audio on the > Thinkpad X13s. Apologies for not replying earlier, it was unfortunately > my night time. For the record though, I do not use the firmware dtb > files, but explicitly list the kernel that I am using and/or testing to be > used on each boot. > > Tested-by: Steev Klimaszewski <steev@kali.org> Appreciate for helping test. Thanks, Peng. > > Thanks! > -- steev
On Mon, Mar 24, 2025 at 12:52 PM Peng Fan (OSS) <peng.fan@oss.nxp.com> wrote: > > From: Peng Fan <peng.fan@nxp.com> > > of_gpio.h is deprecated, update the driver to use GPIO descriptors. > - Use dev_gpiod_get to get GPIO descriptor. > - Use gpiod_set_value to configure output value. > > With legacy of_gpio API, the driver set gpio value 0 to assert reset, > and 1 to deassert reset. And the reset-gpios use GPIO_ACTIVE_LOW flag in > DTS, so set GPIOD_OUT_LOW when get GPIO descriptors, and set value 1 means > output low, set value 0 means output high with gpiod API. > > The in-tree DTS files have the right polarity set up already so we > can expect this to "just work". > > Reviewed-by: Linus Walleij <linus.walleij@linaro.org> > Signed-off-by: Peng Fan <peng.fan@nxp.com> > --- Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
diff --git a/sound/soc/codecs/wcd938x.c b/sound/soc/codecs/wcd938x.c index 1ae498c323912ed799dcc033e7777936d90c9284..955a0d3a77d7cb45932faa0c7a6f5060232d33b4 100644 --- a/sound/soc/codecs/wcd938x.c +++ b/sound/soc/codecs/wcd938x.c @@ -11,7 +11,6 @@ #include <linux/pm_runtime.h> #include <linux/component.h> #include <sound/tlv.h> -#include <linux/of_gpio.h> #include <linux/of.h> #include <sound/jack.h> #include <sound/pcm.h> @@ -171,7 +170,7 @@ struct wcd938x_priv { int flyback_cur_det_disable; int ear_rx_path; int variant; - int reset_gpio; + struct gpio_desc *reset_gpio; struct gpio_desc *us_euro_gpio; u32 micb1_mv; u32 micb2_mv; @@ -3251,9 +3250,9 @@ static int wcd938x_populate_dt_data(struct wcd938x_priv *wcd938x, struct device struct wcd_mbhc_config *cfg = &wcd938x->mbhc_cfg; int ret; - wcd938x->reset_gpio = of_get_named_gpio(dev->of_node, "reset-gpios", 0); - if (wcd938x->reset_gpio < 0) - return dev_err_probe(dev, wcd938x->reset_gpio, + wcd938x->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); + if (IS_ERR(wcd938x->reset_gpio)) + return dev_err_probe(dev, PTR_ERR(wcd938x->reset_gpio), "Failed to get reset gpio\n"); wcd938x->us_euro_gpio = devm_gpiod_get_optional(dev, "us-euro", @@ -3297,10 +3296,10 @@ static int wcd938x_populate_dt_data(struct wcd938x_priv *wcd938x, struct device static int wcd938x_reset(struct wcd938x_priv *wcd938x) { - gpio_direction_output(wcd938x->reset_gpio, 0); + gpiod_set_value(wcd938x->reset_gpio, 1); /* 20us sleep required after pulling the reset gpio to LOW */ usleep_range(20, 30); - gpio_set_value(wcd938x->reset_gpio, 1); + gpiod_set_value(wcd938x->reset_gpio, 0); /* 20us sleep required after pulling the reset gpio to HIGH */ usleep_range(20, 30);