Hi Andy,
On Tue, 6 Jun 2023 15:54:04 +0200 Herve Codina herve.codina@bootlin.com 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... 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é