hal: replace with a proper usb detection method
If USB is not the first sink, audioflinger stream setParam won't pass
usb card info as a part of routing parameter. Hence, the usb check
method which relies on card info is useless. Replace with
usb_connected() that enumerates all usb card.
CRs-Fixed: 2648183
Change-Id: Ic3f2ebeb0f9db11a7fe4d7c2bd4136f6db0497aa
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index fa60f4d..c3d7190 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -4459,15 +4459,6 @@
return;
}
-static int get_alive_usb_card(struct str_parms* parms) {
- int card;
- if ((str_parms_get_int(parms, "card", &card) >= 0) &&
- !audio_extn_usb_alive(card)) {
- return card;
- }
- return -ENODEV;
-}
-
static int out_set_parameters(struct audio_stream *stream, const char *kvpairs)
{
struct stream_out *out = (struct stream_out *)stream;
@@ -4517,7 +4508,7 @@
val = AUDIO_DEVICE_OUT_SPEAKER;
}
/*
- * When USB headset is disconnected the music platback paused
+ * When USB headset is disconnected the music playback 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
@@ -4525,7 +4516,7 @@
*/
if ((out->devices & AUDIO_DEVICE_OUT_ALL_USB) &&
(val == AUDIO_DEVICE_NONE) &&
- !audio_extn_usb_connected(parms)) {
+ !audio_extn_usb_connected(NULL)) {
val = AUDIO_DEVICE_OUT_SPEAKER;
}
/* To avoid a2dp to sco overlapping / BT device improper state
@@ -4556,11 +4547,10 @@
// Workaround: If routing to an non existing usb device, fail gracefully
// The routing request will otherwise block during 10 second
- int card;
- if (audio_is_usb_out_device(new_dev) &&
- (card = get_alive_usb_card(parms)) >= 0) {
+ if ((new_dev & AUDIO_DEVICE_OUT_ALL_USB) &&
+ !audio_extn_usb_connected(NULL)) {
- ALOGW("out_set_parameters() ignoring rerouting to non existing USB card %d", card);
+ ALOGW("out_set_parameters() ignoring rerouting to non existing USB card");
pthread_mutex_unlock(&adev->lock);
pthread_mutex_unlock(&out->lock);
ret = -ENOSYS;
@@ -5473,6 +5463,12 @@
}
}
+ if ((out->devices & AUDIO_DEVICE_OUT_ALL_USB) &&
+ !audio_extn_usb_connected(NULL)) {
+ ret = -EIO;
+ goto exit;
+ }
+
if (out->standby) {
out->standby = false;
pthread_mutex_lock(&adev->lock);
@@ -6447,11 +6443,9 @@
// Workaround: If routing to an non existing usb device, fail gracefully
// The routing request will otherwise block during 10 second
- int card;
if (audio_is_usb_in_device(val) &&
- (card = get_alive_usb_card(parms)) >= 0) {
-
- ALOGW("in_set_parameters() ignoring rerouting to non existing USB card %d", card);
+ !audio_extn_usb_connected(NULL)) {
+ ALOGW("in_set_parameters() ignoring rerouting to non existing USB");
ret = -ENOSYS;
} else {