On Thu, 2022-08-04 at 14:17 +0100, Mark Brown wrote: > On Thu, Aug 04, 2022 at 05:13:58PM +0800, Chunxu Li wrote: > > > @@ -284,6 +284,7 @@ struct snd_sof_dsp_ops { > > void (*machine_unregister)(struct snd_sof_dev *sdev, > > void *pdata); /* optional */ > > struct snd_soc_acpi_mach * (*machine_select)(struct snd_sof_dev > > *sdev); /* > > optional */ > > + struct snd_sof_of_mach * (*of_machine_select)(struct > > snd_sof_dev *sdev); > > I don't understand why we pass this in as a function when as far as I > can see it should always be the standard operation provided by the > core > - why not just always call the function? We can tell at runtime if > the > system is using DT so there's no issue there and there shouldn't be > any > concerns with ACPI or other firmware interfaces. Thanks for you advice, I'll remove the callback function, and directly call sof_of_machine_select() in sof_machine_check() as following. int sof_machine_check(struct snd_sof_dev *sdev) { snip... const struct snd_sof_of_mach *of_mach; /* find machine */ mach = snd_sof_machine_select(sdev); if (mach) { sof_pdata->machine = mach; snd_sof_set_mach_params(mach, sdev); return 0; } + of_mach = sof_of_machine_select(sdev); + if (of_mach) { + sof_pdata->of_machine = of_mach; + return 0; + } snip ... }