[PATCH] ASoC: Intel: bytcr_wm5102: Fix GPIO related probe-ordering problem
Pierre-Louis Bossart
pierre-louis.bossart at linux.intel.com
Mon Jun 13 15:10:34 CEST 2022
On 6/12/22 10:56, Hans de Goede wrote:
> The "wlf,spkvdd-ena" GPIO needed by the bytcr_wm5102 driver
> is made available through a gpio-lookup table.
>
> This gpio-lookup table is registered by drivers/mfd/arizona-spi.c, which
> may get probed after the bytcr_wm5102 driver.
>
> If the gpio-lookup table has not registered yet then the gpiod_get()
> will return -ENOENT. Treat -ENOENT as -EPROBE_DEFER to still keep
> things working in this case.
>
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
Acked-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
> ---
> sound/soc/intel/boards/bytcr_wm5102.c | 13 +++++++++++--
> 1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/sound/soc/intel/boards/bytcr_wm5102.c b/sound/soc/intel/boards/bytcr_wm5102.c
> index 00384c6fbcaa..330c0ace1638 100644
> --- a/sound/soc/intel/boards/bytcr_wm5102.c
> +++ b/sound/soc/intel/boards/bytcr_wm5102.c
> @@ -421,8 +421,17 @@ static int snd_byt_wm5102_mc_probe(struct platform_device *pdev)
> priv->spkvdd_en_gpio = gpiod_get(codec_dev, "wlf,spkvdd-ena", GPIOD_OUT_LOW);
> put_device(codec_dev);
>
> - if (IS_ERR(priv->spkvdd_en_gpio))
> - return dev_err_probe(dev, PTR_ERR(priv->spkvdd_en_gpio), "getting spkvdd-GPIO\n");
> + if (IS_ERR(priv->spkvdd_en_gpio)) {
> + ret = PTR_ERR(priv->spkvdd_en_gpio);
> + /*
> + * The spkvdd gpio-lookup is registered by: drivers/mfd/arizona-spi.c,
> + * so -ENOENT means that arizona-spi hasn't probed yet.
> + */
> + if (ret == -ENOENT)
> + ret = -EPROBE_DEFER;
> +
> + return dev_err_probe(dev, ret, "getting spkvdd-GPIO\n");
> + }
>
> /* override platform name, if required */
> byt_wm5102_card.dev = dev;
More information about the Alsa-devel
mailing list