mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00: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: stable@vger.kernel.org
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
Co-developed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Tested-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Acked-by: Mark Brown <broonie@kernel.org>
Tested-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20231017160933.12624-3-pierre-louis.bossart@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
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)
|
||||
|
Loading…
Reference in New Issue
Block a user