Revision 3991c35e
b/usb-linux.c | ||
---|---|---|
1056 | 1056 |
} |
1057 | 1057 |
|
1058 | 1058 |
static int usb_host_open(USBHostDevice *dev, int bus_num, |
1059 |
int addr, char *port, const char *prod_name)
|
|
1059 |
int addr, char *port, const char *prod_name, int speed)
|
|
1060 | 1060 |
{ |
1061 | 1061 |
int fd = -1, ret; |
1062 |
struct usbdevfs_connectinfo ci; |
|
1063 | 1062 |
char buf[1024]; |
1064 | 1063 |
|
1065 | 1064 |
if (dev->fd != -1) { |
... | ... | |
1114 | 1113 |
goto fail; |
1115 | 1114 |
} |
1116 | 1115 |
|
1117 |
ret = ioctl(fd, USBDEVFS_CONNECTINFO, &ci); |
|
1118 |
if (ret < 0) { |
|
1119 |
perror("usb_host_device_open: USBDEVFS_CONNECTINFO"); |
|
1120 |
goto fail; |
|
1121 |
} |
|
1122 |
|
|
1123 |
printf("husb: grabbed usb device %d.%d\n", bus_num, addr); |
|
1124 |
|
|
1125 | 1116 |
ret = usb_linux_update_endp_table(dev); |
1126 | 1117 |
if (ret) { |
1127 | 1118 |
goto fail; |
1128 | 1119 |
} |
1129 | 1120 |
|
1130 |
if (ci.slow) { |
|
1131 |
dev->dev.speed = USB_SPEED_LOW; |
|
1132 |
} else { |
|
1133 |
dev->dev.speed = USB_SPEED_HIGH; |
|
1121 |
if (speed == -1) { |
|
1122 |
struct usbdevfs_connectinfo ci; |
|
1123 |
|
|
1124 |
ret = ioctl(fd, USBDEVFS_CONNECTINFO, &ci); |
|
1125 |
if (ret < 0) { |
|
1126 |
perror("usb_host_device_open: USBDEVFS_CONNECTINFO"); |
|
1127 |
goto fail; |
|
1128 |
} |
|
1129 |
|
|
1130 |
if (ci.slow) { |
|
1131 |
speed = USB_SPEED_LOW; |
|
1132 |
} else { |
|
1133 |
speed = USB_SPEED_HIGH; |
|
1134 |
} |
|
1134 | 1135 |
} |
1136 |
dev->dev.speed = speed; |
|
1137 |
|
|
1138 |
printf("husb: grabbed usb device %d.%d\n", bus_num, addr); |
|
1135 | 1139 |
|
1136 | 1140 |
if (!prod_name || prod_name[0] == '\0') { |
1137 | 1141 |
snprintf(dev->dev.product_desc, sizeof(dev->dev.product_desc), |
... | ... | |
1345 | 1349 |
} |
1346 | 1350 |
|
1347 | 1351 |
device_count = 0; |
1348 |
bus_num = addr = speed = class_id = product_id = vendor_id = 0; |
|
1352 |
bus_num = addr = class_id = product_id = vendor_id = 0; |
|
1353 |
speed = -1; /* Can't get the speed from /[proc|dev]/bus/usb/devices */ |
|
1349 | 1354 |
for(;;) { |
1350 | 1355 |
if (fgets(line, sizeof(line), f) == NULL) { |
1351 | 1356 |
break; |
... | ... | |
1655 | 1660 |
} |
1656 | 1661 |
DPRINTF("husb: auto open: bus_num %d addr %d\n", bus_num, addr); |
1657 | 1662 |
|
1658 |
usb_host_open(s, bus_num, addr, port, product_name); |
|
1663 |
usb_host_open(s, bus_num, addr, port, product_name, speed);
|
|
1659 | 1664 |
} |
1660 | 1665 |
|
1661 | 1666 |
return 0; |
Also available in: Unified diff