diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2026-02-17 10:07:13 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2026-02-17 10:07:13 -0800 |
| commit | 4e15e819710e3518ec28735a12e0f45b7550290d (patch) | |
| tree | ebfa8b709134f02bb0d2f9abd87743fd0b25e52c /drivers | |
| parent | d295082ea672e7277388e1cf7c5af73788cf8029 (diff) | |
| parent | dc3a6a942e9ee3f18560bfcb16c06bb94f37fabf (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/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/soundwire/bus_type.c | 31 | ||||
| -rw-r--r-- | drivers/soundwire/dmi-quirks.c | 11 | ||||
| -rw-r--r-- | drivers/soundwire/intel_auxdevice.c | 1 | ||||
| -rw-r--r-- | drivers/soundwire/qcom.c | 12 |
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, |
