summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHsin-Yu Chao <hychao@chromium.org>2017-02-09 16:21:27 +0800
committerchrome-bot <chrome-bot@chromium.org>2017-02-11 09:26:24 -0800
commitaf4f8e93d83c0220c8b3700111ae70d545d6b67b (patch)
treed64c0884f8d2828df8ae5c50f7cb10f5a14f7f40
parent825b11343233267b67b15bbea7b399675036a824 (diff)
downloadadhd-af4f8e93d83c0220c8b3700111ae70d545d6b67b.tar.gz
CRAS: bt_device - Handle SCO socket error case
BT headset could send SCO Interval Rejected (0x1c) command right after SCO connection established when switches to HFP/HSP. Handle this error by checking the revent code of ppoll and suspend this bt device so user has a chance to re-connect it. BUG=chrome-os-partner:59015 TEST=Manual test MDR-XB950BT headset switch from A2DP to HFP, disconnect and reconnect a few times to verify that headset won't fall into the state that stay connected but not working. Change-Id: I6d16ddcea1608f024b5bd0780941d1f17db5de75 Reviewed-on: https://chromium-review.googlesource.com/440048 Commit-Ready: Hsinyu Chao <hychao@chromium.org> Tested-by: Hsinyu Chao <hychao@chromium.org> Reviewed-by: Cheng-Yi Chiang <cychiang@chromium.org>
-rw-r--r--cras/src/server/cras_bt_device.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/cras/src/server/cras_bt_device.c b/cras/src/server/cras_bt_device.c
index 353c2938..682edba4 100644
--- a/cras/src/server/cras_bt_device.c
+++ b/cras/src/server/cras_bt_device.c
@@ -863,6 +863,13 @@ int cras_bt_device_sco_connect(struct cras_bt_device *device)
goto error;
}
+ if (pollfds[0].revents & (POLLERR | POLLHUP)) {
+ syslog(LOG_ERR, "SCO socket error, revents: %u",
+ pollfds[0].revents);
+ bt_device_schedule_suspend(device, 0);
+ goto error;
+ }
+
return sk;
error: