summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2026-02-17 10:07:13 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2026-02-17 10:07:13 -0800
commit4e15e819710e3518ec28735a12e0f45b7550290d (patch)
treeebfa8b709134f02bb0d2f9abd87743fd0b25e52c /drivers
parentd295082ea672e7277388e1cf7c5af73788cf8029 (diff)
parentdc3a6a942e9ee3f18560bfcb16c06bb94f37fabf (diff)
Merge tag 'soundwire-7.0-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire
Pull soundwire updates from Vinod Koul: - support for Qualcomm v2.2.0 controllers - bus method updates for .probe(), .remove() and .shutdown() and remove function return value updates - Avell B.ON dmi-quirks mapping - mark cs42l45 codec as wake capable * tag 'soundwire-7.0-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire: soundwire: intel_ace2x: add SND_HDA_CORE dependency dt-bindings: soundwire: qcom: Add SoundWire v2.2.0 compatible soundwire: Use bus methods for .probe(), .remove() and .shutdown() soundwire: Make remove function return no value soundwire: dmi-quirks: add mapping for Avell B.ON (OEM rebranded of NUC15) soundwire: qcom: Use guard to avoid mixing cleanup and goto soundwire: intel_auxdevice: add cs42l45 codec to wake_capable_list
Diffstat (limited to 'drivers')
-rw-r--r--drivers/soundwire/Kconfig1
-rw-r--r--drivers/soundwire/bus_type.c31
-rw-r--r--drivers/soundwire/dmi-quirks.c11
-rw-r--r--drivers/soundwire/intel_auxdevice.c1
-rw-r--r--drivers/soundwire/qcom.c12
5 files changed, 32 insertions, 24 deletions
diff --git a/drivers/soundwire/Kconfig b/drivers/soundwire/Kconfig
index ad56393e4c93..196a7daaabdb 100644
--- a/drivers/soundwire/Kconfig
+++ b/drivers/soundwire/Kconfig
@@ -40,6 +40,7 @@ config SOUNDWIRE_INTEL
select AUXILIARY_BUS
depends on ACPI && SND_SOC
depends on SND_SOC_SOF_HDA_MLINK || !SND_SOC_SOF_HDA_MLINK
+ depends on SND_HDA_CORE || !SND_HDA_ALIGNED_MMIO
help
SoundWire Intel Master driver.
If you have an Intel platform which has a SoundWire Master then
diff --git a/drivers/soundwire/bus_type.c b/drivers/soundwire/bus_type.c
index 5c67c13e5735..a05aa36828cb 100644
--- a/drivers/soundwire/bus_type.c
+++ b/drivers/soundwire/bus_type.c
@@ -72,13 +72,7 @@ int sdw_slave_uevent(const struct device *dev, struct kobj_uevent_env *env)
return 0;
}
-const struct bus_type sdw_bus_type = {
- .name = "soundwire",
- .match = sdw_bus_match,
-};
-EXPORT_SYMBOL_GPL(sdw_bus_type);
-
-static int sdw_drv_probe(struct device *dev)
+static int sdw_bus_probe(struct device *dev)
{
struct sdw_slave *slave = dev_to_sdw_dev(dev);
struct sdw_driver *drv = drv_to_sdw_driver(dev->driver);
@@ -164,11 +158,10 @@ static int sdw_drv_probe(struct device *dev)
return 0;
}
-static int sdw_drv_remove(struct device *dev)
+static void sdw_bus_remove(struct device *dev)
{
struct sdw_slave *slave = dev_to_sdw_dev(dev);
struct sdw_driver *drv = drv_to_sdw_driver(dev->driver);
- int ret = 0;
mutex_lock(&slave->sdw_dev_lock);
@@ -177,22 +170,29 @@ static int sdw_drv_remove(struct device *dev)
mutex_unlock(&slave->sdw_dev_lock);
if (drv->remove)
- ret = drv->remove(slave);
+ drv->remove(slave);
ida_free(&slave->bus->slave_ida, slave->index);
-
- return ret;
}
-static void sdw_drv_shutdown(struct device *dev)
+static void sdw_bus_shutdown(struct device *dev)
{
struct sdw_slave *slave = dev_to_sdw_dev(dev);
struct sdw_driver *drv = drv_to_sdw_driver(dev->driver);
- if (drv->shutdown)
+ if (dev->driver && drv->shutdown)
drv->shutdown(slave);
}
+const struct bus_type sdw_bus_type = {
+ .name = "soundwire",
+ .match = sdw_bus_match,
+ .probe = sdw_bus_probe,
+ .remove = sdw_bus_remove,
+ .shutdown = sdw_bus_shutdown,
+};
+EXPORT_SYMBOL_GPL(sdw_bus_type);
+
/**
* __sdw_register_driver() - register a SoundWire Slave driver
* @drv: driver to register
@@ -211,9 +211,6 @@ int __sdw_register_driver(struct sdw_driver *drv, struct module *owner)
}
drv->driver.owner = owner;
- drv->driver.probe = sdw_drv_probe;
- drv->driver.remove = sdw_drv_remove;
- drv->driver.shutdown = sdw_drv_shutdown;
drv->driver.dev_groups = sdw_attr_groups;
return driver_register(&drv->driver);
diff --git a/drivers/soundwire/dmi-quirks.c b/drivers/soundwire/dmi-quirks.c
index 91ab97a456fa..5854218e1a27 100644
--- a/drivers/soundwire/dmi-quirks.c
+++ b/drivers/soundwire/dmi-quirks.c
@@ -123,6 +123,17 @@ static const struct dmi_system_id adr_remap_quirk_table[] = {
.driver_data = (void *)intel_tgl_bios,
},
{
+ /*
+ * quirk used for Avell B.ON (OEM rebrand of NUC15 'Bishop County'
+ * LAPBC510 and LAPBC710)
+ */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Avell High Performance"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "B.ON"),
+ },
+ .driver_data = (void *)intel_tgl_bios,
+ },
+ {
/* quirk used for NUC15 'Rooks County' LAPRC510 and LAPRC710 skews */
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Intel(R) Client Systems"),
diff --git a/drivers/soundwire/intel_auxdevice.c b/drivers/soundwire/intel_auxdevice.c
index 6df2601fff90..8752b0e3ce74 100644
--- a/drivers/soundwire/intel_auxdevice.c
+++ b/drivers/soundwire/intel_auxdevice.c
@@ -52,6 +52,7 @@ struct wake_capable_part {
static struct wake_capable_part wake_capable_list[] = {
{0x01fa, 0x4243},
+ {0x01fa, 0x4245},
{0x025d, 0x5682},
{0x025d, 0x700},
{0x025d, 0x711},
diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c
index 17afc5aa8b44..8102a1b0d516 100644
--- a/drivers/soundwire/qcom.c
+++ b/drivers/soundwire/qcom.c
@@ -1228,7 +1228,7 @@ static int qcom_swrm_stream_alloc_ports(struct qcom_swrm_ctrl *ctrl,
struct sdw_port_runtime *p_rt;
struct sdw_slave *slave;
unsigned long *port_mask;
- int maxport, pn, nports = 0, ret = 0;
+ int maxport, pn, nports = 0;
unsigned int m_port;
struct sdw_port_config *pconfig __free(kfree) = kcalloc(ctrl->nports,
sizeof(*pconfig), GFP_KERNEL);
@@ -1246,7 +1246,8 @@ static int qcom_swrm_stream_alloc_ports(struct qcom_swrm_ctrl *ctrl,
sconfig.type = stream->type;
sconfig.bps = 1;
- mutex_lock(&ctrl->port_lock);
+ guard(mutex)(&ctrl->port_lock);
+
list_for_each_entry(m_rt, &stream->master_list, stream_node) {
/*
* For streams with multiple masters:
@@ -1272,8 +1273,7 @@ static int qcom_swrm_stream_alloc_ports(struct qcom_swrm_ctrl *ctrl,
if (pn > maxport) {
dev_err(ctrl->dev, "All ports busy\n");
- ret = -EBUSY;
- goto out;
+ return -EBUSY;
}
set_bit(pn, port_mask);
pconfig[nports].num = pn;
@@ -1285,10 +1285,8 @@ static int qcom_swrm_stream_alloc_ports(struct qcom_swrm_ctrl *ctrl,
sdw_stream_add_master(&ctrl->bus, &sconfig, pconfig,
nports, stream);
-out:
- mutex_unlock(&ctrl->port_lock);
- return ret;
+ return 0;
}
static int qcom_swrm_hw_params(struct snd_pcm_substream *substream,