Re: [PATCH v2 7/9] ASoC: codecs: Add support for the generic IIO auxiliary devices

From: Herve Codina
Date: Wed Jun 07 2023 - 09:23:19 EST


Hi Andy,

On Tue, 6 Jun 2023 15:54:04 +0200
Herve Codina <herve.codina@xxxxxxxxxxx> wrote:

...
> >
> > > + platform_set_drvdata(pdev, iio_aux);
> >
> > Which callback is using this driver data?
>
> None -> I will remove platform_set_drvdata().
>

My previous answer was not correct.
The platform_set_drvdata() call is needed.

In fact, the driver uses snd_soc_component_get_drvdata()
https://elixir.bootlin.com/linux/v6.4-rc5/source/include/sound/soc-component.h#L425
and this snd_soc_component_get_drvdata() get the driver data set by the
platform_set_drvdata() call.

I cannot use snd_soc_component_set_drvdata() to set the driver data because
I haven't got the struct snd_soc_component instance when I need to set the
driver data.

So, I will not remove the platform_set_drvdata() call.

The sequence is:
--- 8< ---
static int audio_iio_aux_probe(struct platform_device *pdev)
{
struct audio_iio_aux *iio_aux;

iio_aux = devm_kzalloc(&pdev->dev, sizeof(*iio_aux), GFP_KERNEL);
if (!iio_aux)
return -ENOMEM;

...

platform_set_drvdata(pdev, iio_aux);

return devm_snd_soc_register_component(iio_aux->dev,
&audio_iio_aux_component_driver,
NULL, 0);
}
--- 8< ---

The struct snd_soc_component instance will be create during the
devm_snd_soc_register_component() call.

Regards,
Hervé

--
Hervé Codina, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com