[lkml]   [2011]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    SubjectRe: [bluetooth] linux-3.x regression (bisected)
    Hi Rene,

    * Rene Herman <> [2011-12-28 02:53:26 +0100]:

    > On 28-12-11 02:28, Gustavo Padovan wrote:
    > >>For some reason your adapter is returning here the same value of
    > >>Read Local Features. I would say your device is broken. The only
    > >>fix I have in mind now is throw away the device.
    > >
    > >Yes, I have one of these ISSC devices, it's completely broken
    > >device.
    > It worked well upto and including 2.6.29 though.

    We never used Extended Features before 2.6.39

    > This would seem to be the kind of thing other subsystems use quirk
    > handling for. The device identifies itself as "1131:1004":
    > Bus 002 Device 002: ID 1131:1004 Integrated System Solution Corp.
    > Bluetooth Device
    > Do you guys have infra-structure in place for adapter-specific
    > (quitk) handling?

    I think this patch can do handling, let's see what others think.


    Author: Gustavo F. Padovan <>
    Date: Wed Dec 28 13:40:02 2011 -0200

    Bluetooth: Fix lmp_host_le_capable() check for broken devices

    Some dongles reports a wrong Local Extended Features leading the kernel
    think that dongle support LE while it don't.

    The fix here is just rely on a bit in Local Features (LE Capable) to tell
    us if the device really supports LE.

    LE Host Capable is the only bit used from Local Extended Features in our

    Signed-off-by: Gustavo F. Padovan <>

    diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
    index 5e2e984..c693111 100644
    --- a/include/net/bluetooth/hci_core.h
    +++ b/include/net/bluetooth/hci_core.h
    @@ -676,7 +676,11 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
    #define lmp_le_capable(dev) ((dev)->features[4] & LMP_LE)

    /* ----- Extended LMP capabilities ----- */
    -#define lmp_host_le_capable(dev) ((dev)->extfeatures[0] & LMP_HOST_LE)
    +/* Some crap dongles does not report a proper Local Extended Features causing
    + * the kernel to wrongly init it as a LE device. So first check if it is LE
    + * capable (controller) which is a info from the Local Features */
    +#define lmp_host_le_capable(dev) ( lmp_le_capable(dev) && \
    + (dev)->extfeatures[0] & LMP_HOST_LE)

    /* ----- HCI protocols ----- */
    static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,

     \ /
      Last update: 2011-12-28 16:55    [W:0.025 / U:2.244 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site