Commit d465a6b0 authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman

[PATCH] USB: Gonzo variable renaming in hub.c

As part of the cleanup effort, I wanted to name all the variables in hub.c
uniformly.  Currently there are different names for the same thing in
different routines, and the same names are used for different things --
it's impossible to keep things straight.  I also wanted to step away from
the deplorable practice of naming everything "dev".  It is not an
exaggeration that up until relatively recently one of the drivers (not the
hub driver, fortunately!) contained a line which looked basically like
this:

	dev->dev.dev = &intf->dev;

If you can make sense out of that, you're a better code reader than I am!

Ranting aside, this patch institutes the following name scheme for local
variables in hub.c:

	hub:		struct usb_hub
	hdev:		hub's corresponding struct usb_device
	hub_dev:	hub interface's embedded struct device
	udev:		general struct usb_device

There are a couple of genuine code changes hidden in there too.  Just
trivial things, like creating a local hub_dev variable for use in place of
&hub->intf->dev.
parent 378ca813
...@@ -65,15 +65,15 @@ static inline char *portspeed (int portstatus) ...@@ -65,15 +65,15 @@ static inline char *portspeed (int portstatus)
#endif #endif
/* for dev_info, dev_dbg, etc */ /* for dev_info, dev_dbg, etc */
static inline struct device *hubdev (struct usb_device *dev) static inline struct device *hubdev (struct usb_device *hdev)
{ {
return &dev->actconfig->interface[0]->dev; return &hdev->actconfig->interface[0]->dev;
} }
/* USB 2.0 spec Section 11.24.4.5 */ /* USB 2.0 spec Section 11.24.4.5 */
static int get_hub_descriptor(struct usb_device *dev, void *data, int size) static int get_hub_descriptor(struct usb_device *hdev, void *data, int size)
{ {
return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), return usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
USB_REQ_GET_DESCRIPTOR, USB_DIR_IN | USB_RT_HUB, USB_REQ_GET_DESCRIPTOR, USB_DIR_IN | USB_RT_HUB,
USB_DT_HUB << 8, 0, data, size, HZ * USB_CTRL_GET_TIMEOUT); USB_DT_HUB << 8, 0, data, size, HZ * USB_CTRL_GET_TIMEOUT);
} }
...@@ -81,27 +81,27 @@ static int get_hub_descriptor(struct usb_device *dev, void *data, int size) ...@@ -81,27 +81,27 @@ static int get_hub_descriptor(struct usb_device *dev, void *data, int size)
/* /*
* USB 2.0 spec Section 11.24.2.1 * USB 2.0 spec Section 11.24.2.1
*/ */
static int clear_hub_feature(struct usb_device *dev, int feature) static int clear_hub_feature(struct usb_device *hdev, int feature)
{ {
return usb_control_msg(dev, usb_sndctrlpipe(dev, 0), return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
USB_REQ_CLEAR_FEATURE, USB_RT_HUB, feature, 0, NULL, 0, HZ); USB_REQ_CLEAR_FEATURE, USB_RT_HUB, feature, 0, NULL, 0, HZ);
} }
/* /*
* USB 2.0 spec Section 11.24.2.2 * USB 2.0 spec Section 11.24.2.2
*/ */
static int clear_port_feature(struct usb_device *dev, int port, int feature) static int clear_port_feature(struct usb_device *hdev, int port, int feature)
{ {
return usb_control_msg(dev, usb_sndctrlpipe(dev, 0), return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
USB_REQ_CLEAR_FEATURE, USB_RT_PORT, feature, port, NULL, 0, HZ); USB_REQ_CLEAR_FEATURE, USB_RT_PORT, feature, port, NULL, 0, HZ);
} }
/* /*
* USB 2.0 spec Section 11.24.2.13 * USB 2.0 spec Section 11.24.2.13
*/ */
static int set_port_feature(struct usb_device *dev, int port, int feature) static int set_port_feature(struct usb_device *hdev, int port, int feature)
{ {
return usb_control_msg(dev, usb_sndctrlpipe(dev, 0), return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
USB_REQ_SET_FEATURE, USB_RT_PORT, feature, port, NULL, 0, HZ); USB_REQ_SET_FEATURE, USB_RT_PORT, feature, port, NULL, 0, HZ);
} }
...@@ -110,16 +110,15 @@ static int set_port_feature(struct usb_device *dev, int port, int feature) ...@@ -110,16 +110,15 @@ static int set_port_feature(struct usb_device *dev, int port, int feature)
* for info about using port indicators * for info about using port indicators
*/ */
static void set_port_led( static void set_port_led(
struct usb_device *dev, struct usb_device *hdev,
struct usb_hub *hub,
int port, int port,
int selector int selector
) )
{ {
int status = set_port_feature(dev, (selector << 8) | port, int status = set_port_feature(hdev, (selector << 8) | port,
USB_PORT_FEAT_INDICATOR); USB_PORT_FEAT_INDICATOR);
if (status < 0) if (status < 0)
dev_dbg (&hub->intf->dev, dev_dbg (hubdev (hdev),
"port %d indicator %s status %d\n", "port %d indicator %s status %d\n",
port, port,
({ char *s; switch (selector) { ({ char *s; switch (selector) {
...@@ -137,12 +136,12 @@ static void set_port_led( ...@@ -137,12 +136,12 @@ static void set_port_led(
static void led_work (void *__hub) static void led_work (void *__hub)
{ {
struct usb_hub *hub = __hub; struct usb_hub *hub = __hub;
struct usb_device *dev = interface_to_usbdev (hub->intf); struct usb_device *hdev = interface_to_usbdev (hub->intf);
unsigned i; unsigned i;
unsigned changed = 0; unsigned changed = 0;
int cursor = -1; int cursor = -1;
if (dev->state != USB_STATE_CONFIGURED) if (hdev->state != USB_STATE_CONFIGURED)
return; return;
for (i = 0; i < hub->descriptor->bNbrPorts; i++) { for (i = 0; i < hub->descriptor->bNbrPorts; i++) {
...@@ -189,13 +188,13 @@ static void led_work (void *__hub) ...@@ -189,13 +188,13 @@ static void led_work (void *__hub)
} }
if (selector != HUB_LED_AUTO) if (selector != HUB_LED_AUTO)
changed = 1; changed = 1;
set_port_led(dev, hub, i + 1, selector); set_port_led(hdev, i + 1, selector);
hub->indicator[i] = mode; hub->indicator[i] = mode;
} }
if (!changed && blinkenlights) { if (!changed && blinkenlights) {
cursor++; cursor++;
cursor %= hub->descriptor->bNbrPorts; cursor %= hub->descriptor->bNbrPorts;
set_port_led(dev, hub, cursor + 1, HUB_LED_GREEN); set_port_led(hdev, cursor + 1, HUB_LED_GREEN);
hub->indicator[cursor] = INDICATOR_CYCLE; hub->indicator[cursor] = INDICATOR_CYCLE;
changed++; changed++;
} }
...@@ -206,10 +205,10 @@ static void led_work (void *__hub) ...@@ -206,10 +205,10 @@ static void led_work (void *__hub)
/* /*
* USB 2.0 spec Section 11.24.2.6 * USB 2.0 spec Section 11.24.2.6
*/ */
static int get_hub_status(struct usb_device *dev, static int get_hub_status(struct usb_device *hdev,
struct usb_hub_status *data) struct usb_hub_status *data)
{ {
return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), return usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_HUB, 0, 0, USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_HUB, 0, 0,
data, sizeof(*data), HZ * USB_CTRL_GET_TIMEOUT); data, sizeof(*data), HZ * USB_CTRL_GET_TIMEOUT);
} }
...@@ -217,10 +216,10 @@ static int get_hub_status(struct usb_device *dev, ...@@ -217,10 +216,10 @@ static int get_hub_status(struct usb_device *dev,
/* /*
* USB 2.0 spec Section 11.24.2.7 * USB 2.0 spec Section 11.24.2.7
*/ */
static int get_port_status(struct usb_device *dev, int port, static int get_port_status(struct usb_device *hdev, int port,
struct usb_port_status *data) struct usb_port_status *data)
{ {
return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), return usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_PORT, 0, port, USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_PORT, 0, port,
data, sizeof(*data), HZ * USB_CTRL_GET_TIMEOUT); data, sizeof(*data), HZ * USB_CTRL_GET_TIMEOUT);
} }
...@@ -278,9 +277,9 @@ static void hub_irq(struct urb *urb, struct pt_regs *regs) ...@@ -278,9 +277,9 @@ static void hub_irq(struct urb *urb, struct pt_regs *regs)
/* USB 2.0 spec Section 11.24.2.3 */ /* USB 2.0 spec Section 11.24.2.3 */
static inline int static inline int
hub_clear_tt_buffer (struct usb_device *hub, u16 devinfo, u16 tt) hub_clear_tt_buffer (struct usb_device *hdev, u16 devinfo, u16 tt)
{ {
return usb_control_msg (hub, usb_rcvctrlpipe (hub, 0), return usb_control_msg (hdev, usb_rcvctrlpipe (hdev, 0),
HUB_CLEAR_TT_BUFFER, USB_RT_PORT, HUB_CLEAR_TT_BUFFER, USB_RT_PORT,
devinfo, tt, 0, 0, HZ); devinfo, tt, 0, 0, HZ);
} }
...@@ -300,7 +299,7 @@ static void hub_tt_kevent (void *arg) ...@@ -300,7 +299,7 @@ static void hub_tt_kevent (void *arg)
while (!list_empty (&hub->tt.clear_list)) { while (!list_empty (&hub->tt.clear_list)) {
struct list_head *temp; struct list_head *temp;
struct usb_tt_clear *clear; struct usb_tt_clear *clear;
struct usb_device *dev; struct usb_device *hdev;
int status; int status;
temp = hub->tt.clear_list.next; temp = hub->tt.clear_list.next;
...@@ -309,12 +308,13 @@ static void hub_tt_kevent (void *arg) ...@@ -309,12 +308,13 @@ static void hub_tt_kevent (void *arg)
/* drop lock so HCD can concurrently report other TT errors */ /* drop lock so HCD can concurrently report other TT errors */
spin_unlock_irqrestore (&hub->tt.lock, flags); spin_unlock_irqrestore (&hub->tt.lock, flags);
dev = interface_to_usbdev (hub->intf); hdev = interface_to_usbdev (hub->intf);
status = hub_clear_tt_buffer (dev, clear->devinfo, clear->tt); status = hub_clear_tt_buffer (hdev, clear->devinfo, clear->tt);
spin_lock_irqsave (&hub->tt.lock, flags); spin_lock_irqsave (&hub->tt.lock, flags);
if (status) if (status)
dev_err (&dev->dev, "clear tt %d (%04x) error %d\n", dev_err (&hdev->dev,
"clear tt %d (%04x) error %d\n",
clear->tt, clear->devinfo, status); clear->tt, clear->devinfo, status);
kfree (clear); kfree (clear);
} }
...@@ -334,9 +334,9 @@ static void hub_tt_kevent (void *arg) ...@@ -334,9 +334,9 @@ static void hub_tt_kevent (void *arg)
* It may not be possible for that hub to handle additional full (or low) * It may not be possible for that hub to handle additional full (or low)
* speed transactions until that state is fully cleared out. * speed transactions until that state is fully cleared out.
*/ */
void usb_hub_tt_clear_buffer (struct usb_device *dev, int pipe) void usb_hub_tt_clear_buffer (struct usb_device *udev, int pipe)
{ {
struct usb_tt *tt = dev->tt; struct usb_tt *tt = udev->tt;
unsigned long flags; unsigned long flags;
struct usb_tt_clear *clear; struct usb_tt_clear *clear;
...@@ -345,15 +345,15 @@ void usb_hub_tt_clear_buffer (struct usb_device *dev, int pipe) ...@@ -345,15 +345,15 @@ void usb_hub_tt_clear_buffer (struct usb_device *dev, int pipe)
* there can be many TTs per hub). even if they're uncommon. * there can be many TTs per hub). even if they're uncommon.
*/ */
if ((clear = kmalloc (sizeof *clear, SLAB_ATOMIC)) == 0) { if ((clear = kmalloc (sizeof *clear, SLAB_ATOMIC)) == 0) {
dev_err (&dev->dev, "can't save CLEAR_TT_BUFFER state\n"); dev_err (&udev->dev, "can't save CLEAR_TT_BUFFER state\n");
/* FIXME recover somehow ... RESET_TT? */ /* FIXME recover somehow ... RESET_TT? */
return; return;
} }
/* info that CLEAR_TT_BUFFER needs */ /* info that CLEAR_TT_BUFFER needs */
clear->tt = tt->multi ? dev->ttport : 1; clear->tt = tt->multi ? udev->ttport : 1;
clear->devinfo = usb_pipeendpoint (pipe); clear->devinfo = usb_pipeendpoint (pipe);
clear->devinfo |= dev->devnum << 4; clear->devinfo |= udev->devnum << 4;
clear->devinfo |= usb_pipecontrol (pipe) clear->devinfo |= usb_pipecontrol (pipe)
? (USB_ENDPOINT_XFER_CONTROL << 11) ? (USB_ENDPOINT_XFER_CONTROL << 11)
: (USB_ENDPOINT_XFER_BULK << 11); : (USB_ENDPOINT_XFER_BULK << 11);
...@@ -369,15 +369,15 @@ void usb_hub_tt_clear_buffer (struct usb_device *dev, int pipe) ...@@ -369,15 +369,15 @@ void usb_hub_tt_clear_buffer (struct usb_device *dev, int pipe)
static void hub_power_on(struct usb_hub *hub) static void hub_power_on(struct usb_hub *hub)
{ {
struct usb_device *dev; struct usb_device *hdev;
int i; int i;
/* if hub supports power switching, enable power on each port */ /* if hub supports power switching, enable power on each port */
if ((hub->descriptor->wHubCharacteristics & HUB_CHAR_LPSM) < 2) { if ((hub->descriptor->wHubCharacteristics & HUB_CHAR_LPSM) < 2) {
dev_dbg(&hub->intf->dev, "enabling power on all ports\n"); dev_dbg(&hub->intf->dev, "enabling power on all ports\n");
dev = interface_to_usbdev(hub->intf); hdev = interface_to_usbdev(hub->intf);
for (i = 0; i < hub->descriptor->bNbrPorts; i++) for (i = 0; i < hub->descriptor->bNbrPorts; i++)
set_port_feature(dev, i + 1, USB_PORT_FEAT_POWER); set_port_feature(hdev, i + 1, USB_PORT_FEAT_POWER);
} }
/* Wait for power to be enabled */ /* Wait for power to be enabled */
...@@ -387,12 +387,12 @@ static void hub_power_on(struct usb_hub *hub) ...@@ -387,12 +387,12 @@ static void hub_power_on(struct usb_hub *hub)
static int hub_hub_status(struct usb_hub *hub, static int hub_hub_status(struct usb_hub *hub,
u16 *status, u16 *change) u16 *status, u16 *change)
{ {
struct usb_device *dev = interface_to_usbdev (hub->intf); struct usb_device *hdev = interface_to_usbdev (hub->intf);
int ret; int ret;
ret = get_hub_status(dev, &hub->status->hub); ret = get_hub_status(hdev, &hub->status->hub);
if (ret < 0) if (ret < 0)
dev_err (hubdev (dev), dev_err (&hub->intf->dev,
"%s failed (err = %d)\n", __FUNCTION__, ret); "%s failed (err = %d)\n", __FUNCTION__, ret);
else { else {
*status = le16_to_cpu(hub->status->hub.wHubStatus); *status = le16_to_cpu(hub->status->hub.wHubStatus);
...@@ -405,14 +405,14 @@ static int hub_hub_status(struct usb_hub *hub, ...@@ -405,14 +405,14 @@ static int hub_hub_status(struct usb_hub *hub,
static int hub_configure(struct usb_hub *hub, static int hub_configure(struct usb_hub *hub,
struct usb_endpoint_descriptor *endpoint) struct usb_endpoint_descriptor *endpoint)
{ {
struct usb_device *dev = interface_to_usbdev (hub->intf); struct usb_device *hdev = interface_to_usbdev (hub->intf);
struct device *hub_dev; struct device *hub_dev = &hub->intf->dev;
u16 hubstatus, hubchange; u16 hubstatus, hubchange;
unsigned int pipe; unsigned int pipe;
int maxp, ret; int maxp, ret;
char *message; char *message;
hub->buffer = usb_buffer_alloc(dev, sizeof(*hub->buffer), GFP_KERNEL, hub->buffer = usb_buffer_alloc(hdev, sizeof(*hub->buffer), GFP_KERNEL,
&hub->buffer_dma); &hub->buffer_dma);
if (!hub->buffer) { if (!hub->buffer) {
message = "can't allocate hub irq buffer"; message = "can't allocate hub irq buffer";
...@@ -438,7 +438,7 @@ static int hub_configure(struct usb_hub *hub, ...@@ -438,7 +438,7 @@ static int hub_configure(struct usb_hub *hub,
* hub->descriptor can handle USB_MAXCHILDREN ports, * hub->descriptor can handle USB_MAXCHILDREN ports,
* but the hub can/will return fewer bytes here. * but the hub can/will return fewer bytes here.
*/ */
ret = get_hub_descriptor(dev, hub->descriptor, ret = get_hub_descriptor(hdev, hub->descriptor,
sizeof(*hub->descriptor)); sizeof(*hub->descriptor));
if (ret < 0) { if (ret < 0) {
message = "can't read hub descriptor"; message = "can't read hub descriptor";
...@@ -449,10 +449,9 @@ static int hub_configure(struct usb_hub *hub, ...@@ -449,10 +449,9 @@ static int hub_configure(struct usb_hub *hub,
goto fail; goto fail;
} }
hub_dev = hubdev(dev); hdev->maxchild = hub->descriptor->bNbrPorts;
dev->maxchild = hub->descriptor->bNbrPorts; dev_info (hub_dev, "%d port%s detected\n", hdev->maxchild,
dev_info (hub_dev, "%d port%s detected\n", dev->maxchild, (hdev->maxchild == 1) ? "" : "s");
(dev->maxchild == 1) ? "" : "s");
le16_to_cpus(&hub->descriptor->wHubCharacteristics); le16_to_cpus(&hub->descriptor->wHubCharacteristics);
...@@ -460,11 +459,11 @@ static int hub_configure(struct usb_hub *hub, ...@@ -460,11 +459,11 @@ static int hub_configure(struct usb_hub *hub,
int i; int i;
char portstr [USB_MAXCHILDREN + 1]; char portstr [USB_MAXCHILDREN + 1];
for (i = 0; i < dev->maxchild; i++) for (i = 0; i < hdev->maxchild; i++)
portstr[i] = hub->descriptor->DeviceRemovable portstr[i] = hub->descriptor->DeviceRemovable
[((i + 1) / 8)] & (1 << ((i + 1) % 8)) [((i + 1) / 8)] & (1 << ((i + 1) % 8))
? 'F' : 'R'; ? 'F' : 'R';
portstr[dev->maxchild] = 0; portstr[hdev->maxchild] = 0;
dev_dbg(hub_dev, "compound device; port removable status: %s\n", portstr); dev_dbg(hub_dev, "compound device; port removable status: %s\n", portstr);
} else } else
dev_dbg(hub_dev, "standalone hub\n"); dev_dbg(hub_dev, "standalone hub\n");
...@@ -498,32 +497,32 @@ static int hub_configure(struct usb_hub *hub, ...@@ -498,32 +497,32 @@ static int hub_configure(struct usb_hub *hub,
spin_lock_init (&hub->tt.lock); spin_lock_init (&hub->tt.lock);
INIT_LIST_HEAD (&hub->tt.clear_list); INIT_LIST_HEAD (&hub->tt.clear_list);
INIT_WORK (&hub->tt.kevent, hub_tt_kevent, hub); INIT_WORK (&hub->tt.kevent, hub_tt_kevent, hub);
switch (dev->descriptor.bDeviceProtocol) { switch (hdev->descriptor.bDeviceProtocol) {
case 0: case 0:
break; break;
case 1: case 1:
dev_dbg(hub_dev, "Single TT\n"); dev_dbg(hub_dev, "Single TT\n");
hub->tt.hub = dev; hub->tt.hub = hdev;
break; break;
case 2: case 2:
ret = usb_set_interface(dev, 0, 1); ret = usb_set_interface(hdev, 0, 1);
if (ret == 0) { if (ret == 0) {
dev_dbg(hub_dev, "TT per port\n"); dev_dbg(hub_dev, "TT per port\n");
hub->tt.multi = 1; hub->tt.multi = 1;
} else } else
dev_err(hub_dev, "Using single TT (err %d)\n", dev_err(hub_dev, "Using single TT (err %d)\n",
ret); ret);
hub->tt.hub = dev; hub->tt.hub = hdev;
break; break;
default: default:
dev_dbg(hub_dev, "Unrecognized hub protocol %d\n", dev_dbg(hub_dev, "Unrecognized hub protocol %d\n",
dev->descriptor.bDeviceProtocol); hdev->descriptor.bDeviceProtocol);
break; break;
} }
switch (hub->descriptor->wHubCharacteristics & HUB_CHAR_TTTT) { switch (hub->descriptor->wHubCharacteristics & HUB_CHAR_TTTT) {
case 0x00: case 0x00:
if (dev->descriptor.bDeviceProtocol != 0) if (hdev->descriptor.bDeviceProtocol != 0)
dev_dbg(hub_dev, "TT requires at most 8 FS bit times\n"); dev_dbg(hub_dev, "TT requires at most 8 FS bit times\n");
break; break;
case 0x20: case 0x20:
...@@ -549,9 +548,9 @@ static int hub_configure(struct usb_hub *hub, ...@@ -549,9 +548,9 @@ static int hub_configure(struct usb_hub *hub,
/* power budgeting mostly matters with bus-powered hubs, /* power budgeting mostly matters with bus-powered hubs,
* and battery-powered root hubs (may provide just 8 mA). * and battery-powered root hubs (may provide just 8 mA).
*/ */
ret = usb_get_status(dev, USB_RECIP_DEVICE, 0, &hubstatus); ret = usb_get_status(hdev, USB_RECIP_DEVICE, 0, &hubstatus);
if (ret < 0) { if (ret < 0) {
message = "can't get hubdev status"; message = "can't get hub status";
goto fail; goto fail;
} }
cpu_to_le16s(&hubstatus); cpu_to_le16s(&hubstatus);
...@@ -572,7 +571,7 @@ static int hub_configure(struct usb_hub *hub, ...@@ -572,7 +571,7 @@ static int hub_configure(struct usb_hub *hub,
} }
/* local power status reports aren't always correct */ /* local power status reports aren't always correct */
if (dev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_SELFPOWER) if (hdev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_SELFPOWER)
dev_dbg(hub_dev, "local power source is %s\n", dev_dbg(hub_dev, "local power source is %s\n",
(hubstatus & HUB_STATUS_LOCAL_POWER) (hubstatus & HUB_STATUS_LOCAL_POWER)
? "lost (inactive)" : "good"); ? "lost (inactive)" : "good");
...@@ -582,8 +581,8 @@ static int hub_configure(struct usb_hub *hub, ...@@ -582,8 +581,8 @@ static int hub_configure(struct usb_hub *hub,
(hubstatus & HUB_STATUS_OVERCURRENT) ? "" : "no "); (hubstatus & HUB_STATUS_OVERCURRENT) ? "" : "no ");
/* Start the interrupt endpoint */ /* Start the interrupt endpoint */
pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress); pipe = usb_rcvintpipe(hdev, endpoint->bEndpointAddress);
maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe)); maxp = usb_maxpacket(hdev, pipe, usb_pipeout(pipe));
if (maxp > sizeof(*hub->buffer)) if (maxp > sizeof(*hub->buffer))
maxp = sizeof(*hub->buffer); maxp = sizeof(*hub->buffer);
...@@ -595,7 +594,7 @@ static int hub_configure(struct usb_hub *hub, ...@@ -595,7 +594,7 @@ static int hub_configure(struct usb_hub *hub,
goto fail; goto fail;
} }
usb_fill_int_urb(hub->urb, dev, pipe, *hub->buffer, maxp, hub_irq, usb_fill_int_urb(hub->urb, hdev, pipe, *hub->buffer, maxp, hub_irq,
hub, endpoint->bInterval); hub, endpoint->bInterval);
hub->urb->transfer_dma = hub->buffer_dma; hub->urb->transfer_dma = hub->buffer_dma;
hub->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; hub->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
...@@ -611,7 +610,7 @@ static int hub_configure(struct usb_hub *hub, ...@@ -611,7 +610,7 @@ static int hub_configure(struct usb_hub *hub,
/* maybe start cycling the hub leds */ /* maybe start cycling the hub leds */
if (hub->has_indicators && blinkenlights) { if (hub->has_indicators && blinkenlights) {
set_port_led(dev, hub, 1, HUB_LED_GREEN); set_port_led(hdev, 1, HUB_LED_GREEN);
hub->indicator [0] = INDICATOR_CYCLE; hub->indicator [0] = INDICATOR_CYCLE;
schedule_delayed_work(&hub->leds, LED_CYCLE_PERIOD); schedule_delayed_work(&hub->leds, LED_CYCLE_PERIOD);
} }
...@@ -621,7 +620,7 @@ static int hub_configure(struct usb_hub *hub, ...@@ -621,7 +620,7 @@ static int hub_configure(struct usb_hub *hub,
return 0; return 0;
fail: fail:
dev_err (&hub->intf->dev, "config failed, %s (err %d)\n", dev_err (hub_dev, "config failed, %s (err %d)\n",
message, ret); message, ret);
/* hub_disconnect() frees urb and descriptor */ /* hub_disconnect() frees urb and descriptor */
return ret; return ret;
...@@ -693,19 +692,21 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id) ...@@ -693,19 +692,21 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id)
{ {
struct usb_host_interface *desc; struct usb_host_interface *desc;
struct usb_endpoint_descriptor *endpoint; struct usb_endpoint_descriptor *endpoint;
struct usb_device *dev; struct usb_device *hdev;
struct usb_hub *hub; struct usb_hub *hub;
struct device *hub_dev;
unsigned long flags; unsigned long flags;
desc = intf->cur_altsetting; desc = intf->cur_altsetting;
dev = interface_to_usbdev(intf); hdev = interface_to_usbdev(intf);
hub_dev = &intf->dev;
/* Some hubs have a subclass of 1, which AFAICT according to the */ /* Some hubs have a subclass of 1, which AFAICT according to the */
/* specs is not defined, but it works */ /* specs is not defined, but it works */
if ((desc->desc.bInterfaceSubClass != 0) && if ((desc->desc.bInterfaceSubClass != 0) &&
(desc->desc.bInterfaceSubClass != 1)) { (desc->desc.bInterfaceSubClass != 1)) {
descriptor_error: descriptor_error:
dev_err (&intf->dev, "bad descriptor, ignoring hub\n"); dev_err (hub_dev, "bad descriptor, ignoring hub\n");
return -EIO; return -EIO;
} }
...@@ -729,11 +730,11 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id) ...@@ -729,11 +730,11 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id)
} }
/* We found a hub */ /* We found a hub */
dev_info (hubdev (dev), "USB hub found\n"); dev_info (hub_dev, "USB hub found\n");
hub = kmalloc(sizeof(*hub), GFP_KERNEL); hub = kmalloc(sizeof(*hub), GFP_KERNEL);
if (!hub) { if (!hub) {
dev_dbg (hubdev(dev), "couldn't kmalloc hub struct\n"); dev_dbg (hub_dev, "couldn't kmalloc hub struct\n");
return -ENOMEM; return -ENOMEM;
} }
...@@ -752,7 +753,7 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id) ...@@ -752,7 +753,7 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id)
usb_set_intfdata (intf, hub); usb_set_intfdata (intf, hub);
if (dev->speed == USB_SPEED_HIGH) if (hdev->speed == USB_SPEED_HIGH)
highspeed_hubs++; highspeed_hubs++;
if (hub_configure(hub, endpoint) >= 0) if (hub_configure(hub, endpoint) >= 0)
...@@ -765,7 +766,7 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id) ...@@ -765,7 +766,7 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id)
static int static int
hub_ioctl(struct usb_interface *intf, unsigned int code, void *user_data) hub_ioctl(struct usb_interface *intf, unsigned int code, void *user_data)
{ {
struct usb_device *hub = interface_to_usbdev (intf); struct usb_device *hdev = interface_to_usbdev (intf);
/* assert ifno == 0 (part of hub spec) */ /* assert ifno == 0 (part of hub spec) */
switch (code) { switch (code) {
...@@ -775,16 +776,16 @@ hub_ioctl(struct usb_interface *intf, unsigned int code, void *user_data) ...@@ -775,16 +776,16 @@ hub_ioctl(struct usb_interface *intf, unsigned int code, void *user_data)
int i; int i;
spin_lock_irqsave(&hub_event_lock, flags); spin_lock_irqsave(&hub_event_lock, flags);
if (hub->devnum <= 0) if (hdev->devnum <= 0)
info->nports = 0; info->nports = 0;
else { else {
info->nports = hub->maxchild; info->nports = hdev->maxchild;
for (i = 0; i < info->nports; i++) { for (i = 0; i < info->nports; i++) {
if (hub->children[i] == NULL) if (hdev->children[i] == NULL)
info->port[i] = 0; info->port[i] = 0;
else else
info->port[i] = info->port[i] =
hub->children[i]->devnum; hdev->children[i]->devnum;
} }
} }
spin_unlock_irqrestore(&hub_event_lock, flags); spin_unlock_irqrestore(&hub_event_lock, flags);
...@@ -799,13 +800,13 @@ hub_ioctl(struct usb_interface *intf, unsigned int code, void *user_data) ...@@ -799,13 +800,13 @@ hub_ioctl(struct usb_interface *intf, unsigned int code, void *user_data)
static int hub_reset(struct usb_hub *hub) static int hub_reset(struct usb_hub *hub)
{ {
struct usb_device *dev = interface_to_usbdev(hub->intf); struct usb_device *hdev = interface_to_usbdev(hub->intf);
int i; int i;
/* Disconnect any attached devices */ /* Disconnect any attached devices */
for (i = 0; i < hub->descriptor->bNbrPorts; i++) { for (i = 0; i < hub->descriptor->bNbrPorts; i++) {
if (dev->children[i]) if (hdev->children[i])
usb_disconnect(&dev->children[i]); usb_disconnect(&hdev->children[i]);
} }
/* Attempt to reset the hub */ /* Attempt to reset the hub */
...@@ -814,10 +815,10 @@ static int hub_reset(struct usb_hub *hub) ...@@ -814,10 +815,10 @@ static int hub_reset(struct usb_hub *hub)
else else
return -1; return -1;
if (usb_reset_device(dev)) if (usb_reset_device(hdev))
return -1; return -1;
hub->urb->dev = dev; hub->urb->dev = hdev;
if (usb_submit_urb(hub->urb, GFP_KERNEL)) if (usb_submit_urb(hub->urb, GFP_KERNEL))
return -1; return -1;
...@@ -826,36 +827,36 @@ static int hub_reset(struct usb_hub *hub) ...@@ -826,36 +827,36 @@ static int hub_reset(struct usb_hub *hub)
return 0; return 0;
} }
static void hub_start_disconnect(struct usb_device *dev) static void hub_start_disconnect(struct usb_device *hdev)
{ {
struct usb_device *parent = dev->parent; struct usb_device *parent = hdev->parent;
int i; int i;
/* Find the device pointer to disconnect */ /* Find the device pointer to disconnect */
if (parent) { if (parent) {
for (i = 0; i < parent->maxchild; i++) { for (i = 0; i < parent->maxchild; i++) {
if (parent->children[i] == dev) { if (parent->children[i] == hdev) {
usb_disconnect(&parent->children[i]); usb_disconnect(&parent->children[i]);
return; return;
} }
} }
} }
dev_err(&dev->dev, "cannot disconnect hub!\n"); dev_err(&hdev->dev, "cannot disconnect hub!\n");
} }
static int hub_port_status(struct usb_device *dev, int port, static int hub_port_status(struct usb_device *hdev, int port,
u16 *status, u16 *change) u16 *status, u16 *change)
{ {
struct usb_hub *hub = usb_get_intfdata(dev->actconfig->interface[0]); struct usb_hub *hub = usb_get_intfdata(hdev->actconfig->interface[0]);
int ret; int ret;
if (!hub) if (!hub)
return -ENODEV; return -ENODEV;
ret = get_port_status(dev, port + 1, &hub->status->port); ret = get_port_status(hdev, port + 1, &hub->status->port);
if (ret < 0) if (ret < 0)
dev_err (hubdev (dev), dev_err (&hub->intf->dev,
"%s failed (err = %d)\n", __FUNCTION__, ret); "%s failed (err = %d)\n", __FUNCTION__, ret);
else { else {
*status = le16_to_cpu(hub->status->port.wPortStatus); *status = le16_to_cpu(hub->status->port.wPortStatus);
...@@ -876,8 +877,8 @@ static int hub_port_status(struct usb_device *dev, int port, ...@@ -876,8 +877,8 @@ static int hub_port_status(struct usb_device *dev, int port,
#define HUB_RESET_TIMEOUT 500 #define HUB_RESET_TIMEOUT 500
/* return: -1 on error, 0 on success, 1 on disconnect. */ /* return: -1 on error, 0 on success, 1 on disconnect. */
static int hub_port_wait_reset(struct usb_device *hub, int port, static int hub_port_wait_reset(struct usb_device *hdev, int port,
struct usb_device *dev, unsigned int delay) struct usb_device *udev, unsigned int delay)
{ {
int delay_time, ret; int delay_time, ret;
u16 portstatus; u16 portstatus;
...@@ -890,7 +891,7 @@ static int hub_port_wait_reset(struct usb_device *hub, int port, ...@@ -890,7 +891,7 @@ static int hub_port_wait_reset(struct usb_device *hub, int port,
msleep(delay); msleep(delay);
/* read and decode port status */ /* read and decode port status */
ret = hub_port_status(hub, port, &portstatus, &portchange); ret = hub_port_status(hdev, port, &portstatus, &portchange);
if (ret < 0) { if (ret < 0) {
return -1; return -1;
} }
...@@ -907,11 +908,11 @@ static int hub_port_wait_reset(struct usb_device *hub, int port, ...@@ -907,11 +908,11 @@ static int hub_port_wait_reset(struct usb_device *hub, int port,
if (!(portstatus & USB_PORT_STAT_RESET) && if (!(portstatus & USB_PORT_STAT_RESET) &&
(portstatus & USB_PORT_STAT_ENABLE)) { (portstatus & USB_PORT_STAT_ENABLE)) {
if (portstatus & USB_PORT_STAT_HIGH_SPEED) if (portstatus & USB_PORT_STAT_HIGH_SPEED)
dev->speed = USB_SPEED_HIGH; udev->speed = USB_SPEED_HIGH;
else if (portstatus & USB_PORT_STAT_LOW_SPEED) else if (portstatus & USB_PORT_STAT_LOW_SPEED)
dev->speed = USB_SPEED_LOW; udev->speed = USB_SPEED_LOW;
else else
dev->speed = USB_SPEED_FULL; udev->speed = USB_SPEED_FULL;
return 0; return 0;
} }
...@@ -919,7 +920,7 @@ static int hub_port_wait_reset(struct usb_device *hub, int port, ...@@ -919,7 +920,7 @@ static int hub_port_wait_reset(struct usb_device *hub, int port,
if (delay_time >= 2 * HUB_SHORT_RESET_TIME) if (delay_time >= 2 * HUB_SHORT_RESET_TIME)
delay = HUB_LONG_RESET_TIME; delay = HUB_LONG_RESET_TIME;
dev_dbg (hubdev (hub), dev_dbg (hubdev (hdev),
"port %d not reset yet, waiting %dms\n", "port %d not reset yet, waiting %dms\n",
port + 1, delay); port + 1, delay);
} }
...@@ -928,46 +929,47 @@ static int hub_port_wait_reset(struct usb_device *hub, int port, ...@@ -928,46 +929,47 @@ static int hub_port_wait_reset(struct usb_device *hub, int port,
} }
/* return: -1 on error, 0 on success, 1 on disconnect. */ /* return: -1 on error, 0 on success, 1 on disconnect. */
static int hub_port_reset(struct usb_device *hub, int port, static int hub_port_reset(struct usb_device *hdev, int port,
struct usb_device *dev, unsigned int delay) struct usb_device *udev, unsigned int delay)
{ {
int i, status; int i, status;
struct device *hub_dev = hubdev (hdev);
/* Reset the port */ /* Reset the port */
for (i = 0; i < PORT_RESET_TRIES; i++) { for (i = 0; i < PORT_RESET_TRIES; i++) {
set_port_feature(hub, port + 1, USB_PORT_FEAT_RESET); set_port_feature(hdev, port + 1, USB_PORT_FEAT_RESET);
/* return on disconnect or reset */ /* return on disconnect or reset */
status = hub_port_wait_reset(hub, port, dev, delay); status = hub_port_wait_reset(hdev, port, udev, delay);
if (status != -1) { if (status != -1) {
clear_port_feature(hub, clear_port_feature(hdev,
port + 1, USB_PORT_FEAT_C_RESET); port + 1, USB_PORT_FEAT_C_RESET);
dev->state = status udev->state = status
? USB_STATE_NOTATTACHED ? USB_STATE_NOTATTACHED
: USB_STATE_DEFAULT; : USB_STATE_DEFAULT;
return status; return status;
} }
dev_dbg (hubdev (hub), dev_dbg (hub_dev,
"port %d not enabled, trying reset again...\n", "port %d not enabled, trying reset again...\n",
port + 1); port + 1);
delay = HUB_LONG_RESET_TIME; delay = HUB_LONG_RESET_TIME;
} }
dev_err (hubdev (hub), dev_err (hub_dev,
"Cannot enable port %i. Maybe the USB cable is bad?\n", "Cannot enable port %i. Maybe the USB cable is bad?\n",
port + 1); port + 1);
return -1; return -1;
} }
static int hub_port_disable(struct usb_device *hub, int port) static int hub_port_disable(struct usb_device *hdev, int port)
{ {
int ret; int ret;
ret = clear_port_feature(hub, port + 1, USB_PORT_FEAT_ENABLE); ret = clear_port_feature(hdev, port + 1, USB_PORT_FEAT_ENABLE);
if (ret) if (ret)
dev_err(hubdev(hub), "cannot disable port %d (err = %d)\n", dev_err(hubdev(hdev), "cannot disable port %d (err = %d)\n",
port + 1, ret); port + 1, ret);
return ret; return ret;
...@@ -992,7 +994,7 @@ static int hub_port_disable(struct usb_device *hub, int port) ...@@ -992,7 +994,7 @@ static int hub_port_disable(struct usb_device *hub, int port)
#define HUB_DEBOUNCE_STABLE 4 #define HUB_DEBOUNCE_STABLE 4
/* return: -1 on error, 0 on success, 1 on disconnect. */ /* return: -1 on error, 0 on success, 1 on disconnect. */
static int hub_port_debounce(struct usb_device *hub, int port) static int hub_port_debounce(struct usb_device *hdev, int port)
{ {
int ret; int ret;
int delay_time, stable_count; int delay_time, stable_count;
...@@ -1004,7 +1006,7 @@ static int hub_port_debounce(struct usb_device *hub, int port) ...@@ -1004,7 +1006,7 @@ static int hub_port_debounce(struct usb_device *hub, int port)
for (delay_time = 0; delay_time < HUB_DEBOUNCE_TIMEOUT; delay_time += HUB_DEBOUNCE_STEP) { for (delay_time = 0; delay_time < HUB_DEBOUNCE_TIMEOUT; delay_time += HUB_DEBOUNCE_STEP) {
msleep(HUB_DEBOUNCE_STEP); msleep(HUB_DEBOUNCE_STEP);
ret = hub_port_status(hub, port, &portstatus, &portchange); ret = hub_port_status(hdev, port, &portstatus, &portchange);
if (ret < 0) if (ret < 0)
return -1; return -1;
...@@ -1019,29 +1021,31 @@ static int hub_port_debounce(struct usb_device *hub, int port) ...@@ -1019,29 +1021,31 @@ static int hub_port_debounce(struct usb_device *hub, int port)
connection = portstatus & USB_PORT_STAT_CONNECTION; connection = portstatus & USB_PORT_STAT_CONNECTION;
if ((portchange & USB_PORT_STAT_C_CONNECTION)) { if ((portchange & USB_PORT_STAT_C_CONNECTION)) {
clear_port_feature(hub, port+1, USB_PORT_FEAT_C_CONNECTION); clear_port_feature(hdev, port+1, USB_PORT_FEAT_C_CONNECTION);
} }
} }
dev_dbg (hubdev (hub), dev_dbg (hubdev (hdev),
"debounce: port %d: delay %dms stable %d status 0x%x\n", "debounce: port %d: delay %dms stable %d status 0x%x\n",
port + 1, delay_time, stable_count, portstatus); port + 1, delay_time, stable_count, portstatus);
return ((portstatus&USB_PORT_STAT_CONNECTION)) ? 0 : 1; return ((portstatus&USB_PORT_STAT_CONNECTION)) ? 0 : 1;
} }
static int hub_set_address(struct usb_device *dev) static int hub_set_address(struct usb_device *udev)
{ {
int retval; int retval;
if (dev->devnum == 0) if (udev->devnum == 0)
return -EINVAL; return -EINVAL;
if (dev->state != USB_STATE_DEFAULT && dev->state != USB_STATE_ADDRESS) if (udev->state != USB_STATE_DEFAULT &&
udev->state != USB_STATE_ADDRESS)
return -EINVAL; return -EINVAL;
retval = usb_control_msg(dev, usb_snddefctrl(dev), USB_REQ_SET_ADDRESS, retval = usb_control_msg(udev, usb_snddefctrl(udev),
0, dev->devnum, 0, NULL, 0, HZ * USB_CTRL_SET_TIMEOUT); USB_REQ_SET_ADDRESS, 0, udev->devnum, 0,
NULL, 0, HZ * USB_CTRL_SET_TIMEOUT);
if (retval == 0) if (retval == 0)
dev->state = USB_STATE_ADDRESS; udev->state = USB_STATE_ADDRESS;
return retval; return retval;
} }
...@@ -1054,18 +1058,18 @@ static int hub_set_address(struct usb_device *dev) ...@@ -1054,18 +1058,18 @@ static int hub_set_address(struct usb_device *dev)
* config changes and disconnect processing. * config changes and disconnect processing.
*/ */
static int static int
hub_port_init (struct usb_device *hub, struct usb_device *dev, int port) hub_port_init (struct usb_device *hdev, struct usb_device *udev, int port)
{ {
static DECLARE_MUTEX(usb_address0_sem); static DECLARE_MUTEX(usb_address0_sem);
int i, j, retval = -ENODEV; int i, j, retval = -ENODEV;
unsigned delay = HUB_SHORT_RESET_TIME; unsigned delay = HUB_SHORT_RESET_TIME;
enum usb_device_speed oldspeed = dev->speed; enum usb_device_speed oldspeed = udev->speed;
/* root hub ports have a slightly longer reset period /* root hub ports have a slightly longer reset period
* (from USB 2.0 spec, section 7.1.7.5) * (from USB 2.0 spec, section 7.1.7.5)
*/ */
if (!hub->parent) if (!hdev->parent)
delay = HUB_ROOT_RESET_TIME; delay = HUB_ROOT_RESET_TIME;
/* Some low speed devices have problems with the quick delay, so */ /* Some low speed devices have problems with the quick delay, so */
...@@ -1076,7 +1080,7 @@ hub_port_init (struct usb_device *hub, struct usb_device *dev, int port) ...@@ -1076,7 +1080,7 @@ hub_port_init (struct usb_device *hub, struct usb_device *dev, int port)
down(&usb_address0_sem); down(&usb_address0_sem);
/* Reset the device; full speed may morph to high speed */ /* Reset the device; full speed may morph to high speed */
switch (hub_port_reset(hub, port, dev, delay)) { switch (hub_port_reset(hdev, port, udev, delay)) {
case 0: /* success, speed is known */ case 0: /* success, speed is known */
break; break;
case 1: /* disconnect, give to companion */ case 1: /* disconnect, give to companion */
...@@ -1085,15 +1089,15 @@ hub_port_init (struct usb_device *hub, struct usb_device *dev, int port) ...@@ -1085,15 +1089,15 @@ hub_port_init (struct usb_device *hub, struct usb_device *dev, int port)
default: /* error */ default: /* error */
goto fail; goto fail;
} }
if (oldspeed != USB_SPEED_UNKNOWN && oldspeed != dev->speed) { if (oldspeed != USB_SPEED_UNKNOWN && oldspeed != udev->speed) {
dev_dbg(&dev->dev, "device reset changed speed!\n"); dev_dbg(&udev->dev, "device reset changed speed!\n");
goto fail; goto fail;
} }
/* USB 2.0 section 5.5.3 talks about ep0 maxpacket ... /* USB 2.0 section 5.5.3 talks about ep0 maxpacket ...
* it's fixed size except for full speed devices. * it's fixed size except for full speed devices.
*/ */
switch (dev->speed) { switch (udev->speed) {
case USB_SPEED_HIGH: /* fixed at 64 */ case USB_SPEED_HIGH: /* fixed at 64 */
i = 64; i = 64;
break; break;
...@@ -1109,43 +1113,43 @@ hub_port_init (struct usb_device *hub, struct usb_device *dev, int port) ...@@ -1109,43 +1113,43 @@ hub_port_init (struct usb_device *hub, struct usb_device *dev, int port)
default: default:
goto fail; goto fail;
} }
dev->epmaxpacketin [0] = i; udev->epmaxpacketin [0] = i;
dev->epmaxpacketout[0] = i; udev->epmaxpacketout[0] = i;
/* set the address */ /* set the address */
if (dev->devnum <= 0) { if (udev->devnum <= 0) {
usb_choose_address(dev); usb_choose_address(udev);
if (dev->devnum <= 0) if (udev->devnum <= 0)
goto fail; goto fail;
/* Set up TT records, if needed */ /* Set up TT records, if needed */
if (hub->tt) { if (hdev->tt) {
dev->tt = hub->tt; udev->tt = hdev->tt;
dev->ttport = hub->ttport; udev->ttport = hdev->ttport;
} else if (dev->speed != USB_SPEED_HIGH } else if (udev->speed != USB_SPEED_HIGH
&& hub->speed == USB_SPEED_HIGH) { && hdev->speed == USB_SPEED_HIGH) {
struct usb_hub *hubstate; struct usb_hub *hub;
hubstate = usb_get_intfdata (hub->actconfig hub = usb_get_intfdata (hdev->actconfig
->interface[0]); ->interface[0]);
dev->tt = &hubstate->tt; udev->tt = &hub->tt;
dev->ttport = port + 1; udev->ttport = port + 1;
} }
/* force the right log message (below) at low speed */ /* force the right log message (below) at low speed */
oldspeed = USB_SPEED_UNKNOWN; oldspeed = USB_SPEED_UNKNOWN;
} }
dev_info (&dev->dev, dev_info (&udev->dev,
"%s %s speed USB device using address %d\n", "%s %s speed USB device using address %d\n",
(oldspeed == USB_SPEED_UNKNOWN) ? "new" : "reset", (oldspeed == USB_SPEED_UNKNOWN) ? "new" : "reset",
({ char *speed; switch (dev->speed) { ({ char *speed; switch (udev->speed) {
case USB_SPEED_LOW: speed = "low"; break; case USB_SPEED_LOW: speed = "low"; break;
case USB_SPEED_FULL: speed = "full"; break; case USB_SPEED_FULL: speed = "full"; break;
case USB_SPEED_HIGH: speed = "high"; break; case USB_SPEED_HIGH: speed = "high"; break;
default: speed = "?"; break; default: speed = "?"; break;
}; speed;}), }; speed;}),
dev->devnum); udev->devnum);
/* Why interleave GET_DESCRIPTOR and SET_ADDRESS this way? /* Why interleave GET_DESCRIPTOR and SET_ADDRESS this way?
* Because device hardware and firmware is sometimes buggy in * Because device hardware and firmware is sometimes buggy in
...@@ -1158,19 +1162,19 @@ hub_port_init (struct usb_device *hub, struct usb_device *dev, int port) ...@@ -1158,19 +1162,19 @@ hub_port_init (struct usb_device *hub, struct usb_device *dev, int port)
*/ */
for (i = 0; i < GET_DESCRIPTOR_TRIES; ++i) { for (i = 0; i < GET_DESCRIPTOR_TRIES; ++i) {
for (j = 0; j < SET_ADDRESS_TRIES; ++j) { for (j = 0; j < SET_ADDRESS_TRIES; ++j) {
retval = hub_set_address(dev); retval = hub_set_address(udev);
if (retval >= 0) if (retval >= 0)
break; break;
msleep(200); msleep(200);
} }
if (retval < 0) { if (retval < 0) {
dev_err(&dev->dev, dev_err(&udev->dev,
"device not accepting address %d, error %d\n", "device not accepting address %d, error %d\n",
dev->devnum, retval); udev->devnum, retval);
fail: fail:
hub_port_disable(hub, port); hub_port_disable(hdev, port);
usb_release_address(dev); usb_release_address(udev);
usb_put_dev(dev); usb_put_dev(udev);
up(&usb_address0_sem); up(&usb_address0_sem);
return retval; return retval;
} }
...@@ -1180,31 +1184,31 @@ hub_port_init (struct usb_device *hub, struct usb_device *dev, int port) ...@@ -1180,31 +1184,31 @@ hub_port_init (struct usb_device *hub, struct usb_device *dev, int port)
* - read ep0 maxpacket even for high and low speed, * - read ep0 maxpacket even for high and low speed,
*/ */
msleep(10); msleep(10);
retval = usb_get_device_descriptor(dev, 8); retval = usb_get_device_descriptor(udev, 8);
if (retval >= 8) if (retval >= 8)
break; break;
msleep(100); msleep(100);
} }
if (retval != 8) { if (retval != 8) {
dev_err(&dev->dev, "device descriptor read/%s, error %d\n", dev_err(&udev->dev, "device descriptor read/%s, error %d\n",
"8", retval); "8", retval);
if (retval >= 0) if (retval >= 0)
retval = -EMSGSIZE; retval = -EMSGSIZE;
goto fail; goto fail;
} }
if (dev->speed == USB_SPEED_FULL if (udev->speed == USB_SPEED_FULL
&& (dev->epmaxpacketin [0] && (udev->epmaxpacketin [0]
!= dev->descriptor.bMaxPacketSize0)) { != udev->descriptor.bMaxPacketSize0)) {
usb_disable_endpoint(dev, 0); usb_disable_endpoint(udev, 0);
usb_endpoint_running(dev, 0, 1); usb_endpoint_running(udev, 0, 1);
usb_endpoint_running(dev, 0, 0); usb_endpoint_running(udev, 0, 0);
dev->epmaxpacketin [0] = dev->descriptor.bMaxPacketSize0; udev->epmaxpacketin [0] = udev->descriptor.bMaxPacketSize0;
dev->epmaxpacketout[0] = dev->descriptor.bMaxPacketSize0; udev->epmaxpacketout[0] = udev->descriptor.bMaxPacketSize0;
} }
retval = usb_get_device_descriptor(dev, USB_DT_DEVICE_SIZE); retval = usb_get_device_descriptor(udev, USB_DT_DEVICE_SIZE);
if (retval < (signed)sizeof(dev->descriptor)) { if (retval < (signed)sizeof(udev->descriptor)) {
dev_err(&dev->dev, "device descriptor read/%s, error %d\n", dev_err(&udev->dev, "device descriptor read/%s, error %d\n",
"all", retval); "all", retval);
if (retval >= 0) if (retval >= 0)
retval = -ENOMSG; retval = -ENOMSG;
...@@ -1212,14 +1216,14 @@ hub_port_init (struct usb_device *hub, struct usb_device *dev, int port) ...@@ -1212,14 +1216,14 @@ hub_port_init (struct usb_device *hub, struct usb_device *dev, int port)
} }
/* now dev is visible to other tasks */ /* now dev is visible to other tasks */
hub->children[port] = dev; hdev->children[port] = udev;
up(&usb_address0_sem); up(&usb_address0_sem);
return 0; return 0;
} }
static void static void
check_highspeed (struct usb_hub *hub, struct usb_device *dev, int port) check_highspeed (struct usb_hub *hub, struct usb_device *udev, int port)
{ {
struct usb_qualifier_descriptor *qual; struct usb_qualifier_descriptor *qual;
int status; int status;
...@@ -1228,10 +1232,10 @@ check_highspeed (struct usb_hub *hub, struct usb_device *dev, int port) ...@@ -1228,10 +1232,10 @@ check_highspeed (struct usb_hub *hub, struct usb_device *dev, int port)
if (qual == 0) if (qual == 0)
return; return;
status = usb_get_descriptor (dev, USB_DT_DEVICE_QUALIFIER, 0, status = usb_get_descriptor (udev, USB_DT_DEVICE_QUALIFIER, 0,
qual, sizeof *qual); qual, sizeof *qual);
if (status == sizeof *qual) { if (status == sizeof *qual) {
dev_info(&dev->dev, "not running at top speed; " dev_info(&udev->dev, "not running at top speed; "
"connect to a high speed hub\n"); "connect to a high speed hub\n");
/* hub LEDs are probably harder to miss than syslog */ /* hub LEDs are probably harder to miss than syslog */
if (hub->has_indicators) { if (hub->has_indicators) {
...@@ -1243,31 +1247,31 @@ check_highspeed (struct usb_hub *hub, struct usb_device *dev, int port) ...@@ -1243,31 +1247,31 @@ check_highspeed (struct usb_hub *hub, struct usb_device *dev, int port)
} }
static unsigned static unsigned
hub_power_remaining (struct usb_hub *hubstate, struct usb_device *hub) hub_power_remaining (struct usb_hub *hub, struct usb_device *hdev)
{ {
int remaining; int remaining;
unsigned i; unsigned i;
remaining = hubstate->power_budget; remaining = hub->power_budget;
if (!remaining) /* self-powered */ if (!remaining) /* self-powered */
return 0; return 0;
for (i = 0; i < hub->maxchild; i++) { for (i = 0; i < hdev->maxchild; i++) {
struct usb_device *dev = hub->children[i]; struct usb_device *udev = hdev->children[i];
int delta; int delta;
if (!dev) if (!udev)
continue; continue;
if (dev->actconfig) if (udev->actconfig)
delta = dev->actconfig->desc.bMaxPower; delta = udev->actconfig->desc.bMaxPower;
else else
delta = 50; delta = 50;
// dev_dbg(&dev->dev, "budgeted %dmA\n", 2 * delta); // dev_dbg(&udev->dev, "budgeted %dmA\n", 2 * delta);
remaining -= delta; remaining -= delta;
} }
if (remaining < 0) { if (remaining < 0) {
dev_warn(&hubstate->intf->dev, dev_warn(&hub->intf->dev,
"%dmA over power budget!\n", "%dmA over power budget!\n",
-2 * remaining); -2 * remaining);
remaining = 0; remaining = 0;
...@@ -1275,72 +1279,73 @@ hub_power_remaining (struct usb_hub *hubstate, struct usb_device *hub) ...@@ -1275,72 +1279,73 @@ hub_power_remaining (struct usb_hub *hubstate, struct usb_device *hub)
return remaining; return remaining;
} }
static void hub_port_connect_change(struct usb_hub *hubstate, int port, static void hub_port_connect_change(struct usb_hub *hub, int port,
u16 portstatus, u16 portchange) u16 portstatus, u16 portchange)
{ {
struct usb_device *hub = interface_to_usbdev(hubstate->intf); struct usb_device *hdev = interface_to_usbdev(hub->intf);
struct device *hub_dev = &hub->intf->dev;
int status, i; int status, i;
dev_dbg (&hubstate->intf->dev, dev_dbg (hub_dev,
"port %d, status %04x, change %04x, %s\n", "port %d, status %04x, change %04x, %s\n",
port + 1, portstatus, portchange, portspeed (portstatus)); port + 1, portstatus, portchange, portspeed (portstatus));
/* Clear the connection change status */ /* Clear the connection change status */
clear_port_feature(hub, port + 1, USB_PORT_FEAT_C_CONNECTION); clear_port_feature(hdev, port + 1, USB_PORT_FEAT_C_CONNECTION);
if (hubstate->has_indicators) { if (hub->has_indicators) {
set_port_led(hub, hubstate, port + 1, HUB_LED_AUTO); set_port_led(hdev, port + 1, HUB_LED_AUTO);
hubstate->indicator[port] = INDICATOR_AUTO; hub->indicator[port] = INDICATOR_AUTO;
} }
/* Disconnect any existing devices under this port */ /* Disconnect any existing devices under this port */
if (hub->children[port]) if (hdev->children[port])
usb_disconnect(&hub->children[port]); usb_disconnect(&hdev->children[port]);
/* Return now if nothing is connected */ /* Return now if nothing is connected */
if (!(portstatus & USB_PORT_STAT_CONNECTION)) { if (!(portstatus & USB_PORT_STAT_CONNECTION)) {
/* maybe switch power back on (e.g. root hub was reset) */ /* maybe switch power back on (e.g. root hub was reset) */
if ((hubstate->descriptor->wHubCharacteristics if ((hub->descriptor->wHubCharacteristics
& HUB_CHAR_LPSM) < 2 & HUB_CHAR_LPSM) < 2
&& !(portstatus & (1 << USB_PORT_FEAT_POWER))) && !(portstatus & (1 << USB_PORT_FEAT_POWER)))
set_port_feature(hub, port + 1, USB_PORT_FEAT_POWER); set_port_feature(hdev, port + 1, USB_PORT_FEAT_POWER);
if (portstatus & USB_PORT_STAT_ENABLE) if (portstatus & USB_PORT_STAT_ENABLE)
goto done; goto done;
return; return;
} }
if (hub_port_debounce(hub, port)) { if (hub_port_debounce(hdev, port)) {
dev_err (&hubstate->intf->dev, dev_err (hub_dev,
"connect-debounce failed, port %d disabled\n", "connect-debounce failed, port %d disabled\n",
port+1); port+1);
goto done; goto done;
} }
for (i = 0; i < SET_CONFIG_TRIES; i++) { for (i = 0; i < SET_CONFIG_TRIES; i++) {
struct usb_device *dev; struct usb_device *udev;
/* reallocate for each attempt, since references /* reallocate for each attempt, since references
* to the previous one can escape in various ways * to the previous one can escape in various ways
*/ */
dev = usb_alloc_dev(hub, hub->bus, port); udev = usb_alloc_dev(hdev, hdev->bus, port);
if (!dev) { if (!udev) {
dev_err (&hubstate->intf->dev, dev_err (hub_dev,
"couldn't allocate port %d usb_device\n", port+1); "couldn't allocate port %d usb_device\n", port+1);
goto done; goto done;
} }
dev->state = USB_STATE_POWERED; udev->state = USB_STATE_POWERED;
/* hub can tell if it's lowspeed already: D- pullup (not D+) */ /* hub can tell if it's lowspeed already: D- pullup (not D+) */
if (portstatus & USB_PORT_STAT_LOW_SPEED) if (portstatus & USB_PORT_STAT_LOW_SPEED)
dev->speed = USB_SPEED_LOW; udev->speed = USB_SPEED_LOW;
else else
dev->speed = USB_SPEED_UNKNOWN; udev->speed = USB_SPEED_UNKNOWN;
/* reset, set address, get descriptor, add to hub's children */ /* reset, set address, get descriptor, add to hub's children */
down (&dev->serialize); down (&udev->serialize);
status = hub_port_init(hub, dev, port); status = hub_port_init(hdev, udev, port);
if (status == -EBUSY) if (status == -EBUSY)
break; break;
if (status < 0) if (status < 0)
...@@ -1352,50 +1357,50 @@ static void hub_port_connect_change(struct usb_hub *hubstate, int port, ...@@ -1352,50 +1357,50 @@ static void hub_port_connect_change(struct usb_hub *hubstate, int port,
* (without reading syslog), even without per-port LEDs * (without reading syslog), even without per-port LEDs
* on the parent. * on the parent.
*/ */
if (dev->descriptor.bDeviceClass == USB_CLASS_HUB if (udev->descriptor.bDeviceClass == USB_CLASS_HUB
&& hubstate->power_budget) { && hub->power_budget) {
u16 devstat; u16 devstat;
status = usb_get_status(dev, USB_RECIP_DEVICE, 0, status = usb_get_status(udev, USB_RECIP_DEVICE, 0,
&devstat); &devstat);
if (status < 0) { if (status < 0) {
dev_dbg(&dev->dev, "get status %d ?\n", status); dev_dbg(&udev->dev, "get status %d ?\n", status);
continue; continue;
} }
cpu_to_le16s(&devstat); cpu_to_le16s(&devstat);
if ((devstat & (1 << USB_DEVICE_SELF_POWERED)) == 0) { if ((devstat & (1 << USB_DEVICE_SELF_POWERED)) == 0) {
dev_err(&dev->dev, dev_err(&udev->dev,
"can't connect bus-powered hub " "can't connect bus-powered hub "
"to this port\n"); "to this port\n");
if (hubstate->has_indicators) { if (hub->has_indicators) {
hubstate->indicator[port] = hub->indicator[port] =
INDICATOR_AMBER_BLINK; INDICATOR_AMBER_BLINK;
schedule_work (&hubstate->leds); schedule_work (&hub->leds);
} }
hub->children[port] = NULL; hdev->children[port] = NULL;
usb_put_dev(dev); usb_put_dev(udev);
hub_port_disable(hub, port); hub_port_disable(hdev, port);
return; return;
} }
} }
/* check for devices running slower than they could */ /* check for devices running slower than they could */
if (dev->descriptor.bcdUSB >= 0x0200 if (udev->descriptor.bcdUSB >= 0x0200
&& dev->speed == USB_SPEED_FULL && udev->speed == USB_SPEED_FULL
&& highspeed_hubs != 0) && highspeed_hubs != 0)
check_highspeed (hubstate, dev, port); check_highspeed (hub, udev, port);
/* Run it through the hoops (find a driver, etc) */ /* Run it through the hoops (find a driver, etc) */
status = usb_new_device(dev); status = usb_new_device(udev);
if (status != 0) { if (status != 0) {
hub->children[port] = NULL; hdev->children[port] = NULL;
continue; continue;
} }
up (&dev->serialize); up (&udev->serialize);
status = hub_power_remaining(hubstate, hub); status = hub_power_remaining(hub, hdev);
if (status) if (status)
dev_dbg(&hubstate->intf->dev, dev_dbg(hub_dev,
"%dmA power budget left\n", "%dmA power budget left\n",
2 * status); 2 * status);
...@@ -1403,15 +1408,16 @@ static void hub_port_connect_change(struct usb_hub *hubstate, int port, ...@@ -1403,15 +1408,16 @@ static void hub_port_connect_change(struct usb_hub *hubstate, int port,
} }
done: done:
hub_port_disable(hub, port); hub_port_disable(hdev, port);
} }
static void hub_events(void) static void hub_events(void)
{ {
unsigned long flags; unsigned long flags;
struct list_head *tmp; struct list_head *tmp;
struct usb_device *dev; struct usb_device *hdev;
struct usb_hub *hub; struct usb_hub *hub;
struct device *hub_dev;
u16 hubstatus; u16 hubstatus;
u16 hubchange; u16 hubchange;
u16 portstatus; u16 portstatus;
...@@ -1434,7 +1440,8 @@ static void hub_events(void) ...@@ -1434,7 +1440,8 @@ static void hub_events(void)
tmp = hub_event_list.next; tmp = hub_event_list.next;
hub = list_entry(tmp, struct usb_hub, event_list); hub = list_entry(tmp, struct usb_hub, event_list);
dev = interface_to_usbdev(hub->intf); hdev = interface_to_usbdev(hub->intf);
hub_dev = &hub->intf->dev;
list_del_init(tmp); list_del_init(tmp);
...@@ -1444,14 +1451,14 @@ static void hub_events(void) ...@@ -1444,14 +1451,14 @@ static void hub_events(void)
spin_unlock_irqrestore(&hub_event_lock, flags); spin_unlock_irqrestore(&hub_event_lock, flags);
if (hub->error) { if (hub->error) {
dev_dbg (&hub->intf->dev, "resetting for error %d\n", dev_dbg (hub_dev, "resetting for error %d\n",
hub->error); hub->error);
if (hub_reset(hub)) { if (hub_reset(hub)) {
dev_dbg (&hub->intf->dev, dev_dbg (hub_dev,
"can't reset; disconnecting\n"); "can't reset; disconnecting\n");
up(&hub->khubd_sem); up(&hub->khubd_sem);
hub_start_disconnect(dev); hub_start_disconnect(hdev);
continue; continue;
} }
...@@ -1460,7 +1467,7 @@ static void hub_events(void) ...@@ -1460,7 +1467,7 @@ static void hub_events(void)
} }
for (i = 0; i < hub->descriptor->bNbrPorts; i++) { for (i = 0; i < hub->descriptor->bNbrPorts; i++) {
ret = hub_port_status(dev, i, &portstatus, &portchange); ret = hub_port_status(hdev, i, &portstatus, &portchange);
if (ret < 0) { if (ret < 0) {
continue; continue;
} }
...@@ -1468,10 +1475,10 @@ static void hub_events(void) ...@@ -1468,10 +1475,10 @@ static void hub_events(void)
if (portchange & USB_PORT_STAT_C_CONNECTION) { if (portchange & USB_PORT_STAT_C_CONNECTION) {
hub_port_connect_change(hub, i, portstatus, portchange); hub_port_connect_change(hub, i, portstatus, portchange);
} else if (portchange & USB_PORT_STAT_C_ENABLE) { } else if (portchange & USB_PORT_STAT_C_ENABLE) {
dev_dbg (hubdev (dev), dev_dbg (hub_dev,
"port %d enable change, status %08x\n", "port %d enable change, status %08x\n",
i + 1, portstatus); i + 1, portstatus);
clear_port_feature(dev, clear_port_feature(hdev,
i + 1, USB_PORT_FEAT_C_ENABLE); i + 1, USB_PORT_FEAT_C_ENABLE);
/* /*
...@@ -1482,8 +1489,8 @@ static void hub_events(void) ...@@ -1482,8 +1489,8 @@ static void hub_events(void)
*/ */
if (!(portstatus & USB_PORT_STAT_ENABLE) if (!(portstatus & USB_PORT_STAT_ENABLE)
&& (portstatus & USB_PORT_STAT_CONNECTION) && (portstatus & USB_PORT_STAT_CONNECTION)
&& (dev->children[i])) { && (hdev->children[i])) {
dev_err (&hub->intf->dev, dev_err (hub_dev,
"port %i " "port %i "
"disabled by hub (EMI?), " "disabled by hub (EMI?), "
"re-enabling...", "re-enabling...",
...@@ -1494,43 +1501,43 @@ static void hub_events(void) ...@@ -1494,43 +1501,43 @@ static void hub_events(void)
} }
if (portchange & USB_PORT_STAT_C_SUSPEND) { if (portchange & USB_PORT_STAT_C_SUSPEND) {
dev_dbg (&hub->intf->dev, dev_dbg (hub_dev,
"suspend change on port %d\n", "suspend change on port %d\n",
i + 1); i + 1);
clear_port_feature(dev, clear_port_feature(hdev,
i + 1, USB_PORT_FEAT_C_SUSPEND); i + 1, USB_PORT_FEAT_C_SUSPEND);
} }
if (portchange & USB_PORT_STAT_C_OVERCURRENT) { if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
dev_err (&hub->intf->dev, dev_err (hub_dev,
"over-current change on port %d\n", "over-current change on port %d\n",
i + 1); i + 1);
clear_port_feature(dev, clear_port_feature(hdev,
i + 1, USB_PORT_FEAT_C_OVER_CURRENT); i + 1, USB_PORT_FEAT_C_OVER_CURRENT);
hub_power_on(hub); hub_power_on(hub);
} }
if (portchange & USB_PORT_STAT_C_RESET) { if (portchange & USB_PORT_STAT_C_RESET) {
dev_dbg (&hub->intf->dev, dev_dbg (hub_dev,
"reset change on port %d\n", "reset change on port %d\n",
i + 1); i + 1);
clear_port_feature(dev, clear_port_feature(hdev,
i + 1, USB_PORT_FEAT_C_RESET); i + 1, USB_PORT_FEAT_C_RESET);
} }
} /* end for i */ } /* end for i */
/* deal with hub status changes */ /* deal with hub status changes */
if (hub_hub_status(hub, &hubstatus, &hubchange) < 0) if (hub_hub_status(hub, &hubstatus, &hubchange) < 0)
dev_err (&hub->intf->dev, "get_hub_status failed\n"); dev_err (hub_dev, "get_hub_status failed\n");
else { else {
if (hubchange & HUB_CHANGE_LOCAL_POWER) { if (hubchange & HUB_CHANGE_LOCAL_POWER) {
dev_dbg (&hub->intf->dev, "power change\n"); dev_dbg (hub_dev, "power change\n");
clear_hub_feature(dev, C_HUB_LOCAL_POWER); clear_hub_feature(hdev, C_HUB_LOCAL_POWER);
} }
if (hubchange & HUB_CHANGE_OVERCURRENT) { if (hubchange & HUB_CHANGE_OVERCURRENT) {
dev_dbg (&hub->intf->dev, "overcurrent change\n"); dev_dbg (hub_dev, "overcurrent change\n");
msleep(500); /* Cool down */ msleep(500); /* Cool down */
clear_hub_feature(dev, C_HUB_OVER_CURRENT); clear_hub_feature(hdev, C_HUB_OVER_CURRENT);
hub_power_on(hub); hub_power_on(hub);
} }
} }
...@@ -1540,7 +1547,7 @@ static void hub_events(void) ...@@ -1540,7 +1547,7 @@ static void hub_events(void)
spin_unlock_irqrestore(&hub_event_lock, flags); spin_unlock_irqrestore(&hub_event_lock, flags);
} }
static int hub_thread(void *__hub) static int hub_thread(void *__unused)
{ {
/* /*
* This thread doesn't need any user-level access, * This thread doesn't need any user-level access,
...@@ -1628,36 +1635,36 @@ void usb_hub_cleanup(void) ...@@ -1628,36 +1635,36 @@ void usb_hub_cleanup(void)
} /* usb_hub_cleanup() */ } /* usb_hub_cleanup() */
static int config_descriptors_changed(struct usb_device *dev) static int config_descriptors_changed(struct usb_device *udev)
{ {
unsigned index; unsigned index;
unsigned len = 0; unsigned len = 0;
struct usb_config_descriptor *buf; struct usb_config_descriptor *buf;
for (index = 0; index < dev->descriptor.bNumConfigurations; index++) { for (index = 0; index < udev->descriptor.bNumConfigurations; index++) {
if (len < dev->config[index].desc.wTotalLength) if (len < udev->config[index].desc.wTotalLength)
len = dev->config[index].desc.wTotalLength; len = udev->config[index].desc.wTotalLength;
} }
buf = kmalloc (len, SLAB_KERNEL); buf = kmalloc (len, SLAB_KERNEL);
if (buf == 0) { if (buf == 0) {
dev_err(&dev->dev, "no mem to re-read configs after reset\n"); dev_err(&udev->dev, "no mem to re-read configs after reset\n");
/* assume the worst */ /* assume the worst */
return 1; return 1;
} }
for (index = 0; index < dev->descriptor.bNumConfigurations; index++) { for (index = 0; index < udev->descriptor.bNumConfigurations; index++) {
int length; int length;
int old_length = dev->config[index].desc.wTotalLength; int old_length = udev->config[index].desc.wTotalLength;
length = usb_get_descriptor(dev, USB_DT_CONFIG, index, buf, length = usb_get_descriptor(udev, USB_DT_CONFIG, index, buf,
old_length); old_length);
if (length < old_length) { if (length < old_length) {
dev_dbg(&dev->dev, "config index %d, error %d\n", dev_dbg(&udev->dev, "config index %d, error %d\n",
index, length); index, length);
break; break;
} }
if (memcmp (buf, dev->rawdescriptors[index], old_length) if (memcmp (buf, udev->rawdescriptors[index], old_length)
!= 0) { != 0) {
dev_dbg(&dev->dev, "config index %d changed (#%d)\n", dev_dbg(&udev->dev, "config index %d changed (#%d)\n",
index, buf->bConfigurationValue); index, buf->bConfigurationValue);
/* FIXME enable this when we can re-enumerate after reset; /* FIXME enable this when we can re-enumerate after reset;
* until then DFU-ish drivers need this and other workarounds * until then DFU-ish drivers need this and other workarounds
...@@ -1666,7 +1673,7 @@ static int config_descriptors_changed(struct usb_device *dev) ...@@ -1666,7 +1673,7 @@ static int config_descriptors_changed(struct usb_device *dev)
} }
} }
kfree(buf); kfree(buf);
return index != dev->descriptor.bNumConfigurations; return index != udev->descriptor.bNumConfigurations;
} }
/* /*
...@@ -1678,22 +1685,22 @@ static int config_descriptors_changed(struct usb_device *dev) ...@@ -1678,22 +1685,22 @@ static int config_descriptors_changed(struct usb_device *dev)
* already holds dev->serialize. For example, it's safe to use * already holds dev->serialize. For example, it's safe to use
* this from a driver probe() routine after downloading new firmware. * this from a driver probe() routine after downloading new firmware.
*/ */
int __usb_reset_device(struct usb_device *dev) int __usb_reset_device(struct usb_device *udev)
{ {
struct usb_device *parent = dev->parent; struct usb_device *parent = udev->parent;
struct usb_device_descriptor descriptor = dev->descriptor; struct usb_device_descriptor descriptor = udev->descriptor;
int i, ret, port = -1; int i, ret, port = -1;
if (dev->maxchild) { if (udev->maxchild) {
/* this requires hub- or hcd-specific logic; /* this requires hub- or hcd-specific logic;
* see hub_reset() and OHCI hc_restart() * see hub_reset() and OHCI hc_restart()
*/ */
dev_dbg(&dev->dev, "%s for hub!\n", __FUNCTION__); dev_dbg(&udev->dev, "%s for hub!\n", __FUNCTION__);
return -EINVAL; return -EINVAL;
} }
for (i = 0; i < parent->maxchild; i++) for (i = 0; i < parent->maxchild; i++)
if (parent->children[i] == dev) { if (parent->children[i] == udev) {
port = i; port = i;
break; break;
} }
...@@ -1701,45 +1708,45 @@ int __usb_reset_device(struct usb_device *dev) ...@@ -1701,45 +1708,45 @@ int __usb_reset_device(struct usb_device *dev)
if (port < 0) if (port < 0)
return -ENOENT; return -ENOENT;
ret = hub_port_init(parent, dev, port); ret = hub_port_init(parent, udev, port);
if (ret < 0) if (ret < 0)
goto re_enumerate; goto re_enumerate;
/* Device might have changed firmware (DFU or similar) */ /* Device might have changed firmware (DFU or similar) */
if (memcmp(&dev->descriptor, &descriptor, sizeof descriptor) if (memcmp(&udev->descriptor, &descriptor, sizeof descriptor)
|| config_descriptors_changed (dev)) { || config_descriptors_changed (udev)) {
dev_info(&dev->dev, "device firmware changed\n"); dev_info(&udev->dev, "device firmware changed\n");
dev->descriptor = descriptor; /* for disconnect() calls */ udev->descriptor = descriptor; /* for disconnect() calls */
goto re_enumerate; goto re_enumerate;
} }
if (!dev->actconfig) if (!udev->actconfig)
return 0; return 0;
ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
USB_REQ_SET_CONFIGURATION, 0, USB_REQ_SET_CONFIGURATION, 0,
dev->actconfig->desc.bConfigurationValue, 0, udev->actconfig->desc.bConfigurationValue, 0,
NULL, 0, HZ * USB_CTRL_SET_TIMEOUT); NULL, 0, HZ * USB_CTRL_SET_TIMEOUT);
if (ret < 0) { if (ret < 0) {
dev_err(&dev->dev, dev_err(&udev->dev,
"can't restore configuration #%d (error=%d)\n", "can't restore configuration #%d (error=%d)\n",
dev->actconfig->desc.bConfigurationValue, ret); udev->actconfig->desc.bConfigurationValue, ret);
goto re_enumerate; goto re_enumerate;
} }
dev->state = USB_STATE_CONFIGURED; udev->state = USB_STATE_CONFIGURED;
for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) { for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) {
struct usb_interface *intf = dev->actconfig->interface[i]; struct usb_interface *intf = udev->actconfig->interface[i];
struct usb_interface_descriptor *desc; struct usb_interface_descriptor *desc;
/* set_interface resets host side toggle and halt status even /* set_interface resets host side toggle and halt status even
* for altsetting zero. the interface may have no driver. * for altsetting zero. the interface may have no driver.
*/ */
desc = &intf->cur_altsetting->desc; desc = &intf->cur_altsetting->desc;
ret = usb_set_interface(dev, desc->bInterfaceNumber, ret = usb_set_interface(udev, desc->bInterfaceNumber,
desc->bAlternateSetting); desc->bAlternateSetting);
if (ret < 0) { if (ret < 0) {
dev_err(&dev->dev, "failed to restore interface %d " dev_err(&udev->dev, "failed to restore interface %d "
"altsetting %d (error=%d)\n", "altsetting %d (error=%d)\n",
desc->bInterfaceNumber, desc->bInterfaceNumber,
desc->bAlternateSetting, desc->bAlternateSetting,
...@@ -1752,7 +1759,7 @@ int __usb_reset_device(struct usb_device *dev) ...@@ -1752,7 +1759,7 @@ int __usb_reset_device(struct usb_device *dev)
re_enumerate: re_enumerate:
/* FIXME make some task re-enumerate; don't just mark unusable */ /* FIXME make some task re-enumerate; don't just mark unusable */
dev->state = USB_STATE_NOTATTACHED; udev->state = USB_STATE_NOTATTACHED;
return -ENODEV; return -ENODEV;
} }
EXPORT_SYMBOL(__usb_reset_device); EXPORT_SYMBOL(__usb_reset_device);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment