tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

USB Bluetooth (ubt) detection on MacBook Air 11 inch (mid 2012)



Hi,

As mentioned in PR kern/46992, USB Bluetooth device on MacBook Air 5,1
reports wrong uaa->class value in ubt_match function,
so 0xff (UDCLASS_VENDOR) instead of correct 0xe0 (UDCLASS_WIRELESS).

To identify it as ubt(4) device, I want to introduce the following
mechanism.

Any opinion and suggestion?

Thank you.


Index: usbdevs
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/usbdevs,v
retrieving revision 1.627
diff -u -r1.627 usbdevs
--- usbdevs     23 Sep 2012 01:06:31 -0000      1.627
+++ usbdevs     2 Oct 2012 10:04:44 -0000
@@ -844,6 +844,7 @@
 product APPLE ETHERNET         0x1402  Apple USB to Ethernet
 product APPLE BLUETOOTH2       0x8205  Bluetooth
 product APPLE BLUETOOTH                0x8300  Bluetooth
+product APPLE BLUETOOTH_HOST_C 0x821f  Bluetooth USB Host Controller
 
 /* ArkMicroChips products */
 product ARKMICROCHIPS USBSERIAL 0x0232 USB-UART Controller
Index: ubt.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/ubt.c,v
retrieving revision 1.48
diff -u -r1.48 ubt.c
--- ubt.c       2 Jun 2012 21:36:45 -0000       1.48
+++ ubt.c       2 Oct 2012 10:04:44 -0000
@@ -316,6 +316,16 @@
        { USB_VENDOR_BROADCOM, USB_PRODUCT_BROADCOM_BCM2033NF },
 };
 
+/*
+ * Some device returns wrong class (UDCLASS_VENDOR).
+ * To force to detect, Add
+ * { VendorID, ProductID }
+ * to the ubt_force_detect list.
+ */
+static const struct usb_devno ubt_force_detect[] = {
+       { USB_VENDOR_APPLE, USB_PRODUCT_APPLE_BLUETOOTH_HOST_C },
+};
+
 int 
 ubt_match(device_t parent, cfdata_t match, void *aux)
 {
@@ -331,6 +341,9 @@
            && uaa->proto == UDPROTO_BLUETOOTH)
                return UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO;
 
+       if (usb_lookup(ubt_force_detect, uaa->vendor, uaa->product))
+               return UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO;
+
        return UMATCH_NONE;
 }
 

--
Ryo ONODERA // ryo_on%yk.rim.or.jp@localhost
PGP fingerprint = 82A2 DC91 76E0 A10A 8ABB  FD1B F404 27FA C7D1 15F3




Home | Main Index | Thread Index | Old Index