Bluetooth: btusb: Add support for Intel bluetooth device 8087:0029
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>
This commit is contained in:
parent
8589086f4e
commit
2da711bceb
@ -344,6 +344,7 @@ static const struct usb_device_id blacklist_table[] = {
|
|||||||
/* Intel Bluetooth devices */
|
/* Intel Bluetooth devices */
|
||||||
{ USB_DEVICE(0x8087, 0x0025), .driver_info = BTUSB_INTEL_NEW },
|
{ USB_DEVICE(0x8087, 0x0025), .driver_info = BTUSB_INTEL_NEW },
|
||||||
{ USB_DEVICE(0x8087, 0x0026), .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, 0x07da), .driver_info = BTUSB_CSR },
|
||||||
{ USB_DEVICE(0x8087, 0x07dc), .driver_info = BTUSB_INTEL },
|
{ USB_DEVICE(0x8087, 0x07dc), .driver_info = BTUSB_INTEL },
|
||||||
{ USB_DEVICE(0x8087, 0x0a2a), .driver_info = BTUSB_INTEL },
|
{ USB_DEVICE(0x8087, 0x0a2a), .driver_info = BTUSB_INTEL },
|
||||||
@ -2051,6 +2052,35 @@ static int btusb_send_frame_intel(struct hci_dev *hdev, struct sk_buff *skb)
|
|||||||
return -EILSEQ;
|
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 int btusb_setup_intel_new(struct hci_dev *hdev)
|
||||||
{
|
{
|
||||||
struct btusb_data *data = hci_get_drvdata(hdev);
|
struct btusb_data *data = hci_get_drvdata(hdev);
|
||||||
@ -2102,7 +2132,7 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
|
|||||||
case 0x11: /* JfP */
|
case 0x11: /* JfP */
|
||||||
case 0x12: /* ThP */
|
case 0x12: /* ThP */
|
||||||
case 0x13: /* HrP */
|
case 0x13: /* HrP */
|
||||||
case 0x14: /* QnJ, IcP */
|
case 0x14: /* CcP */
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
bt_dev_err(hdev, "Unsupported Intel hardware variant (%u)",
|
bt_dev_err(hdev, "Unsupported Intel hardware variant (%u)",
|
||||||
@ -2186,23 +2216,9 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
|
|||||||
* ibt-<hw_variant>-<hw_revision>-<fw_revision>.sfi.
|
* ibt-<hw_variant>-<hw_revision>-<fw_revision>.sfi.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
switch (ver.hw_variant) {
|
err = btusb_setup_intel_new_get_fw_name(&ver, ¶ms, fwname,
|
||||||
case 0x0b: /* SfP */
|
sizeof(fwname), "sfi");
|
||||||
case 0x0c: /* WsP */
|
if (!err) {
|
||||||
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:
|
|
||||||
bt_dev_err(hdev, "Unsupported Intel firmware naming");
|
bt_dev_err(hdev, "Unsupported Intel firmware naming");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
@ -2218,23 +2234,9 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
|
|||||||
/* Save the DDC file name for later use to apply once the firmware
|
/* Save the DDC file name for later use to apply once the firmware
|
||||||
* downloading is done.
|
* downloading is done.
|
||||||
*/
|
*/
|
||||||
switch (ver.hw_variant) {
|
err = btusb_setup_intel_new_get_fw_name(&ver, ¶ms, fwname,
|
||||||
case 0x0b: /* SfP */
|
sizeof(fwname), "ddc");
|
||||||
case 0x0c: /* WsP */
|
if (!err) {
|
||||||
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:
|
|
||||||
bt_dev_err(hdev, "Unsupported Intel firmware naming");
|
bt_dev_err(hdev, "Unsupported Intel firmware naming");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user