04 Oct, 2018

1 commit

  • [ Upstream commit 45ae68b8cfc25bdbffc11248001c47ab1b76ff6e ]

    Without this patch we cannot turn on the Bluethooth adapter on HP
    14-bs007la.

    T: Bus=01 Lev=02 Prnt=03 Port=00 Cnt=01 Dev#= 4 Spd=12 MxCh= 0
    D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0bda ProdID=b009 Rev= 2.00
    S: Manufacturer=Realtek
    S: Product=802.11n WLAN Adapter
    S: SerialNumber=00e04c000001
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms

    Signed-off-by: Jian-Hong Pan
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Jian-Hong Pan
     

03 Aug, 2018

2 commits

  • [ Upstream commit d666fc5479ad76a1bcbe6476d4997cea714bab2d ]

    Contains a QCA6174A chipset, with USB BT. Let's support loading
    firmware on it.

    >From usb-devices:
    T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
    D: Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=04ca ProdID=301a Rev= 0.01
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb

    Signed-off-by: Vic Wei
    Signed-off-by: Matthias Kaehlcke
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Vic Wei
     
  • [ Upstream commit 66d9975c5a7c40aa7e4bb0ec0b0c37ba1f190923 ]

    Without this patch we cannot turn on the Bluethooth adapter on ASUS
    E406MA.

    T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
    D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=2ff8 ProdID=b011 Rev= 2.00
    S: Manufacturer=Realtek
    S: Product=802.11n WLAN Adapter
    S: SerialNumber=00e04c000001
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms

    Signed-off-by: Jian-Hong Pan
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Jian-Hong Pan
     

25 May, 2018

2 commits

  • [ Upstream commit fed03fe7e55b7dc16077f672bd9d7bbe92b3a691 ]

    The Asus Z370-I contains a Realtek RTL8822BE device with an associated
    BT chip using a USB ID of 0b05:185c. This device is added to the driver.

    Signed-off-by: Hon Weng Chong
    Signed-off-by: Larry Finger
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Larry Finger
     
  • [ Upstream commit a41e0796396eeceff673af4a38feaee149c6ff86 ]

    This WiFi/Bluetooth USB dongle uses a Realtek chipset, so, use btrtl for it.

    Product information:
    https://wikidevi.com/wiki/Edimax_EW-7611ULB

    >From /sys/kernel/debug/usb/devices
    T: Bus=02 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=480 MxCh= 0
    D: Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=7392 ProdID=a611 Rev= 2.00
    S: Manufacturer=Realtek
    S: Product=Edimax Wi-Fi N150 Bluetooth4.0 USB Adapter
    S: SerialNumber=00e04c000001
    C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=500mA
    A: FirstIf#= 0 IfCount= 2 Cls=e0(wlcon) Sub=01 Prot=01
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    I:* If#= 2 Alt= 0 #EPs= 6 Cls=ff(vend.) Sub=ff Prot=ff Driver=rtl8723bu
    E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=87(I) Atr=03(Int.) MxPS= 64 Ivl=500us
    E: Ad=08(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=09(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

    Tested-by: Vicente Bergas
    Signed-off-by: Vicente Bergas
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Vicente Bergas
     

16 May, 2018

3 commits

  • commit fc54910280eb38bde923cdf0898e74687d8e6989 upstream.

    Jeremy Cline correctly points out in rhbz#1514836 that a device where the
    QCA rome chipset needs the USB_QUIRK_RESET_RESUME quirk, may also ship
    with a different wifi/bt chipset in some configurations.

    If that is the case then we are needlessly penalizing those other chipsets
    with a reset-resume quirk, typically causing 0.4W extra power use because
    this disables runtime-pm.

    This commit moves the DMI table check to a btusb_check_needs_reset_resume()
    helper (so that we can easily also call it for other chipsets) and calls
    this new helper only for QCA_ROME chipsets for now.

    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
    Cc: stable@vger.kernel.org
    Cc: Jeremy Cline
    Suggested-by: Jeremy Cline
    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     
  • commit 596b07a9a22656493726edf1739569102bd3e136 upstream.

    The Dell XPS 13 9360 uses a QCA Rome chip which needs to be reset
    (and have its firmware reloaded) for bluetooth to work after
    suspend/resume.

    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
    Cc: stable@vger.kernel.org
    Cc: Garrett LeSage
    Reported-and-tested-by: Garrett LeSage
    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     
  • commit 544a591668813583021474fa5c7ff4942244d654 upstream.

    Commit f44cb4b19ed4 ("Bluetooth: btusb: Fix quirk for Atheros
    1525/QCA6174") is causing bluetooth to no longer work for several
    people, see: https://bugzilla.redhat.com/show_bug.cgi?id=1568911

    So lets revert it for now and try to find another solution for
    devices which need the modified quirk.

    Cc: stable@vger.kernel.org
    Cc: Takashi Iwai
    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     

12 Apr, 2018

1 commit

  • [ Upstream commit 0a03f98b98c201191e3ba15a0e33f46d8660e1fd ]

    This patch adds the 04ca:3015 (from a QCA9377 board) Bluetooth device
    to the btusb blacklist and makes the kernel use the btqca module
    instead of btusb. The patch is necessary because, without it the
    04ca:3015 device defaults to using the btusb driver, which makes the
    WIFI side of the QCA9377 board unusable (obtains 0 MBps in speedtest,
    when the 04ca:3015 bluetooth is used with an audio headset).

    /sys/kernel/debug/usb/devices:

    T: Bus=01 Lev=01 Prnt=01 Port=04 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
    D: Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=04ca ProdID=3015 Rev= 0.01
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms

    Signed-off-by: Ioan Moldovan
    Signed-off-by: Johan Hedberg
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Ioan Moldovan
     

29 Mar, 2018

3 commits

  • commit f44cb4b19ed40b655c2d422c9021ab2c2625adb6 upstream.

    The Atheros 1525/QCA6174 BT doesn't seem working properly on the
    recent kernels, as it tries to load a wrong firmware
    ar3k/AthrBT_0x00000200.dfu and it fails.

    This seems to have been a problem for some time, and the known
    workaround is to apply BTUSB_QCA_ROM quirk instead of BTUSB_ATH3012.

    The device in question is:

    T: Bus=01 Lev=01 Prnt=01 Port=09 Cnt=03 Dev#= 4 Spd=12 MxCh= 0
    D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0cf3 ProdID=3004 Rev= 0.01
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms

    Bugzilla: http://bugzilla.opensuse.org/show_bug.cgi?id=1082504
    Reported-by: Ivan Levshin
    Tested-by: Ivan Levshin
    Cc:
    Signed-off-by: Takashi Iwai
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Takashi Iwai
     
  • commit 0c6e526646c04ce31d4aaa280ed2237dd1cd774c upstream.

    The issue can be reproduced before commit fd865802c66b ("Bluetooth:
    btusb: fix QCA Rome suspend/resume") gets introduced, so the reset
    resume quirk is still needed for this system.

    T: Bus=01 Lev=01 Prnt=01 Port=13 Cnt=01 Dev#= 4 Spd=12 MxCh= 0
    D: Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0cf3 ProdID=e007 Rev=00.01
    C: #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I: If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    I: If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb

    Cc: stable@vger.kernel.org
    Cc: Brian Norris
    Cc: Hans de Goede
    Signed-off-by: Kai-Heng Feng
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Kai-Heng Feng
     
  • commit f0e8c61110c2c85903b136ba070daf643a8b6842 upstream.

    Commit 1fdb92697469 ("Bluetooth: btusb: Use DMI matching for QCA
    reset_resume quirking"), added the Lenovo Yoga 920 to the
    btusb_needs_reset_resume_table.

    Testing has shown that this is a false positive and the problems where
    caused by issues with the initial fix: commit fd865802c66b ("Bluetooth:
    btusb: fix QCA Rome suspend/resume"), which has already been reverted.

    So the QCA Rome BT in the Yoga 920 does not need a reset-resume quirk at
    all and this commit removes it from the btusb_needs_reset_resume_table.

    Note that after this commit the btusb_needs_reset_resume_table is now
    empty. It is kept around on purpose, since this whole series of commits
    started for a reason and there are actually broken platforms around,
    which need to be added to it.

    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
    Fixes: 1fdb92697469 ("Bluetooth: btusb: Use DMI matching for QCA ...")
    Cc: stable@vger.kernel.org
    Cc: Brian Norris
    Cc: Kai-Heng Feng
    Tested-by: Kevin Fenzi
    Suggested-by: Brian Norris
    Signed-off-by: Hans de Goede
    Reviewed-by: Brian Norris
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     

09 Mar, 2018

1 commit

  • commit 1fdb926974695d3dbc05a429bafa266fdd16510e upstream.

    Commit 61f5acea8737 ("Bluetooth: btusb: Restore QCA Rome suspend/resume fix
    with a "rewritten" version") applied the USB_QUIRK_RESET_RESUME to all QCA
    USB Bluetooth modules. But it turns out that the resume problems are not
    caused by the QCA Rome chipset, on most platforms it resumes fine. The
    resume problems are actually a platform problem (likely the platform
    cutting all power when suspended).

    The USB_QUIRK_RESET_RESUME quirk also disables runtime suspend, so by
    matching on usb-ids, we're causing all boards with these chips to use extra
    power, to fix resume problems which only happen on some boards.

    This commit fixes this by applying the quirk based on DMI matching instead
    of on usb-ids, so that we match the platform and not the chipset.

    Here is the /sys/kernel/debug/usb/devices for the Bluetooth module:

    T: Bus=01 Lev=01 Prnt=01 Port=07 Cnt=04 Dev#= 5 Spd=12 MxCh= 0
    D: Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0cf3 ProdID=e300 Rev= 0.01
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms

    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
    Fixes: 61f5acea8737 ("Bluetooth: btusb: Restore QCA Rome suspend/resume..")
    Cc: stable@vger.kernel.org
    Cc: Brian Norris
    Cc: Kai-Heng Feng
    Reported-and-tested-by: Kevin Fenzi
    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     

17 Feb, 2018

2 commits

  • commit 61f5acea8737d9b717fcc22bb6679924f3c82b98 upstream.

    Commit 7d06d5895c15 ("Revert "Bluetooth: btusb: fix QCA...suspend/resume"")
    removed the setting of the BTUSB_RESET_RESUME quirk for QCA Rome devices,
    instead favoring adding USB_QUIRK_RESET_RESUME quirks in usb/core/quirks.c.

    This was done because the DIY BTUSB_RESET_RESUME reset-resume handling
    has several issues (see the original commit message). An added advantage
    of moving over to the USB-core reset-resume handling is that it also
    disables autosuspend for these devices, which is similarly broken on these.

    But there are 2 issues with this approach:
    1) It leaves the broken DIY BTUSB_RESET_RESUME code in place for Realtek
    devices.
    2) Sofar only 2 of the 10 QCA devices known to the btusb code have been
    added to usb/core/quirks.c and if we fix the Realtek case the same way
    we need to add an additional 14 entries. So in essence we need to
    duplicate a large part of the usb_device_id table in btusb.c in
    usb/core/quirks.c and manually keep them in sync.

    This commit instead restores setting a reset-resume quirk for QCA devices
    in the btusb.c code, avoiding the duplicate usb_device_id table problem.

    This commit avoids the problems with the original DIY BTUSB_RESET_RESUME
    code by simply setting the USB_QUIRK_RESET_RESUME quirk directly on the
    usb_device.

    This commit also moves the BTUSB_REALTEK case over to directly setting the
    USB_QUIRK_RESET_RESUME on the usb_device and removes the now unused
    BTUSB_RESET_RESUME code.

    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
    Fixes: 7d06d5895c15 ("Revert "Bluetooth: btusb: fix QCA...suspend/resume"")
    Cc: Leif Liddy
    Cc: Matthias Kaehlcke
    Cc: Brian Norris
    Cc: Daniel Drake
    Cc: Kai-Heng Feng
    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     
  • commit 7d06d5895c159f64c46560dc258e553ad8670fe0 upstream.

    This reverts commit fd865802c66bc451dc515ed89360f84376ce1a56.

    This commit causes a regression on some QCA ROME chips. The USB device
    reset happens in btusb_open(), hence firmware loading gets interrupted.

    Furthermore, this commit stops working after commit
    ("a0085f2510e8976614ad8f766b209448b385492f Bluetooth: btusb: driver to
    enable the usb-wakeup feature"). Reset-resume quirk only gets enabled in
    btusb_suspend() when it's not a wakeup source.

    If we really want to reset the USB device, we need to do it before
    btusb_open(). Let's handle it in drivers/usb/core/quirks.c.

    Cc: Leif Liddy
    Cc: Matthias Kaehlcke
    Cc: Brian Norris
    Cc: Daniel Drake
    Signed-off-by: Kai-Heng Feng
    Reviewed-by: Brian Norris
    Tested-by: Brian Norris
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Kai-Heng Feng
     

20 Dec, 2017

1 commit

  • [ Upstream commit 858ff38af77fc660092e82474ecc6ac135ed29fe ]

    This change allows proper low power mode entry in suspend.

    /sys/kernel/debug/usb/devices entry:
    T: Bus=01 Lev=01 Prnt=01 Port=05 Cnt=03 Dev#= 3 Spd=12 MxCh= 0
    D: Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0489 ProdID=e09f Rev= 0.01
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms

    Signed-off-by: Bartosz Chronowski
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Bartosz Chronowski
     

16 Aug, 2017

1 commit

  • BT-Controller connected as platform non-root-hub device and
    usb-driver initialize such device with wakeup disabled,
    Ref. usb_new_device().

    At present wakeup-capability get enabled by hid-input device from usb
    function driver(e.g. BT HID device) at runtime. Again some functional
    driver does not set usb-wakeup capability(e.g LE HID device implement
    as HID-over-GATT), and can't wakeup the host on USB.

    Most of the device operation (such as mass storage) initiated from host
    (except HID) and USB wakeup aligned with host resume procedure. For BT
    device, usb-wakeup capability need to enable form btusc driver as a
    generic solution for multiple profile use case and required for USB remote
    wakeup (in-bus wakeup) while host is suspended. Also usb-wakeup feature
    need to enable/disable with HCI interface up and down.

    Signed-off-by: Sukumar Ghorai
    Signed-off-by: Amit K Bag
    Acked-by: Oliver Neukum
    Signed-off-by: Marcel Holtmann

    Sukumar Ghorai
     

15 Aug, 2017

1 commit

  • The GPD Pocket is shipping with a BCM2045 USB HCI with its vendor and
    product information set to 0000:0000 and also has its interface class
    set to 255 (Vendor Specific Class). Luckily it does advertise usable
    manufacturer and product strings.

    T: Bus=01 Lev=01 Prnt=01 Port=02 Cnt=02 Dev#= 3 Spd=12 MxCh= 0
    D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0000 ProdID=0000 Rev= 1.12
    S: Manufacturer=Broadcom Corp
    S: Product=BCM2045A0
    S: SerialNumber=AC83F30677CB
    C:* #Ifs= 4 Cfg#= 1 Atr=80 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
    E: Ad=84(I) Atr=02(Bulk) MxPS= 32 Ivl=0ms
    E: Ad=04(O) Atr=02(Bulk) MxPS= 32 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

    Reported-by: Christopher Williamson
    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Johan Hedberg

    Marcel Holtmann
     

08 Aug, 2017

1 commit

  • T: Bus=02 Lev=01 Prnt=01 Port=03 Cnt=03 Dev#= 4 Spd=12 MxCh= 0
    D: Ver= 2.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=13d3 ProdID=3494 Rev= 2.00
    S: Manufacturer=Realtek
    S: Product=Bluetooth Radio
    S: SerialNumber=00e04c000001
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms

    Signed-off-by: Dmitry Tunin
    Signed-off-by: Marcel Holtmann
    Cc: stable@vger.kernel.org

    Dmitry Tunin
     

01 Aug, 2017

1 commit

  • Contains a QCA6174A-5 chipset, with USB BT. Let's support loading
    firmware on it.

    From usb-devices:
    T: Bus=02 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
    D: Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=04ca ProdID=3016 Rev=00.01
    C: #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I: If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    I: If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb

    Signed-off-by: Brian Norris
    Signed-off-by: Johan Hedberg

    Brian Norris
     

25 Jul, 2017

1 commit

  • Currently we are calling usb_submit_urb directly to submit deferred tx
    urbs after unanchor them.

    So the usb_giveback_urb_bh would failed to unref it in usb_unanchor_urb
    and cause memory leak:
    unreferenced object 0xffffffc0ce0fa400 (size 256):
    ...
    backtrace:
    [] __save_stack_trace+0x48/0x6c
    [] create_object+0x138/0x254
    [] kmemleak_alloc+0x58/0x8c
    [] __kmalloc+0x1d4/0x2a0
    [] usb_alloc_urb+0x30/0x60
    [] alloc_ctrl_urb+0x38/0x120 [btusb]
    [] btusb_send_frame+0x64/0xf8 [btusb]

    Put those urbs in tx_anchor to avoid the leak, and also fix the error
    handling.

    Signed-off-by: Jeffy Chen
    Reviewed-by: Oliver Neukum
    Signed-off-by: Marcel Holtmann

    Jeffy Chen
     

22 Jul, 2017

1 commit


20 Jul, 2017

2 commits

  • There's been numerous reported instances where BTUSB_QCA_ROME
    bluetooth controllers stop functioning upon resume from suspend. These
    devices seem to be losing power during suspend. Patch will detect a status
    change on resume and perform a reset.

    Signed-off-by: Leif Liddy
    Signed-off-by: Marcel Holtmann

    Leif Liddy
     
  • There is another device

    T: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
    D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=105b ProdID=e066 Rev=01.12
    S: Manufacturer=Broadcom Corp
    S: Product=BCM20702A0
    S: SerialNumber=342387DAE35E
    C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
    I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
    I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
    I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
    I: If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

    Since we have Cls=ff, we can add all of them.

    Signed-off-by: Dmitry Tunin
    Signed-off-by: Marcel Holtmann

    Dmitry Tunin
     

16 Jun, 2017

3 commits

  • Joe and Bjørn suggested that it'd be nicer to not have the
    cast in the fairly common case of doing
    *(u8 *)skb_put(skb, 1) = c;

    Add skb_put_u8() for this case, and use it across the code,
    using the following spatch:

    @@
    expression SKB, C, S;
    typedef u8;
    identifier fn = {skb_put};
    fresh identifier fn2 = fn ## "_u8";
    @@
    - *(u8 *)fn(SKB, S) = C;
    + fn2(SKB, C);

    Note that due to the "S", the spatch isn't perfect, it should
    have checked that S is 1, but there's also places that use a
    sizeof expression like sizeof(var) or sizeof(u8) etc. Turns
    out that nobody ever did something like
    *(u8 *)skb_put(skb, 2) = c;

    which would be wrong anyway since the second byte wouldn't be
    initialized.

    Suggested-by: Joe Perches
    Suggested-by: Bjørn Mork
    Signed-off-by: Johannes Berg
    Signed-off-by: David S. Miller

    Johannes Berg
     
  • It seems like a historic accident that these return unsigned char *,
    and in many places that means casts are required, more often than not.

    Make these functions (skb_put, __skb_put and pskb_put) return void *
    and remove all the casts across the tree, adding a (u8 *) cast only
    where the unsigned char pointer was used directly, all done with the
    following spatch:

    @@
    expression SKB, LEN;
    typedef u8;
    identifier fn = { skb_put, __skb_put };
    @@
    - *(fn(SKB, LEN))
    + *(u8 *)fn(SKB, LEN)

    @@
    expression E, SKB, LEN;
    identifier fn = { skb_put, __skb_put };
    type T;
    @@
    - E = ((T *)(fn(SKB, LEN)))
    + E = fn(SKB, LEN)

    which actually doesn't cover pskb_put since there are only three
    users overall.

    A handful of stragglers were converted manually, notably a macro in
    drivers/isdn/i4l/isdn_bsdcomp.c and, oddly enough, one of the many
    instances in net/bluetooth/hci_sock.c. In the former file, I also
    had to fix one whitespace problem spatch introduced.

    Signed-off-by: Johannes Berg
    Signed-off-by: David S. Miller

    Johannes Berg
     
  • A common pattern with skb_put() is to just want to memcpy()
    some data into the new space, introduce skb_put_data() for
    this.

    An spatch similar to the one for skb_put_zero() converts many
    of the places using it:

    @@
    identifier p, p2;
    expression len, skb, data;
    type t, t2;
    @@
    (
    -p = skb_put(skb, len);
    +p = skb_put_data(skb, data, len);
    |
    -p = (t)skb_put(skb, len);
    +p = skb_put_data(skb, data, len);
    )
    (
    p2 = (t2)p;
    -memcpy(p2, data, len);
    |
    -memcpy(p, data, len);
    )

    @@
    type t, t2;
    identifier p, p2;
    expression skb, data;
    @@
    t *p;
    ...
    (
    -p = skb_put(skb, sizeof(t));
    +p = skb_put_data(skb, data, sizeof(t));
    |
    -p = (t *)skb_put(skb, sizeof(t));
    +p = skb_put_data(skb, data, sizeof(t));
    )
    (
    p2 = (t2)p;
    -memcpy(p2, data, sizeof(*p));
    |
    -memcpy(p, data, sizeof(*p));
    )

    @@
    expression skb, len, data;
    @@
    -memcpy(skb_put(skb, len), data, len);
    +skb_put_data(skb, data, len);

    (again, manually post-processed to retain some comments)

    Reviewed-by: Stephen Hemminger
    Signed-off-by: Johannes Berg
    Signed-off-by: David S. Miller

    Johannes Berg
     

14 Jun, 2017

1 commit

  • T: Bus=01 Lev=01 Prnt=01 Port=06 Cnt=03 Dev#= 3 Spd=12 MxCh= 0
    D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0489 ProdID=e0a2 Rev=00.01
    C: #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I: If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    I: If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb

    Signed-off-by: Shih-Yuan Lee (FourDollars)
    Suggested-by: Owen Lin
    Signed-off-by: Marcel Holtmann

    Shih-Yuan Lee (FourDollars)
     

18 May, 2017

1 commit

  • This patch adds support for Intel Bluetooth device 9460/9560 also known
    as Jefferson Peak (JfP). The firmware downloading mechanism is same as
    previous generation. So include the new USB product identifier and
    whitelist the hardware variant.

    T: Bus=01 Lev=01 Prnt=01 Port=09 Cnt=04 Dev#= 5 Spd=12 MxCh= 0
    D: Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=8087 ProdID=0aaa Rev= 0.02
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=1ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    I: If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 63 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 63 Ivl=1ms

    Bootloader version:
    < HCI Command: Intel Read Version (0x3f|0x0005) plen 0
    > HCI Event: Command Complete (0x0e) plen 13
    Intel Read Version (0x3f|0x0005) ncmd 32
    Status: Success (0x00)
    Hardware platform: 0x37
    Hardware variant: 0x11
    Hardware revision: 0.0
    Firmware variant: 0x06
    Firmware revision: 0.1
    Firmware build: 42-52.2015
    Firmware patch: 0

    Signed-off-by: Tedd Ho-Jeong An
    Signed-off-by: Marcel Holtmann

    Tedd Ho-Jeong An
     

13 Apr, 2017

4 commits

  • Currrently we are disabling this wake irq after receiving it. If this
    happens before we finish suspend and the pm event check is disabled,
    the system will continue suspending, and this irq would not work again.

    We may need to abort system suspend to avoid that.

    Signed-off-by: Jeffy Chen
    Signed-off-by: Marcel Holtmann

    Jeffy Chen
     
  • Signed-off-by: Marcel Holtmann

    Gabriel
     
  • The new Bluetooth devices 9160/9260 (also known as ThunderPeak)
    devices from Intel use the same firmware loading mechanism as previous
    generation. So include the new USB product identifier and whitelist
    the hardware variant.

    T: Bus=02 Lev=02 Prnt=03 Port=00 Cnt=01 Dev#= 8 Spd=12 MxCh= 0
    D: Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=8087 ProdID=0025 Rev= 0.02
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=1ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    I: If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 63 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 63 Ivl=1ms

    Bluetooth: hci0: Bootloader revision 0.1 build 42 week 52 2015
    Bluetooth: hci0: Device revision is 2
    Bluetooth: hci0: Secure boot is enabled
    Bluetooth: hci0: OTP lock is disabled
    Bluetooth: hci0: API lock is disabled
    Bluetooth: hci0: Debug lock is disabled
    Bluetooth: hci0: Minimum firmware build 1 week 10 2014

    < HCI Command: Read Local Version Information (0x04|0x0001) plen 0
    > HCI Event: Command Complete (0x0e) plen 12
    Read Local Version Information (0x04|0x0001) ncmd 1
    Status: Success (0x00)
    HCI version: Bluetooth 5.0 (0x09) - Revision 256 (0x0100)
    LMP version: Bluetooth 5.0 (0x09) - Subversion 256 (0x0100)
    Manufacturer: Intel Corp. (2)

    Based on original patch from Jaya Praveen G

    Signed-off-by: Marcel Holtmann
    Tested-by: Tedd Ho-Jeong An
    Signed-off-by: Tedd Ho-Jeong An
    Signed-off-by: Marcel Holtmann

    Marcel Holtmann
     
  • Multiple new hardware variants are planned and the simple if statement
    would get really complicated and unreadable. So instead replace it with
    a simple switch statement.

    The change is applied to both USB and UART.

    Based-on-patch-by: Marcel Holtmann
    Signed-off-by: Tedd Ho-Jeong An
    Signed-off-by: Marcel Holtmann

    Tedd Ho-Jeong An
     

17 Feb, 2017

6 commits

  • T: Bus=01 Lev=01 Prnt=01 Port=07 Cnt=04 Dev#= 5 Spd=12 MxCh= 0
    D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=04ca ProdID=3018 Rev=00.01
    C: #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
    I: If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    I: If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb

    Signed-off-by: Dmitry Tunin
    Signed-off-by: Marcel Holtmann
    Cc: stable@vger.kernel.org

    Dmitry Tunin
     
  • This is a Boardcom module and requires patchram to work.

    T: Bus=01 Lev=03 Prnt=03 Port=01 Cnt=02 Dev#= 5 Spd=12 MxCh= 0
    D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=413c ProdID=8143 Rev= 1.12
    S: Manufacturer=Broadcom Corp
    S: Product=BCM20702A0
    S: SerialNumber=20689D1FAF94
    C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr= 0mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
    E: Ad=84(I) Atr=02(Bulk) MxPS= 32 Ivl=0ms
    E: Ad=04(O) Atr=02(Bulk) MxPS= 32 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

    Signed-off-by: Wen-chien Jesse Sung
    Signed-off-by: Marcel Holtmann

    Wen-chien Jesse Sung
     
  • The Marvell devices may have many gpio pins, and hence for wakeup
    on these out-of-band pins, the chip needs to be told which pin is
    to be used for wakeup, using an hci command.

    Thus, we read the pin number etc from the device tree node and send
    a command to the chip.

    Signed-off-by: Rajat Jain
    Reviewed-by: Brian Norris
    Acked-by: Rob Herring
    Signed-off-by: Marcel Holtmann

    Rajat Jain
     
  • Some onboard BT chips (e.g. Marvell 8997) contain a wakeup pin that
    can be connected to a gpio on the CPU side, and can be used to wakeup
    the host out-of-band. This can be useful in situations where the
    in-band wakeup is not possible or not preferable (e.g. the in-band
    wakeup may require the USB host controller to remain active, and
    hence consuming more system power during system sleep).

    The oob gpio interrupt to be used for wakeup on the CPU side, is
    read from the device tree node, (using standard interrupt descriptors).
    A devcie tree binding document is also added for the driver. The
    compatible string is in compliance with
    Documentation/devicetree/bindings/usb/usb-device.txt

    Signed-off-by: Rajat Jain
    Reviewed-by: Brian Norris
    Acked-by: Rob Herring
    Signed-off-by: Marcel Holtmann

    Rajat Jain
     
  • Use a label to remove the repetetive cleanup, for error cases.

    Signed-off-by: Rajat Jain
    Reviewed-by: Brian Norris
    Signed-off-by: Marcel Holtmann

    Rajat Jain
     
  • It's a custom USB ID for the broadcom bt adapter in the HTC Vive.

    T: Bus=01 Lev=02 Prnt=02 Port=01 Cnt=02 Dev#= 6 Spd=12 MxCh= 0
    D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0bb4 ProdID=0306 Rev= 1.12
    S: Manufacturer=Broadcom Corp
    S: Product=BCM2045A0
    S: SerialNumber=AC3743E110CE
    C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr= 0mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=btusb
    E: Ad=84(I) Atr=02(Bulk) MxPS= 32 Ivl=0ms
    E: Ad=04(O) Atr=02(Bulk) MxPS= 32 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

    dmesg:
    Bluetooth: hci0: BCM: chip id 102
    Bluetooth: hci0: c-l
    Bluetooth: hci0: BCM (001.001.005) build 0000
    Bluetooth: hci0: BCM (001.001.005) build 0481
    Bluetooth: hci0: BCM20703A1 Generic USB 20Mhz fcbga_BU

    Signed-off-by: Christoph Haag
    Signed-off-by: Marcel Holtmann

    Christoph Haag
     

07 Oct, 2016

1 commit

  • Move usb_autopm_get_interface() ahead of setup_on_usb() to prevent
    device from sending usb control message in usb suspend mode.

    The error message is as below:

    [ 83.944103] btusb 1-2:1.1: usb_suspend_interface: status 0
    [ 83.944107] btusb 1-2:1.0: usb_suspend_interface: status 0
    [ 83.960132] usb 1-2: usb auto-suspend, wakeup 0
    [ 83.976156] usb 1-2: usb_suspend_device: status 0
    [ 83.976162] usb 1-2: usb_suspend_both: status 0
    [ 298.689106] Bluetooth: hci0
    [ 298.689399] Bluetooth: hci0: Failed to access otp area (-113)

    Signed-off-by: Ethan Hsieh
    Signed-off-by: Marcel Holtmann

    Ethan Hsieh