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@xxxxxxxxxx> Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> > --- > 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;