* [PATCH] ASoC: codec: arizona: Convert to use GPIO descriptors
@ 2026-03-14 22:56 Linus Walleij
2026-03-15 8:35 ` Krzysztof Kozlowski
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Linus Walleij @ 2026-03-14 22:56 UTC (permalink / raw)
To: Krzysztof Kozlowski, Alim Akhtar, Russell King, Lee Jones,
Liam Girdwood, Mark Brown, Jaroslav Kysela, Takashi Iwai,
Bartosz Golaszewski
Cc: patches, linux-arm-kernel, linux-samsung-soc, linux-kernel,
linux-sound, linux-gpio, Linus Walleij
This converts the Arizona driver to use GPIO descriptors
exclusively, deletes the legacy code path an updates the
in-tree user of legacy GPIO.
The GPIO lines for mic detect polarity and headphone ID
detection are made exclusively descriptor-oriented. The
headphone ID detection could actually only be used by
the legacy GPIO code, but I converted it to use a
descriptor if someone would actually need it so we don't
just drop useful code.
The compatible "wlf,hpdet-id-gpio" is not in the device
tree bindings and only intended to be used by software
nodes if any. If someone insists I can try to add a
binding for it, but I doubt there is any real user so
it seems pointless.
Signed-off-by: Linus Walleij <linusw@kernel.org>
---
This patch hits all over the place, but I think merging it to
the ASoC tree would be the best.
---
arch/arm/mach-s3c/mach-crag6410-module.c | 6 +-
include/linux/mfd/arizona/pdata.h | 10 ----
sound/soc/codecs/arizona-jack.c | 95 ++++++++++----------------------
sound/soc/codecs/arizona.h | 1 +
4 files changed, 34 insertions(+), 78 deletions(-)
diff --git a/arch/arm/mach-s3c/mach-crag6410-module.c b/arch/arm/mach-s3c/mach-crag6410-module.c
index 4ffcf024b09d..14b0f9cc103e 100644
--- a/arch/arm/mach-s3c/mach-crag6410-module.c
+++ b/arch/arm/mach-s3c/mach-crag6410-module.c
@@ -239,7 +239,6 @@ static struct gpiod_lookup_table wm8994_gpiod_table = {
static struct arizona_pdata wm5102_reva_pdata = {
.gpio_base = CODEC_GPIO_BASE,
.irq_flags = IRQF_TRIGGER_HIGH,
- .micd_pol_gpio = CODEC_GPIO_BASE + 4,
.micd_rate = 6,
.gpio_defaults = {
[2] = 0x10000, /* AIF3TXLRCLK */
@@ -265,6 +264,8 @@ static struct gpiod_lookup_table wm5102_reva_gpiod_table = {
.table = {
GPIO_LOOKUP("GPION", 7,
"wlf,ldoena", GPIO_ACTIVE_HIGH),
+ GPIO_LOOKUP("arizona", 4,
+ "wlf,micd-pol", GPIO_ACTIVE_HIGH),
{ },
},
};
@@ -272,7 +273,6 @@ static struct gpiod_lookup_table wm5102_reva_gpiod_table = {
static struct arizona_pdata wm5102_pdata = {
.gpio_base = CODEC_GPIO_BASE,
.irq_flags = IRQF_TRIGGER_HIGH,
- .micd_pol_gpio = CODEC_GPIO_BASE + 2,
.gpio_defaults = {
[2] = 0x10000, /* AIF3TXLRCLK */
[3] = 0x4, /* OPCLK */
@@ -297,6 +297,8 @@ static struct gpiod_lookup_table wm5102_gpiod_table = {
.table = {
GPIO_LOOKUP("GPION", 7,
"wlf,ldo1ena", GPIO_ACTIVE_HIGH),
+ GPIO_LOOKUP("arizona", 2,
+ "wlf,micd-pol", GPIO_ACTIVE_HIGH),
{ },
},
};
diff --git a/include/linux/mfd/arizona/pdata.h b/include/linux/mfd/arizona/pdata.h
index f72e6d4b14a7..d465dcd8c90a 100644
--- a/include/linux/mfd/arizona/pdata.h
+++ b/include/linux/mfd/arizona/pdata.h
@@ -117,11 +117,6 @@ struct arizona_pdata {
/** Check for line output with HPDET method */
bool hpdet_acc_id_line;
-#ifdef CONFIG_GPIOLIB_LEGACY
- /** GPIO used for mic isolation with HPDET */
- int hpdet_id_gpio;
-#endif
-
/** Channel to use for headphone detection */
unsigned int hpdet_channel;
@@ -131,11 +126,6 @@ struct arizona_pdata {
/** Extra debounce timeout used during initial mic detection (ms) */
unsigned int micd_detect_debounce;
-#ifdef CONFIG_GPIOLIB_LEGACY
- /** GPIO for mic detection polarity */
- int micd_pol_gpio;
-#endif
-
/** Mic detect ramp rate */
unsigned int micd_bias_start_time;
diff --git a/sound/soc/codecs/arizona-jack.c b/sound/soc/codecs/arizona-jack.c
index 303c1d44ebd8..a9063bac2752 100644
--- a/sound/soc/codecs/arizona-jack.c
+++ b/sound/soc/codecs/arizona-jack.c
@@ -11,7 +11,6 @@
#include <linux/interrupt.h>
#include <linux/err.h>
#include <linux/gpio/consumer.h>
-#include <linux/gpio.h>
#include <linux/input.h>
#include <linux/pm_runtime.h>
#include <linux/property.h>
@@ -459,11 +458,6 @@ static int arizona_hpdet_do_id(struct arizona_priv *info, int *reading,
bool *mic)
{
struct arizona *arizona = info->arizona;
-#ifdef CONFIG_GPIOLIB_LEGACY
- int id_gpio = arizona->pdata.hpdet_id_gpio;
-#else
- int id_gpio = 0;
-#endif
if (!arizona->pdata.hpdet_acc_id)
return 0;
@@ -474,9 +468,8 @@ static int arizona_hpdet_do_id(struct arizona_priv *info, int *reading,
*/
info->hpdet_res[info->num_hpdet_res++] = *reading;
-#ifdef CONFIG_GPIOLIB_LEGACY
/* Only check the mic directly if we didn't already ID it */
- if (id_gpio && info->num_hpdet_res == 1) {
+ if (info->hpdet_id_gpio && info->num_hpdet_res == 1) {
dev_dbg(arizona->dev, "Measuring mic\n");
regmap_update_bits(arizona->regmap,
@@ -486,13 +479,12 @@ static int arizona_hpdet_do_id(struct arizona_priv *info, int *reading,
ARIZONA_ACCDET_MODE_HPR |
info->micd_modes[0].src);
- gpio_set_value_cansleep(id_gpio, 1);
+ gpiod_set_value_cansleep(info->hpdet_id_gpio, 1);
regmap_update_bits(arizona->regmap, ARIZONA_HEADPHONE_DETECT_1,
ARIZONA_HP_POLL, ARIZONA_HP_POLL);
return -EAGAIN;
}
-#endif
/* OK, got both. Now, compare... */
dev_dbg(arizona->dev, "HPDET measured %d %d\n",
@@ -514,7 +506,7 @@ static int arizona_hpdet_do_id(struct arizona_priv *info, int *reading,
/*
* If we measure the mic as high impedance
*/
- if (!id_gpio || info->hpdet_res[1] > 50) {
+ if (!info->hpdet_id_gpio || info->hpdet_res[1] > 50) {
dev_dbg(arizona->dev, "Detected mic\n");
*mic = true;
info->detecting = true;
@@ -533,9 +525,6 @@ static irqreturn_t arizona_hpdet_irq(int irq, void *data)
{
struct arizona_priv *info = data;
struct arizona *arizona = info->arizona;
-#ifdef CONFIG_GPIOLIB_LEGACY
- int id_gpio = arizona->pdata.hpdet_id_gpio;
-#endif
int ret, reading, state, report;
bool mic = false;
@@ -591,10 +580,8 @@ static irqreturn_t arizona_hpdet_irq(int irq, void *data)
arizona_extcon_hp_clamp(info, false);
-#ifdef CONFIG_GPIOLIB_LEGACY
- if (id_gpio)
- gpio_set_value_cansleep(id_gpio, 0);
-#endif
+ if (info->hpdet_id_gpio)
+ gpiod_set_value_cansleep(info->hpdet_id_gpio, 0);
/* If we have a mic then reenable MICDET */
if (state && (mic || info->mic))
@@ -1325,58 +1312,33 @@ int arizona_jack_codec_dev_probe(struct arizona_priv *info, struct device *dev)
regmap_update_bits(arizona->regmap, ARIZONA_GP_SWITCH_1,
ARIZONA_SW1_MODE_MASK, arizona->pdata.gpsw);
-#ifdef CONFIG_GPIOLIB_LEGACY
- if (pdata->micd_pol_gpio > 0) {
- if (info->micd_modes[0].gpio)
- mode = GPIOF_OUT_INIT_HIGH;
- else
- mode = GPIOF_OUT_INIT_LOW;
-
- ret = devm_gpio_request_one(dev, pdata->micd_pol_gpio,
- mode, "MICD polarity");
- if (ret != 0) {
- dev_err(arizona->dev, "Failed to request GPIO%d: %d\n",
- pdata->micd_pol_gpio, ret);
- return ret;
- }
-
- info->micd_pol_gpio = gpio_to_desc(pdata->micd_pol_gpio);
- } else
-#endif
- {
- if (info->micd_modes[0].gpio)
- mode = GPIOD_OUT_HIGH;
- else
- mode = GPIOD_OUT_LOW;
+ if (info->micd_modes[0].gpio)
+ mode = GPIOD_OUT_HIGH;
+ else
+ mode = GPIOD_OUT_LOW;
- /* We can't use devm here because we need to do the get
- * against the MFD device, as that is where the of_node
- * will reside, but if we devm against that the GPIO
- * will not be freed if the extcon driver is unloaded.
- */
- info->micd_pol_gpio = gpiod_get_optional(arizona->dev,
- "wlf,micd-pol",
- mode);
- if (IS_ERR(info->micd_pol_gpio)) {
- ret = PTR_ERR(info->micd_pol_gpio);
- dev_err_probe(arizona->dev, ret, "getting microphone polarity GPIO\n");
- return ret;
- }
+ /* We can't use devm here because we need to do the get
+ * against the MFD device, as that is where the of_node
+ * will reside, but if we devm against that the GPIO
+ * will not be freed if the extcon driver is unloaded.
+ */
+ info->micd_pol_gpio = gpiod_get_optional(arizona->dev,
+ "wlf,micd-pol",
+ mode);
+ if (IS_ERR(info->micd_pol_gpio)) {
+ ret = PTR_ERR(info->micd_pol_gpio);
+ dev_err_probe(arizona->dev, ret, "getting microphone polarity GPIO\n");
+ return ret;
}
-#ifdef CONFIG_GPIOLIB_LEGACY
- if (arizona->pdata.hpdet_id_gpio > 0) {
- ret = devm_gpio_request_one(dev, arizona->pdata.hpdet_id_gpio,
- GPIOF_OUT_INIT_LOW,
- "HPDET");
- if (ret != 0) {
- dev_err(arizona->dev, "Failed to request GPIO%d: %d\n",
- arizona->pdata.hpdet_id_gpio, ret);
- gpiod_put(info->micd_pol_gpio);
- return ret;
- }
+ info->hpdet_id_gpio = gpiod_get_optional(arizona->dev,
+ "wlf,hpdet-id-gpio",
+ mode);
+ if (IS_ERR(info->hpdet_id_gpio)) {
+ ret = PTR_ERR(info->hpdet_id_gpio);
+ dev_err_probe(arizona->dev, ret, "getting headphone detect ID GPIO\n");
+ return ret;
}
-#endif
return 0;
}
@@ -1385,6 +1347,7 @@ EXPORT_SYMBOL_GPL(arizona_jack_codec_dev_probe);
int arizona_jack_codec_dev_remove(struct arizona_priv *info)
{
gpiod_put(info->micd_pol_gpio);
+ gpiod_put(info->hpdet_id_gpio);
return 0;
}
EXPORT_SYMBOL_GPL(arizona_jack_codec_dev_remove);
diff --git a/sound/soc/codecs/arizona.h b/sound/soc/codecs/arizona.h
index ecd8890eefc1..0703182d87b3 100644
--- a/sound/soc/codecs/arizona.h
+++ b/sound/soc/codecs/arizona.h
@@ -100,6 +100,7 @@ struct arizona_priv {
struct snd_soc_jack *jack;
struct regulator *micvdd;
struct gpio_desc *micd_pol_gpio;
+ struct gpio_desc *hpdet_id_gpio;
u16 last_jackdet;
---
base-commit: 6de23f81a5e08be8fbf5e8d7e9febc72a5b5f27f
change-id: 20260314-asoc-arizona-98487337de7b
Best regards,
--
Linus Walleij <linusw@kernel.org>
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] ASoC: codec: arizona: Convert to use GPIO descriptors
2026-03-14 22:56 [PATCH] ASoC: codec: arizona: Convert to use GPIO descriptors Linus Walleij
@ 2026-03-15 8:35 ` Krzysztof Kozlowski
2026-03-16 8:59 ` Bartosz Golaszewski
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Krzysztof Kozlowski @ 2026-03-15 8:35 UTC (permalink / raw)
To: Linus Walleij, Alim Akhtar, Russell King, Lee Jones,
Liam Girdwood, Mark Brown, Jaroslav Kysela, Takashi Iwai,
Bartosz Golaszewski
Cc: patches, linux-arm-kernel, linux-samsung-soc, linux-kernel,
linux-sound, linux-gpio
On 14/03/2026 23:56, Linus Walleij wrote:
> This converts the Arizona driver to use GPIO descriptors
> exclusively, deletes the legacy code path an updates the
> in-tree user of legacy GPIO.
>
> The GPIO lines for mic detect polarity and headphone ID
> detection are made exclusively descriptor-oriented. The
> headphone ID detection could actually only be used by
> the legacy GPIO code, but I converted it to use a
> descriptor if someone would actually need it so we don't
> just drop useful code.
>
> The compatible "wlf,hpdet-id-gpio" is not in the device
> tree bindings and only intended to be used by software
> nodes if any. If someone insists I can try to add a
> binding for it, but I doubt there is any real user so
> it seems pointless.
>
> Signed-off-by: Linus Walleij <linusw@kernel.org>
> ---
> This patch hits all over the place, but I think merging it to
> the ASoC tree would be the best.
> ---
> arch/arm/mach-s3c/mach-crag6410-module.c | 6 +-
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> # s3c
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] ASoC: codec: arizona: Convert to use GPIO descriptors
2026-03-14 22:56 [PATCH] ASoC: codec: arizona: Convert to use GPIO descriptors Linus Walleij
2026-03-15 8:35 ` Krzysztof Kozlowski
@ 2026-03-16 8:59 ` Bartosz Golaszewski
2026-03-16 9:36 ` Charles Keepax
2026-03-16 13:12 ` Mark Brown
3 siblings, 0 replies; 5+ messages in thread
From: Bartosz Golaszewski @ 2026-03-16 8:59 UTC (permalink / raw)
To: Linus Walleij
Cc: patches, linux-arm-kernel, linux-samsung-soc, linux-kernel,
linux-sound, linux-gpio, Krzysztof Kozlowski, Alim Akhtar,
Russell King, Lee Jones, Liam Girdwood, Mark Brown,
Jaroslav Kysela, Takashi Iwai, Bartosz Golaszewski
On Sat, 14 Mar 2026 23:56:49 +0100, Linus Walleij <linusw@kernel.org> said:
> This converts the Arizona driver to use GPIO descriptors
> exclusively, deletes the legacy code path an updates the
> in-tree user of legacy GPIO.
>
> The GPIO lines for mic detect polarity and headphone ID
> detection are made exclusively descriptor-oriented. The
> headphone ID detection could actually only be used by
> the legacy GPIO code, but I converted it to use a
> descriptor if someone would actually need it so we don't
> just drop useful code.
>
> The compatible "wlf,hpdet-id-gpio" is not in the device
> tree bindings and only intended to be used by software
> nodes if any. If someone insists I can try to add a
> binding for it, but I doubt there is any real user so
> it seems pointless.
>
> Signed-off-by: Linus Walleij <linusw@kernel.org>
> ---
I expressed my opinion on ABI compatibility elsewhere in this thread but
for the change itself:
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] ASoC: codec: arizona: Convert to use GPIO descriptors
2026-03-14 22:56 [PATCH] ASoC: codec: arizona: Convert to use GPIO descriptors Linus Walleij
2026-03-15 8:35 ` Krzysztof Kozlowski
2026-03-16 8:59 ` Bartosz Golaszewski
@ 2026-03-16 9:36 ` Charles Keepax
2026-03-16 13:12 ` Mark Brown
3 siblings, 0 replies; 5+ messages in thread
From: Charles Keepax @ 2026-03-16 9:36 UTC (permalink / raw)
To: Linus Walleij
Cc: Krzysztof Kozlowski, Alim Akhtar, Russell King, Lee Jones,
Liam Girdwood, Mark Brown, Jaroslav Kysela, Takashi Iwai,
Bartosz Golaszewski, patches, linux-arm-kernel, linux-samsung-soc,
linux-kernel, linux-sound, linux-gpio
On Sat, Mar 14, 2026 at 11:56:49PM +0100, Linus Walleij wrote:
> This converts the Arizona driver to use GPIO descriptors
> exclusively, deletes the legacy code path an updates the
> in-tree user of legacy GPIO.
>
> The GPIO lines for mic detect polarity and headphone ID
> detection are made exclusively descriptor-oriented. The
> headphone ID detection could actually only be used by
> the legacy GPIO code, but I converted it to use a
> descriptor if someone would actually need it so we don't
> just drop useful code.
>
> The compatible "wlf,hpdet-id-gpio" is not in the device
> tree bindings and only intended to be used by software
> nodes if any. If someone insists I can try to add a
> binding for it, but I doubt there is any real user so
> it seems pointless.
Yeah probably fine, this was also on the definitely more
esoteric end of the driver features. Although again there
were definitely some out of tree users in the distant past.
> Signed-off-by: Linus Walleij <linusw@kernel.org>
> ---
Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Thanks,
Charles
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] ASoC: codec: arizona: Convert to use GPIO descriptors
2026-03-14 22:56 [PATCH] ASoC: codec: arizona: Convert to use GPIO descriptors Linus Walleij
` (2 preceding siblings ...)
2026-03-16 9:36 ` Charles Keepax
@ 2026-03-16 13:12 ` Mark Brown
3 siblings, 0 replies; 5+ messages in thread
From: Mark Brown @ 2026-03-16 13:12 UTC (permalink / raw)
To: Krzysztof Kozlowski, Alim Akhtar, Russell King, Lee Jones,
Liam Girdwood, Jaroslav Kysela, Takashi Iwai, Bartosz Golaszewski,
Linus Walleij
Cc: patches, linux-arm-kernel, linux-samsung-soc, linux-kernel,
linux-sound, linux-gpio
On Sat, 14 Mar 2026 23:56:49 +0100, Linus Walleij wrote:
> ASoC: codec: arizona: Convert to use GPIO descriptors
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-7.1
Thanks!
[1/1] ASoC: codec: arizona: Convert to use GPIO descriptors
https://git.kernel.org/broonie/sound/c/cb15d8e6cbe8
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-03-16 18:15 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-14 22:56 [PATCH] ASoC: codec: arizona: Convert to use GPIO descriptors Linus Walleij
2026-03-15 8:35 ` Krzysztof Kozlowski
2026-03-16 8:59 ` Bartosz Golaszewski
2026-03-16 9:36 ` Charles Keepax
2026-03-16 13:12 ` Mark Brown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox