Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2da711bc authored by Raghuram Hegde's avatar Raghuram Hegde Committed by Marcel Holtmann
Browse files

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: default avatarRaghuram Hegde <raghuram.hegde@intel.com>
Signed-off-by: default avatarChethan T N <chethan.tumkur.narayan@intel.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent 8589086f
Loading
Loading
Loading
Loading
+37 −35
Original line number Original line Diff line number Diff line
@@ -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, &params, 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, &params, 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;
	}
	}