ChangeSet 1.1743.3.19, 2004/05/28 13:28:14-07:00, [EMAIL PROTECTED]
[PATCH] USB: Use normal return codes for several routines in hub.c
This patch changes the return codes used by hub_port_wait_reset(),
hub_port_reset(), and hub_port_debounce() in hub.c. I couldn't stand the
{-1=error, 0=okay, 1=disconnect} scheme; the meanings seemed arbitrary and
I constantly forgot which number stood for what status. The revised code
uses normal negative error codes, including -ENOTCONN to indicate device
disconnected, or 0 for success.
Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>
drivers/usb/core/hub.c | 39 ++++++++++++++++-----------------------
1 files changed, 16 insertions(+), 23 deletions(-)
diff -Nru a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
--- a/drivers/usb/core/hub.c Fri May 28 14:40:22 2004
+++ b/drivers/usb/core/hub.c Fri May 28 14:40:22 2004
@@ -876,7 +876,6 @@
#define HUB_LONG_RESET_TIME 200
#define HUB_RESET_TIMEOUT 500
-/* return: -1 on error, 0 on success, 1 on disconnect. */
static int hub_port_wait_reset(struct usb_device *hdev, int port,
struct usb_device *udev, unsigned int delay)
{
@@ -892,17 +891,16 @@
/* read and decode port status */
ret = hub_port_status(hdev, port, &portstatus, &portchange);
- if (ret < 0) {
- return -1;
- }
+ if (ret < 0)
+ return ret;
/* Device went away? */
if (!(portstatus & USB_PORT_STAT_CONNECTION))
- return 1;
+ return -ENOTCONN;
/* bomb out completely if something weird happened */
if ((portchange & USB_PORT_STAT_C_CONNECTION))
- return -1;
+ return -EINVAL;
/* if we`ve finished resetting, then break out of the loop */
if (!(portstatus & USB_PORT_STAT_RESET) &&
@@ -925,10 +923,9 @@
port + 1, delay);
}
- return -1;
+ return -EBUSY;
}
-/* return: -1 on error, 0 on success, 1 on disconnect. */
static int hub_port_reset(struct usb_device *hdev, int port,
struct usb_device *udev, unsigned int delay)
{
@@ -941,7 +938,7 @@
/* return on disconnect or reset */
status = hub_port_wait_reset(hdev, port, udev, delay);
- if (status != -1) {
+ if (status == -ENOTCONN || status == 0) {
clear_port_feature(hdev,
port + 1, USB_PORT_FEAT_C_RESET);
udev->state = status
@@ -960,7 +957,7 @@
"Cannot enable port %i. Maybe the USB cable is bad?\n",
port + 1);
- return -1;
+ return status;
}
static int hub_port_disable(struct usb_device *hdev, int port)
@@ -993,7 +990,6 @@
#define HUB_DEBOUNCE_STEP 25
#define HUB_DEBOUNCE_STABLE 4
-/* return: -1 on error, 0 on success, 1 on disconnect. */
static int hub_port_debounce(struct usb_device *hdev, int port)
{
int ret;
@@ -1008,7 +1004,7 @@
ret = hub_port_status(hdev, port, &portstatus, &portchange);
if (ret < 0)
- return -1;
+ return ret;
if ((portstatus & USB_PORT_STAT_CONNECTION) == connection) {
if (connection) {
@@ -1029,7 +1025,7 @@
"debounce: port %d: delay %dms stable %d status 0x%x\n",
port + 1, delay_time, stable_count, portstatus);
- return ((portstatus&USB_PORT_STAT_CONNECTION)) ? 0 : 1;
+ return (portstatus & USB_PORT_STAT_CONNECTION) ? 0 : -ENOTCONN;
}
static int hub_set_address(struct usb_device *udev)
@@ -1062,7 +1058,7 @@
{
static DECLARE_MUTEX(usb_address0_sem);
- int i, j, retval = -ENODEV;
+ int i, j, retval;
unsigned delay = HUB_SHORT_RESET_TIME;
enum usb_device_speed oldspeed = udev->speed;
@@ -1080,15 +1076,12 @@
down(&usb_address0_sem);
/* Reset the device; full speed may morph to high speed */
- switch (hub_port_reset(hdev, port, udev, delay)) {
- case 0: /* success, speed is known */
- break;
- case 1: /* disconnect, give to companion */
- retval = -EBUSY;
- /* FALL THROUGH */
- default: /* error */
+ retval = hub_port_reset(hdev, port, udev, delay);
+ if (retval < 0) /* error or disconnect */
goto fail;
- }
+ /* success, speed is known */
+ retval = -ENODEV;
+
if (oldspeed != USB_SPEED_UNKNOWN && oldspeed != udev->speed) {
dev_dbg(&udev->dev, "device reset changed speed!\n");
goto fail;
@@ -1346,7 +1339,7 @@
/* reset, set address, get descriptor, add to hub's children */
down (&udev->serialize);
status = hub_port_init(hdev, udev, port);
- if (status == -EBUSY)
+ if (status == -ENOTCONN)
break;
if (status < 0)
continue;
-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g.
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id149&alloc_id�66&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel