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