aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/greybus/audio_module.c
diff options
context:
space:
mode:
authorVaibhav Agarwal <vaibhav.agarwal@linaro.org>2016-05-04 16:29:22 +0530
committerGreg Kroah-Hartman <gregkh@google.com>2016-05-04 11:30:20 -0700
commitbb9986ef6b311fb3f4de2150bd050c1d9e1d9d65 (patch)
tree8e58b5be40065872b8df1346a5c5c2343fbda94c /drivers/staging/greybus/audio_module.c
parentgreybus: audio: Remove redundant lock protection & is_connected field (diff)
downloadlinux-dev-bb9986ef6b311fb3f4de2150bd050c1d9e1d9d65.tar.xz
linux-dev-bb9986ef6b311fb3f4de2150bd050c1d9e1d9d65.zip
greybus: audio: Reorganize sequence in GB audio bundle & codec driver
Modify sequence of register_module & unregister_module in bundle driver. This would affect the uevent generated for above user space. Accordingly, we need to modify snd_soc_xxx sequence in register_module() in codec driver. Signed-off-by: Vaibhav Agarwal <vaibhav.agarwal@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'drivers/staging/greybus/audio_module.c')
-rw-r--r--drivers/staging/greybus/audio_module.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/staging/greybus/audio_module.c b/drivers/staging/greybus/audio_module.c
index 3b763710ddf6..27e5ff19dca6 100644
--- a/drivers/staging/greybus/audio_module.c
+++ b/drivers/staging/greybus/audio_module.c
@@ -308,18 +308,22 @@ static int gb_audio_probe(struct gb_bundle *bundle,
}
gbmodule->topology = topology;
- /* register module with gbcodec */
- ret = gbaudio_register_module(gbmodule);
- if (ret)
- goto release_topology;
-
/* Initialize data connections */
list_for_each_entry(dai, &gbmodule->data_list, list) {
ret = gb_connection_enable(dai->connection);
- if (ret)
+ if (ret) {
+ dev_err(dev,
+ "%d:Error while enabling %d:data connection\n",
+ ret, dai->data_cport);
goto disable_data_connection;
+ }
}
+ /* register module with gbcodec */
+ ret = gbaudio_register_module(gbmodule);
+ if (ret)
+ goto disable_data_connection;
+
/* inform above layer for uevent */
dev_dbg(dev, "Inform set_event:%d to above layer\n", 1);
/* prepare for the audio manager */
@@ -339,9 +343,6 @@ static int gb_audio_probe(struct gb_bundle *bundle,
disable_data_connection:
list_for_each_entry_safe(dai, _dai, &gbmodule->data_list, list)
gb_connection_disable(dai->connection);
- gbaudio_unregister_module(gbmodule);
-
-release_topology:
gbaudio_tplg_release(gbmodule);
gbmodule->topology = NULL;
@@ -371,11 +372,11 @@ static void gb_audio_disconnect(struct gb_bundle *bundle)
struct gbaudio_module_info *gbmodule = greybus_get_drvdata(bundle);
struct gbaudio_data_connection *dai, *_dai;
- gbaudio_unregister_module(gbmodule);
/* inform uevent to above layers */
gb_audio_manager_remove(gbmodule->manager_id);
+ gbaudio_unregister_module(gbmodule);
gbaudio_tplg_release(gbmodule);
gbmodule->topology = NULL;
kfree(gbmodule->topology);