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