mirror of https://gitee.com/openkylin/linux.git
USB: reorganize code in hub.c
This patch (as1045) reorganizes some code in the hub driver. hub_port_status() is moved earlier in the file, and a new hub_stop() routine is created to do the work currently in hub_preset() (i.e., disconnect all child devices and quiesce the hub). There are no functional changes. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
3bb1af5243
commit
3eb14915a3
|
@ -333,6 +333,27 @@ static int get_port_status(struct usb_device *hdev, int port1,
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int hub_port_status(struct usb_hub *hub, int port1,
|
||||||
|
u16 *status, u16 *change)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
mutex_lock(&hub->status_mutex);
|
||||||
|
ret = get_port_status(hub->hdev, port1, &hub->status->port);
|
||||||
|
if (ret < 4) {
|
||||||
|
dev_err(hub->intfdev,
|
||||||
|
"%s failed (err = %d)\n", __func__, ret);
|
||||||
|
if (ret >= 0)
|
||||||
|
ret = -EIO;
|
||||||
|
} else {
|
||||||
|
*status = le16_to_cpu(hub->status->port.wPortStatus);
|
||||||
|
*change = le16_to_cpu(hub->status->port.wPortChange);
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
mutex_unlock(&hub->status_mutex);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static void kick_khubd(struct usb_hub *hub)
|
static void kick_khubd(struct usb_hub *hub)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
@ -610,9 +631,8 @@ static void hub_port_logical_disconnect(struct usb_hub *hub, int port1)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* caller has locked the hub device */
|
/* caller has locked the hub device */
|
||||||
static int hub_pre_reset(struct usb_interface *intf)
|
static void hub_stop(struct usb_hub *hub)
|
||||||
{
|
{
|
||||||
struct usb_hub *hub = usb_get_intfdata(intf);
|
|
||||||
struct usb_device *hdev = hub->hdev;
|
struct usb_device *hdev = hub->hdev;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -622,6 +642,14 @@ static int hub_pre_reset(struct usb_interface *intf)
|
||||||
usb_disconnect(&hdev->children[i]);
|
usb_disconnect(&hdev->children[i]);
|
||||||
}
|
}
|
||||||
hub_quiesce(hub);
|
hub_quiesce(hub);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* caller has locked the hub device */
|
||||||
|
static int hub_pre_reset(struct usb_interface *intf)
|
||||||
|
{
|
||||||
|
struct usb_hub *hub = usb_get_intfdata(intf);
|
||||||
|
|
||||||
|
hub_stop(hub);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -910,7 +938,7 @@ static void hub_disconnect(struct usb_interface *intf)
|
||||||
|
|
||||||
/* Disconnect all children and quiesce the hub */
|
/* Disconnect all children and quiesce the hub */
|
||||||
hub->error = 0;
|
hub->error = 0;
|
||||||
hub_pre_reset(intf);
|
hub_stop(hub);
|
||||||
|
|
||||||
usb_set_intfdata (intf, NULL);
|
usb_set_intfdata (intf, NULL);
|
||||||
|
|
||||||
|
@ -1510,28 +1538,6 @@ int usb_authorize_device(struct usb_device *usb_dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int hub_port_status(struct usb_hub *hub, int port1,
|
|
||||||
u16 *status, u16 *change)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
mutex_lock(&hub->status_mutex);
|
|
||||||
ret = get_port_status(hub->hdev, port1, &hub->status->port);
|
|
||||||
if (ret < 4) {
|
|
||||||
dev_err (hub->intfdev,
|
|
||||||
"%s failed (err = %d)\n", __FUNCTION__, ret);
|
|
||||||
if (ret >= 0)
|
|
||||||
ret = -EIO;
|
|
||||||
} else {
|
|
||||||
*status = le16_to_cpu(hub->status->port.wPortStatus);
|
|
||||||
*change = le16_to_cpu(hub->status->port.wPortChange);
|
|
||||||
ret = 0;
|
|
||||||
}
|
|
||||||
mutex_unlock(&hub->status_mutex);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Returns 1 if @hub is a WUSB root hub, 0 otherwise */
|
/* Returns 1 if @hub is a WUSB root hub, 0 otherwise */
|
||||||
static unsigned hub_is_wusb(struct usb_hub *hub)
|
static unsigned hub_is_wusb(struct usb_hub *hub)
|
||||||
{
|
{
|
||||||
|
@ -2726,7 +2732,7 @@ static void hub_events(void)
|
||||||
/* If the hub has died, clean up after it */
|
/* If the hub has died, clean up after it */
|
||||||
if (hdev->state == USB_STATE_NOTATTACHED) {
|
if (hdev->state == USB_STATE_NOTATTACHED) {
|
||||||
hub->error = -ENODEV;
|
hub->error = -ENODEV;
|
||||||
hub_pre_reset(intf);
|
hub_stop(hub);
|
||||||
goto loop;
|
goto loop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue