From 982e0040a8ed197ea2a35c05052ae3bacd2f6068 Mon Sep 17 00:00:00 2001 From: INSUN PYO Date: Tue, 3 Mar 2020 09:06:06 +0900 Subject: [PATCH] Add more robust usb error handling The extcon uvent handler usb_state_changed() handles errors for usb connect/disconnect, but adds additional exception handling code for more robust usb error handling. Change-Id: I6c79fa99078ec71a19a2a72a94d28d31c8b9571f --- src/usb/usb-state.c | 4 ++-- src/usb/usb.c | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/usb/usb-state.c b/src/usb/usb-state.c index 5349dd3..3bb666d 100644 --- a/src/usb/usb-state.c +++ b/src/usb/usb-state.c @@ -168,8 +168,8 @@ void usb_state_retrieve_selected_mode(void) * Tizen has no way of having different vconf value in engineer mode and user mode. * So, alternatively, always enable SDB in engineer mode. * - * Expected default sel_mode value in vconf in engineer mode: 1 (MTP + ACM) - * Expected default sel_mode value in vconf in user mode: 2 (MTP + ACM + SDB) + * Expected default sel_mode value in vconf in user mode: 1 (MTP + ACM) + * Expected default sel_mode value in vconf in engineer mode: 2 (MTP + ACM + SDB) */ #ifdef ENGINEER_MODE _I("Engineer mode. usb selected mode 0x%x, debug state %d", usb_selected_mode, get_usb_debug_state()); diff --git a/src/usb/usb.c b/src/usb/usb.c index 5a84d95..a83e995 100644 --- a/src/usb/usb.c +++ b/src/usb/usb.c @@ -317,6 +317,12 @@ static int usb_connected(void) int ret; unsigned int mode = usb_state_get_selected_mode(); + /* Error handling that should never occur. */ + if (usb_state_get_connection() == USB_CONNECTED) { + _E("Fatal: usb cable is already connected"); + return -EINVAL; + } + usb_state_update_state(USB_CONNECTED, USB_FUNCTION_NONE); ret = usb_enable(mode); @@ -330,6 +336,12 @@ static int usb_connected(void) static int usb_disconnected(void) { + /* Error handling that should never occur. */ + if (usb_state_get_connection() == USB_DISCONNECTED) { + _E("Fatal: usb cable is already disconnected"); + return -EINVAL; + } + usb_state_update_state(USB_DISCONNECTED, USB_FUNCTION_NONE); return usb_disable(); -- 2.7.4