usb: implement a usb_host_detect to scan individual USB hosts
Currently we can only (re)scan all USB hosts. Add a function to scan individual hosts. This is useful for implementing the detect callback in the next patch. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
31879ed96f
commit
8f5889eb0a
|
@ -488,20 +488,18 @@ static struct usb_device *usb_alloc_new_device(void)
|
|||
return usbdev;
|
||||
}
|
||||
|
||||
static int scanned;
|
||||
|
||||
void usb_rescan(int force)
|
||||
int usb_host_detect(struct usb_host *host, int force)
|
||||
{
|
||||
struct usb_device *dev, *tmp;
|
||||
struct usb_host *host;
|
||||
int ret;
|
||||
|
||||
if (scanned && !force)
|
||||
return;
|
||||
|
||||
scanned = 1;
|
||||
if (host->scanned && !force)
|
||||
return -EBUSY;
|
||||
|
||||
list_for_each_entry_safe(dev, tmp, &usb_device_list, list) {
|
||||
if (dev->host != host)
|
||||
continue;
|
||||
|
||||
list_del(&dev->list);
|
||||
unregister_device(&dev->dev);
|
||||
if (dev->hub)
|
||||
|
@ -511,17 +509,31 @@ void usb_rescan(int force)
|
|||
free(dev);
|
||||
}
|
||||
|
||||
ret = host->init(host);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
dev = usb_alloc_new_device();
|
||||
dev->host = host;
|
||||
usb_new_device(dev);
|
||||
|
||||
host->scanned = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void usb_rescan(int force)
|
||||
{
|
||||
struct usb_host *host;
|
||||
int ret;
|
||||
|
||||
printf("USB: scanning bus for devices...\n");
|
||||
dev_index = 0;
|
||||
|
||||
list_for_each_entry(host, &host_list, list) {
|
||||
ret = host->init(host);
|
||||
ret = usb_host_detect(host, force);
|
||||
if (ret)
|
||||
continue;
|
||||
|
||||
dev = usb_alloc_new_device();
|
||||
dev->host = host;
|
||||
usb_new_device(dev);
|
||||
}
|
||||
|
||||
printf("%d USB Device(s) found\n", dev_index);
|
||||
|
|
|
@ -211,10 +211,13 @@ struct usb_host {
|
|||
struct list_head list;
|
||||
|
||||
int busnum;
|
||||
int scanned;
|
||||
};
|
||||
|
||||
int usb_register_host(struct usb_host *);
|
||||
|
||||
int usb_host_detect(struct usb_host *host, int force);
|
||||
|
||||
/* Defines */
|
||||
#define USB_UHCI_VEND_ID 0x8086
|
||||
#define USB_UHCI_DEV_ID 0x7112
|
||||
|
|
Loading…
Reference in New Issue