Message ID | 20190225090852.13086-2-vicamo.yang@canonical.com |
---|---|
State | New |
Headers | show |
Series | [1/1,SRU,B] Bluetooth: btusb: Add support for Intel bluetooth device 8087:0029 | expand |
Build failure at least on Bionic. On δΈ€, 2019-02-25 at 17:08 +0800, You-Sheng Yang wrote: > From: Raghuram Hegde <raghuram.hegde@intel.com> > > BugLink: https://bugs.launchpad.net/bugs/1817518 > > Include the new USB product ID for Intel Bluetooth device 22260 > family(CcPeak) > > The /sys/kernel/debug/usb/devices portion for this device is: > > T: Bus=01 Lev=01 Prnt=01 Port=02 Cnt=02 Dev#= 2 Spd=12 MxCh= 0 > D: Ver= 2.00 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1 > P: Vendor=8087 ProdID=0029 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= 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 > > Signed-off-by: Raghuram Hegde <raghuram.hegde@intel.com> > Signed-off-by: Chethan T N <chethan.tumkur.narayan@intel.com> > Signed-off-by: Marcel Holtmann <marcel@holtmann.org> > (backported from commit 2da711bcebe81209a9f2f90e145600eb1bae2b71) > Signed-off-by: You-Sheng Yang <vicamo.yang@canonical.com> > --- > drivers/bluetooth/btusb.c | 72 ++++++++++++++++++++----------------- > -- > 1 file changed, 37 insertions(+), 35 deletions(-) > > diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c > index 212c317d8239..4acdb653eebf 100644 > --- a/drivers/bluetooth/btusb.c > +++ b/drivers/bluetooth/btusb.c > @@ -342,6 +342,7 @@ static const struct usb_device_id > blacklist_table[] = { > /* Intel Bluetooth devices */ > { USB_DEVICE(0x8087, 0x0025), .driver_info = BTUSB_INTEL_NEW }, > { USB_DEVICE(0x8087, 0x0026), .driver_info = BTUSB_INTEL_NEW }, > + { USB_DEVICE(0x8087, 0x0029), .driver_info = BTUSB_INTEL_NEW }, > { USB_DEVICE(0x8087, 0x07da), .driver_info = BTUSB_CSR }, > { USB_DEVICE(0x8087, 0x07dc), .driver_info = BTUSB_INTEL }, > { USB_DEVICE(0x8087, 0x0a2a), .driver_info = BTUSB_INTEL }, > @@ -2038,6 +2039,35 @@ static int btusb_send_frame_intel(struct > hci_dev *hdev, struct sk_buff *skb) > return -EILSEQ; > } > > +static bool btusb_setup_intel_new_get_fw_name(struct intel_version > *ver, > + struct intel_boot_params > *params, > + char *fw_name, size_t len, > + const char *suffix) > +{ > + switch (ver->hw_variant) { > + case 0x0b: /* SfP */ > + case 0x0c: /* WsP */ > + snprintf(fw_name, len, "intel/ibt-%u-%u.%s", > + le16_to_cpu(ver->hw_variant), > + le16_to_cpu(params->dev_revid), > + suffix); > + break; > + case 0x11: /* JfP */ > + case 0x12: /* ThP */ > + case 0x13: /* HrP */ > + case 0x14: /* CcP */ > + snprintf(fw_name, len, "intel/ibt-%u-%u-%u.%s", > + le16_to_cpu(ver->hw_variant), > + le16_to_cpu(ver->hw_revision), > + le16_to_cpu(ver->fw_revision), > + suffix); > + break; > + default: > + return false; > + } > + return true; > +} > + > static int btusb_setup_intel_new(struct hci_dev *hdev) > { > static const u8 reset_param[] = { 0x00, 0x01, 0x00, 0x01, > @@ -2087,7 +2117,7 @@ static int btusb_setup_intel_new(struct hci_dev > *hdev) > case 0x11: /* JfP */ > case 0x12: /* ThP */ > case 0x13: /* HrP */ > - case 0x14: /* QnJ, IcP */ > + case 0x14: /* CcP */ > break; > default: > BT_ERR("%s: Unsupported Intel hardware variant (%u)", > @@ -2202,23 +2232,9 @@ static int btusb_setup_intel_new(struct > hci_dev *hdev) > * ibt-<hw_variant>-<hw_revision>-<fw_revision>.sfi. > * > */ > - switch (ver.hw_variant) { > - case 0x0b: /* SfP */ > - case 0x0c: /* WsP */ > - snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.sfi", > - le16_to_cpu(ver.hw_variant), > - le16_to_cpu(params->dev_revid)); > - break; > - case 0x11: /* JfP */ > - case 0x12: /* ThP */ > - case 0x13: /* HrP */ > - case 0x14: /* QnJ, IcP */ > - snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u- > %u.sfi", > - le16_to_cpu(ver.hw_variant), > - le16_to_cpu(ver.hw_revision), > - le16_to_cpu(ver.fw_revision)); > - break; > - default: > + err = btusb_setup_intel_new_get_fw_name(&ver, ¶ms, fwname, > + sizeof(fwname), "sfi"); > + if (!err) { > BT_ERR("%s: Unsupported Intel firmware naming", hdev- > >name); > return -EINVAL; > } > @@ -2236,23 +2252,9 @@ static int btusb_setup_intel_new(struct > hci_dev *hdev) > /* Save the DDC file name for later use to apply once the > firmware > * downloading is done. > */ > - switch (ver.hw_variant) { > - case 0x0b: /* SfP */ > - case 0x0c: /* WsP */ > - snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.ddc", > - le16_to_cpu(ver.hw_variant), > - le16_to_cpu(params->dev_revid)); > - break; > - case 0x11: /* JfP */ > - case 0x12: /* ThP */ > - case 0x13: /* HrP */ > - case 0x14: /* QnJ, IcP */ > - snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u- > %u.ddc", > - le16_to_cpu(ver.hw_variant), > - le16_to_cpu(ver.hw_revision), > - le16_to_cpu(ver.fw_revision)); > - break; > - default: > + err = btusb_setup_intel_new_get_fw_name(&ver, ¶ms, fwname, > + sizeof(fwname), "ddc"); > + if (!err) { > BT_ERR("%s: Unsupported Intel firmware naming", hdev- > >name); > return -EINVAL; > } > -- > 2.20.1 > >
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 212c317d8239..4acdb653eebf 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -342,6 +342,7 @@ static const struct usb_device_id blacklist_table[] = { /* Intel Bluetooth devices */ { USB_DEVICE(0x8087, 0x0025), .driver_info = BTUSB_INTEL_NEW }, { USB_DEVICE(0x8087, 0x0026), .driver_info = BTUSB_INTEL_NEW }, + { USB_DEVICE(0x8087, 0x0029), .driver_info = BTUSB_INTEL_NEW }, { USB_DEVICE(0x8087, 0x07da), .driver_info = BTUSB_CSR }, { USB_DEVICE(0x8087, 0x07dc), .driver_info = BTUSB_INTEL }, { USB_DEVICE(0x8087, 0x0a2a), .driver_info = BTUSB_INTEL }, @@ -2038,6 +2039,35 @@ static int btusb_send_frame_intel(struct hci_dev *hdev, struct sk_buff *skb) return -EILSEQ; } +static bool btusb_setup_intel_new_get_fw_name(struct intel_version *ver, + struct intel_boot_params *params, + char *fw_name, size_t len, + const char *suffix) +{ + switch (ver->hw_variant) { + case 0x0b: /* SfP */ + case 0x0c: /* WsP */ + snprintf(fw_name, len, "intel/ibt-%u-%u.%s", + le16_to_cpu(ver->hw_variant), + le16_to_cpu(params->dev_revid), + suffix); + break; + case 0x11: /* JfP */ + case 0x12: /* ThP */ + case 0x13: /* HrP */ + case 0x14: /* CcP */ + snprintf(fw_name, len, "intel/ibt-%u-%u-%u.%s", + le16_to_cpu(ver->hw_variant), + le16_to_cpu(ver->hw_revision), + le16_to_cpu(ver->fw_revision), + suffix); + break; + default: + return false; + } + return true; +} + static int btusb_setup_intel_new(struct hci_dev *hdev) { static const u8 reset_param[] = { 0x00, 0x01, 0x00, 0x01, @@ -2087,7 +2117,7 @@ static int btusb_setup_intel_new(struct hci_dev *hdev) case 0x11: /* JfP */ case 0x12: /* ThP */ case 0x13: /* HrP */ - case 0x14: /* QnJ, IcP */ + case 0x14: /* CcP */ break; default: BT_ERR("%s: Unsupported Intel hardware variant (%u)", @@ -2202,23 +2232,9 @@ static int btusb_setup_intel_new(struct hci_dev *hdev) * ibt-<hw_variant>-<hw_revision>-<fw_revision>.sfi. * */ - switch (ver.hw_variant) { - case 0x0b: /* SfP */ - case 0x0c: /* WsP */ - snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.sfi", - le16_to_cpu(ver.hw_variant), - le16_to_cpu(params->dev_revid)); - break; - case 0x11: /* JfP */ - case 0x12: /* ThP */ - case 0x13: /* HrP */ - case 0x14: /* QnJ, IcP */ - snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u-%u.sfi", - le16_to_cpu(ver.hw_variant), - le16_to_cpu(ver.hw_revision), - le16_to_cpu(ver.fw_revision)); - break; - default: + err = btusb_setup_intel_new_get_fw_name(&ver, ¶ms, fwname, + sizeof(fwname), "sfi"); + if (!err) { BT_ERR("%s: Unsupported Intel firmware naming", hdev->name); return -EINVAL; } @@ -2236,23 +2252,9 @@ static int btusb_setup_intel_new(struct hci_dev *hdev) /* Save the DDC file name for later use to apply once the firmware * downloading is done. */ - switch (ver.hw_variant) { - case 0x0b: /* SfP */ - case 0x0c: /* WsP */ - snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.ddc", - le16_to_cpu(ver.hw_variant), - le16_to_cpu(params->dev_revid)); - break; - case 0x11: /* JfP */ - case 0x12: /* ThP */ - case 0x13: /* HrP */ - case 0x14: /* QnJ, IcP */ - snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u-%u.ddc", - le16_to_cpu(ver.hw_variant), - le16_to_cpu(ver.hw_revision), - le16_to_cpu(ver.fw_revision)); - break; - default: + err = btusb_setup_intel_new_get_fw_name(&ver, ¶ms, fwname, + sizeof(fwname), "ddc"); + if (!err) { BT_ERR("%s: Unsupported Intel firmware naming", hdev->name); return -EINVAL; }