Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 68a74ec4 authored by Benoit Goby's avatar Benoit Goby Committed by Android Git Automerger
Browse files

am 6ddabb7a: Merge "adbd: Don\'t close/reopen FFS ep0 on disconnect"

* commit '6ddabb7a':
  adbd: Don't close/reopen FFS ep0 on disconnect
parents 9b16f7db 6ddabb7a
Loading
Loading
Loading
Loading
+24 −19
Original line number Diff line number Diff line
@@ -264,6 +264,7 @@ static void init_functionfs(struct usb_handle *h)
{
    ssize_t ret;

    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) {
@@ -282,6 +283,7 @@ static void init_functionfs(struct usb_handle *h)
            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) {
@@ -320,14 +322,14 @@ static void *usb_ffs_open_thread(void *x)
    while (1) {
        // wait until the USB device needs opening
        adb_mutex_lock(&usb->lock);
        while (usb->control != -1)
        while (usb->control != -1 && usb->bulk_in != -1 && usb->bulk_out != -1)
            adb_cond_wait(&usb->notify, &usb->lock);
        adb_mutex_unlock(&usb->lock);

        while (1) {
            init_functionfs(usb);

            if (usb->control >= 0)
            if (usb->control >= 0 && usb->bulk_in >= 0 && usb->bulk_out >= 0)
                break;

            adb_sleep_ms(1000);
@@ -424,10 +426,13 @@ 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);
    adb_close(h->control);

    // 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->bulk_out);
    adb_close(h->bulk_in);
    h->control = h->bulk_out = h->bulk_in = -1;
    h->bulk_out = h->bulk_in = -1;

    // notify usb_ffs_open_thread that we are disconnected
    adb_cond_signal(&h->notify);