mirror of
https://github.com/torvalds/linux.git
synced 2026-09-25 21:21:09 -04:00
soundwire: fix initializing sysfs for same devices on different buses
If same devices with same device IDs are present on different soundwire
buses, the probe fails due to conflicting device names and sysfs
entries:
sysfs: cannot create duplicate filename '/bus/soundwire/devices/sdw:0:0217:0204:00:0'
The link ID is 0 for both devices, so they should be differentiated by
the controller ID. Add the controller ID so, the device names and sysfs entries look
like:
sdw:1:0:0217:0204:00:0 -> ../../../devices/platform/soc@0/6ab0000.soundwire-controller/sdw-master-1-0/sdw:1:0:0217:0204:00:0
sdw:3:0:0217:0204:00:0 -> ../../../devices/platform/soc@0/6b10000.soundwire-controller/sdw-master-3-0/sdw:3:0:0217:0204:00:0
[PLB changes: use bus->controller_id instead of bus->id]
Fixes: 7c3cd189b8 ("soundwire: Add Master registration")
Cc: [email protected]
Reviewed-by: Bard Liao <[email protected]>
Reviewed-by: Vijendar Mukunda <[email protected]>
Co-developed-by: Pierre-Louis Bossart <[email protected]>
Signed-off-by: Pierre-Louis Bossart <[email protected]>
Signed-off-by: Krzysztof Kozlowski <[email protected]>
Reviewed-by: Krzysztof Kozlowski <[email protected]>
Tested-by: Krzysztof Kozlowski <[email protected]>
Acked-by: Mark Brown <[email protected]>
Tested-by: Srinivas Kandagatla <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Vinod Koul <[email protected]>
This commit is contained in:
committed by
Vinod Koul
parent
6543ac13c6
commit
8a8a9ac8a4
@@ -39,14 +39,14 @@ int sdw_slave_add(struct sdw_bus *bus,
|
||||
slave->dev.fwnode = fwnode;
|
||||
|
||||
if (id->unique_id == SDW_IGNORED_UNIQUE_ID) {
|
||||
/* name shall be sdw:link:mfg:part:class */
|
||||
dev_set_name(&slave->dev, "sdw:%01x:%04x:%04x:%02x",
|
||||
bus->link_id, id->mfg_id, id->part_id,
|
||||
/* name shall be sdw:ctrl:link:mfg:part:class */
|
||||
dev_set_name(&slave->dev, "sdw:%01x:%01x:%04x:%04x:%02x",
|
||||
bus->controller_id, bus->link_id, id->mfg_id, id->part_id,
|
||||
id->class_id);
|
||||
} else {
|
||||
/* name shall be sdw:link:mfg:part:class:unique */
|
||||
dev_set_name(&slave->dev, "sdw:%01x:%04x:%04x:%02x:%01x",
|
||||
bus->link_id, id->mfg_id, id->part_id,
|
||||
/* name shall be sdw:ctrl:link:mfg:part:class:unique */
|
||||
dev_set_name(&slave->dev, "sdw:%01x:%01x:%04x:%04x:%02x:%01x",
|
||||
bus->controller_id, bus->link_id, id->mfg_id, id->part_id,
|
||||
id->class_id, id->unique_id);
|
||||
}
|
||||
|
||||
|
||||
@@ -1232,11 +1232,11 @@ static int fill_sdw_codec_dlc(struct device *dev,
|
||||
else if (is_unique_device(adr_link, sdw_version, mfg_id, part_id,
|
||||
class_id, adr_index))
|
||||
codec->name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"sdw:%01x:%04x:%04x:%02x", link_id,
|
||||
"sdw:0:%01x:%04x:%04x:%02x", link_id,
|
||||
mfg_id, part_id, class_id);
|
||||
else
|
||||
codec->name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"sdw:%01x:%04x:%04x:%02x:%01x", link_id,
|
||||
"sdw:0:%01x:%04x:%04x:%02x:%01x", link_id,
|
||||
mfg_id, part_id, class_id, unique_id);
|
||||
|
||||
if (!codec->name)
|
||||
|
||||
Reference in New Issue
Block a user