USB: Detect charging-only mode upon cable insert, not host detect.
Letting go of the button before the host is detected allows storage mode to be entered even though a button was down when plugging. Sometimes the host would try several times and the button would have to be held down for several seconds to avoid a storage connection. The adjustment wasn't made when switching to setup request host detection. Change-Id: Iab3bced5bfb1478d4d9a7baab2a2a1144afaf437
This commit is contained in:
parent
39946a56d8
commit
7738660eff
1 changed files with 15 additions and 5 deletions
|
@ -84,6 +84,9 @@ static bool usb_hid = true;
|
|||
static bool usb_host_present = false;
|
||||
static int usb_num_acks_to_expect = 0;
|
||||
static long usb_last_broadcast_tick = 0;
|
||||
#ifdef HAVE_USB_POWER
|
||||
static bool usb_charging_only = false;
|
||||
#endif
|
||||
|
||||
#if defined(USB_FIREWIRE_HANDLING) \
|
||||
|| (defined(HAVE_USBSTACK) && !defined(USE_ROCKBOX_USB))
|
||||
|
@ -127,13 +130,15 @@ static inline bool usb_do_screendump(void)
|
|||
#endif /* HAVE_LCD_BITMAP */
|
||||
|
||||
/* Power (charging-only) button */
|
||||
static inline bool usb_power_button(void)
|
||||
static inline void usb_detect_charging_only(bool detect)
|
||||
{
|
||||
#ifdef HAVE_USB_POWER
|
||||
return (button_status() & ~USBPOWER_BTN_IGNORE);
|
||||
#else
|
||||
return false;
|
||||
if (detect)
|
||||
detect = button_status() & ~USBPOWER_BTN_IGNORE;
|
||||
|
||||
usb_charging_only = detect;
|
||||
#endif
|
||||
(void)detect;
|
||||
}
|
||||
|
||||
#ifdef USB_FIREWIRE_HANDLING
|
||||
|
@ -375,12 +380,14 @@ static void usb_set_host_present(bool present)
|
|||
return;
|
||||
}
|
||||
|
||||
if(usb_power_button())
|
||||
#ifdef HAVE_USB_POWER
|
||||
if (usb_charging_only)
|
||||
{
|
||||
/* Only charging is desired */
|
||||
usb_configure_drivers(USB_POWERED);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
if(!usb_configure_drivers(USB_INSERTED))
|
||||
return; /* Exclusive storage access not required */
|
||||
|
@ -470,6 +477,8 @@ static void NORETURN_ATTR usb_thread(void)
|
|||
usb_state = USB_POWERED;
|
||||
usb_stack_enable(true);
|
||||
|
||||
usb_detect_charging_only(true);
|
||||
|
||||
#ifndef USB_DETECT_BY_REQUEST
|
||||
usb_set_host_present(true);
|
||||
#endif
|
||||
|
@ -496,6 +505,7 @@ static void NORETURN_ATTR usb_thread(void)
|
|||
|
||||
usb_state = USB_EXTRACTED;
|
||||
|
||||
usb_detect_charging_only(false);
|
||||
usb_set_host_present(false);
|
||||
break;
|
||||
/* USB_EXTRACTED: */
|
||||
|
|
Loading…
Reference in a new issue