OSDN Git Service

usb: gadget: f_accessory: Fix for UsbAccessory clean unbind.
authorAnson Jacob <ansonjacob.aj@gmail.com>
Sat, 13 Aug 2016 00:38:10 +0000 (20:38 -0400)
committerDmitry Shmidt <dimitrysh@google.com>
Mon, 13 Mar 2017 18:02:03 +0000 (18:02 +0000)
commitf52e71a12e80643225e7b6faf9b4dc171229af39
tree94bee038da5aba6cf9d331ed821673c46cf04593
parent210bb28de0e68f063336cc5bb11ab0f4af4ffc02
usb: gadget: f_accessory: Fix for UsbAccessory clean unbind.

Reapplying fix by Darren Whobrey (Change 69674)

Fixes issues: 20545, 59667 and 61390.
With prior version of f_accessory.c, UsbAccessories would not
unbind cleanly when application is closed or i/o stopped
while the usb cable is still connected. The accessory gadget
driver would be left in an invalid state which was not reset
on subsequent binding or opening. A reboot was necessary to clear.

In some phones this issues causes the phone to reboot upon
unplugging the USB cable.

Main problem was that acc_disconnect was being called on I/O error
which reset disconnected and online.

Minor fix required to properly track setting and unsetting of
disconnected and online flags. Also added urb Q wakeup's on unbind
to help unblock waiting threads.

Tested on Nexus 7 grouper. Expected behaviour now observed:
closing accessory causes blocked i/o to interrupt with IOException.
Accessory can be restarted following closing of file handle
and re-opening.

This is a generic fix that applies to all devices.

Change-Id: I4e08b326730dd3a2820c863124cee10f7cb5501e
Signed-off-by: Darren Whobrey <d.whobrey@mildai.org>
Signed-off-by: Anson Jacob <ansonjacob.aj@gmail.com>
drivers/usb/gadget/function/f_accessory.c