| From dbccd791a3fbbdac12c33834b73beff3984988e9 Mon Sep 17 00:00:00 2001 |
| From: Szymon Janc <szymon.janc@tieto.com> |
| Date: Tue, 11 Dec 2012 08:51:19 +0100 |
| Subject: Bluetooth: Fix sending HCI commands after reset |
| |
| From: Szymon Janc <szymon.janc@tieto.com> |
| |
| commit dbccd791a3fbbdac12c33834b73beff3984988e9 upstream. |
| |
| After sending reset command wait for its command complete event before |
| sending next command. Some chips sends CC event for command received |
| before reset if reset was send before chip replied with CC. |
| |
| This is also required by specification that host shall not send |
| additional HCI commands before receiving CC for reset. |
| |
| < HCI Command: Reset (0x03|0x0003) plen 0 [hci0] 18.404612 |
| > HCI Event: Command Complete (0x0e) plen 4 [hci0] 18.405850 |
| Write Extended Inquiry Response (0x03|0x0052) ncmd 1 |
| Status: Success (0x00) |
| < HCI Command: Read Local Supported Features (0x04|0x0003) plen 0 [hci0] 18.406079 |
| > HCI Event: Command Complete (0x0e) plen 4 [hci0] 18.407864 |
| Reset (0x03|0x0003) ncmd 1 |
| Status: Success (0x00) |
| < HCI Command: Read Local Supported Features (0x04|0x0003) plen 0 [hci0] 18.408062 |
| > HCI Event: Command Complete (0x0e) plen 12 [hci0] 18.408835 |
| |
| Signed-off-by: Szymon Janc <szymon.janc@tieto.com> |
| Acked-by: Johan Hedberg <johan.hedberg@intel.com> |
| Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| net/bluetooth/hci_event.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/net/bluetooth/hci_event.c |
| +++ b/net/bluetooth/hci_event.c |
| @@ -2394,7 +2394,7 @@ static void hci_cmd_complete_evt(struct |
| if (ev->opcode != HCI_OP_NOP) |
| del_timer(&hdev->cmd_timer); |
| |
| - if (ev->ncmd) { |
| + if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) { |
| atomic_set(&hdev->cmd_cnt, 1); |
| if (!skb_queue_empty(&hdev->cmd_q)) |
| queue_work(hdev->workqueue, &hdev->cmd_work); |