Update of /cvsroot/alsa/alsa-driver/usb
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3817
Modified Files:
usbcompat.c
Log Message:
fix device matching logic; call original usb_deregister in wrapper
Index: usbcompat.c
===================================================================
RCS file: /cvsroot/alsa/alsa-driver/usb/usbcompat.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- usbcompat.c 17 Mar 2004 13:08:45 -0000 1.3
+++ usbcompat.c 1 Apr 2004 06:42:05 -0000 1.4
@@ -52,24 +52,6 @@
#define USB_DEVICE_ID_MATCH_INT_SUBCLASS 0x0100
#define USB_DEVICE_ID_MATCH_INT_PROTOCOL 0x0200
-#define USB_DEVICE_ID_MATCH_DEVICE (USB_DEVICE_ID_MATCH_VENDOR |
USB_DEVICE_ID_MATCH_PRODUCT)
-#define USB_DEVICE_ID_MATCH_DEV_RANGE (USB_DEVICE_ID_MATCH_DEV_LO |
USB_DEVICE_ID_MATCH_DEV_HI)
-#define USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION (USB_DEVICE_ID_MATCH_DEVICE |
USB_DEVICE_ID_MATCH_DEV_RANGE)
-#define USB_DEVICE_ID_MATCH_DEV_INFO \
- (USB_DEVICE_ID_MATCH_DEV_CLASS | USB_DEVICE_ID_MATCH_DEV_SUBCLASS |
USB_DEVICE_ID_MATCH_DEV_PROTOCOL)
-#define USB_DEVICE_ID_MATCH_INT_INFO \
- (USB_DEVICE_ID_MATCH_INT_CLASS | USB_DEVICE_ID_MATCH_INT_SUBCLASS |
USB_DEVICE_ID_MATCH_INT_PROTOCOL)
-
-/* Some useful macros */
-#define USB_DEVICE(vend,prod) \
- match_flags: USB_DEVICE_ID_MATCH_DEVICE, idVendor: (vend), idProduct: (prod)
-#define USB_DEVICE_VER(vend,prod,lo,hi) \
- match_flags: USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION, idVendor: (vend),
idProduct: (prod), bcdDevice_lo: (lo), bcdDevice_hi: (hi)
-#define USB_DEVICE_INFO(cl,sc,pr) \
- match_flags: USB_DEVICE_ID_MATCH_DEV_INFO, bDeviceClass: (cl),
bDeviceSubClass: (sc), bDeviceProtocol: (pr)
-#define USB_INTERFACE_INFO(cl,sc,pr) \
- match_flags: USB_DEVICE_ID_MATCH_INT_INFO, bInterfaceClass: (cl),
bInterfaceSubClass: (sc), bInterfaceProtocol: (pr)
-
#define MAX_USB_DRIVERS 5
struct snd_usb_reg_table {
struct usb_driver driver;
@@ -93,23 +75,23 @@
/* we are too lazy to check all entries... */
if ((tbl->match_flags & USB_DEVICE_ID_MATCH_VENDOR) &&
tbl->idVendor != dev->descriptor.idVendor)
- return NULL;
+ continue;
if ((tbl->match_flags & USB_DEVICE_ID_MATCH_PRODUCT) &&
tbl->idProduct != dev->descriptor.idProduct)
- return NULL;
+ continue;
if ((tbl->match_flags & USB_DEVICE_ID_MATCH_INT_CLASS) &&
tbl->bInterfaceClass != alts->bInterfaceClass)
- return NULL;
+ continue;
if ((tbl->match_flags & USB_DEVICE_ID_MATCH_INT_SUBCLASS) &&
tbl->bInterfaceSubClass != alts->bInterfaceSubClass)
- return NULL;
+ continue;
+ id = *tbl;
+ id.idVendor = dev->descriptor.idVendor;
+ id.idProduct = dev->descriptor.idProduct;
+ id.bInterfaceClass = alts->bInterfaceClass;
+ id.bInterfaceSubClass = alts->bInterfaceSubClass;
+ return p->probe(dev, ifnum, &id);
}
- id = *tbl;
- id.idVendor = dev->descriptor.idVendor;
- id.idProduct = dev->descriptor.idProduct;
- id.bInterfaceClass = alts->bInterfaceClass;
- id.bInterfaceSubClass = alts->bInterfaceSubClass;
- return p->probe(dev, ifnum, &id);
}
return NULL;
}
@@ -148,8 +130,10 @@
void snd_compat_usb_deregister(struct snd_compat_usb_driver *driver)
{
struct snd_usb_reg_table *tbl;
- if ((tbl = find_matching_usb_driver(driver)) != NULL)
+ if ((tbl = find_matching_usb_driver(driver)) != NULL) {
+ usb_deregister(&tbl->driver);
tbl->orig = NULL;
+ }
}
void snd_compat_usb_driver_claim_interface(struct snd_compat_usb_driver *driver,
struct usb_interface *iface, void *ptr)
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog