From 6da8b4eb4925f167588c868a64d2d057ca3bf85f Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Tue, 13 Jan 2009 16:27:35 +0000 Subject: USB retweaking: Take out the USB_REQUEST/RELEASE_DISK scheme and simply ask the USB core whether or not any drivers require exclusive access at the moment of connect. Doing anthing else just produces nasty effects on Windows because it expects some communication just for enabling the PHY and not allowing it to mount volumes if a thread doesn't ack causes annoying error message boxes. Make behavior of each USB type identical from the system perspective. Some miscellaneous changes (simplify, ata->storage naming, define only used USB_* enums values were possible). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19762 a1c6a512-1295-4272-9138-f99709370657 --- firmware/usbstack/usb_core.c | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) (limited to 'firmware/usbstack/usb_core.c') diff --git a/firmware/usbstack/usb_core.c b/firmware/usbstack/usb_core.c index ea5d659..50c9d85 100644 --- a/firmware/usbstack/usb_core.c +++ b/firmware/usbstack/usb_core.c @@ -54,6 +54,9 @@ #include "ata.h" #endif +#ifndef USB_MAX_CURRENT +#define USB_MAX_CURRENT 500 +#endif /*-------------------------------------------------------------------------*/ /* USB protocol descriptors: */ @@ -94,7 +97,7 @@ static struct usb_config_descriptor __attribute__((aligned(2))) .bConfigurationValue = 1, .iConfiguration = 0, .bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER, - .bMaxPower = 250, /* 500mA in 2mA units */ + .bMaxPower = (USB_MAX_CURRENT+1) / 2, /* In 2mA units */ }; @@ -179,7 +182,7 @@ static struct usb_class_driver drivers[USB_NUM_DRIVERS] = #ifdef USB_STORAGE [USB_DRIVER_MASS_STORAGE] = { .enabled = false, - .needs_exclusive_ata = true, + .needs_exclusive_storage = true, .first_interface = 0, .last_interface = 0, .request_endpoints = usb_storage_request_endpoints, @@ -198,7 +201,7 @@ static struct usb_class_driver drivers[USB_NUM_DRIVERS] = #ifdef USB_SERIAL [USB_DRIVER_SERIAL] = { .enabled = false, - .needs_exclusive_ata = false, + .needs_exclusive_storage = false, .first_interface = 0, .last_interface = 0, .request_endpoints = usb_serial_request_endpoints, @@ -217,7 +220,7 @@ static struct usb_class_driver drivers[USB_NUM_DRIVERS] = #ifdef USB_CHARGING_ONLY [USB_DRIVER_CHARGING_ONLY] = { .enabled = false, - .needs_exclusive_ata = false, + .needs_exclusive_storage = false, .first_interface = 0, .last_interface = 0, .request_endpoints = usb_charging_only_request_endpoints, @@ -353,13 +356,17 @@ void usb_core_exit(void) int i; for(i=0;ibRequestType & 0x1f) { @@ -788,7 +801,7 @@ unsigned short usb_allowed_current() { if (usb_state == CONFIGURED) { - return 500; + return MAX(USB_MAX_CURRENT, 100); } else { -- cgit v1.1