Unverified Commit 0c673d28 authored by Pierre-Louis Bossart's avatar Pierre-Louis Bossart Committed by Mark Brown
Browse files

soundwire: slave: lookup SDCA version and functions



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: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: default avatarPéter Ujfalusi <peter.ujfalusi@linux.intel.com>
Signed-off-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Acked-by: default avatarVinod Koul <vkoul@kernel.org>
Link: https://patch.msgid.link/20241016102333.294448-5-yung-chuan.liao@linux.intel.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 3a513da1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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
+14 −0
Original line number Diff line number Diff line
@@ -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);