Commit 83ec6283 authored by Vaibhav Agarwal's avatar Vaibhav Agarwal Committed by Greg Kroah-Hartman

greybus: audio: Enable codec module detection on different slots

driver_name associated with dev_name was hard coded earlier.
This limits, audio codec module to be detected on Port#5 only.

Now, driver_name is generated dynamically based on dev_name.
This enables codec module detection on any 1x2 slot.

Also, Update dev_id based on slot number, instead of bundle->id.
bundle->id is not unique for multiple modules added, thus now
using slot number for unique identification.
Signed-off-by: default avatarVaibhav Agarwal <vaibhav.agarwal@linaro.org>
Signed-off-by: default avatarMark Greer <mgreer@animalcreek.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 25de3491
...@@ -575,7 +575,6 @@ static void gbaudio_free_codec(struct device *dev, ...@@ -575,7 +575,6 @@ static void gbaudio_free_codec(struct device *dev,
* GB codec module driver ops * GB codec module driver ops
*/ */
struct device_driver gb_codec_driver = { struct device_driver gb_codec_driver = {
.name = "1-8",
.owner = THIS_MODULE, .owner = THIS_MODULE,
}; };
...@@ -626,11 +625,12 @@ static void gb_audio_cleanup(struct gbaudio_codec_info *gb) ...@@ -626,11 +625,12 @@ static void gb_audio_cleanup(struct gbaudio_codec_info *gb)
static int gbaudio_codec_probe(struct gb_connection *connection) static int gbaudio_codec_probe(struct gb_connection *connection)
{ {
int ret, i; int ret, i;
char *driver_name;
struct gbaudio_codec_info *gbcodec; struct gbaudio_codec_info *gbcodec;
struct gb_audio_topology *topology; struct gb_audio_topology *topology;
struct gb_audio_manager_module_descriptor desc; struct gb_audio_manager_module_descriptor desc;
struct device *dev = &connection->bundle->dev; struct device *dev = &connection->bundle->dev;
int dev_id = connection->bundle->id; int dev_id = connection->intf->interface_id;
dev_dbg(dev, "Add device:%d:%s\n", dev_id, dev_name(dev)); dev_dbg(dev, "Add device:%d:%s\n", dev_id, dev_name(dev));
/* get gbcodec data */ /* get gbcodec data */
...@@ -670,6 +670,10 @@ static int gbaudio_codec_probe(struct gb_connection *connection) ...@@ -670,6 +670,10 @@ static int gbaudio_codec_probe(struct gb_connection *connection)
gbcodec->dais[i].ops = &gbcodec_dai_ops; gbcodec->dais[i].ops = &gbcodec_dai_ops;
/* FIXME */ /* FIXME */
driver_name = devm_kzalloc(dev, NAME_SIZE, GFP_KERNEL);
strlcpy(driver_name, gbcodec->name, NAME_SIZE);
gb_codec_driver.name = strsep(&driver_name, ".");
dev_dbg(dev, "driver.name:%s\n", gb_codec_driver.name);
dev->driver = &gb_codec_driver; dev->driver = &gb_codec_driver;
/* register codec */ /* register codec */
...@@ -730,7 +734,7 @@ static void gbaudio_codec_remove(struct gb_connection *connection) ...@@ -730,7 +734,7 @@ static void gbaudio_codec_remove(struct gb_connection *connection)
{ {
struct gbaudio_codec_info *gbcodec; struct gbaudio_codec_info *gbcodec;
struct device *dev = &connection->bundle->dev; struct device *dev = &connection->bundle->dev;
int dev_id = connection->bundle->id; int dev_id = connection->intf->interface_id;
dev_dbg(dev, "Remove device:%d:%s\n", dev_id, dev_name(dev)); dev_dbg(dev, "Remove device:%d:%s\n", dev_id, dev_name(dev));
...@@ -795,7 +799,7 @@ static int gbaudio_dai_probe(struct gb_connection *connection) ...@@ -795,7 +799,7 @@ static int gbaudio_dai_probe(struct gb_connection *connection)
{ {
struct gbaudio_dai *dai; struct gbaudio_dai *dai;
struct device *dev = &connection->bundle->dev; struct device *dev = &connection->bundle->dev;
int dev_id = connection->bundle->id; int dev_id = connection->intf->interface_id;
struct gbaudio_codec_info *gbcodec = dev_get_drvdata(dev); struct gbaudio_codec_info *gbcodec = dev_get_drvdata(dev);
struct gb_audio_manager_module_descriptor desc; struct gb_audio_manager_module_descriptor desc;
...@@ -839,7 +843,7 @@ static int gbaudio_dai_probe(struct gb_connection *connection) ...@@ -839,7 +843,7 @@ static int gbaudio_dai_probe(struct gb_connection *connection)
static void gbaudio_dai_remove(struct gb_connection *connection) static void gbaudio_dai_remove(struct gb_connection *connection)
{ {
struct device *dev = &connection->bundle->dev; struct device *dev = &connection->bundle->dev;
int dev_id = connection->bundle->id; int dev_id = connection->intf->interface_id;
struct gbaudio_codec_info *gbcodec; struct gbaudio_codec_info *gbcodec;
dev_dbg(dev, "Remove DAI device:%d:%s\n", dev_id, dev_name(dev)); dev_dbg(dev, "Remove DAI device:%d:%s\n", dev_id, dev_name(dev));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment