2008-03-03 01:41:20

by Dave Young

[permalink] [raw]
Subject: hci reset on init

Hi, marcel

Recently, I find my usb bluetooth dongle doesn't work after reboot or resume.

Kernel report (with bluetooth mouse active):

Feb 15 16:54:32 darkstar kernel: hci_acldata_packet: hci0 ACL packet for unknown
connection handle 43
Feb 15 16:54:34 darkstar last message repeated 124 times

I fixed it by adding HCI_RESET to CSR usb id:
{ USB_DEVICE(0x0a12, 0x0001), .driver_info = HCI_CSR |HCI_RESET},

Maybe you have known that there's other reports about this on
bluetooth list as well.

Most of the ids in hci_usb.c have the HCI_RESET option set. Does we
need to do this automaticly? I want to know whether sending reset
request on init in hci_core.c is better, or at least the btusb driver
need these porting.

What's your opinion?

Regards
dave


2008-03-03 10:56:31

by Marcel Holtmann

[permalink] [raw]
Subject: Re: hci reset on init

Hi Dave,

> Recently, I find my usb bluetooth dongle doesn't work after reboot
> or resume.
>
> Kernel report (with bluetooth mouse active):
>
> Feb 15 16:54:32 darkstar kernel: hci_acldata_packet: hci0 ACL packet
> for unknown
> connection handle 43
> Feb 15 16:54:34 darkstar last message repeated 124 times
>
> I fixed it by adding HCI_RESET to CSR usb id:
> { USB_DEVICE(0x0a12, 0x0001), .driver_info = HCI_CSR |
> HCI_RESET},
>
> Maybe you have known that there's other reports about this on
> bluetooth list as well.
>
> Most of the ids in hci_usb.c have the HCI_RESET option set. Does we
> need to do this automaticly? I want to know whether sending reset
> request on init in hci_core.c is better, or at least the btusb driver
> need these porting.
>
> What's your opinion?

this is a clear NAK since you gonna break all old CSR based dongles.
Within the Bluetooth 1.0b and 1.1 specification there was an issues
with if HCI_Reset should only reset the Bluetooth internals or also
the transport. So issuing HCI_Reset on an old dongle will cause an USB
reset.

The solution is to find the build id when CSR produced correct
firmware and set the HCI_RESET quirk based on that. I meant to do this
for a long time, but so far never got around to inquiry the correct
build id where this got fixed.

Regards

Marcel