On Thu, Jan 11, 2024 at 6:53 PM AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx> wrote: > > Function devm_snd_soc_register_component() allocates a new struct > snd_soc_component, adds components and initializes them; since this > is also devm, it automatically unregisters components and frees > memory upon destruction. > > That's exactly what we're doing in the probe function of this driver: > switch to that function instead, allowing to remove the last goto and > to discard the .remove_new() callback for this driver. > > Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@xxxxxxxxxxxxx> > --- > sound/soc/mediatek/mt8173/mt8173-afe-pcm.c | 58 +++------------------- > 1 file changed, 8 insertions(+), 50 deletions(-) > > diff --git a/sound/soc/mediatek/mt8173/mt8173-afe-pcm.c b/sound/soc/mediatek/mt8173/mt8173-afe-pcm.c > index ea611730de9c..b887e10635fe 100644 > --- a/sound/soc/mediatek/mt8173/mt8173-afe-pcm.c > +++ b/sound/soc/mediatek/mt8173/mt8173-afe-pcm.c > @@ -1129,72 +1129,31 @@ static int mt8173_afe_pcm_dev_probe(struct platform_device *pdev) > afe->runtime_resume = mt8173_afe_runtime_resume; > afe->runtime_suspend = mt8173_afe_runtime_suspend; > > - ret = devm_snd_soc_register_component(&pdev->dev, > - &mtk_afe_pcm_platform, > - NULL, 0); > + ret = devm_snd_soc_register_component(&pdev->dev, &mtk_afe_pcm_platform, NULL, 0); > if (ret) > return ret; > > - comp_pcm = devm_kzalloc(&pdev->dev, sizeof(*comp_pcm), GFP_KERNEL); > - if (!comp_pcm) > - return -ENOMEM; > - > - ret = snd_soc_component_initialize(comp_pcm, > - &mt8173_afe_pcm_dai_component, > - &pdev->dev); > + ret = devm_snd_soc_register_component(&pdev->dev, &mt8173_afe_pcm_dai_component, > + mt8173_afe_pcm_dais, > + ARRAY_SIZE(mt8173_afe_pcm_dais)); > if (ret) > return ret; > > -#ifdef CONFIG_DEBUG_FS > - comp_pcm->debugfs_prefix = "pcm"; > -#endif To match existing behavior, can you move this to the component driver? In snd_soc_component_initialize(), component->debugfs_prefix will take component_driver->debugfs_prefix as default if it is not set. Same for the HDMI component. ChenYu > - > - ret = snd_soc_add_component(comp_pcm, > - mt8173_afe_pcm_dais, > - ARRAY_SIZE(mt8173_afe_pcm_dais)); > + ret = devm_snd_soc_register_component(&pdev->dev, &mt8173_afe_hdmi_dai_component, > + mt8173_afe_hdmi_dais, > + ARRAY_SIZE(mt8173_afe_hdmi_dais)); > if (ret) > return ret; > > - comp_hdmi = devm_kzalloc(&pdev->dev, sizeof(*comp_hdmi), GFP_KERNEL); > - if (!comp_hdmi) { > - ret = -ENOMEM; > - goto err_cleanup_components; > - } > - > - ret = snd_soc_component_initialize(comp_hdmi, > - &mt8173_afe_hdmi_dai_component, > - &pdev->dev); > - if (ret) > - goto err_cleanup_components; > - > -#ifdef CONFIG_DEBUG_FS > - comp_hdmi->debugfs_prefix = "hdmi"; > -#endif > - > - ret = snd_soc_add_component(comp_hdmi, > - mt8173_afe_hdmi_dais, > - ARRAY_SIZE(mt8173_afe_hdmi_dais)); > - if (ret) > - goto err_cleanup_components; > - > ret = devm_request_irq(afe->dev, irq_id, mt8173_afe_irq_handler, > 0, "Afe_ISR_Handle", (void *)afe); > if (ret) { > dev_err(afe->dev, "could not request_irq\n"); > - goto err_cleanup_components; > + return ret; > } > > dev_info(&pdev->dev, "MT8173 AFE driver initialized.\n"); > return 0; > - > -err_cleanup_components: > - snd_soc_unregister_component(&pdev->dev); > - return ret; > -} > - > -static void mt8173_afe_pcm_dev_remove(struct platform_device *pdev) > -{ > - snd_soc_unregister_component(&pdev->dev); > } > > static const struct of_device_id mt8173_afe_pcm_dt_match[] = { > @@ -1215,7 +1174,6 @@ static struct platform_driver mt8173_afe_pcm_driver = { > .pm = &mt8173_afe_pm_ops, > }, > .probe = mt8173_afe_pcm_dev_probe, > - .remove_new = mt8173_afe_pcm_dev_remove, > }; > > module_platform_driver(mt8173_afe_pcm_driver); > -- > 2.43.0 > >