On Tue, Jan 5, 2021 at 4:39 PM Kai Vehmanen kai.vehmanen@linux.intel.com wrote:
Could it be part of the device specific driver_data?
This would certainly be a clean way and allow to remove the Intel-specific calls from sof_pci_probe(). As a short-term solution, IS_REACHABLE() seems ok as well.
I looked at it some more and my conclusion is that the problem is the way the drivers mix device specific and generic data: The generic acpi or pci driver should never need to know about individual devices and their dependencies. Instead of just exporting some generic helper functions, these are the top-level drivers and the device specific drivers are the ones exporting the data.
It's a common mistake, but it always leads to complexity like this and we tend to end up having to undo it all.
I prototyped a patch to do this for the acpi driver, and it seems much more straightforward this way, please have a look.
commit a83ecfed5b31dfc862e04c9bf77d2107a1047c9b Author: Arnd Bergmann arnd@arndb.de Date: Tue Jan 5 19:47:35 2021 +0100
ASoC: SOF: Intel: avoid reverse module dependency
The SOF-ACPI driver is backwards from the normal Linux model, it has a generic driver that knows about all the specific drivers, as opposed to having hardware specific drivers that link against a common framework.
This requires ugly Kconfig magic and leads to missed dependencies as seen in this link error:
arm-linux-gnueabi-ld: sound/soc/sof/sof-pci-dev.o: in function `sof_acpi_probe': sof-pci-dev.c:(.text+0x1c): undefined reference to `snd_intel_dsp_driver_probe'
Change it to use the normal probe order of starting with a specific device in a driver, turning the sof-acpi-dev.c driver into a library.
Signed-off-by: Arnd Bergmann arnd@arndb.de
sound/soc/sof/intel/Kconfig | 34 +++--------- sound/soc/sof/intel/bdw.c | 51 ++++++++++++++++-- sound/soc/sof/intel/byt.c | 104 ++++++++++++++++++++++++++++++++---- sound/soc/sof/intel/shim.h | 10 ++-- sound/soc/sof/sof-acpi-dev.c | 122 ++----------------------------------------- 5 files changed, 156 insertions(+), 165 deletions(-)
The PCI driver is left as an exercise to the reader.
Arnd