BT USB CSR Dongle LMP Subversion issue

Asked by ChuckG

I have a couple of Chinese CSR 4.0 BT dongles and neither work with a system running kernel 4.15.0-47 (or earlier). The dongles are recognized; i.e. lsusb shows: "Bus 008 Device 006: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)".

Both fail to initialize when executing the command "Delete Stored Link Key" and returns a status 0x95 "Unsupported feature or Parameter Value". I note that btusb.c has code to set a quirk flag for this:

/* Detect controllers which aren't real CSR ones. */
 if (le16_to_cpu(rp->manufacturer) != 10 ||
     le16_to_cpu(rp->lmp_subver) == 0x0c5c) {
  /* Clear the reset quirk since this is not an actual
   * early Bluetooth 1.1 device from CSR.
   */
  clear_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);

  /* These fake CSR controllers have all a broken
   * stored link key handling and so just disable it.
   */
  set_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks);
 }

But my dongles have LMP Sub-versions of 0x0811 and 0x0709 (as reported by hcidump). I have the feeling that the fake CSR dongles probably have LMP Sub-versions all over the place, and so fail the test for 0x0c5c above.

Would it not make more sense to set the quirk flag on any CSR dongle detected and simply ignore the errors on stored link key commands? FWIW, the dongles both work fine on armhf kernels as well as Windows 7.

Question information

Language:
English Edit question
Status:
Answered
For:
Ubuntu Edit question
Assignee:
No assignee Edit question
Last query:
Last reply:
Revision history for this message
actionparsnip (andrew-woodhead666) said :
#1

I suggest you report a bug

Can you help with this problem?

Provide an answer of your own, or ask ChuckG for more information if necessary.

To post a message you must log in.