diff options
Diffstat (limited to 'drivers/bluetooth')
-rw-r--r-- | drivers/bluetooth/btintel.c | 34 | ||||
-rw-r--r-- | drivers/bluetooth/btintel.h | 5 |
2 files changed, 39 insertions, 0 deletions
diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c index 828f2f8d1568..8b160858f7e8 100644 --- a/drivers/bluetooth/btintel.c +++ b/drivers/bluetooth/btintel.c | |||
@@ -89,6 +89,40 @@ int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr) | |||
89 | } | 89 | } |
90 | EXPORT_SYMBOL_GPL(btintel_set_bdaddr); | 90 | EXPORT_SYMBOL_GPL(btintel_set_bdaddr); |
91 | 91 | ||
92 | void btintel_hw_error(struct hci_dev *hdev, u8 code) | ||
93 | { | ||
94 | struct sk_buff *skb; | ||
95 | u8 type = 0x00; | ||
96 | |||
97 | BT_ERR("%s: Hardware error 0x%2.2x", hdev->name, code); | ||
98 | |||
99 | skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT); | ||
100 | if (IS_ERR(skb)) { | ||
101 | BT_ERR("%s: Reset after hardware error failed (%ld)", | ||
102 | hdev->name, PTR_ERR(skb)); | ||
103 | return; | ||
104 | } | ||
105 | kfree_skb(skb); | ||
106 | |||
107 | skb = __hci_cmd_sync(hdev, 0xfc22, 1, &type, HCI_INIT_TIMEOUT); | ||
108 | if (IS_ERR(skb)) { | ||
109 | BT_ERR("%s: Retrieving Intel exception info failed (%ld)", | ||
110 | hdev->name, PTR_ERR(skb)); | ||
111 | return; | ||
112 | } | ||
113 | |||
114 | if (skb->len != 13) { | ||
115 | BT_ERR("%s: Exception info size mismatch", hdev->name); | ||
116 | kfree_skb(skb); | ||
117 | return; | ||
118 | } | ||
119 | |||
120 | BT_ERR("%s: Exception info %s", hdev->name, (char *)(skb->data + 1)); | ||
121 | |||
122 | kfree_skb(skb); | ||
123 | } | ||
124 | EXPORT_SYMBOL_GPL(btintel_hw_error); | ||
125 | |||
92 | MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>"); | 126 | MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>"); |
93 | MODULE_DESCRIPTION("Bluetooth support for Intel devices ver " VERSION); | 127 | MODULE_DESCRIPTION("Bluetooth support for Intel devices ver " VERSION); |
94 | MODULE_VERSION(VERSION); | 128 | MODULE_VERSION(VERSION); |
diff --git a/drivers/bluetooth/btintel.h b/drivers/bluetooth/btintel.h index 4bda6ab34f60..c4680cd44011 100644 --- a/drivers/bluetooth/btintel.h +++ b/drivers/bluetooth/btintel.h | |||
@@ -73,6 +73,7 @@ struct intel_secure_send_result { | |||
73 | 73 | ||
74 | int btintel_check_bdaddr(struct hci_dev *hdev); | 74 | int btintel_check_bdaddr(struct hci_dev *hdev); |
75 | int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr); | 75 | int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr); |
76 | void btintel_hw_error(struct hci_dev *hdev, u8 code); | ||
76 | 77 | ||
77 | #else | 78 | #else |
78 | 79 | ||
@@ -86,4 +87,8 @@ static inline int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdadd | |||
86 | return -EOPNOTSUPP; | 87 | return -EOPNOTSUPP; |
87 | } | 88 | } |
88 | 89 | ||
90 | static inline void btintel_hw_error(struct hci_dev *hdev, u8 code) | ||
91 | { | ||
92 | } | ||
93 | |||
89 | #endif | 94 | #endif |