Added better checks for GL84x chips

merge-requests/1/head
m. allan noah 2009-08-01 10:16:02 -04:00
rodzic 19929d7108
commit 7f45993f26
1 zmienionych plików z 37 dodań i 18 usunięć

Wyświetl plik

@ -1725,8 +1725,12 @@ check_gl660_gl646 (struct usb_device *dev)
/* the various incarnations could be distinguished by the /* the various incarnations could be distinguished by the
* bcdDevice entry: * bcdDevice entry:
* >= 0x400 --> GL843 ( >= 0x500 --> 845???) * > 0x700 --> GL848+?
* >= 0x306 --> GL842 (probably >= 0x303???) * >= 0x603 --> GL847
* >= 0x600 --> GL846
* >= 0x500 --> GL845
* >= 0x400 --> GL843
* >= 0x300 --> GL842 (perhaps only >= 0x303 ?)
* >= 0x200 --> GL841 * >= 0x200 --> GL841
*/ */
static char * static char *
@ -1746,7 +1750,7 @@ check_gl841 (struct usb_device *dev)
{ {
if (verbose > 2) if (verbose > 2)
printf printf
(" this is not a GL841 (bDeviceClass = %d, bInterfaceClass = %d)\n", (" this is not a GL84x (bDeviceClass = %d, bInterfaceClass = %d)\n",
dev->descriptor.bDeviceClass, dev->descriptor.bDeviceClass,
dev->config[0].interface[0].altsetting[0].bInterfaceClass); dev->config[0].interface[0].altsetting[0].bInterfaceClass);
return 0; return 0;
@ -1754,21 +1758,21 @@ check_gl841 (struct usb_device *dev)
if (dev->descriptor.bcdUSB != 0x200) if (dev->descriptor.bcdUSB != 0x200)
{ {
if (verbose > 2) if (verbose > 2)
printf (" this is not a GL841 (bcdUSB = 0x%x)\n", printf (" this is not a GL84x (bcdUSB = 0x%x)\n",
dev->descriptor.bcdUSB); dev->descriptor.bcdUSB);
return 0; return 0;
} }
if (dev->descriptor.bDeviceSubClass != 0xff) if (dev->descriptor.bDeviceSubClass != 0xff)
{ {
if (verbose > 2) if (verbose > 2)
printf (" this is not a GL841 (bDeviceSubClass = 0x%x)\n", printf (" this is not a GL84x (bDeviceSubClass = 0x%x)\n",
dev->descriptor.bDeviceSubClass); dev->descriptor.bDeviceSubClass);
return 0; return 0;
} }
if (dev->descriptor.bDeviceProtocol != 0xff) if (dev->descriptor.bDeviceProtocol != 0xff)
{ {
if (verbose > 2) if (verbose > 2)
printf (" this is not a GL841 (bDeviceProtocol = 0x%x)\n", printf (" this is not a GL84x (bDeviceProtocol = 0x%x)\n",
dev->descriptor.bDeviceProtocol); dev->descriptor.bDeviceProtocol);
return 0; return 0;
} }
@ -1777,7 +1781,7 @@ check_gl841 (struct usb_device *dev)
if (dev->config[0].interface[0].altsetting[0].bNumEndpoints != 3) if (dev->config[0].interface[0].altsetting[0].bNumEndpoints != 3)
{ {
if (verbose > 2) if (verbose > 2)
printf (" this is not a GL841 (bNumEndpoints = %d)\n", printf (" this is not a GL84x (bNumEndpoints = %d)\n",
dev->config[0].interface[0].altsetting[0].bNumEndpoints); dev->config[0].interface[0].altsetting[0].bNumEndpoints);
return 0; return 0;
} }
@ -1795,7 +1799,7 @@ check_gl841 (struct usb_device *dev)
{ {
if (verbose > 2) if (verbose > 2)
printf printf
(" this is not a GL841 (bEndpointAddress = 0x%x, bmAttributes = 0x%x, " (" this is not a GL84x (bEndpointAddress = 0x%x, bmAttributes = 0x%x, "
"wMaxPacketSize = 0x%x, bInterval = 0x%x)\n", "wMaxPacketSize = 0x%x, bInterval = 0x%x)\n",
dev->config[0].interface[0].altsetting[0].endpoint[0]. dev->config[0].interface[0].altsetting[0].endpoint[0].
bEndpointAddress, bEndpointAddress,
@ -1819,7 +1823,7 @@ check_gl841 (struct usb_device *dev)
{ {
if (verbose > 2) if (verbose > 2)
printf printf
(" this is not a GL841 (bEndpointAddress = 0x%x, bmAttributes = 0x%x, " (" this is not a GL84x (bEndpointAddress = 0x%x, bmAttributes = 0x%x, "
"wMaxPacketSize = 0x%x, bInterval = 0x%x)\n", "wMaxPacketSize = 0x%x, bInterval = 0x%x)\n",
dev->config[0].interface[0].altsetting[0].endpoint[1]. dev->config[0].interface[0].altsetting[0].endpoint[1].
bEndpointAddress, bEndpointAddress,
@ -1843,7 +1847,7 @@ check_gl841 (struct usb_device *dev)
{ {
if (verbose > 2) if (verbose > 2)
printf printf
(" this is not a GL841 (bEndpointAddress = 0x%x, bmAttributes = 0x%x, " (" this is not a GL84x (bEndpointAddress = 0x%x, bmAttributes = 0x%x, "
"wMaxPacketSize = 0x%x, bInterval = 0x%x)\n", "wMaxPacketSize = 0x%x, bInterval = 0x%x)\n",
dev->config[0].interface[0].altsetting[0].endpoint[2]. dev->config[0].interface[0].altsetting[0].endpoint[2].
bEndpointAddress, bEndpointAddress,
@ -1856,10 +1860,18 @@ check_gl841 (struct usb_device *dev)
result = prepare_interface (dev, &handle); result = prepare_interface (dev, &handle);
if (!result) { if (!result) {
if (dev->descriptor.bcdDevice >= 0x700)
return "GL848+?";
if (dev->descriptor.bcdDevice >= 0x603)
return "GL847?";
if (dev->descriptor.bcdDevice >= 0x600)
return "GL846?";
if (dev->descriptor.bcdDevice >= 0x500)
return "GL845?";
if (dev->descriptor.bcdDevice >= 0x400) if (dev->descriptor.bcdDevice >= 0x400)
return "GL843?"; return "GL843?";
if (dev->descriptor.bcdDevice >= 0x306) if (dev->descriptor.bcdDevice >= 0x300)
return "GL842"; return "GL842?";
else else
return "GL841?"; return "GL841?";
} }
@ -1868,7 +1880,7 @@ check_gl841 (struct usb_device *dev)
if (!result) if (!result)
{ {
if (verbose > 2) if (verbose > 2)
printf (" this is not a GL841 (writing register failed)\n"); printf (" this is not a GL84x (writing register failed)\n");
finish_interface (handle); finish_interface (handle);
return 0; return 0;
} }
@ -1877,7 +1889,7 @@ check_gl841 (struct usb_device *dev)
if (!result) if (!result)
{ {
if (verbose > 2) if (verbose > 2)
printf (" this is not a GL841 (reading register failed)\n"); printf (" this is not a GL84x (reading register failed)\n");
finish_interface (handle); finish_interface (handle);
return 0; return 0;
} }
@ -1885,17 +1897,24 @@ check_gl841 (struct usb_device *dev)
if (val != 0x15) if (val != 0x15)
{ {
if (verbose > 2) if (verbose > 2)
printf (" this is not a GL841 (reg 0x38 != 0x15)\n"); printf (" this is not a GL84x (reg 0x38 != 0x15)\n");
finish_interface (handle); finish_interface (handle);
return 0; return 0;
} }
finish_interface (handle); finish_interface (handle);
if (dev->descriptor.bcdDevice >= 0x700)
return "GL848+";
if (dev->descriptor.bcdDevice >= 0x603)
return "GL847";
if (dev->descriptor.bcdDevice >= 0x600)
return "GL846";
if (dev->descriptor.bcdDevice >= 0x500)
return "GL845";
if (dev->descriptor.bcdDevice >= 0x400) if (dev->descriptor.bcdDevice >= 0x400)
return "GL843"; return "GL843";
if (dev->descriptor.bcdDevice >= 0x300)
if (dev->descriptor.bcdDevice >= 0x306)
return "GL842"; return "GL842";
return "GL841"; return "GL841";
} }