[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