linux-gpio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] ASoC: codec: Convert to GPIO descriptors for tlv320aic32x4
@ 2025-07-06  1:04 Peng Fan
  2025-07-06  1:04 ` [PATCH 1/2] ASoC: codec: tlv320aic32x4: Drop aic32x4_pdata usage Peng Fan
  2025-07-06  1:04 ` [PATCH 2/2] ASoC: codec: tlv320aic32x4: Convert to GPIO descriptors Peng Fan
  0 siblings, 2 replies; 8+ messages in thread
From: Peng Fan @ 2025-07-06  1:04 UTC (permalink / raw)
  To: Shenghao Ding, Kevin Lu, Baojun Xu, Jaroslav Kysela, Takashi Iwai,
	Liam Girdwood, Mark Brown, Linus Walleij, Bartosz Golaszewski
  Cc: linux-sound, linux-kernel, linux-gpio, Peng Fan, Markus Niebel,
	Alexander Stein

This patchset is a pick up of patch 1,2 from [1]. And I also collect
Linus's R-b for patch 2. After this patchset, there is only one user of
of_gpio.h left in sound driver(pxa2xx-ac97).

of_gpio.h is deprecated, update the driver to use GPIO descriptors.

Patch 1 is to drop legacy platform data which in-tree no users are using it
Patch 2 is to convert to GPIO descriptors

Checking the DTS that use the device, all are using GPIOD_ACTIVE_LOW
polarity for reset-gpios, so all should work as expected with this patch.

[1] https://lore.kernel.org/all/20250408-asoc-gpio-v1-0-c0db9d3fd6e9@nxp.com/

Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
Peng Fan (2):
      ASoC: codec: tlv320aic32x4: Drop aic32x4_pdata usage
      ASoC: codec: tlv320aic32x4: Convert to GPIO descriptors

 include/sound/tlv320aic32x4.h    |  9 -------
 sound/soc/codecs/tlv320aic32x4.c | 53 +++++++++++++++++-----------------------
 2 files changed, 23 insertions(+), 39 deletions(-)
---
base-commit: 26ffb3d6f02cd0935fb9fa3db897767beee1cb2a
change-id: 20250706-asoc-gpio-1-bd0762d29351

Best regards,
-- 
Peng Fan <peng.fan@nxp.com>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/2] ASoC: codec: tlv320aic32x4: Drop aic32x4_pdata usage
  2025-07-06  1:04 [PATCH 0/2] ASoC: codec: Convert to GPIO descriptors for tlv320aic32x4 Peng Fan
@ 2025-07-06  1:04 ` Peng Fan
  2025-07-07  5:12   ` Alexander Stein
  2025-07-06  1:04 ` [PATCH 2/2] ASoC: codec: tlv320aic32x4: Convert to GPIO descriptors Peng Fan
  1 sibling, 1 reply; 8+ messages in thread
From: Peng Fan @ 2025-07-06  1:04 UTC (permalink / raw)
  To: Shenghao Ding, Kevin Lu, Baojun Xu, Jaroslav Kysela, Takashi Iwai,
	Liam Girdwood, Mark Brown, Linus Walleij, Bartosz Golaszewski
  Cc: linux-sound, linux-kernel, linux-gpio, Peng Fan, Markus Niebel,
	Alexander Stein

There is no machine is using aic32x4_pdata as platform_data, so
remove the dead code.

Cc: Markus Niebel <Markus.Niebel@ew.tq-group.com>
Cc: Alexander Stein <alexander.stein@ew.tq-group.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 include/sound/tlv320aic32x4.h    | 9 ---------
 sound/soc/codecs/tlv320aic32x4.c | 9 +--------
 2 files changed, 1 insertion(+), 17 deletions(-)

diff --git a/include/sound/tlv320aic32x4.h b/include/sound/tlv320aic32x4.h
index 0abf74d7edbd69484c45ad6a1c39b3f67d61bd63..b779d671a99576deadc6e647edff9b1b3a5d33c2 100644
--- a/include/sound/tlv320aic32x4.h
+++ b/include/sound/tlv320aic32x4.h
@@ -40,13 +40,4 @@
 struct aic32x4_setup_data {
 	unsigned int gpio_func[5];
 };
-
-struct aic32x4_pdata {
-	struct aic32x4_setup_data *setup;
-	u32 power_cfg;
-	u32 micpga_routing;
-	bool swapdacs;
-	int rstn_gpio;
-};
-
 #endif
diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c
index 54ea4bc58c276d9ab39a15d312287dfb300dbab9..7dbcf7f7130b04a27f58f20beb83eb3676c79c3d 100644
--- a/sound/soc/codecs/tlv320aic32x4.c
+++ b/sound/soc/codecs/tlv320aic32x4.c
@@ -1346,7 +1346,6 @@ int aic32x4_probe(struct device *dev, struct regmap *regmap,
 		  enum aic32x4_type type)
 {
 	struct aic32x4_priv *aic32x4;
-	struct aic32x4_pdata *pdata = dev->platform_data;
 	struct device_node *np = dev->of_node;
 	int ret;
 
@@ -1363,13 +1362,7 @@ int aic32x4_probe(struct device *dev, struct regmap *regmap,
 
 	dev_set_drvdata(dev, aic32x4);
 
-	if (pdata) {
-		aic32x4->power_cfg = pdata->power_cfg;
-		aic32x4->swapdacs = pdata->swapdacs;
-		aic32x4->micpga_routing = pdata->micpga_routing;
-		aic32x4->rstn_gpio = pdata->rstn_gpio;
-		aic32x4->mclk_name = "mclk";
-	} else if (np) {
+	if (np) {
 		ret = aic32x4_parse_dt(aic32x4, np);
 		if (ret) {
 			dev_err(dev, "Failed to parse DT node\n");

-- 
2.37.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] ASoC: codec: tlv320aic32x4: Convert to GPIO descriptors
  2025-07-06  1:04 [PATCH 0/2] ASoC: codec: Convert to GPIO descriptors for tlv320aic32x4 Peng Fan
  2025-07-06  1:04 ` [PATCH 1/2] ASoC: codec: tlv320aic32x4: Drop aic32x4_pdata usage Peng Fan
@ 2025-07-06  1:04 ` Peng Fan
  2025-07-07  5:22   ` Alexander Stein
  1 sibling, 1 reply; 8+ messages in thread
From: Peng Fan @ 2025-07-06  1:04 UTC (permalink / raw)
  To: Shenghao Ding, Kevin Lu, Baojun Xu, Jaroslav Kysela, Takashi Iwai,
	Liam Girdwood, Mark Brown, Linus Walleij, Bartosz Golaszewski
  Cc: linux-sound, linux-kernel, linux-gpio, Peng Fan, Markus Niebel,
	Alexander Stein

of_gpio.h is deprecated, update the driver to use GPIO descriptors.
 - Use devm_gpiod_get_optional to get GPIO descriptor, and set consumer
   name.
 - Use gpiod_set_value to configure output value.

While at here, reorder the included headers.

Checking the DTS that use the device, all are using GPIOD_ACTIVE_LOW
polarity for reset-gpios, so all should work as expected with this patch.

Cc: Markus Niebel <Markus.Niebel@ew.tq-group.com>
Cc: Alexander Stein <alexander.stein@ew.tq-group.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 sound/soc/codecs/tlv320aic32x4.c | 44 ++++++++++++++++++++--------------------
 1 file changed, 22 insertions(+), 22 deletions(-)

diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c
index 7dbcf7f7130b04a27f58f20beb83eb3676c79c3d..1423186f5a6c181a20dd2dd552679d33174edaee 100644
--- a/sound/soc/codecs/tlv320aic32x4.c
+++ b/sound/soc/codecs/tlv320aic32x4.c
@@ -9,27 +9,26 @@
  * Based on sound/soc/codecs/wm8974 and TI driver for kernel 2.6.27.
  */
 
-#include <linux/module.h>
-#include <linux/moduleparam.h>
-#include <linux/init.h>
-#include <linux/delay.h>
-#include <linux/pm.h>
-#include <linux/gpio.h>
-#include <linux/of_gpio.h>
 #include <linux/cdev.h>
-#include <linux/slab.h>
 #include <linux/clk.h>
+#include <linux/delay.h>
+#include <linux/gpio/consumer.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/of_clk.h>
+#include <linux/pm.h>
 #include <linux/regulator/consumer.h>
+#include <linux/slab.h>
 
-#include <sound/tlv320aic32x4.h>
 #include <sound/core.h>
+#include <sound/initval.h>
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
 #include <sound/soc-dapm.h>
-#include <sound/initval.h>
 #include <sound/tlv.h>
+#include <sound/tlv320aic32x4.h>
 
 #include "tlv320aic32x4.h"
 
@@ -38,7 +37,7 @@ struct aic32x4_priv {
 	u32 power_cfg;
 	u32 micpga_routing;
 	bool swapdacs;
-	int rstn_gpio;
+	struct gpio_desc *rstn_gpio;
 	const char *mclk_name;
 
 	struct regulator *supply_ldo;
@@ -1236,7 +1235,14 @@ static int aic32x4_parse_dt(struct aic32x4_priv *aic32x4,
 
 	aic32x4->swapdacs = false;
 	aic32x4->micpga_routing = 0;
-	aic32x4->rstn_gpio = of_get_named_gpio(np, "reset-gpios", 0);
+	/* Assert reset using GPIOD_OUT_HIGH, because reset is GPIO_ACTIVE_LOW */
+	aic32x4->rstn_gpio = devm_gpiod_get_optional(aic32x4->dev, "reset", GPIOD_OUT_HIGH);
+	if (IS_ERR(aic32x4->rstn_gpio)) {
+		return dev_err_probe(aic32x4->dev, PTR_ERR(aic32x4->rstn_gpio),
+				     "Failed to get reset gpio\n");
+	} else {
+		gpiod_set_consumer_name(aic32x4->rstn_gpio, "tlv320aic32x4_rstn");
+	}
 
 	if (of_property_read_u32_array(np, "aic32x4-gpio-func",
 				aic32x4_setup->gpio_func, 5) >= 0)
@@ -1372,26 +1378,20 @@ int aic32x4_probe(struct device *dev, struct regmap *regmap,
 		aic32x4->power_cfg = 0;
 		aic32x4->swapdacs = false;
 		aic32x4->micpga_routing = 0;
-		aic32x4->rstn_gpio = -1;
+		aic32x4->rstn_gpio = ERR_PTR(-ENOENT);
 		aic32x4->mclk_name = "mclk";
 	}
 
-	if (gpio_is_valid(aic32x4->rstn_gpio)) {
-		ret = devm_gpio_request_one(dev, aic32x4->rstn_gpio,
-				GPIOF_OUT_INIT_LOW, "tlv320aic32x4 rstn");
-		if (ret != 0)
-			return ret;
-	}
-
 	ret = aic32x4_setup_regulators(dev, aic32x4);
 	if (ret) {
 		dev_err(dev, "Failed to setup regulators\n");
 		return ret;
 	}
 
-	if (gpio_is_valid(aic32x4->rstn_gpio)) {
+	if (!IS_ERR(aic32x4->rstn_gpio)) {
 		ndelay(10);
-		gpio_set_value_cansleep(aic32x4->rstn_gpio, 1);
+		/* deassert reset */
+		gpiod_set_value_cansleep(aic32x4->rstn_gpio, 0);
 		mdelay(1);
 	}
 

-- 
2.37.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] ASoC: codec: tlv320aic32x4: Drop aic32x4_pdata usage
  2025-07-06  1:04 ` [PATCH 1/2] ASoC: codec: tlv320aic32x4: Drop aic32x4_pdata usage Peng Fan
@ 2025-07-07  5:12   ` Alexander Stein
  0 siblings, 0 replies; 8+ messages in thread
From: Alexander Stein @ 2025-07-07  5:12 UTC (permalink / raw)
  To: Shenghao Ding, Kevin Lu, Baojun Xu, Jaroslav Kysela, Takashi Iwai,
	Liam Girdwood, Mark Brown, Linus Walleij, Bartosz Golaszewski,
	Peng Fan
  Cc: linux-sound, linux-kernel, linux-gpio, Peng Fan, Markus Niebel

Hi,

Am Sonntag, 6. Juli 2025, 03:04:23 CEST schrieb Peng Fan:
> There is no machine is using aic32x4_pdata as platform_data, so
> remove the dead code.
> 
> Cc: Markus Niebel <Markus.Niebel@ew.tq-group.com>
> Cc: Alexander Stein <alexander.stein@ew.tq-group.com>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>

Reviewed-by: Alexander Stein <alexander.stein@ew.tq-group.com>
> ---
>  include/sound/tlv320aic32x4.h    | 9 ---------
>  sound/soc/codecs/tlv320aic32x4.c | 9 +--------
>  2 files changed, 1 insertion(+), 17 deletions(-)
> 
> diff --git a/include/sound/tlv320aic32x4.h b/include/sound/tlv320aic32x4.h
> index 0abf74d7edbd69484c45ad6a1c39b3f67d61bd63..b779d671a99576deadc6e647edff9b1b3a5d33c2 100644
> --- a/include/sound/tlv320aic32x4.h
> +++ b/include/sound/tlv320aic32x4.h
> @@ -40,13 +40,4 @@
>  struct aic32x4_setup_data {
>  	unsigned int gpio_func[5];
>  };
> -
> -struct aic32x4_pdata {
> -	struct aic32x4_setup_data *setup;
> -	u32 power_cfg;
> -	u32 micpga_routing;
> -	bool swapdacs;
> -	int rstn_gpio;
> -};
> -
>  #endif
> diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c
> index 54ea4bc58c276d9ab39a15d312287dfb300dbab9..7dbcf7f7130b04a27f58f20beb83eb3676c79c3d 100644
> --- a/sound/soc/codecs/tlv320aic32x4.c
> +++ b/sound/soc/codecs/tlv320aic32x4.c
> @@ -1346,7 +1346,6 @@ int aic32x4_probe(struct device *dev, struct regmap *regmap,
>  		  enum aic32x4_type type)
>  {
>  	struct aic32x4_priv *aic32x4;
> -	struct aic32x4_pdata *pdata = dev->platform_data;
>  	struct device_node *np = dev->of_node;
>  	int ret;
>  
> @@ -1363,13 +1362,7 @@ int aic32x4_probe(struct device *dev, struct regmap *regmap,
>  
>  	dev_set_drvdata(dev, aic32x4);
>  
> -	if (pdata) {
> -		aic32x4->power_cfg = pdata->power_cfg;
> -		aic32x4->swapdacs = pdata->swapdacs;
> -		aic32x4->micpga_routing = pdata->micpga_routing;
> -		aic32x4->rstn_gpio = pdata->rstn_gpio;
> -		aic32x4->mclk_name = "mclk";
> -	} else if (np) {
> +	if (np) {
>  		ret = aic32x4_parse_dt(aic32x4, np);
>  		if (ret) {
>  			dev_err(dev, "Failed to parse DT node\n");
> 
> 


-- 
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
http://www.tq-group.com/



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] ASoC: codec: tlv320aic32x4: Convert to GPIO descriptors
  2025-07-06  1:04 ` [PATCH 2/2] ASoC: codec: tlv320aic32x4: Convert to GPIO descriptors Peng Fan
@ 2025-07-07  5:22   ` Alexander Stein
  2025-07-07  5:40     ` Peng Fan
  0 siblings, 1 reply; 8+ messages in thread
From: Alexander Stein @ 2025-07-07  5:22 UTC (permalink / raw)
  To: Shenghao Ding, Kevin Lu, Baojun Xu, Jaroslav Kysela, Takashi Iwai,
	Liam Girdwood, Mark Brown, Linus Walleij, Bartosz Golaszewski,
	Peng Fan
  Cc: linux-sound, linux-kernel, linux-gpio, Peng Fan, Markus Niebel

Hi,

Am Sonntag, 6. Juli 2025, 03:04:24 CEST schrieb Peng Fan:
> of_gpio.h is deprecated, update the driver to use GPIO descriptors.
>  - Use devm_gpiod_get_optional to get GPIO descriptor, and set consumer
>    name.
>  - Use gpiod_set_value to configure output value.
> 
> While at here, reorder the included headers.
> 
> Checking the DTS that use the device, all are using GPIOD_ACTIVE_LOW
> polarity for reset-gpios, so all should work as expected with this patch.
> 
> Cc: Markus Niebel <Markus.Niebel@ew.tq-group.com>
> Cc: Alexander Stein <alexander.stein@ew.tq-group.com>
> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
>  sound/soc/codecs/tlv320aic32x4.c | 44 ++++++++++++++++++++--------------------
>  1 file changed, 22 insertions(+), 22 deletions(-)
> 
> diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c
> index 7dbcf7f7130b04a27f58f20beb83eb3676c79c3d..1423186f5a6c181a20dd2dd552679d33174edaee 100644
> --- a/sound/soc/codecs/tlv320aic32x4.c
> +++ b/sound/soc/codecs/tlv320aic32x4.c
> @@ -9,27 +9,26 @@
>   * Based on sound/soc/codecs/wm8974 and TI driver for kernel 2.6.27.
>   */
>  
> -#include <linux/module.h>
> -#include <linux/moduleparam.h>
> -#include <linux/init.h>
> -#include <linux/delay.h>
> -#include <linux/pm.h>
> -#include <linux/gpio.h>
> -#include <linux/of_gpio.h>
>  #include <linux/cdev.h>
> -#include <linux/slab.h>
>  #include <linux/clk.h>
> +#include <linux/delay.h>
> +#include <linux/gpio/consumer.h>
> +#include <linux/init.h>
> +#include <linux/module.h>
> +#include <linux/moduleparam.h>
>  #include <linux/of_clk.h>
> +#include <linux/pm.h>
>  #include <linux/regulator/consumer.h>
> +#include <linux/slab.h>
>  
> -#include <sound/tlv320aic32x4.h>
>  #include <sound/core.h>
> +#include <sound/initval.h>
>  #include <sound/pcm.h>
>  #include <sound/pcm_params.h>
>  #include <sound/soc.h>
>  #include <sound/soc-dapm.h>
> -#include <sound/initval.h>
>  #include <sound/tlv.h>
> +#include <sound/tlv320aic32x4.h>

Mh, maybe create a single commit sorting these headers.

>  
>  #include "tlv320aic32x4.h"
>  
> @@ -38,7 +37,7 @@ struct aic32x4_priv {
>  	u32 power_cfg;
>  	u32 micpga_routing;
>  	bool swapdacs;
> -	int rstn_gpio;
> +	struct gpio_desc *rstn_gpio;
>  	const char *mclk_name;
>  
>  	struct regulator *supply_ldo;
> @@ -1236,7 +1235,14 @@ static int aic32x4_parse_dt(struct aic32x4_priv *aic32x4,
>  
>  	aic32x4->swapdacs = false;
>  	aic32x4->micpga_routing = 0;
> -	aic32x4->rstn_gpio = of_get_named_gpio(np, "reset-gpios", 0);
> +	/* Assert reset using GPIOD_OUT_HIGH, because reset is GPIO_ACTIVE_LOW */
> +	aic32x4->rstn_gpio = devm_gpiod_get_optional(aic32x4->dev, "reset", GPIOD_OUT_HIGH);
> +	if (IS_ERR(aic32x4->rstn_gpio)) {
> +		return dev_err_probe(aic32x4->dev, PTR_ERR(aic32x4->rstn_gpio),
> +				     "Failed to get reset gpio\n");
> +	} else {
> +		gpiod_set_consumer_name(aic32x4->rstn_gpio, "tlv320aic32x4_rstn");
> +	}
>  
>  	if (of_property_read_u32_array(np, "aic32x4-gpio-func",
>  				aic32x4_setup->gpio_func, 5) >= 0)
> @@ -1372,26 +1378,20 @@ int aic32x4_probe(struct device *dev, struct regmap *regmap,
>  		aic32x4->power_cfg = 0;
>  		aic32x4->swapdacs = false;
>  		aic32x4->micpga_routing = 0;
> -		aic32x4->rstn_gpio = -1;
> +		aic32x4->rstn_gpio = ERR_PTR(-ENOENT);

Shouldn't this be NULL similar to when devm_gpiod_get_optional() doesn't
find any reset GPIO?

Despite that, looks good and works as intended:
Tested-By: Alexander Stein <alexander.stein@ew.tq-group.com>

>  		aic32x4->mclk_name = "mclk";
>  	}
>  
> -	if (gpio_is_valid(aic32x4->rstn_gpio)) {
> -		ret = devm_gpio_request_one(dev, aic32x4->rstn_gpio,
> -				GPIOF_OUT_INIT_LOW, "tlv320aic32x4 rstn");
> -		if (ret != 0)
> -			return ret;
> -	}
> -
>  	ret = aic32x4_setup_regulators(dev, aic32x4);
>  	if (ret) {
>  		dev_err(dev, "Failed to setup regulators\n");
>  		return ret;
>  	}
>  
> -	if (gpio_is_valid(aic32x4->rstn_gpio)) {
> +	if (!IS_ERR(aic32x4->rstn_gpio)) {
>  		ndelay(10);
> -		gpio_set_value_cansleep(aic32x4->rstn_gpio, 1);
> +		/* deassert reset */
> +		gpiod_set_value_cansleep(aic32x4->rstn_gpio, 0);
>  		mdelay(1);
>  	}
>  
> 
> 


-- 
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
http://www.tq-group.com/



^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: [PATCH 2/2] ASoC: codec: tlv320aic32x4: Convert to GPIO descriptors
  2025-07-07  5:22   ` Alexander Stein
@ 2025-07-07  5:40     ` Peng Fan
  2025-07-07  5:44       ` Alexander Stein
  0 siblings, 1 reply; 8+ messages in thread
From: Peng Fan @ 2025-07-07  5:40 UTC (permalink / raw)
  To: Alexander Stein, Shenghao Ding, Kevin Lu, Baojun Xu,
	Jaroslav Kysela, Takashi Iwai, Liam Girdwood, Mark Brown,
	Linus Walleij, Bartosz Golaszewski
  Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-gpio@vger.kernel.org, Markus Niebel

> Subject: Re: [PATCH 2/2] ASoC: codec: tlv320aic32x4: Convert to GPIO
> descriptors
> 
> Hi,
> 
> Am Sonntag, 6. Juli 2025, 03:04:24 CEST schrieb Peng Fan:
> > of_gpio.h is deprecated, update the driver to use GPIO descriptors.
> >  - Use devm_gpiod_get_optional to get GPIO descriptor, and set
> consumer
> >    name.
> >  - Use gpiod_set_value to configure output value.
> >
> > While at here, reorder the included headers.
> >
> > Checking the DTS that use the device, all are using
> GPIOD_ACTIVE_LOW
> > polarity for reset-gpios, so all should work as expected with this patch.
> >
> > Cc: Markus Niebel <Markus.Niebel@ew.tq-group.com>
> > Cc: Alexander Stein <alexander.stein@ew.tq-group.com>
> > Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
> > Signed-off-by: Peng Fan <peng.fan@nxp.com>
> > ---
> >  sound/soc/codecs/tlv320aic32x4.c | 44
> > ++++++++++++++++++++--------------------
> >  1 file changed, 22 insertions(+), 22 deletions(-)
> >
> > diff --git a/sound/soc/codecs/tlv320aic32x4.c
> > b/sound/soc/codecs/tlv320aic32x4.c
> > index
> >
> 7dbcf7f7130b04a27f58f20beb83eb3676c79c3d..1423186f5a6c181a2
> 0dd2dd55267
> > 9d33174edaee 100644
> > --- a/sound/soc/codecs/tlv320aic32x4.c
> > +++ b/sound/soc/codecs/tlv320aic32x4.c
> > @@ -9,27 +9,26 @@
> >   * Based on sound/soc/codecs/wm8974 and TI driver for kernel
> 2.6.27.
> >   */
> >
> > -#include <linux/module.h>
> > -#include <linux/moduleparam.h>
> > -#include <linux/init.h>
> > -#include <linux/delay.h>
> > -#include <linux/pm.h>
> > -#include <linux/gpio.h>
> > -#include <linux/of_gpio.h>
> >  #include <linux/cdev.h>
> > -#include <linux/slab.h>
> >  #include <linux/clk.h>
> > +#include <linux/delay.h>
> > +#include <linux/gpio/consumer.h>
> > +#include <linux/init.h>
> > +#include <linux/module.h>
> > +#include <linux/moduleparam.h>
> >  #include <linux/of_clk.h>
> > +#include <linux/pm.h>
> >  #include <linux/regulator/consumer.h>
> > +#include <linux/slab.h>
> >
> > -#include <sound/tlv320aic32x4.h>
> >  #include <sound/core.h>
> > +#include <sound/initval.h>
> >  #include <sound/pcm.h>
> >  #include <sound/pcm_params.h>
> >  #include <sound/soc.h>
> >  #include <sound/soc-dapm.h>
> > -#include <sound/initval.h>
> >  #include <sound/tlv.h>
> > +#include <sound/tlv320aic32x4.h>
> 
> Mh, maybe create a single commit sorting these headers.

ok. Let me do a v2 for this.

> 
> >
> >  #include "tlv320aic32x4.h"
> >
> > @@ -38,7 +37,7 @@ struct aic32x4_priv {
> >  	u32 power_cfg;
> >  	u32 micpga_routing;
> >  	bool swapdacs;
> > -	int rstn_gpio;
> > +	struct gpio_desc *rstn_gpio;
> >  	const char *mclk_name;
> >
> >  	struct regulator *supply_ldo;
> > @@ -1236,7 +1235,14 @@ static int aic32x4_parse_dt(struct
> aic32x4_priv
> > *aic32x4,
> >
> >  	aic32x4->swapdacs = false;
> >  	aic32x4->micpga_routing = 0;
> > -	aic32x4->rstn_gpio = of_get_named_gpio(np, "reset-gpios", 0);
> > +	/* Assert reset using GPIOD_OUT_HIGH, because reset is
> GPIO_ACTIVE_LOW */
> > +	aic32x4->rstn_gpio = devm_gpiod_get_optional(aic32x4->dev,
> "reset", GPIOD_OUT_HIGH);
> > +	if (IS_ERR(aic32x4->rstn_gpio)) {
> > +		return dev_err_probe(aic32x4->dev, PTR_ERR(aic32x4-
> >rstn_gpio),
> > +				     "Failed to get reset gpio\n");
> > +	} else {
> > +		gpiod_set_consumer_name(aic32x4->rstn_gpio,
> "tlv320aic32x4_rstn");
> > +	}
> >
> >  	if (of_property_read_u32_array(np, "aic32x4-gpio-func",
> >  				aic32x4_setup->gpio_func, 5) >= 0)
> @@ -1372,26 +1378,20 @@ int
> > aic32x4_probe(struct device *dev, struct regmap *regmap,
> >  		aic32x4->power_cfg = 0;
> >  		aic32x4->swapdacs = false;
> >  		aic32x4->micpga_routing = 0;
> > -		aic32x4->rstn_gpio = -1;
> > +		aic32x4->rstn_gpio = ERR_PTR(-ENOENT);
> 
> Shouldn't this be NULL similar to when devm_gpiod_get_optional()
> doesn't find any reset GPIO?

There is a check in driver, so NULL not work here.

        if (!IS_ERR(aic32x4->rstn_gpio)) {                                                          
                ndelay(10);                                                                         
                /* deassert reset */                                                                
                gpiod_set_value_cansleep(aic32x4->rstn_gpio, 0);                                    
                mdelay(1);                                                                          
        }

> 
> Despite that, looks good and works as intended:
> Tested-By: Alexander Stein <alexander.stein@ew.tq-group.com>

Appreciate!

Thanks,
Peng.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] ASoC: codec: tlv320aic32x4: Convert to GPIO descriptors
  2025-07-07  5:40     ` Peng Fan
@ 2025-07-07  5:44       ` Alexander Stein
  2025-07-07  6:46         ` Peng Fan
  0 siblings, 1 reply; 8+ messages in thread
From: Alexander Stein @ 2025-07-07  5:44 UTC (permalink / raw)
  To: Shenghao Ding, Kevin Lu, Baojun Xu, Jaroslav Kysela, Takashi Iwai,
	Liam Girdwood, Mark Brown, Linus Walleij, Bartosz Golaszewski,
	Peng Fan
  Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-gpio@vger.kernel.org, Markus Niebel

Am Montag, 7. Juli 2025, 07:40:58 CEST schrieb Peng Fan:
> ********************
> Achtung externe E-Mail: Öffnen Sie Anhänge und Links nur, wenn Sie wissen, dass diese aus einer sicheren Quelle stammen und sicher sind. Leiten Sie die E-Mail im Zweifelsfall zur Prüfung an den IT-Helpdesk weiter.
> Attention external email: Open attachments and links only if you know that they are from a secure source and are safe. In doubt forward the email to the IT-Helpdesk to check it.
> ********************
> 
> > Subject: Re: [PATCH 2/2] ASoC: codec: tlv320aic32x4: Convert to GPIO
> > descriptors
> > 
> > Hi,
> > 
> > Am Sonntag, 6. Juli 2025, 03:04:24 CEST schrieb Peng Fan:
> > > of_gpio.h is deprecated, update the driver to use GPIO descriptors.
> > >  - Use devm_gpiod_get_optional to get GPIO descriptor, and set
> > consumer
> > >    name.
> > >  - Use gpiod_set_value to configure output value.
> > >
> > > While at here, reorder the included headers.
> > >
> > > Checking the DTS that use the device, all are using
> > GPIOD_ACTIVE_LOW
> > > polarity for reset-gpios, so all should work as expected with this patch.
> > >
> > > Cc: Markus Niebel <Markus.Niebel@ew.tq-group.com>
> > > Cc: Alexander Stein <alexander.stein@ew.tq-group.com>
> > > Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
> > > Signed-off-by: Peng Fan <peng.fan@nxp.com>
> > > ---
> > >  sound/soc/codecs/tlv320aic32x4.c | 44
> > > ++++++++++++++++++++--------------------
> > >  1 file changed, 22 insertions(+), 22 deletions(-)
> > >
> > > diff --git a/sound/soc/codecs/tlv320aic32x4.c
> > > b/sound/soc/codecs/tlv320aic32x4.c
> > > index
> > >
> > 7dbcf7f7130b04a27f58f20beb83eb3676c79c3d..1423186f5a6c181a2
> > 0dd2dd55267
> > > 9d33174edaee 100644
> > > --- a/sound/soc/codecs/tlv320aic32x4.c
> > > +++ b/sound/soc/codecs/tlv320aic32x4.c
> > > @@ -9,27 +9,26 @@
> > >   * Based on sound/soc/codecs/wm8974 and TI driver for kernel
> > 2.6.27.
> > >   */
> > >
> > > -#include <linux/module.h>
> > > -#include <linux/moduleparam.h>
> > > -#include <linux/init.h>
> > > -#include <linux/delay.h>
> > > -#include <linux/pm.h>
> > > -#include <linux/gpio.h>
> > > -#include <linux/of_gpio.h>
> > >  #include <linux/cdev.h>
> > > -#include <linux/slab.h>
> > >  #include <linux/clk.h>
> > > +#include <linux/delay.h>
> > > +#include <linux/gpio/consumer.h>
> > > +#include <linux/init.h>
> > > +#include <linux/module.h>
> > > +#include <linux/moduleparam.h>
> > >  #include <linux/of_clk.h>
> > > +#include <linux/pm.h>
> > >  #include <linux/regulator/consumer.h>
> > > +#include <linux/slab.h>
> > >
> > > -#include <sound/tlv320aic32x4.h>
> > >  #include <sound/core.h>
> > > +#include <sound/initval.h>
> > >  #include <sound/pcm.h>
> > >  #include <sound/pcm_params.h>
> > >  #include <sound/soc.h>
> > >  #include <sound/soc-dapm.h>
> > > -#include <sound/initval.h>
> > >  #include <sound/tlv.h>
> > > +#include <sound/tlv320aic32x4.h>
> > 
> > Mh, maybe create a single commit sorting these headers.
> 
> ok. Let me do a v2 for this.
> 
> > 
> > >
> > >  #include "tlv320aic32x4.h"
> > >
> > > @@ -38,7 +37,7 @@ struct aic32x4_priv {
> > >  	u32 power_cfg;
> > >  	u32 micpga_routing;
> > >  	bool swapdacs;
> > > -	int rstn_gpio;
> > > +	struct gpio_desc *rstn_gpio;
> > >  	const char *mclk_name;
> > >
> > >  	struct regulator *supply_ldo;
> > > @@ -1236,7 +1235,14 @@ static int aic32x4_parse_dt(struct
> > aic32x4_priv
> > > *aic32x4,
> > >
> > >  	aic32x4->swapdacs = false;
> > >  	aic32x4->micpga_routing = 0;
> > > -	aic32x4->rstn_gpio = of_get_named_gpio(np, "reset-gpios", 0);
> > > +	/* Assert reset using GPIOD_OUT_HIGH, because reset is
> > GPIO_ACTIVE_LOW */
> > > +	aic32x4->rstn_gpio = devm_gpiod_get_optional(aic32x4->dev,
> > "reset", GPIOD_OUT_HIGH);
> > > +	if (IS_ERR(aic32x4->rstn_gpio)) {
> > > +		return dev_err_probe(aic32x4->dev, PTR_ERR(aic32x4-
> > >rstn_gpio),
> > > +				     "Failed to get reset gpio\n");
> > > +	} else {
> > > +		gpiod_set_consumer_name(aic32x4->rstn_gpio,
> > "tlv320aic32x4_rstn");
> > > +	}
> > >
> > >  	if (of_property_read_u32_array(np, "aic32x4-gpio-func",
> > >  				aic32x4_setup->gpio_func, 5) >= 0)
> > @@ -1372,26 +1378,20 @@ int
> > > aic32x4_probe(struct device *dev, struct regmap *regmap,
> > >  		aic32x4->power_cfg = 0;
> > >  		aic32x4->swapdacs = false;
> > >  		aic32x4->micpga_routing = 0;
> > > -		aic32x4->rstn_gpio = -1;
> > > +		aic32x4->rstn_gpio = ERR_PTR(-ENOENT);
> > 
> > Shouldn't this be NULL similar to when devm_gpiod_get_optional()
> > doesn't find any reset GPIO?
> 
> There is a check in driver, so NULL not work here.
> 
>         if (!IS_ERR(aic32x4->rstn_gpio)) {                                                          

I don't like the fact that both paths have different values for rstn_gpio
for the information there is no rstn GPIO. How about setting NULL in the without
DT node case and checking if (aic32x4->rstn_gpio) here?

Best regards
Alexander

>                 ndelay(10);                                                                         
>                 /* deassert reset */                                                                
>                 gpiod_set_value_cansleep(aic32x4->rstn_gpio, 0);                                    
>                 mdelay(1);                                                                          
>         }
> 
> > 
> > Despite that, looks good and works as intended:
> > Tested-By: Alexander Stein <alexander.stein@ew.tq-group.com>
> 
> Appreciate!
> 
> Thanks,
> Peng.
> 
> 


-- 
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
http://www.tq-group.com/



^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: [PATCH 2/2] ASoC: codec: tlv320aic32x4: Convert to GPIO descriptors
  2025-07-07  5:44       ` Alexander Stein
@ 2025-07-07  6:46         ` Peng Fan
  0 siblings, 0 replies; 8+ messages in thread
From: Peng Fan @ 2025-07-07  6:46 UTC (permalink / raw)
  To: Alexander Stein, Shenghao Ding, Kevin Lu, Baojun Xu,
	Jaroslav Kysela, Takashi Iwai, Liam Girdwood, Mark Brown,
	Linus Walleij, Bartosz Golaszewski
  Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-gpio@vger.kernel.org, Markus Niebel

> Subject: Re: [PATCH 2/2] ASoC: codec: tlv320aic32x4: Convert to GPIO
> descriptors
> 
> Am Montag, 7. Juli 2025, 07:40:58 CEST schrieb Peng Fan:
> > ********************
> > Achtung externe E-Mail: Öffnen Sie Anhänge und Links nur, wenn Sie
> wissen, dass diese aus einer sicheren Quelle stammen und sicher sind.
> Leiten Sie die E-Mail im Zweifelsfall zur Prüfung an den IT-Helpdesk
> weiter.
> > Attention external email: Open attachments and links only if you
> know that they are from a secure source and are safe. In doubt forward
> the email to the IT-Helpdesk to check it.
> > ********************
> >
> > > Subject: Re: [PATCH 2/2] ASoC: codec: tlv320aic32x4: Convert to
> GPIO
> > > descriptors
> > >
> > > Hi,
> > >
> > > Am Sonntag, 6. Juli 2025, 03:04:24 CEST schrieb Peng Fan:
> > > > of_gpio.h is deprecated, update the driver to use GPIO descriptors.
> > > >  - Use devm_gpiod_get_optional to get GPIO descriptor, and set
> > > consumer
> > > >    name.
> > > >  - Use gpiod_set_value to configure output value.
> > > >
> > > > While at here, reorder the included headers.
> > > >
> > > > Checking the DTS that use the device, all are using
> > > GPIOD_ACTIVE_LOW
> > > > polarity for reset-gpios, so all should work as expected with this
> patch.
> > > >
> > > > Cc: Markus Niebel <Markus.Niebel@ew.tq-group.com>
> > > > Cc: Alexander Stein <alexander.stein@ew.tq-group.com>
> > > > Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
> > > > Signed-off-by: Peng Fan <peng.fan@nxp.com>
> > > > ---
> > > >  sound/soc/codecs/tlv320aic32x4.c | 44
> > > > ++++++++++++++++++++--------------------
> > > >  1 file changed, 22 insertions(+), 22 deletions(-)
> > > >
> > > > diff --git a/sound/soc/codecs/tlv320aic32x4.c
> > > > b/sound/soc/codecs/tlv320aic32x4.c
> > > > index
> > > >
> > >
> 7dbcf7f7130b04a27f58f20beb83eb3676c79c3d..1423186f5a6c181a2
> > > 0dd2dd55267
> > > > 9d33174edaee 100644
> > > > --- a/sound/soc/codecs/tlv320aic32x4.c
> > > > +++ b/sound/soc/codecs/tlv320aic32x4.c
> > > > @@ -9,27 +9,26 @@
> > > >   * Based on sound/soc/codecs/wm8974 and TI driver for kernel
> > > 2.6.27.
> > > >   */
> > > >
> > > > -#include <linux/module.h>
> > > > -#include <linux/moduleparam.h>
> > > > -#include <linux/init.h>
> > > > -#include <linux/delay.h>
> > > > -#include <linux/pm.h>
> > > > -#include <linux/gpio.h>
> > > > -#include <linux/of_gpio.h>
> > > >  #include <linux/cdev.h>
> > > > -#include <linux/slab.h>
> > > >  #include <linux/clk.h>
> > > > +#include <linux/delay.h>
> > > > +#include <linux/gpio/consumer.h>
> > > > +#include <linux/init.h>
> > > > +#include <linux/module.h>
> > > > +#include <linux/moduleparam.h>
> > > >  #include <linux/of_clk.h>
> > > > +#include <linux/pm.h>
> > > >  #include <linux/regulator/consumer.h>
> > > > +#include <linux/slab.h>
> > > >
> > > > -#include <sound/tlv320aic32x4.h>
> > > >  #include <sound/core.h>
> > > > +#include <sound/initval.h>
> > > >  #include <sound/pcm.h>
> > > >  #include <sound/pcm_params.h>
> > > >  #include <sound/soc.h>
> > > >  #include <sound/soc-dapm.h>
> > > > -#include <sound/initval.h>
> > > >  #include <sound/tlv.h>
> > > > +#include <sound/tlv320aic32x4.h>
> > >
> > > Mh, maybe create a single commit sorting these headers.
> >
> > ok. Let me do a v2 for this.
> >
> > >
> > > >
> > > >  #include "tlv320aic32x4.h"
> > > >
> > > > @@ -38,7 +37,7 @@ struct aic32x4_priv {
> > > >  	u32 power_cfg;
> > > >  	u32 micpga_routing;
> > > >  	bool swapdacs;
> > > > -	int rstn_gpio;
> > > > +	struct gpio_desc *rstn_gpio;
> > > >  	const char *mclk_name;
> > > >
> > > >  	struct regulator *supply_ldo;
> > > > @@ -1236,7 +1235,14 @@ static int aic32x4_parse_dt(struct
> > > aic32x4_priv
> > > > *aic32x4,
> > > >
> > > >  	aic32x4->swapdacs = false;
> > > >  	aic32x4->micpga_routing = 0;
> > > > -	aic32x4->rstn_gpio = of_get_named_gpio(np, "reset-gpios", 0);
> > > > +	/* Assert reset using GPIOD_OUT_HIGH, because reset is
> > > GPIO_ACTIVE_LOW */
> > > > +	aic32x4->rstn_gpio = devm_gpiod_get_optional(aic32x4->dev,
> > > "reset", GPIOD_OUT_HIGH);
> > > > +	if (IS_ERR(aic32x4->rstn_gpio)) {
> > > > +		return dev_err_probe(aic32x4->dev, PTR_ERR(aic32x4-
> > > >rstn_gpio),
> > > > +				     "Failed to get reset gpio\n");
> > > > +	} else {
> > > > +		gpiod_set_consumer_name(aic32x4->rstn_gpio,
> > > "tlv320aic32x4_rstn");
> > > > +	}
> > > >
> > > >  	if (of_property_read_u32_array(np, "aic32x4-gpio-func",
> > > >  				aic32x4_setup->gpio_func, 5) >= 0)
> > > @@ -1372,26 +1378,20 @@ int
> > > > aic32x4_probe(struct device *dev, struct regmap *regmap,
> > > >  		aic32x4->power_cfg = 0;
> > > >  		aic32x4->swapdacs = false;
> > > >  		aic32x4->micpga_routing = 0;
> > > > -		aic32x4->rstn_gpio = -1;
> > > > +		aic32x4->rstn_gpio = ERR_PTR(-ENOENT);
> > >
> > > Shouldn't this be NULL similar to when devm_gpiod_get_optional()
> > > doesn't find any reset GPIO?
> >
> > There is a check in driver, so NULL not work here.
> >
> >         if (!IS_ERR(aic32x4->rstn_gpio)) {
> 
> I don't like the fact that both paths have different values for rstn_gpio
> for the information there is no rstn GPIO. How about setting NULL in
> the without DT node case and checking if (aic32x4->rstn_gpio) here?

That's ok. V2 will cover this.

Thanks,
Peng.

> 
> Best regards
> Alexander
> 
> >                 ndelay(10);
> >                 /* deassert reset */
> >                 gpiod_set_value_cansleep(aic32x4->rstn_gpio, 0);
> >                 mdelay(1);
> >         }
> >
> > >
> > > Despite that, looks good and works as intended:
> > > Tested-By: Alexander Stein <alexander.stein@ew.tq-group.com>
> >
> > Appreciate!
> >
> > Thanks,
> > Peng.
> >
> >
> 
> 
> --
> TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld,
> Germany Amtsgericht München, HRB 105018
> Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
> https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2F
> www.tq-
> group.com%2F&data=05%7C02%7Cpeng.fan%40nxp.com%7C119e001
> 7ac9344b010b208ddbd196353%7C686ea1d3bc2b4c6fa92cd99c5c30
> 1635%7C0%7C0%7C638874638907645114%7CUnknown%7CTWFpbG
> Zsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXa
> W4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata
> =CZqJLhaQG1HSnEYnfg3v83dmZO9huNeEDCK2SZhKYho%3D&reserved
> =0
> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-07-07  6:46 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-06  1:04 [PATCH 0/2] ASoC: codec: Convert to GPIO descriptors for tlv320aic32x4 Peng Fan
2025-07-06  1:04 ` [PATCH 1/2] ASoC: codec: tlv320aic32x4: Drop aic32x4_pdata usage Peng Fan
2025-07-07  5:12   ` Alexander Stein
2025-07-06  1:04 ` [PATCH 2/2] ASoC: codec: tlv320aic32x4: Convert to GPIO descriptors Peng Fan
2025-07-07  5:22   ` Alexander Stein
2025-07-07  5:40     ` Peng Fan
2025-07-07  5:44       ` Alexander Stein
2025-07-07  6:46         ` Peng Fan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).