summaryrefslogtreecommitdiffstats
path: root/adb
diff options
context:
space:
mode:
authorMayank Rana <mrana@codeaurora.org>2015-10-26 12:38:45 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2015-10-26 14:48:44 -0700
commitd2ea2dace4b95b2efe741700742edb27e8f9cb78 (patch)
tree5f9b133ceb8ec792854aee9dfc236efdac4250d1 /adb
parentf10412c2d00547b82d26461c71a032d083562e5d (diff)
downloadsystem_core-d2ea2dace4b95b2efe741700742edb27e8f9cb78.zip
system_core-d2ea2dace4b95b2efe741700742edb27e8f9cb78.tar.gz
system_core-d2ea2dace4b95b2efe741700742edb27e8f9cb78.tar.bz2
Revert "adbd: Don't close/reopen FFS ep0 on disconnect"
This reverts commit b5d385f1ef38ad0c163598c3a4e167d4ae9df3c6. Commit b5d385f "adbd: Don't close/reopen FFS ep0 on disconnect" fixes USBCV chapter 9 failures due to re-enumeration as part of reopening FFS ep0 handle. This was done from usb_kick function which gets invoked whenever adb read/write fails. But, not allowing USB re-enumeration on real IO failures results in adb to go offline and only way to recover is by re-connecting USB cable. As ADB function is used for debugging and USBCV tests are not mandatory, hence, revert original change to allow USB enumeration on any read/write failures. CRs-fixed: 689512 Change-Id: Ic0b38223761b7c0eb3e2c54328e88010297318fb
Diffstat (limited to 'adb')
-rw-r--r--adb/usb_linux_client.cpp59
1 files changed, 27 insertions, 32 deletions
diff --git a/adb/usb_linux_client.cpp b/adb/usb_linux_client.cpp
index f3db346..44df695 100644
--- a/adb/usb_linux_client.cpp
+++ b/adb/usb_linux_client.cpp
@@ -333,37 +333,35 @@ static void init_functionfs(struct usb_handle *h)
v2_descriptor.hs_descs = hs_descriptors;
v2_descriptor.ss_descs = ss_descriptors;
- if (h->control < 0) { // might have already done this before
- D("OPENING %s\n", USB_FFS_ADB_EP0);
- h->control = adb_open(USB_FFS_ADB_EP0, O_RDWR);
- if (h->control < 0) {
- D("[ %s: cannot open control endpoint: errno=%d]\n", USB_FFS_ADB_EP0, errno);
- goto err;
- }
-
- ret = adb_write(h->control, &v2_descriptor, sizeof(v2_descriptor));
- if (ret < 0) {
- v1_descriptor.header.magic = cpu_to_le32(FUNCTIONFS_DESCRIPTORS_MAGIC);
- v1_descriptor.header.length = cpu_to_le32(sizeof(v1_descriptor));
- v1_descriptor.header.fs_count = 3;
- v1_descriptor.header.hs_count = 3;
- v1_descriptor.fs_descs = fs_descriptors;
- v1_descriptor.hs_descs = hs_descriptors;
- D("[ %s: Switching to V1_descriptor format errno=%d ]\n", USB_FFS_ADB_EP0, errno);
- ret = adb_write(h->control, &v1_descriptor, sizeof(v1_descriptor));
- if (ret < 0) {
- D("[ %s: write descriptors failed: errno=%d ]\n", USB_FFS_ADB_EP0, errno);
- goto err;
- }
- }
+ D("OPENING %s\n", USB_FFS_ADB_EP0);
+ h->control = adb_open(USB_FFS_ADB_EP0, O_RDWR);
+ if (h->control < 0) {
+ D("[ %s: cannot open control endpoint: errno=%d]\n", USB_FFS_ADB_EP0, errno);
+ goto err;
+ }
- ret = adb_write(h->control, &strings, sizeof(strings));
+ ret = adb_write(h->control, &v2_descriptor, sizeof(v2_descriptor));
+ if (ret < 0) {
+ v1_descriptor.header.magic = cpu_to_le32(FUNCTIONFS_DESCRIPTORS_MAGIC);
+ v1_descriptor.header.length = cpu_to_le32(sizeof(v1_descriptor));
+ v1_descriptor.header.fs_count = 3;
+ v1_descriptor.header.hs_count = 3;
+ v1_descriptor.fs_descs = fs_descriptors;
+ v1_descriptor.hs_descs = hs_descriptors;
+ D("[ %s: Switching to V1_descriptor format errno=%d ]\n", USB_FFS_ADB_EP0, errno);
+ ret = adb_write(h->control, &v1_descriptor, sizeof(v1_descriptor));
if (ret < 0) {
- D("[ %s: writing strings failed: errno=%d]\n", USB_FFS_ADB_EP0, errno);
+ D("[ %s: write descriptors failed: errno=%d ]\n", USB_FFS_ADB_EP0, errno);
goto err;
}
}
+ ret = adb_write(h->control, &strings, sizeof(strings));
+ if (ret < 0) {
+ D("[ %s: writing strings failed: errno=%d]\n", USB_FFS_ADB_EP0, errno);
+ goto err;
+ }
+
h->bulk_out = adb_open(USB_FFS_ADB_OUT, O_RDWR);
if (h->bulk_out < 0) {
D("[ %s: cannot open bulk-out ep: errno=%d ]\n", USB_FFS_ADB_OUT, errno);
@@ -401,14 +399,14 @@ static void *usb_ffs_open_thread(void *x)
while (true) {
// wait until the USB device needs opening
adb_mutex_lock(&usb->lock);
- while (usb->control != -1 && usb->bulk_in != -1 && usb->bulk_out != -1)
+ while (usb->control != -1)
adb_cond_wait(&usb->notify, &usb->lock);
adb_mutex_unlock(&usb->lock);
while (true) {
init_functionfs(usb);
- if (usb->control >= 0 && usb->bulk_in >= 0 && usb->bulk_out >= 0)
+ if (usb->control >= 0)
break;
adb_sleep_ms(1000);
@@ -500,13 +498,10 @@ static void usb_ffs_kick(usb_handle *h)
D("[ kick: sink (fd=%d) clear halt failed (%d) ]", h->bulk_out, errno);
adb_mutex_lock(&h->lock);
-
- // don't close ep0 here, since we may not need to reinitialize it with
- // the same descriptors again. if however ep1/ep2 fail to re-open in
- // init_functionfs, only then would we close and open ep0 again.
+ adb_close(h->control);
adb_close(h->bulk_out);
adb_close(h->bulk_in);
- h->bulk_out = h->bulk_in = -1;
+ h->control = h->bulk_out = h->bulk_in = -1;
// notify usb_ffs_open_thread that we are disconnected
adb_cond_signal(&h->notify);