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
This commit is contained in:
Linus Torvalds
2026-02-17 10:07:13 -08:00
30 changed files with 57 additions and 94 deletions

View File

@@ -27,6 +27,7 @@ properties:
- items:
- enum:
- qcom,soundwire-v2.1.0
- qcom,soundwire-v2.2.0
- const: qcom,soundwire-v2.0.0
reg:

View File

@@ -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

View File

@@ -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);

View File

@@ -122,6 +122,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 = {

View File

@@ -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},

View File

@@ -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,

View File

@@ -705,7 +705,7 @@ struct sdw_master_device {
struct sdw_driver {
int (*probe)(struct sdw_slave *sdw, const struct sdw_device_id *id);
int (*remove)(struct sdw_slave *sdw);
void (*remove)(struct sdw_slave *sdw);
void (*shutdown)(struct sdw_slave *sdw);
const struct sdw_device_id *id_table;

View File

@@ -554,7 +554,7 @@ static int cs35l56_sdw_probe(struct sdw_slave *peripheral, const struct sdw_devi
return 0;
}
static int cs35l56_sdw_remove(struct sdw_slave *peripheral)
static void cs35l56_sdw_remove(struct sdw_slave *peripheral)
{
struct cs35l56_private *cs35l56 = dev_get_drvdata(&peripheral->dev);
@@ -566,8 +566,6 @@ static int cs35l56_sdw_remove(struct sdw_slave *peripheral)
sdw_write_no_pm(peripheral, CS35L56_SDW_GEN_INT_STAT_1, 0xFF);
cs35l56_remove(cs35l56);
return 0;
}
static const struct dev_pm_ops cs35l56_sdw_pm = {

View File

@@ -585,14 +585,12 @@ static int cs42l42_sdw_probe(struct sdw_slave *peripheral, const struct sdw_devi
return 0;
}
static int cs42l42_sdw_remove(struct sdw_slave *peripheral)
static void cs42l42_sdw_remove(struct sdw_slave *peripheral)
{
struct cs42l42_private *cs42l42 = dev_get_drvdata(&peripheral->dev);
cs42l42_common_remove(cs42l42);
pm_runtime_disable(cs42l42->dev);
return 0;
}
static const struct dev_pm_ops cs42l42_sdw_pm = {

View File

@@ -839,11 +839,9 @@ static int max98373_sdw_probe(struct sdw_slave *slave,
return max98373_init(slave, regmap);
}
static int max98373_sdw_remove(struct sdw_slave *slave)
static void max98373_sdw_remove(struct sdw_slave *slave)
{
pm_runtime_disable(&slave->dev);
return 0;
}
#if defined(CONFIG_OF)

View File

@@ -436,13 +436,11 @@ static int pm4125_probe(struct sdw_slave *pdev, const struct sdw_device_id *id)
return 0;
}
static int pm4125_remove(struct sdw_slave *pdev)
static void pm4125_remove(struct sdw_slave *pdev)
{
struct device *dev = &pdev->dev;
component_del(dev, &wcd_sdw_component_ops);
return 0;
}
static const struct sdw_device_id pm4125_slave_id[] = {

View File

@@ -741,14 +741,12 @@ static int rt1017_sdca_sdw_probe(struct sdw_slave *slave,
return rt1017_sdca_init(&slave->dev, regmap, slave);
}
static int rt1017_sdca_sdw_remove(struct sdw_slave *slave)
static void rt1017_sdca_sdw_remove(struct sdw_slave *slave)
{
struct rt1017_sdca_priv *rt1017 = dev_get_drvdata(&slave->dev);
if (rt1017->first_hw_init)
pm_runtime_disable(&slave->dev);
return 0;
}
static const struct sdw_device_id rt1017_sdca_id[] = {

View File

@@ -739,11 +739,9 @@ static int rt1308_sdw_probe(struct sdw_slave *slave,
return rt1308_sdw_init(&slave->dev, regmap, slave);
}
static int rt1308_sdw_remove(struct sdw_slave *slave)
static void rt1308_sdw_remove(struct sdw_slave *slave)
{
pm_runtime_disable(&slave->dev);
return 0;
}
static const struct sdw_device_id rt1308_id[] = {

View File

@@ -716,11 +716,9 @@ static int rt1316_sdw_probe(struct sdw_slave *slave,
return rt1316_sdw_init(&slave->dev, regmap, slave);
}
static int rt1316_sdw_remove(struct sdw_slave *slave)
static void rt1316_sdw_remove(struct sdw_slave *slave)
{
pm_runtime_disable(&slave->dev);
return 0;
}
static const struct sdw_device_id rt1316_id[] = {

View File

@@ -793,11 +793,9 @@ static int rt1318_sdw_probe(struct sdw_slave *slave,
return rt1318_sdw_init(&slave->dev, regmap, slave);
}
static int rt1318_sdw_remove(struct sdw_slave *slave)
static void rt1318_sdw_remove(struct sdw_slave *slave)
{
pm_runtime_disable(&slave->dev);
return 0;
}
static const struct sdw_device_id rt1318_id[] = {

View File

@@ -2950,14 +2950,12 @@ static int rt1320_sdw_probe(struct sdw_slave *slave,
return rt1320_sdw_init(&slave->dev, regmap, mbq_regmap, slave);
}
static int rt1320_sdw_remove(struct sdw_slave *slave)
static void rt1320_sdw_remove(struct sdw_slave *slave)
{
struct rt1320_sdw_priv *rt1320 = dev_get_drvdata(&slave->dev);
cancel_work_sync(&rt1320->load_dspfw_work);
pm_runtime_disable(&slave->dev);
return 0;
}
/*

View File

@@ -690,7 +690,7 @@ static int rt5682_sdw_probe(struct sdw_slave *slave,
return rt5682_sdw_init(&slave->dev, regmap, slave);
}
static int rt5682_sdw_remove(struct sdw_slave *slave)
static void rt5682_sdw_remove(struct sdw_slave *slave)
{
struct rt5682_priv *rt5682 = dev_get_drvdata(&slave->dev);
@@ -698,8 +698,6 @@ static int rt5682_sdw_remove(struct sdw_slave *slave)
cancel_delayed_work_sync(&rt5682->jack_detect_work);
pm_runtime_disable(&slave->dev);
return 0;
}
static const struct sdw_device_id rt5682_id[] = {

View File

@@ -455,7 +455,7 @@ static int rt700_sdw_probe(struct sdw_slave *slave,
return rt700_init(&slave->dev, sdw_regmap, regmap, slave);
}
static int rt700_sdw_remove(struct sdw_slave *slave)
static void rt700_sdw_remove(struct sdw_slave *slave)
{
struct rt700_priv *rt700 = dev_get_drvdata(&slave->dev);
@@ -465,8 +465,6 @@ static int rt700_sdw_remove(struct sdw_slave *slave)
}
pm_runtime_disable(&slave->dev);
return 0;
}
static const struct sdw_device_id rt700_id[] = {

View File

@@ -365,7 +365,7 @@ static int rt711_sdca_sdw_probe(struct sdw_slave *slave,
return rt711_sdca_init(&slave->dev, regmap, mbq_regmap, slave);
}
static int rt711_sdca_sdw_remove(struct sdw_slave *slave)
static void rt711_sdca_sdw_remove(struct sdw_slave *slave)
{
struct rt711_sdca_priv *rt711 = dev_get_drvdata(&slave->dev);
@@ -378,8 +378,6 @@ static int rt711_sdca_sdw_remove(struct sdw_slave *slave)
mutex_destroy(&rt711->calibrate_mutex);
mutex_destroy(&rt711->disable_irq_lock);
return 0;
}
static const struct sdw_device_id rt711_sdca_id[] = {

View File

@@ -458,7 +458,7 @@ static int rt711_sdw_probe(struct sdw_slave *slave,
return rt711_init(&slave->dev, sdw_regmap, regmap, slave);
}
static int rt711_sdw_remove(struct sdw_slave *slave)
static void rt711_sdw_remove(struct sdw_slave *slave)
{
struct rt711_priv *rt711 = dev_get_drvdata(&slave->dev);
@@ -472,8 +472,6 @@ static int rt711_sdw_remove(struct sdw_slave *slave)
mutex_destroy(&rt711->calibrate_mutex);
mutex_destroy(&rt711->disable_irq_lock);
return 0;
}
static const struct sdw_device_id rt711_id[] = {

View File

@@ -960,11 +960,9 @@ static int rt712_sdca_dmic_sdw_probe(struct sdw_slave *slave,
return rt712_sdca_dmic_init(&slave->dev, regmap, mbq_regmap, slave);
}
static int rt712_sdca_dmic_sdw_remove(struct sdw_slave *slave)
static void rt712_sdca_dmic_sdw_remove(struct sdw_slave *slave)
{
pm_runtime_disable(&slave->dev);
return 0;
}
static struct sdw_driver rt712_sdca_dmic_sdw_driver = {

View File

@@ -374,7 +374,7 @@ static int rt712_sdca_sdw_probe(struct sdw_slave *slave,
return rt712_sdca_init(&slave->dev, regmap, mbq_regmap, slave);
}
static int rt712_sdca_sdw_remove(struct sdw_slave *slave)
static void rt712_sdca_sdw_remove(struct sdw_slave *slave)
{
struct rt712_sdca_priv *rt712 = dev_get_drvdata(&slave->dev);
@@ -387,8 +387,6 @@ static int rt712_sdca_sdw_remove(struct sdw_slave *slave)
mutex_destroy(&rt712->calibrate_mutex);
mutex_destroy(&rt712->disable_irq_lock);
return 0;
}
static const struct sdw_device_id rt712_sdca_id[] = {

View File

@@ -191,11 +191,9 @@ static int rt715_sdca_sdw_probe(struct sdw_slave *slave,
return rt715_sdca_init(&slave->dev, mbq_regmap, regmap, slave);
}
static int rt715_sdca_sdw_remove(struct sdw_slave *slave)
static void rt715_sdca_sdw_remove(struct sdw_slave *slave)
{
pm_runtime_disable(&slave->dev);
return 0;
}
static const struct sdw_device_id rt715_sdca_id[] = {

View File

@@ -471,11 +471,9 @@ static int rt715_sdw_probe(struct sdw_slave *slave,
return rt715_init(&slave->dev, sdw_regmap, regmap, slave);
}
static int rt715_sdw_remove(struct sdw_slave *slave)
static void rt715_sdw_remove(struct sdw_slave *slave)
{
pm_runtime_disable(&slave->dev);
return 0;
}
static const struct sdw_device_id rt715_id[] = {

View File

@@ -415,7 +415,7 @@ static int rt721_sdca_sdw_probe(struct sdw_slave *slave,
return rt721_sdca_init(&slave->dev, regmap, mbq_regmap, slave);
}
static int rt721_sdca_sdw_remove(struct sdw_slave *slave)
static void rt721_sdca_sdw_remove(struct sdw_slave *slave)
{
struct rt721_sdca_priv *rt721 = dev_get_drvdata(&slave->dev);
@@ -429,8 +429,6 @@ static int rt721_sdca_sdw_remove(struct sdw_slave *slave)
mutex_destroy(&rt721->calibrate_mutex);
mutex_destroy(&rt721->disable_irq_lock);
return 0;
}
static const struct sdw_device_id rt721_sdca_id[] = {

View File

@@ -428,7 +428,7 @@ static int rt722_sdca_sdw_probe(struct sdw_slave *slave,
return rt722_sdca_init(&slave->dev, regmap, slave);
}
static int rt722_sdca_sdw_remove(struct sdw_slave *slave)
static void rt722_sdca_sdw_remove(struct sdw_slave *slave)
{
struct rt722_sdca_priv *rt722 = dev_get_drvdata(&slave->dev);
@@ -442,8 +442,6 @@ static int rt722_sdca_sdw_remove(struct sdw_slave *slave)
mutex_destroy(&rt722->calibrate_mutex);
mutex_destroy(&rt722->disable_irq_lock);
return 0;
}
static const struct sdw_device_id rt722_sdca_id[] = {

View File

@@ -1299,7 +1299,7 @@ static s32 tas_sdw_probe(struct sdw_slave *peripheral,
return tas_init(tas_dev);
}
static s32 tas_sdw_remove(struct sdw_slave *peripheral)
static void tas_sdw_remove(struct sdw_slave *peripheral)
{
struct tas2783_prv *tas_dev = dev_get_drvdata(&peripheral->dev);
@@ -1308,8 +1308,6 @@ static s32 tas_sdw_remove(struct sdw_slave *peripheral)
mutex_destroy(&tas_dev->calib_lock);
mutex_destroy(&tas_dev->pde_lock);
dev_set_drvdata(&peripheral->dev, NULL);
return 0;
}
static const struct sdw_device_id tas_sdw_id[] = {

View File

@@ -1056,13 +1056,11 @@ static int wcd9370_probe(struct sdw_slave *pdev,
return 0;
}
static int wcd9370_remove(struct sdw_slave *pdev)
static void wcd9370_remove(struct sdw_slave *pdev)
{
struct device *dev = &pdev->dev;
component_del(dev, &wcd_sdw_component_ops);
return 0;
}
static const struct sdw_device_id wcd9370_slave_id[] = {

View File

@@ -1217,13 +1217,11 @@ static int wcd9380_probe(struct sdw_slave *pdev,
return 0;
}
static int wcd9380_remove(struct sdw_slave *pdev)
static void wcd9380_remove(struct sdw_slave *pdev)
{
struct device *dev = &pdev->dev;
component_del(dev, &wcd_sdw_component_ops);
return 0;
}
static const struct sdw_device_id wcd9380_slave_id[] = {

View File

@@ -1403,13 +1403,11 @@ static int wcd9390_probe(struct sdw_slave *pdev, const struct sdw_device_id *id)
return 0;
}
static int wcd9390_remove(struct sdw_slave *pdev)
static void wcd9390_remove(struct sdw_slave *pdev)
{
struct device *dev = &pdev->dev;
component_del(dev, &wcd_sdw_component_ops);
return 0;
}
static const struct sdw_device_id wcd9390_slave_id[] = {