summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2026-09-07 14:29:09 +0100
committerMark Brown <broonie@kernel.org>2026-09-07 14:29:09 +0100
commit683220cde2b1e78e3121842c9657eebe25a48d76 (patch)
tree2fc31d02d29b420c16b99abc8227b0be365e5da5
parent15b72c6d38fbce11bdcb674f76a7b9d62ba9a7d1 (diff)
parent1d4d3198ccce18ec1d58ac41c47e7b2aabba2e94 (diff)
downloadlinux-next-683220cde2b1e78e3121842c9657eebe25a48d76.tar.gz
linux-next-683220cde2b1e78e3121842c9657eebe25a48d76.zip
Merge branch 'next' of https://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire.git
-rw-r--r--drivers/soundwire/bus_type.c16
-rw-r--r--drivers/soundwire/dmi-quirks.c7
-rw-r--r--drivers/soundwire/intel_auxdevice.c4
3 files changed, 21 insertions, 6 deletions
diff --git a/drivers/soundwire/bus_type.c b/drivers/soundwire/bus_type.c
index d61a97c5b41e..fea15107cd9b 100644
--- a/drivers/soundwire/bus_type.c
+++ b/drivers/soundwire/bus_type.c
@@ -71,6 +71,13 @@ int sdw_slave_uevent(const struct device *dev, struct kobj_uevent_env *env)
return 0;
}
+static void sdw_slave_ida_free(void *data)
+{
+ struct sdw_slave *slave = data;
+
+ ida_free(&slave->bus->slave_ida, slave->index);
+}
+
static int sdw_bus_probe(struct device *dev)
{
struct sdw_slave *slave = dev_to_sdw_dev(dev);
@@ -104,15 +111,16 @@ static int sdw_bus_probe(struct device *dev)
return ret;
}
slave->index = ret;
+ ret = devm_add_action_or_reset(dev, sdw_slave_ida_free, slave);
+ if (ret)
+ return ret;
/* Create IRQ mapping now so the driver can get it in probe() */
sdw_irq_create_mapping(slave);
ret = drv->probe(slave, id);
- if (ret) {
- ida_free(&slave->bus->slave_ida, slave->index);
+ if (ret)
return ret;
- }
mutex_lock(&slave->sdw_dev_lock);
@@ -170,8 +178,6 @@ static void sdw_bus_remove(struct device *dev)
if (drv->remove)
drv->remove(slave);
-
- ida_free(&slave->bus->slave_ida, slave->index);
}
static void sdw_bus_shutdown(struct device *dev)
diff --git a/drivers/soundwire/dmi-quirks.c b/drivers/soundwire/dmi-quirks.c
index 62fa64b22412..8140f9b9db0a 100644
--- a/drivers/soundwire/dmi-quirks.c
+++ b/drivers/soundwire/dmi-quirks.c
@@ -224,6 +224,13 @@ static const struct dmi_system_id adr_remap_quirk_table[] = {
{
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "83QM"),
+ },
+ .driver_data = (void *)ghost_realtek,
+ },
+ {
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_NAME, "83QK"),
},
.driver_data = (void *)ghost_realtek,
diff --git a/drivers/soundwire/intel_auxdevice.c b/drivers/soundwire/intel_auxdevice.c
index a8407560bf4f..ece5fba7c6b7 100644
--- a/drivers/soundwire/intel_auxdevice.c
+++ b/drivers/soundwire/intel_auxdevice.c
@@ -74,6 +74,8 @@ static struct wake_capable_part wake_capable_list[] = {
{0x025d, 0x721},
{0x025d, 0x722},
{0x04b3, 0x9356},
+ {0x0102, 0x5572},
+ {0x0102, 0x5682},
};
static bool is_wake_capable(struct sdw_slave *slave)
@@ -159,7 +161,7 @@ static int sdw_master_read_intel_prop(struct sdw_bus *bus)
struct sdw_intel_prop *intel_prop;
struct fwnode_handle *link;
char name[32];
- u32 quirk_mask;
+ u32 quirk_mask = 0;
/* Find master handle */
snprintf(name, sizeof(name),