Skip to content

Commit 5148371

Browse files
committed
Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next
Johan Hedberg says: ==================== pull request: bluetooth-next 2015-12-11 Here's another set of Bluetooth & 802.15.4 patches for the 4.5 kernel: - 6LoWPAN debugfs support - New 802.15.4 driver for ADF7242 MAC IEEE802154 - Initial code for 6LoWPAN Generic Header Compression (GHC) support - Refactor Bluetooth LE scan & advertising behind dedicated workqueue - Cleanups to Bluetooth H:5 HCI driver - Support for Toshiba Broadcom based Bluetooth controllers - Use continuous scanning when establishing Bluetooth LE connections Please let me know if there are any issues pulling. Thanks. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
2 parents 7e074af + 7302b9d commit 5148371

39 files changed

+3174
-1586
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
* ADF7242 IEEE 802.15.4 *
2+
3+
Required properties:
4+
- compatible: should be "adi,adf7242"
5+
- spi-max-frequency: maximal bus speed (12.5 MHz)
6+
- reg: the chipselect index
7+
- interrupts: the interrupt generated by the device via pin IRQ1.
8+
IRQ_TYPE_LEVEL_HIGH (4) or IRQ_TYPE_EDGE_FALLING (1)
9+
10+
Example:
11+
12+
adf7242@0 {
13+
compatible = "adi,adf7242";
14+
spi-max-frequency = <10000000>;
15+
reg = <0>;
16+
interrupts = <98 IRQ_TYPE_LEVEL_HIGH>;
17+
interrupt-parent = <&gpio3>;
18+
};

MAINTAINERS

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,15 @@ ADDRESS SPACE LAYOUT RANDOMIZATION (ASLR)
371371
M: Jiri Kosina <jikos@kernel.org>
372372
S: Maintained
373373

374+
ADF7242 IEEE 802.15.4 RADIO DRIVER
375+
M: Michael Hennerich <michael.hennerich@analog.com>
376+
W: https://wiki.analog.com/ADF7242
377+
W: http://ez.analog.com/community/linux-device-drivers
378+
L: linux-wpan@vger.kernel.org
379+
S: Supported
380+
F: drivers/net/ieee802154/adf7242.c
381+
F: Documentation/devicetree/bindings/net/ieee802154/adf7242.txt
382+
374383
ADM1025 HARDWARE MONITOR DRIVER
375384
M: Jean Delvare <jdelvare@suse.com>
376385
L: lm-sensors@lm-sensors.org

drivers/bluetooth/btintel.c

Lines changed: 80 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,48 @@ int btintel_check_bdaddr(struct hci_dev *hdev)
7373
}
7474
EXPORT_SYMBOL_GPL(btintel_check_bdaddr);
7575

76+
int btintel_enter_mfg(struct hci_dev *hdev)
77+
{
78+
const u8 param[] = { 0x01, 0x00 };
79+
struct sk_buff *skb;
80+
81+
skb = __hci_cmd_sync(hdev, 0xfc11, 2, param, HCI_CMD_TIMEOUT);
82+
if (IS_ERR(skb)) {
83+
bt_dev_err(hdev, "Entering manufacturer mode failed (%ld)",
84+
PTR_ERR(skb));
85+
return PTR_ERR(skb);
86+
}
87+
kfree_skb(skb);
88+
89+
return 0;
90+
}
91+
EXPORT_SYMBOL_GPL(btintel_enter_mfg);
92+
93+
int btintel_exit_mfg(struct hci_dev *hdev, bool reset, bool patched)
94+
{
95+
u8 param[] = { 0x00, 0x00 };
96+
struct sk_buff *skb;
97+
98+
/* The 2nd command parameter specifies the manufacturing exit method:
99+
* 0x00: Just disable the manufacturing mode (0x00).
100+
* 0x01: Disable manufacturing mode and reset with patches deactivated.
101+
* 0x02: Disable manufacturing mode and reset with patches activated.
102+
*/
103+
if (reset)
104+
param[1] |= patched ? 0x02 : 0x01;
105+
106+
skb = __hci_cmd_sync(hdev, 0xfc11, 2, param, HCI_CMD_TIMEOUT);
107+
if (IS_ERR(skb)) {
108+
bt_dev_err(hdev, "Exiting manufacturer mode failed (%ld)",
109+
PTR_ERR(skb));
110+
return PTR_ERR(skb);
111+
}
112+
kfree_skb(skb);
113+
114+
return 0;
115+
}
116+
EXPORT_SYMBOL_GPL(btintel_exit_mfg);
117+
76118
int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)
77119
{
78120
struct sk_buff *skb;
@@ -126,37 +168,19 @@ EXPORT_SYMBOL_GPL(btintel_set_diag);
126168

127169
int btintel_set_diag_mfg(struct hci_dev *hdev, bool enable)
128170
{
129-
struct sk_buff *skb;
130-
u8 param[2];
131-
int err;
132-
133-
param[0] = 0x01;
134-
param[1] = 0x00;
135-
136-
skb = __hci_cmd_sync(hdev, 0xfc11, 2, param, HCI_INIT_TIMEOUT);
137-
if (IS_ERR(skb)) {
138-
err = PTR_ERR(skb);
139-
BT_ERR("%s: Entering Intel manufacturer mode failed (%d)",
140-
hdev->name, err);
141-
return PTR_ERR(skb);
142-
}
143-
kfree_skb(skb);
171+
int err, ret;
144172

145-
err = btintel_set_diag(hdev, enable);
173+
err = btintel_enter_mfg(hdev);
174+
if (err)
175+
return err;
146176

147-
param[0] = 0x00;
148-
param[1] = 0x00;
177+
ret = btintel_set_diag(hdev, enable);
149178

150-
skb = __hci_cmd_sync(hdev, 0xfc11, 2, param, HCI_INIT_TIMEOUT);
151-
if (IS_ERR(skb)) {
152-
err = PTR_ERR(skb);
153-
BT_ERR("%s: Leaving Intel manufacturer mode failed (%d)",
154-
hdev->name, err);
155-
return PTR_ERR(skb);
156-
}
157-
kfree_skb(skb);
179+
err = btintel_exit_mfg(hdev, false, false);
180+
if (err)
181+
return err;
158182

159-
return err;
183+
return ret;
160184
}
161185
EXPORT_SYMBOL_GPL(btintel_set_diag_mfg);
162186

@@ -309,39 +333,46 @@ EXPORT_SYMBOL_GPL(btintel_set_event_mask);
309333

310334
int btintel_set_event_mask_mfg(struct hci_dev *hdev, bool debug)
311335
{
312-
struct sk_buff *skb;
313-
u8 param[2];
314-
int err;
336+
int err, ret;
315337

316-
param[0] = 0x01;
317-
param[1] = 0x00;
338+
err = btintel_enter_mfg(hdev);
339+
if (err)
340+
return err;
318341

319-
skb = __hci_cmd_sync(hdev, 0xfc11, 2, param, HCI_INIT_TIMEOUT);
320-
if (IS_ERR(skb)) {
321-
err = PTR_ERR(skb);
322-
BT_ERR("%s: Entering Intel manufacturer mode failed (%d)",
323-
hdev->name, err);
324-
return PTR_ERR(skb);
325-
}
326-
kfree_skb(skb);
342+
ret = btintel_set_event_mask(hdev, debug);
327343

328-
err = btintel_set_event_mask(hdev, debug);
344+
err = btintel_exit_mfg(hdev, false, false);
345+
if (err)
346+
return err;
329347

330-
param[0] = 0x00;
331-
param[1] = 0x00;
348+
return ret;
349+
}
350+
EXPORT_SYMBOL_GPL(btintel_set_event_mask_mfg);
332351

333-
skb = __hci_cmd_sync(hdev, 0xfc11, 2, param, HCI_INIT_TIMEOUT);
352+
int btintel_read_version(struct hci_dev *hdev, struct intel_version *ver)
353+
{
354+
struct sk_buff *skb;
355+
356+
skb = __hci_cmd_sync(hdev, 0xfc05, 0, NULL, HCI_CMD_TIMEOUT);
334357
if (IS_ERR(skb)) {
335-
err = PTR_ERR(skb);
336-
BT_ERR("%s: Leaving Intel manufacturer mode failed (%d)",
337-
hdev->name, err);
358+
bt_dev_err(hdev, "Reading Intel version information failed (%ld)",
359+
PTR_ERR(skb));
338360
return PTR_ERR(skb);
339361
}
362+
363+
if (skb->len != sizeof(*ver)) {
364+
bt_dev_err(hdev, "Intel version event size mismatch");
365+
kfree_skb(skb);
366+
return -EILSEQ;
367+
}
368+
369+
memcpy(ver, skb->data, sizeof(*ver));
370+
340371
kfree_skb(skb);
341372

342-
return err;
373+
return 0;
343374
}
344-
EXPORT_SYMBOL_GPL(btintel_set_event_mask_mfg);
375+
EXPORT_SYMBOL_GPL(btintel_read_version);
345376

346377
/* ------- REGMAP IBT SUPPORT ------- */
347378

drivers/bluetooth/btintel.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ struct intel_secure_send_result {
7272
#if IS_ENABLED(CONFIG_BT_INTEL)
7373

7474
int btintel_check_bdaddr(struct hci_dev *hdev);
75+
int btintel_enter_mfg(struct hci_dev *hdev);
76+
int btintel_exit_mfg(struct hci_dev *hdev, bool reset, bool patched);
7577
int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr);
7678
int btintel_set_diag(struct hci_dev *hdev, bool enable);
7779
int btintel_set_diag_mfg(struct hci_dev *hdev, bool enable);
@@ -83,6 +85,7 @@ int btintel_secure_send(struct hci_dev *hdev, u8 fragment_type, u32 plen,
8385
int btintel_load_ddc_config(struct hci_dev *hdev, const char *ddc_name);
8486
int btintel_set_event_mask(struct hci_dev *hdev, bool debug);
8587
int btintel_set_event_mask_mfg(struct hci_dev *hdev, bool debug);
88+
int btintel_read_version(struct hci_dev *hdev, struct intel_version *ver);
8689

8790
struct regmap *btintel_regmap_init(struct hci_dev *hdev, u16 opcode_read,
8891
u16 opcode_write);
@@ -94,6 +97,16 @@ static inline int btintel_check_bdaddr(struct hci_dev *hdev)
9497
return -EOPNOTSUPP;
9598
}
9699

100+
static inline int btintel_enter_mfg(struct hci_dev *hdev)
101+
{
102+
return -EOPNOTSUPP;
103+
}
104+
105+
static inline int btintel_exit_mfg(struct hci_dev *hdev, bool reset, bool patched)
106+
{
107+
return -EOPNOTSUPP;
108+
}
109+
97110
static inline int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)
98111
{
99112
return -EOPNOTSUPP;
@@ -140,6 +153,12 @@ static inline int btintel_set_event_mask_mfg(struct hci_dev *hdev, bool debug)
140153
return -EOPNOTSUPP;
141154
}
142155

156+
static inline int btintel_read_version(struct hci_dev *hdev,
157+
struct intel_version *ver)
158+
{
159+
return -EOPNOTSUPP;
160+
}
161+
143162
static inline struct regmap *btintel_regmap_init(struct hci_dev *hdev,
144163
u16 opcode_read,
145164
u16 opcode_write)

0 commit comments

Comments
 (0)