1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (c) 2018 MediaTek Inc.
5 * Bluetooth support for MediaTek serial devices
7 * Author: Sean Wang <sean.wang@mediatek.com>
11 #include <asm/unaligned.h>
12 #include <linux/atomic.h>
13 #include <linux/clk.h>
14 #include <linux/firmware.h>
15 #include <linux/gpio/consumer.h>
16 #include <linux/iopoll.h>
17 #include <linux/kernel.h>
18 #include <linux/module.h>
20 #include <linux/of_device.h>
21 #include <linux/pinctrl/consumer.h>
22 #include <linux/pm_runtime.h>
23 #include <linux/regulator/consumer.h>
24 #include <linux/serdev.h>
25 #include <linux/skbuff.h>
27 #include <net/bluetooth/bluetooth.h>
28 #include <net/bluetooth/hci_core.h>
34 #define FIRMWARE_MT7622 "mediatek/mt7622pr2h.bin"
35 #define FIRMWARE_MT7663 "mediatek/mt7663pr2h.bin"
36 #define FIRMWARE_MT7668 "mediatek/mt7668pr2h.bin"
38 #define MTK_STP_TLR_SIZE 2
40 #define BTMTKUART_TX_STATE_ACTIVE 1
41 #define BTMTKUART_TX_STATE_WAKEUP 2
42 #define BTMTKUART_TX_WAIT_VND_EVT 3
43 #define BTMTKUART_REQUIRED_WAKEUP 4
45 #define BTMTKUART_FLAG_STANDALONE_HW BIT(0)
48 MTK_WMT_PATCH_DWNLD
= 0x1,
52 MTK_WMT_FUNC_CTRL
= 0x6,
54 MTK_WMT_SEMAPHORE
= 0x17,
59 BTMTK_WMT_PATCH_UNDONE
,
63 BTMTK_WMT_ON_PROGRESS
,
72 struct btmtkuart_data
{
84 struct mtk_hci_wmt_cmd
{
85 struct mtk_wmt_hdr hdr
;
89 struct btmtk_hci_wmt_evt
{
90 struct hci_event_hdr hhdr
;
91 struct mtk_wmt_hdr whdr
;
94 struct btmtk_hci_wmt_evt_funcc
{
95 struct btmtk_hci_wmt_evt hwhdr
;
99 struct btmtk_tci_sleep
{
102 __le16 host_duration
;
104 u8 time_compensation
;
107 struct btmtk_hci_wmt_params
{
115 struct btmtkuart_dev
{
116 struct hci_dev
*hdev
;
117 struct serdev_device
*serdev
;
121 struct regulator
*vcc
;
122 struct gpio_desc
*reset
;
123 struct gpio_desc
*boot
;
124 struct pinctrl
*pinctrl
;
125 struct pinctrl_state
*pins_runtime
;
126 struct pinctrl_state
*pins_boot
;
127 speed_t desired_speed
;
130 struct work_struct tx_work
;
131 unsigned long tx_state
;
132 struct sk_buff_head txq
;
134 struct sk_buff
*rx_skb
;
135 struct sk_buff
*evt_skb
;
141 const struct btmtkuart_data
*data
;
144 #define btmtkuart_is_standalone(bdev) \
145 ((bdev)->data->flags & BTMTKUART_FLAG_STANDALONE_HW)
146 #define btmtkuart_is_builtin_soc(bdev) \
147 !((bdev)->data->flags & BTMTKUART_FLAG_STANDALONE_HW)
149 static int mtk_hci_wmt_sync(struct hci_dev
*hdev
,
150 struct btmtk_hci_wmt_params
*wmt_params
)
152 struct btmtkuart_dev
*bdev
= hci_get_drvdata(hdev
);
153 struct btmtk_hci_wmt_evt_funcc
*wmt_evt_funcc
;
154 u32 hlen
, status
= BTMTK_WMT_INVALID
;
155 struct btmtk_hci_wmt_evt
*wmt_evt
;
156 struct mtk_hci_wmt_cmd wc
;
157 struct mtk_wmt_hdr
*hdr
;
160 hlen
= sizeof(*hdr
) + wmt_params
->dlen
;
164 hdr
= (struct mtk_wmt_hdr
*)&wc
;
166 hdr
->op
= wmt_params
->op
;
167 hdr
->dlen
= cpu_to_le16(wmt_params
->dlen
+ 1);
168 hdr
->flag
= wmt_params
->flag
;
169 memcpy(wc
.data
, wmt_params
->data
, wmt_params
->dlen
);
171 set_bit(BTMTKUART_TX_WAIT_VND_EVT
, &bdev
->tx_state
);
173 err
= __hci_cmd_send(hdev
, 0xfc6f, hlen
, &wc
);
175 clear_bit(BTMTKUART_TX_WAIT_VND_EVT
, &bdev
->tx_state
);
179 /* The vendor specific WMT commands are all answered by a vendor
180 * specific event and will not have the Command Status or Command
181 * Complete as with usual HCI command flow control.
183 * After sending the command, wait for BTMTKUART_TX_WAIT_VND_EVT
184 * state to be cleared. The driver specific event receive routine
185 * will clear that state and with that indicate completion of the
188 err
= wait_on_bit_timeout(&bdev
->tx_state
, BTMTKUART_TX_WAIT_VND_EVT
,
189 TASK_INTERRUPTIBLE
, HCI_INIT_TIMEOUT
);
191 bt_dev_err(hdev
, "Execution of wmt command interrupted");
192 clear_bit(BTMTKUART_TX_WAIT_VND_EVT
, &bdev
->tx_state
);
197 bt_dev_err(hdev
, "Execution of wmt command timed out");
198 clear_bit(BTMTKUART_TX_WAIT_VND_EVT
, &bdev
->tx_state
);
202 /* Parse and handle the return WMT event */
203 wmt_evt
= (struct btmtk_hci_wmt_evt
*)bdev
->evt_skb
->data
;
204 if (wmt_evt
->whdr
.op
!= hdr
->op
) {
205 bt_dev_err(hdev
, "Wrong op received %d expected %d",
206 wmt_evt
->whdr
.op
, hdr
->op
);
211 switch (wmt_evt
->whdr
.op
) {
212 case MTK_WMT_SEMAPHORE
:
213 if (wmt_evt
->whdr
.flag
== 2)
214 status
= BTMTK_WMT_PATCH_UNDONE
;
216 status
= BTMTK_WMT_PATCH_DONE
;
218 case MTK_WMT_FUNC_CTRL
:
219 wmt_evt_funcc
= (struct btmtk_hci_wmt_evt_funcc
*)wmt_evt
;
220 if (be16_to_cpu(wmt_evt_funcc
->status
) == 0x404)
221 status
= BTMTK_WMT_ON_DONE
;
222 else if (be16_to_cpu(wmt_evt_funcc
->status
) == 0x420)
223 status
= BTMTK_WMT_ON_PROGRESS
;
225 status
= BTMTK_WMT_ON_UNDONE
;
229 if (wmt_params
->status
)
230 *wmt_params
->status
= status
;
233 kfree_skb(bdev
->evt_skb
);
234 bdev
->evt_skb
= NULL
;
239 static int mtk_setup_firmware(struct hci_dev
*hdev
, const char *fwname
)
241 struct btmtk_hci_wmt_params wmt_params
;
242 const struct firmware
*fw
;
248 err
= request_firmware(&fw
, fwname
, &hdev
->dev
);
250 bt_dev_err(hdev
, "Failed to load firmware file (%d)", err
);
257 /* The size of patch header is 30 bytes, should be skip */
267 wmt_params
.op
= MTK_WMT_PATCH_DWNLD
;
268 wmt_params
.status
= NULL
;
270 while (fw_size
> 0) {
271 dlen
= min_t(int, 250, fw_size
);
273 /* Tell device the position in sequence */
274 if (fw_size
- dlen
<= 0)
276 else if (fw_size
< fw
->size
- 30)
279 wmt_params
.flag
= flag
;
280 wmt_params
.dlen
= dlen
;
281 wmt_params
.data
= fw_ptr
;
283 err
= mtk_hci_wmt_sync(hdev
, &wmt_params
);
285 bt_dev_err(hdev
, "Failed to send wmt patch dwnld (%d)",
294 wmt_params
.op
= MTK_WMT_RST
;
297 wmt_params
.data
= NULL
;
298 wmt_params
.status
= NULL
;
300 /* Activate funciton the firmware providing to */
301 err
= mtk_hci_wmt_sync(hdev
, &wmt_params
);
303 bt_dev_err(hdev
, "Failed to send wmt rst (%d)", err
);
307 /* Wait a few moments for firmware activation done */
308 usleep_range(10000, 12000);
311 release_firmware(fw
);
315 static int btmtkuart_recv_event(struct hci_dev
*hdev
, struct sk_buff
*skb
)
317 struct btmtkuart_dev
*bdev
= hci_get_drvdata(hdev
);
318 struct hci_event_hdr
*hdr
= (void *)skb
->data
;
321 /* Fix up the vendor event id with 0xff for vendor specific instead
322 * of 0xe4 so that event send via monitoring socket can be parsed
325 if (hdr
->evt
== 0xe4)
326 hdr
->evt
= HCI_EV_VENDOR
;
328 /* When someone waits for the WMT event, the skb is being cloned
329 * and being processed the events from there then.
331 if (test_bit(BTMTKUART_TX_WAIT_VND_EVT
, &bdev
->tx_state
)) {
332 bdev
->evt_skb
= skb_clone(skb
, GFP_KERNEL
);
333 if (!bdev
->evt_skb
) {
339 err
= hci_recv_frame(hdev
, skb
);
343 if (hdr
->evt
== HCI_EV_VENDOR
) {
344 if (test_and_clear_bit(BTMTKUART_TX_WAIT_VND_EVT
,
346 /* Barrier to sync with other CPUs */
347 smp_mb__after_atomic();
348 wake_up_bit(&bdev
->tx_state
, BTMTKUART_TX_WAIT_VND_EVT
);
355 kfree_skb(bdev
->evt_skb
);
356 bdev
->evt_skb
= NULL
;
362 static const struct h4_recv_pkt mtk_recv_pkts
[] = {
363 { H4_RECV_ACL
, .recv
= hci_recv_frame
},
364 { H4_RECV_SCO
, .recv
= hci_recv_frame
},
365 { H4_RECV_EVENT
, .recv
= btmtkuart_recv_event
},
368 static void btmtkuart_tx_work(struct work_struct
*work
)
370 struct btmtkuart_dev
*bdev
= container_of(work
, struct btmtkuart_dev
,
372 struct serdev_device
*serdev
= bdev
->serdev
;
373 struct hci_dev
*hdev
= bdev
->hdev
;
376 clear_bit(BTMTKUART_TX_STATE_WAKEUP
, &bdev
->tx_state
);
379 struct sk_buff
*skb
= skb_dequeue(&bdev
->txq
);
385 len
= serdev_device_write_buf(serdev
, skb
->data
,
387 hdev
->stat
.byte_tx
+= len
;
391 skb_queue_head(&bdev
->txq
, skb
);
395 switch (hci_skb_pkt_type(skb
)) {
396 case HCI_COMMAND_PKT
:
399 case HCI_ACLDATA_PKT
:
402 case HCI_SCODATA_PKT
:
410 if (!test_bit(BTMTKUART_TX_STATE_WAKEUP
, &bdev
->tx_state
))
414 clear_bit(BTMTKUART_TX_STATE_ACTIVE
, &bdev
->tx_state
);
417 static void btmtkuart_tx_wakeup(struct btmtkuart_dev
*bdev
)
419 if (test_and_set_bit(BTMTKUART_TX_STATE_ACTIVE
, &bdev
->tx_state
))
420 set_bit(BTMTKUART_TX_STATE_WAKEUP
, &bdev
->tx_state
);
422 schedule_work(&bdev
->tx_work
);
425 static const unsigned char *
426 mtk_stp_split(struct btmtkuart_dev
*bdev
, const unsigned char *data
, int count
,
429 struct mtk_stp_hdr
*shdr
;
431 /* The cursor is reset when all the data of STP is consumed out */
432 if (!bdev
->stp_dlen
&& bdev
->stp_cursor
>= 6)
433 bdev
->stp_cursor
= 0;
435 /* Filling pad until all STP info is obtained */
436 while (bdev
->stp_cursor
< 6 && count
> 0) {
437 bdev
->stp_pad
[bdev
->stp_cursor
] = *data
;
443 /* Retrieve STP info and have a sanity check */
444 if (!bdev
->stp_dlen
&& bdev
->stp_cursor
>= 6) {
445 shdr
= (struct mtk_stp_hdr
*)&bdev
->stp_pad
[2];
446 bdev
->stp_dlen
= be16_to_cpu(shdr
->dlen
) & 0x0fff;
448 /* Resync STP when unexpected data is being read */
449 if (shdr
->prefix
!= 0x80 || bdev
->stp_dlen
> 2048) {
450 bt_dev_err(bdev
->hdev
, "stp format unexpect (%d, %d)",
451 shdr
->prefix
, bdev
->stp_dlen
);
452 bdev
->stp_cursor
= 2;
457 /* Directly quit when there's no data found for H4 can process */
461 /* Tranlate to how much the size of data H4 can handle so far */
462 *sz_h4
= min_t(int, count
, bdev
->stp_dlen
);
464 /* Update the remaining size of STP packet */
465 bdev
->stp_dlen
-= *sz_h4
;
467 /* Data points to STP payload which can be handled by H4 */
471 static int btmtkuart_recv(struct hci_dev
*hdev
, const u8
*data
, size_t count
)
473 struct btmtkuart_dev
*bdev
= hci_get_drvdata(hdev
);
474 const unsigned char *p_left
= data
, *p_h4
;
475 int sz_left
= count
, sz_h4
, adv
;
478 while (sz_left
> 0) {
479 /* The serial data received from MT7622 BT controller is
480 * at all time padded around with the STP header and tailer.
482 * A full STP packet is looking like
483 * -----------------------------------
484 * | STP header | H:4 | STP tailer |
485 * -----------------------------------
486 * but it doesn't guarantee to contain a full H:4 packet which
487 * means that it's possible for multiple STP packets forms a
488 * full H:4 packet that means extra STP header + length doesn't
489 * indicate a full H:4 frame, things can fragment. Whose length
490 * recorded in STP header just shows up the most length the
491 * H:4 engine can handle currently.
494 p_h4
= mtk_stp_split(bdev
, p_left
, sz_left
, &sz_h4
);
502 bdev
->rx_skb
= h4_recv_buf(bdev
->hdev
, bdev
->rx_skb
, p_h4
,
503 sz_h4
, mtk_recv_pkts
,
504 ARRAY_SIZE(mtk_recv_pkts
));
505 if (IS_ERR(bdev
->rx_skb
)) {
506 err
= PTR_ERR(bdev
->rx_skb
);
507 bt_dev_err(bdev
->hdev
,
508 "Frame reassembly failed (%d)", err
);
520 static int btmtkuart_receive_buf(struct serdev_device
*serdev
, const u8
*data
,
523 struct btmtkuart_dev
*bdev
= serdev_device_get_drvdata(serdev
);
526 err
= btmtkuart_recv(bdev
->hdev
, data
, count
);
530 bdev
->hdev
->stat
.byte_rx
+= count
;
535 static void btmtkuart_write_wakeup(struct serdev_device
*serdev
)
537 struct btmtkuart_dev
*bdev
= serdev_device_get_drvdata(serdev
);
539 btmtkuart_tx_wakeup(bdev
);
542 static const struct serdev_device_ops btmtkuart_client_ops
= {
543 .receive_buf
= btmtkuart_receive_buf
,
544 .write_wakeup
= btmtkuart_write_wakeup
,
547 static int btmtkuart_open(struct hci_dev
*hdev
)
549 struct btmtkuart_dev
*bdev
= hci_get_drvdata(hdev
);
553 err
= serdev_device_open(bdev
->serdev
);
555 bt_dev_err(hdev
, "Unable to open UART device %s",
556 dev_name(&bdev
->serdev
->dev
));
560 if (btmtkuart_is_standalone(bdev
)) {
561 if (bdev
->curr_speed
!= bdev
->desired_speed
)
562 err
= serdev_device_set_baudrate(bdev
->serdev
,
565 err
= serdev_device_set_baudrate(bdev
->serdev
,
566 bdev
->desired_speed
);
569 bt_dev_err(hdev
, "Unable to set baudrate UART device %s",
570 dev_name(&bdev
->serdev
->dev
));
571 goto err_serdev_close
;
574 serdev_device_set_flow_control(bdev
->serdev
, false);
577 bdev
->stp_cursor
= 2;
580 dev
= &bdev
->serdev
->dev
;
582 /* Enable the power domain and clock the device requires */
583 pm_runtime_enable(dev
);
584 err
= pm_runtime_get_sync(dev
);
586 pm_runtime_put_noidle(dev
);
587 goto err_disable_rpm
;
590 err
= clk_prepare_enable(bdev
->clk
);
597 pm_runtime_put_sync(dev
);
599 pm_runtime_disable(dev
);
601 serdev_device_close(bdev
->serdev
);
606 static int btmtkuart_close(struct hci_dev
*hdev
)
608 struct btmtkuart_dev
*bdev
= hci_get_drvdata(hdev
);
609 struct device
*dev
= &bdev
->serdev
->dev
;
611 /* Shutdown the clock and power domain the device requires */
612 clk_disable_unprepare(bdev
->clk
);
613 pm_runtime_put_sync(dev
);
614 pm_runtime_disable(dev
);
616 serdev_device_close(bdev
->serdev
);
621 static int btmtkuart_flush(struct hci_dev
*hdev
)
623 struct btmtkuart_dev
*bdev
= hci_get_drvdata(hdev
);
625 /* Flush any pending characters */
626 serdev_device_write_flush(bdev
->serdev
);
627 skb_queue_purge(&bdev
->txq
);
629 cancel_work_sync(&bdev
->tx_work
);
631 kfree_skb(bdev
->rx_skb
);
634 bdev
->stp_cursor
= 2;
640 static int btmtkuart_func_query(struct hci_dev
*hdev
)
642 struct btmtk_hci_wmt_params wmt_params
;
646 /* Query whether the function is enabled */
647 wmt_params
.op
= MTK_WMT_FUNC_CTRL
;
649 wmt_params
.dlen
= sizeof(param
);
650 wmt_params
.data
= ¶m
;
651 wmt_params
.status
= &status
;
653 err
= mtk_hci_wmt_sync(hdev
, &wmt_params
);
655 bt_dev_err(hdev
, "Failed to query function status (%d)", err
);
662 static int btmtkuart_change_baudrate(struct hci_dev
*hdev
)
664 struct btmtkuart_dev
*bdev
= hci_get_drvdata(hdev
);
665 struct btmtk_hci_wmt_params wmt_params
;
670 /* Indicate the device to enter the probe state the host is
671 * ready to change a new baudrate.
673 baudrate
= cpu_to_le32(bdev
->desired_speed
);
674 wmt_params
.op
= MTK_WMT_HIF
;
677 wmt_params
.data
= &baudrate
;
678 wmt_params
.status
= NULL
;
680 err
= mtk_hci_wmt_sync(hdev
, &wmt_params
);
682 bt_dev_err(hdev
, "Failed to device baudrate (%d)", err
);
686 err
= serdev_device_set_baudrate(bdev
->serdev
,
687 bdev
->desired_speed
);
689 bt_dev_err(hdev
, "Failed to set up host baudrate (%d)",
694 serdev_device_set_flow_control(bdev
->serdev
, false);
696 /* Send a dummy byte 0xff to activate the new baudrate */
698 err
= serdev_device_write(bdev
->serdev
, ¶m
, sizeof(param
),
699 MAX_SCHEDULE_TIMEOUT
);
700 if (err
< 0 || err
< sizeof(param
))
703 serdev_device_wait_until_sent(bdev
->serdev
, 0);
705 /* Wait some time for the device changing baudrate done */
706 usleep_range(20000, 22000);
708 /* Test the new baudrate */
709 wmt_params
.op
= MTK_WMT_TEST
;
712 wmt_params
.data
= NULL
;
713 wmt_params
.status
= NULL
;
715 err
= mtk_hci_wmt_sync(hdev
, &wmt_params
);
717 bt_dev_err(hdev
, "Failed to test new baudrate (%d)",
722 bdev
->curr_speed
= bdev
->desired_speed
;
727 static int btmtkuart_setup(struct hci_dev
*hdev
)
729 struct btmtkuart_dev
*bdev
= hci_get_drvdata(hdev
);
730 struct btmtk_hci_wmt_params wmt_params
;
731 ktime_t calltime
, delta
, rettime
;
732 struct btmtk_tci_sleep tci_sleep
;
733 unsigned long long duration
;
738 calltime
= ktime_get();
740 /* Wakeup MCUSYS is required for certain devices before we start to
743 if (test_bit(BTMTKUART_REQUIRED_WAKEUP
, &bdev
->tx_state
)) {
744 wmt_params
.op
= MTK_WMT_WAKEUP
;
747 wmt_params
.data
= NULL
;
748 wmt_params
.status
= NULL
;
750 err
= mtk_hci_wmt_sync(hdev
, &wmt_params
);
752 bt_dev_err(hdev
, "Failed to wakeup the chip (%d)", err
);
756 clear_bit(BTMTKUART_REQUIRED_WAKEUP
, &bdev
->tx_state
);
759 if (btmtkuart_is_standalone(bdev
))
760 btmtkuart_change_baudrate(hdev
);
762 /* Query whether the firmware is already download */
763 wmt_params
.op
= MTK_WMT_SEMAPHORE
;
766 wmt_params
.data
= NULL
;
767 wmt_params
.status
= &status
;
769 err
= mtk_hci_wmt_sync(hdev
, &wmt_params
);
771 bt_dev_err(hdev
, "Failed to query firmware status (%d)", err
);
775 if (status
== BTMTK_WMT_PATCH_DONE
) {
776 bt_dev_info(hdev
, "Firmware already downloaded");
777 goto ignore_setup_fw
;
780 /* Setup a firmware which the device definitely requires */
781 err
= mtk_setup_firmware(hdev
, bdev
->data
->fwname
);
786 /* Query whether the device is already enabled */
787 err
= readx_poll_timeout(btmtkuart_func_query
, hdev
, status
,
788 status
< 0 || status
!= BTMTK_WMT_ON_PROGRESS
,
790 /* -ETIMEDOUT happens */
794 /* The other errors happen in btusb_mtk_func_query */
798 if (status
== BTMTK_WMT_ON_DONE
) {
799 bt_dev_info(hdev
, "function already on");
803 /* Enable Bluetooth protocol */
804 wmt_params
.op
= MTK_WMT_FUNC_CTRL
;
806 wmt_params
.dlen
= sizeof(param
);
807 wmt_params
.data
= ¶m
;
808 wmt_params
.status
= NULL
;
810 err
= mtk_hci_wmt_sync(hdev
, &wmt_params
);
812 bt_dev_err(hdev
, "Failed to send wmt func ctrl (%d)", err
);
817 /* Apply the low power environment setup */
818 tci_sleep
.mode
= 0x5;
819 tci_sleep
.duration
= cpu_to_le16(0x640);
820 tci_sleep
.host_duration
= cpu_to_le16(0x640);
821 tci_sleep
.host_wakeup_pin
= 0;
822 tci_sleep
.time_compensation
= 0;
824 skb
= __hci_cmd_sync(hdev
, 0xfc7a, sizeof(tci_sleep
), &tci_sleep
,
828 bt_dev_err(hdev
, "Failed to apply low power setting (%d)", err
);
833 rettime
= ktime_get();
834 delta
= ktime_sub(rettime
, calltime
);
835 duration
= (unsigned long long)ktime_to_ns(delta
) >> 10;
837 bt_dev_info(hdev
, "Device setup in %llu usecs", duration
);
842 static int btmtkuart_shutdown(struct hci_dev
*hdev
)
844 struct btmtk_hci_wmt_params wmt_params
;
848 /* Disable the device */
849 wmt_params
.op
= MTK_WMT_FUNC_CTRL
;
851 wmt_params
.dlen
= sizeof(param
);
852 wmt_params
.data
= ¶m
;
853 wmt_params
.status
= NULL
;
855 err
= mtk_hci_wmt_sync(hdev
, &wmt_params
);
857 bt_dev_err(hdev
, "Failed to send wmt func ctrl (%d)", err
);
864 static int btmtkuart_send_frame(struct hci_dev
*hdev
, struct sk_buff
*skb
)
866 struct btmtkuart_dev
*bdev
= hci_get_drvdata(hdev
);
867 struct mtk_stp_hdr
*shdr
;
868 int err
, dlen
, type
= 0;
870 /* Prepend skb with frame type */
871 memcpy(skb_push(skb
, 1), &hci_skb_pkt_type(skb
), 1);
873 /* Make sure that there is enough rooms for STP header and trailer */
874 if (unlikely(skb_headroom(skb
) < sizeof(*shdr
)) ||
875 (skb_tailroom(skb
) < MTK_STP_TLR_SIZE
)) {
876 err
= pskb_expand_head(skb
, sizeof(*shdr
), MTK_STP_TLR_SIZE
,
882 /* Add the STP header */
884 shdr
= skb_push(skb
, sizeof(*shdr
));
886 shdr
->dlen
= cpu_to_be16((dlen
& 0x0fff) | (type
<< 12));
887 shdr
->cs
= 0; /* MT7622 doesn't care about checksum value */
889 /* Add the STP trailer */
890 skb_put_zero(skb
, MTK_STP_TLR_SIZE
);
892 skb_queue_tail(&bdev
->txq
, skb
);
894 btmtkuart_tx_wakeup(bdev
);
898 static int btmtkuart_parse_dt(struct serdev_device
*serdev
)
900 struct btmtkuart_dev
*bdev
= serdev_device_get_drvdata(serdev
);
901 struct device_node
*node
= serdev
->dev
.of_node
;
905 if (btmtkuart_is_standalone(bdev
)) {
906 of_property_read_u32(node
, "current-speed", &speed
);
908 bdev
->desired_speed
= speed
;
910 bdev
->vcc
= devm_regulator_get(&serdev
->dev
, "vcc");
911 if (IS_ERR(bdev
->vcc
)) {
912 err
= PTR_ERR(bdev
->vcc
);
916 bdev
->osc
= devm_clk_get_optional(&serdev
->dev
, "osc");
917 if (IS_ERR(bdev
->osc
)) {
918 err
= PTR_ERR(bdev
->osc
);
922 bdev
->boot
= devm_gpiod_get_optional(&serdev
->dev
, "boot",
924 if (IS_ERR(bdev
->boot
)) {
925 err
= PTR_ERR(bdev
->boot
);
929 bdev
->pinctrl
= devm_pinctrl_get(&serdev
->dev
);
930 if (IS_ERR(bdev
->pinctrl
)) {
931 err
= PTR_ERR(bdev
->pinctrl
);
935 bdev
->pins_boot
= pinctrl_lookup_state(bdev
->pinctrl
,
937 if (IS_ERR(bdev
->pins_boot
) && !bdev
->boot
) {
938 err
= PTR_ERR(bdev
->pins_boot
);
939 dev_err(&serdev
->dev
,
940 "Should assign RXD to LOW at boot stage\n");
944 bdev
->pins_runtime
= pinctrl_lookup_state(bdev
->pinctrl
,
946 if (IS_ERR(bdev
->pins_runtime
)) {
947 err
= PTR_ERR(bdev
->pins_runtime
);
951 bdev
->reset
= devm_gpiod_get_optional(&serdev
->dev
, "reset",
953 if (IS_ERR(bdev
->reset
)) {
954 err
= PTR_ERR(bdev
->reset
);
957 } else if (btmtkuart_is_builtin_soc(bdev
)) {
958 bdev
->clk
= devm_clk_get(&serdev
->dev
, "ref");
959 if (IS_ERR(bdev
->clk
))
960 return PTR_ERR(bdev
->clk
);
966 static int btmtkuart_probe(struct serdev_device
*serdev
)
968 struct btmtkuart_dev
*bdev
;
969 struct hci_dev
*hdev
;
972 bdev
= devm_kzalloc(&serdev
->dev
, sizeof(*bdev
), GFP_KERNEL
);
976 bdev
->data
= of_device_get_match_data(&serdev
->dev
);
980 bdev
->serdev
= serdev
;
981 serdev_device_set_drvdata(serdev
, bdev
);
983 serdev_device_set_client_ops(serdev
, &btmtkuart_client_ops
);
985 err
= btmtkuart_parse_dt(serdev
);
989 INIT_WORK(&bdev
->tx_work
, btmtkuart_tx_work
);
990 skb_queue_head_init(&bdev
->txq
);
992 /* Initialize and register HCI device */
993 hdev
= hci_alloc_dev();
995 dev_err(&serdev
->dev
, "Can't allocate HCI device\n");
1001 hdev
->bus
= HCI_UART
;
1002 hci_set_drvdata(hdev
, bdev
);
1004 hdev
->open
= btmtkuart_open
;
1005 hdev
->close
= btmtkuart_close
;
1006 hdev
->flush
= btmtkuart_flush
;
1007 hdev
->setup
= btmtkuart_setup
;
1008 hdev
->shutdown
= btmtkuart_shutdown
;
1009 hdev
->send
= btmtkuart_send_frame
;
1010 SET_HCIDEV_DEV(hdev
, &serdev
->dev
);
1012 hdev
->manufacturer
= 70;
1013 set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP
, &hdev
->quirks
);
1015 if (btmtkuart_is_standalone(bdev
)) {
1016 err
= clk_prepare_enable(bdev
->osc
);
1021 gpiod_set_value_cansleep(bdev
->boot
, 1);
1023 /* Switch to the specific pin state for the booting
1026 pinctrl_select_state(bdev
->pinctrl
, bdev
->pins_boot
);
1030 err
= regulator_enable(bdev
->vcc
);
1032 clk_disable_unprepare(bdev
->osc
);
1036 /* Reset if the reset-gpios is available otherwise the board
1037 * -level design should be guaranteed.
1040 gpiod_set_value_cansleep(bdev
->reset
, 1);
1041 usleep_range(1000, 2000);
1042 gpiod_set_value_cansleep(bdev
->reset
, 0);
1045 /* Wait some time until device got ready and switch to the pin
1046 * mode the device requires for UART transfers.
1051 devm_gpiod_put(&serdev
->dev
, bdev
->boot
);
1053 pinctrl_select_state(bdev
->pinctrl
, bdev
->pins_runtime
);
1055 /* A standalone device doesn't depends on power domain on SoC,
1056 * so mark it as no callbacks.
1058 pm_runtime_no_callbacks(&serdev
->dev
);
1060 set_bit(BTMTKUART_REQUIRED_WAKEUP
, &bdev
->tx_state
);
1063 err
= hci_register_dev(hdev
);
1065 dev_err(&serdev
->dev
, "Can't register HCI device\n");
1067 goto err_regulator_disable
;
1072 err_regulator_disable
:
1073 if (btmtkuart_is_standalone(bdev
))
1074 regulator_disable(bdev
->vcc
);
1079 static void btmtkuart_remove(struct serdev_device
*serdev
)
1081 struct btmtkuart_dev
*bdev
= serdev_device_get_drvdata(serdev
);
1082 struct hci_dev
*hdev
= bdev
->hdev
;
1084 if (btmtkuart_is_standalone(bdev
)) {
1085 regulator_disable(bdev
->vcc
);
1086 clk_disable_unprepare(bdev
->osc
);
1089 hci_unregister_dev(hdev
);
1093 static const struct btmtkuart_data mt7622_data
= {
1094 .fwname
= FIRMWARE_MT7622
,
1097 static const struct btmtkuart_data mt7663_data
= {
1098 .flags
= BTMTKUART_FLAG_STANDALONE_HW
,
1099 .fwname
= FIRMWARE_MT7663
,
1102 static const struct btmtkuart_data mt7668_data
= {
1103 .flags
= BTMTKUART_FLAG_STANDALONE_HW
,
1104 .fwname
= FIRMWARE_MT7668
,
1108 static const struct of_device_id mtk_of_match_table
[] = {
1109 { .compatible
= "mediatek,mt7622-bluetooth", .data
= &mt7622_data
},
1110 { .compatible
= "mediatek,mt7663u-bluetooth", .data
= &mt7663_data
},
1111 { .compatible
= "mediatek,mt7668u-bluetooth", .data
= &mt7668_data
},
1114 MODULE_DEVICE_TABLE(of
, mtk_of_match_table
);
1117 static struct serdev_device_driver btmtkuart_driver
= {
1118 .probe
= btmtkuart_probe
,
1119 .remove
= btmtkuart_remove
,
1121 .name
= "btmtkuart",
1122 .of_match_table
= of_match_ptr(mtk_of_match_table
),
1126 module_serdev_device_driver(btmtkuart_driver
);
1128 MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
1129 MODULE_DESCRIPTION("MediaTek Bluetooth Serial driver ver " VERSION
);
1130 MODULE_VERSION(VERSION
);
1131 MODULE_LICENSE("GPL");
1132 MODULE_FIRMWARE(FIRMWARE_MT7622
);
1133 MODULE_FIRMWARE(FIRMWARE_MT7663
);
1134 MODULE_FIRMWARE(FIRMWARE_MT7668
);