diff options
author | Bard Liao <yung-chuan.liao@linux.intel.com> | 2020-05-18 20:43:20 +0300 |
---|---|---|
committer | Vinod Koul <vkoul@kernel.org> | 2020-05-19 10:14:34 +0300 |
commit | dbb50c7a9949506f750d59d9ba4d58f0ce8ccd42 (patch) | |
tree | bb90832d6b45d9f2bbafd40e8cbf7ee11f529eef /drivers/soundwire | |
parent | 90acca1d54ad566b4af5f1030b4a4a2420ce2ef0 (diff) | |
download | linux-dbb50c7a9949506f750d59d9ba4d58f0ce8ccd42.tar.xz |
soundwire: bus: add unique bus id
Adding an unique id for each bus.
Suggested-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Acked-by: Jaroslav Kysela <perex@perex.cz>
Link: https://lore.kernel.org/r/20200518174322.31561-4-yung-chuan.liao@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Diffstat (limited to 'drivers/soundwire')
-rw-r--r-- | drivers/soundwire/bus.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/soundwire/bus.c b/drivers/soundwire/bus.c index a8072791d6b8..03d72fa3c190 100644 --- a/drivers/soundwire/bus.c +++ b/drivers/soundwire/bus.c @@ -9,6 +9,19 @@ #include <linux/soundwire/sdw.h> #include "bus.h" +static DEFINE_IDA(sdw_ida); + +static int sdw_get_id(struct sdw_bus *bus) +{ + int rc = ida_alloc(&sdw_ida, GFP_KERNEL); + + if (rc < 0) + return rc; + + bus->id = rc; + return 0; +} + /** * sdw_bus_master_add() - add a bus Master instance * @bus: bus instance @@ -29,6 +42,12 @@ int sdw_bus_master_add(struct sdw_bus *bus, struct device *parent, return -ENODEV; } + ret = sdw_get_id(bus); + if (ret) { + dev_err(bus->dev, "Failed to get bus id\n"); + return ret; + } + if (!bus->ops) { dev_err(bus->dev, "SoundWire Bus ops are not set\n"); return -EINVAL; @@ -144,6 +163,7 @@ void sdw_bus_master_delete(struct sdw_bus *bus) device_for_each_child(bus->dev, NULL, sdw_delete_slave); sdw_bus_debugfs_exit(bus); + ida_free(&sdw_ida, bus->id); } EXPORT_SYMBOL(sdw_bus_master_delete); |