diff --git a/arch/arm/mach-msm/qdsp6_1550/q6audio.c b/arch/arm/mach-msm/qdsp6_1550/q6audio.c index bd0d7e0e..a972b97d 100644 --- a/arch/arm/mach-msm/qdsp6_1550/q6audio.c +++ b/arch/arm/mach-msm/qdsp6_1550/q6audio.c @@ -1564,9 +1564,9 @@ static void _audio_rx_path_enable(int reconf, uint32_t acdb_id) adie_proceed_to_stage(adie, ADIE_PATH_RX, ADIE_STAGE_DIGITAL_READY); adie_proceed_to_stage(adie, ADIE_PATH_RX, ADIE_STAGE_DIGITAL_ANALOG_READY); + audio_update_acdb(audio_rx_device_id, acdb_id); if (!reconf) qdsp6_devchg_notify(ac_control, ADSP_AUDIO_RX_DEVICE, audio_rx_device_id); - audio_update_acdb(audio_rx_device_id, acdb_id); qdsp6_standby(ac_control); qdsp6_start(ac_control); @@ -1591,9 +1591,10 @@ static void _audio_tx_path_enable(int reconf, uint32_t acdb_id) adie_proceed_to_stage(adie, ADIE_PATH_TX, ADIE_STAGE_DIGITAL_READY); adie_proceed_to_stage(adie, ADIE_PATH_TX, ADIE_STAGE_DIGITAL_ANALOG_READY); + audio_update_acdb(audio_tx_device_id, acdb_id); + if (!reconf) qdsp6_devchg_notify(ac_control, ADSP_AUDIO_TX_DEVICE, audio_tx_device_id); - audio_update_acdb(audio_tx_device_id, acdb_id); qdsp6_standby(ac_control); qdsp6_start(ac_control); @@ -1899,15 +1900,14 @@ int q6audio_update_acdb(uint32_t id_src, uint32_t id_dst) return 0; mutex_lock(&audio_path_lock); + res = audio_update_acdb(id_dst, id_src); + if (res) + goto done; if (q6_device_to_dir(id_dst) == Q6_RX) qdsp6_devchg_notify(ac_control, ADSP_AUDIO_RX_DEVICE, id_dst); else qdsp6_devchg_notify(ac_control, ADSP_AUDIO_TX_DEVICE, id_dst); - res = audio_update_acdb(id_dst, id_src); - if (res) - goto done; - qdsp6_standby(ac_control); qdsp6_start(ac_control); done: @@ -2054,8 +2054,8 @@ static void do_rx_routing(uint32_t device_id, uint32_t acdb_id) AUDIO_INFO("%s\n", __func__); if (device_id == audio_rx_device_id) { if (acdb_id != rx_acdb) { - qdsp6_devchg_notify(ac_control, ADSP_AUDIO_RX_DEVICE, device_id); audio_update_acdb(device_id, acdb_id); + qdsp6_devchg_notify(ac_control, ADSP_AUDIO_RX_DEVICE, device_id); qdsp6_standby(ac_control); qdsp6_start(ac_control); } @@ -2078,8 +2078,8 @@ static void do_tx_routing(uint32_t device_id, uint32_t acdb_id) AUDIO_INFO("%s\n", __func__); if (device_id == audio_tx_device_id) { if (acdb_id != tx_acdb) { - qdsp6_devchg_notify(ac_control, ADSP_AUDIO_TX_DEVICE, device_id); audio_update_acdb(device_id, acdb_id); + qdsp6_devchg_notify(ac_control, ADSP_AUDIO_TX_DEVICE, device_id); qdsp6_standby(ac_control); qdsp6_start(ac_control); }