summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Lockwood <lockwood@android.com>2011-03-29 16:49:42 -0700
committerMike Lockwood <lockwood@android.com>2011-03-29 16:59:38 -0700
commit4f0f3561edfdcdff0ac90f0ea26c64cb16efe643 (patch)
tree65e7ad51c855f4c036702f7809dc315a66315cca
parent7661dd8de10d2400cedc421358c4261556b2b5c8 (diff)
downloadframeworks_base-4f0f3561edfdcdff0ac90f0ea26c64cb16efe643.zip
frameworks_base-4f0f3561edfdcdff0ac90f0ea26c64cb16efe643.tar.gz
frameworks_base-4f0f3561edfdcdff0ac90f0ea26c64cb16efe643.tar.bz2
UsbService: Make USB disconnect handling for accessory mode more robust
Handle the case where the kernel driver is in accessory mode but we failed to initialize it at the framework level. On disconnnect, check to see if the accessory kernel driver is enabled rather than checking mCurrentAccessory. That way we will restore the USB state in the kernel even if mCurrentAccessory is null. Change-Id: I35d458f21a8b21611946da523d0f53723cab0540 Signed-off-by: Mike Lockwood <lockwood@android.com>
-rw-r--r--services/java/com/android/server/usb/UsbService.java17
1 files changed, 11 insertions, 6 deletions
diff --git a/services/java/com/android/server/usb/UsbService.java b/services/java/com/android/server/usb/UsbService.java
index b7f6346..a151af0 100644
--- a/services/java/com/android/server/usb/UsbService.java
+++ b/services/java/com/android/server/usb/UsbService.java
@@ -561,11 +561,14 @@ public class UsbService extends IUsbManager.Stub {
case MSG_UPDATE_STATE:
if (mConnected != mLastConnected || mConfiguration != mLastConfiguration) {
if (mConnected == 0) {
- // make sure accessory mode is off, and restore default functions
- if (mCurrentAccessory != null && UsbManager.setFunctionEnabled(
- UsbManager.USB_FUNCTION_ACCESSORY, false)) {
+ if (UsbManager.isFunctionEnabled(
+ UsbManager.USB_FUNCTION_ACCESSORY)) {
+ // make sure accessory mode is off, and restore default functions
Log.d(TAG, "exited USB accessory mode");
-
+ if (!UsbManager.setFunctionEnabled
+ (UsbManager.USB_FUNCTION_ACCESSORY, false)) {
+ Log.e(TAG, "could not disable accessory function");
+ }
int count = mDefaultFunctions.size();
for (int i = 0; i < count; i++) {
String function = mDefaultFunctions.get(i);
@@ -574,8 +577,10 @@ public class UsbService extends IUsbManager.Stub {
}
}
- mDeviceManager.accessoryDetached(mCurrentAccessory);
- mCurrentAccessory = null;
+ if (mCurrentAccessory != null) {
+ mDeviceManager.accessoryDetached(mCurrentAccessory);
+ mCurrentAccessory = null;
+ }
}
}