]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
soundwire: slave: lookup SDCA version and functions
authorPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Wed, 16 Oct 2024 10:23:26 +0000 (18:23 +0800)
committerMark Brown <broonie@kernel.org>
Thu, 17 Oct 2024 17:42:12 +0000 (18:42 +0100)
Use SDCA helpers to get the basic information and store it in the
slave context. The information will be optionally be used in codec
drivers to register sub-devices for each Function.

When platforms are not based on ACPI the helpers do absolutely
nothing.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Acked-by: Vinod Koul <vkoul@kernel.org>
Link: https://patch.msgid.link/20241016102333.294448-5-yung-chuan.liao@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/soundwire/Kconfig
drivers/soundwire/slave.c

index 4d8f3b7024ae593c2b7ebdf00cd12c7757a18ae1..f66f869dff2e514f29dc546622303fdc2b4e16a9 100644 (file)
@@ -6,6 +6,7 @@
 menuconfig SOUNDWIRE
        tristate "SoundWire support"
        depends on ACPI || OF
+       depends on SND_SOC_SDCA_OPTIONAL
        help
          SoundWire is a 2-Pin interface with data and clock line ratified
          by the MIPI Alliance. SoundWire is used for transporting data
index f1a4df6cfebd9c2143f04abe83c935e7110c3cf9..97cf8bcca04742cb0aa51ba30dbfc535a34a00f3 100644 (file)
@@ -5,6 +5,7 @@
 #include <linux/of.h>
 #include <linux/soundwire/sdw.h>
 #include <linux/soundwire/sdw_type.h>
+#include <sound/sdca.h>
 #include "bus.h"
 #include "sysfs_local.h"
 
@@ -70,6 +71,17 @@ int sdw_slave_add(struct sdw_bus *bus,
        list_add_tail(&slave->node, &bus->slaves);
        mutex_unlock(&bus->bus_lock);
 
+       /*
+        * The Soundwire driver probe may optionally register SDCA
+        * sub-devices, one per Function. This means the information
+        * on the SDCA revision and the number/type of Functions need
+        * to be extracted from platform firmware before the SoundWire
+        * driver probe, and as a consequence before the SoundWire
+        * device_register() below.
+        */
+       sdca_lookup_interface_revision(slave);
+       sdca_lookup_functions(slave);
+
        ret = device_register(&slave->dev);
        if (ret) {
                dev_err(bus->dev, "Failed to add slave: ret %d\n", ret);
@@ -259,3 +271,5 @@ int sdw_of_find_slaves(struct sdw_bus *bus)
 
        return 0;
 }
+
+MODULE_IMPORT_NS(SND_SOC_SDCA);