hal: route to speaker, when USB HS is unplugged
When USB headset is disconnected the music platback paused
and the policy manager send routing=0. If USB headset is
connected before the standby time, AFE is not closed and opened,
so routing to speker will guarantee AFE reconfiguration and
AFE will be opend once USB is connected again, within standby
time.
CRs-fixed: 2219129
Change-Id: I69985dda312de34e2c86c85ac448a722f7f31f42
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index f1f45c0..16ed14b 100755
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -222,6 +222,7 @@
#define audio_extn_usb_get_sup_sample_rates(t, s, l) (0)
#define audio_extn_usb_is_tunnel_supported() (0)
#define audio_extn_usb_alive(adev) (false)
+#define audio_extn_usb_connected(parms) (0)
#else
void audio_extn_usb_init(void *adev);
void audio_extn_usb_deinit();
@@ -240,6 +241,7 @@
int audio_extn_usb_get_sup_sample_rates(int type, uint32_t *sr, uint32_t l);
bool audio_extn_usb_is_tunnel_supported();
bool audio_extn_usb_alive(int card);
+bool audio_extn_usb_connected(struct str_parms *parms);
#endif
#ifndef SPLIT_A2DP_ENABLED
diff --git a/hal/audio_extn/usb.c b/hal/audio_extn/usb.c
index 8766c0e..2af255b 100644
--- a/hal/audio_extn/usb.c
+++ b/hal/audio_extn/usb.c
@@ -1151,6 +1151,26 @@
return access(path, F_OK) == 0;
}
+bool audio_extn_usb_connected(struct str_parms *parms) {
+ int card;
+ struct listnode *node_i;
+ struct usb_card_config *usb_card_info;
+ bool usb_connected = false;
+
+ if (str_parms_get_int(parms, "card", &card) >= 0) {
+ usb_connected = audio_extn_usb_alive(card);
+ } else {
+ list_for_each(node_i, &usbmod->usb_card_conf_list) {
+ usb_card_info = node_to_item(node_i, struct usb_card_config, list);
+ if (audio_extn_usb_alive(usb_card_info->usb_card)) {
+ usb_connected = true;
+ break;
+ }
+ }
+ }
+ return usb_connected;
+}
+
void audio_extn_usb_init(void *adev)
{
if (usbmod == NULL) {
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index db04b5a..27a1670 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -3648,6 +3648,18 @@
!audio_extn_a2dp_is_ready()) {
val = AUDIO_DEVICE_OUT_SPEAKER;
}
+ /*
+ * When USB headset is disconnected the music platback paused
+ * and the policy manager send routing=0. But if the USB is connected
+ * back before the standby time, AFE is not closed and opened
+ * when USB is connected back. So routing to speker will guarantee
+ * AFE reconfiguration and AFE will be opend once USB is connected again
+ */
+ if ((out->devices & AUDIO_DEVICE_OUT_ALL_USB) &&
+ (val == AUDIO_DEVICE_NONE) &&
+ !audio_extn_usb_connected(parms)) {
+ val = AUDIO_DEVICE_OUT_SPEAKER;
+ }
/* To avoid a2dp to sco overlapping / BT device improper state
* check with BT lib about a2dp streaming support before routing
*/