btmtkuart.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997
  1. // SPDX-License-Identifier: GPL-2.0
  2. // Copyright (c) 2018 MediaTek Inc.
  3. /*
  4. * Bluetooth support for MediaTek serial devices
  5. *
  6. * Author: Sean Wang <sean.wang@mediatek.com>
  7. *
  8. */
  9. #include <linux/unaligned.h>
  10. #include <linux/atomic.h>
  11. #include <linux/clk.h>
  12. #include <linux/firmware.h>
  13. #include <linux/gpio/consumer.h>
  14. #include <linux/iopoll.h>
  15. #include <linux/kernel.h>
  16. #include <linux/module.h>
  17. #include <linux/of.h>
  18. #include <linux/pinctrl/consumer.h>
  19. #include <linux/pm_runtime.h>
  20. #include <linux/regulator/consumer.h>
  21. #include <linux/serdev.h>
  22. #include <linux/skbuff.h>
  23. #include <linux/usb.h>
  24. #include <net/bluetooth/bluetooth.h>
  25. #include <net/bluetooth/hci_core.h>
  26. #include "hci_uart.h"
  27. #include "btmtk.h"
  28. #define VERSION "0.2"
  29. #define MTK_STP_TLR_SIZE 2
  30. #define BTMTKUART_TX_STATE_ACTIVE 1
  31. #define BTMTKUART_TX_STATE_WAKEUP 2
  32. #define BTMTKUART_TX_WAIT_VND_EVT 3
  33. #define BTMTKUART_REQUIRED_WAKEUP 4
  34. #define BTMTKUART_FLAG_STANDALONE_HW BIT(0)
  35. struct mtk_stp_hdr {
  36. u8 prefix;
  37. __be16 dlen;
  38. u8 cs;
  39. } __packed;
  40. struct btmtkuart_data {
  41. unsigned int flags;
  42. const char *fwname;
  43. };
  44. struct btmtkuart_dev {
  45. struct hci_dev *hdev;
  46. struct serdev_device *serdev;
  47. struct clk *clk;
  48. struct clk *osc;
  49. struct regulator *vcc;
  50. struct gpio_desc *reset;
  51. struct gpio_desc *boot;
  52. struct pinctrl *pinctrl;
  53. struct pinctrl_state *pins_runtime;
  54. struct pinctrl_state *pins_boot;
  55. speed_t desired_speed;
  56. speed_t curr_speed;
  57. struct work_struct tx_work;
  58. unsigned long tx_state;
  59. struct sk_buff_head txq;
  60. struct sk_buff *rx_skb;
  61. struct sk_buff *evt_skb;
  62. u8 stp_pad[6];
  63. u8 stp_cursor;
  64. u16 stp_dlen;
  65. const struct btmtkuart_data *data;
  66. struct hci_uart hu;
  67. };
  68. #define btmtkuart_is_standalone(bdev) \
  69. ((bdev)->data->flags & BTMTKUART_FLAG_STANDALONE_HW)
  70. #define btmtkuart_is_builtin_soc(bdev) \
  71. !((bdev)->data->flags & BTMTKUART_FLAG_STANDALONE_HW)
  72. static int mtk_hci_wmt_sync(struct hci_dev *hdev,
  73. struct btmtk_hci_wmt_params *wmt_params)
  74. {
  75. struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
  76. struct btmtk_hci_wmt_evt_funcc *wmt_evt_funcc;
  77. u32 hlen, status = BTMTK_WMT_INVALID;
  78. struct btmtk_hci_wmt_evt *wmt_evt;
  79. struct btmtk_hci_wmt_cmd *wc;
  80. struct btmtk_wmt_hdr *hdr;
  81. int err;
  82. /* Send the WMT command and wait until the WMT event returns */
  83. hlen = sizeof(*hdr) + wmt_params->dlen;
  84. if (hlen > 255) {
  85. err = -EINVAL;
  86. goto err_free_skb;
  87. }
  88. wc = kzalloc(hlen, GFP_KERNEL);
  89. if (!wc) {
  90. err = -ENOMEM;
  91. goto err_free_skb;
  92. }
  93. hdr = &wc->hdr;
  94. hdr->dir = 1;
  95. hdr->op = wmt_params->op;
  96. hdr->dlen = cpu_to_le16(wmt_params->dlen + 1);
  97. hdr->flag = wmt_params->flag;
  98. memcpy(wc->data, wmt_params->data, wmt_params->dlen);
  99. set_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
  100. err = __hci_cmd_send(hdev, 0xfc6f, hlen, wc);
  101. if (err < 0) {
  102. clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
  103. goto err_free_wc;
  104. }
  105. /* The vendor specific WMT commands are all answered by a vendor
  106. * specific event and will not have the Command Status or Command
  107. * Complete as with usual HCI command flow control.
  108. *
  109. * After sending the command, wait for BTMTKUART_TX_WAIT_VND_EVT
  110. * state to be cleared. The driver specific event receive routine
  111. * will clear that state and with that indicate completion of the
  112. * WMT command.
  113. */
  114. err = wait_on_bit_timeout(&bdev->tx_state, BTMTKUART_TX_WAIT_VND_EVT,
  115. TASK_INTERRUPTIBLE, HCI_INIT_TIMEOUT);
  116. if (err == -EINTR) {
  117. bt_dev_err(hdev, "Execution of wmt command interrupted");
  118. clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
  119. goto err_free_wc;
  120. }
  121. if (err) {
  122. bt_dev_err(hdev, "Execution of wmt command timed out");
  123. clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
  124. err = -ETIMEDOUT;
  125. goto err_free_wc;
  126. }
  127. /* Parse and handle the return WMT event */
  128. wmt_evt = (struct btmtk_hci_wmt_evt *)bdev->evt_skb->data;
  129. if (wmt_evt->whdr.op != hdr->op) {
  130. bt_dev_err(hdev, "Wrong op received %d expected %d",
  131. wmt_evt->whdr.op, hdr->op);
  132. err = -EIO;
  133. goto err_free_wc;
  134. }
  135. switch (wmt_evt->whdr.op) {
  136. case BTMTK_WMT_SEMAPHORE:
  137. if (wmt_evt->whdr.flag == 2)
  138. status = BTMTK_WMT_PATCH_UNDONE;
  139. else
  140. status = BTMTK_WMT_PATCH_DONE;
  141. break;
  142. case BTMTK_WMT_FUNC_CTRL:
  143. wmt_evt_funcc = (struct btmtk_hci_wmt_evt_funcc *)wmt_evt;
  144. if (be16_to_cpu(wmt_evt_funcc->status) == 0x404)
  145. status = BTMTK_WMT_ON_DONE;
  146. else if (be16_to_cpu(wmt_evt_funcc->status) == 0x420)
  147. status = BTMTK_WMT_ON_PROGRESS;
  148. else
  149. status = BTMTK_WMT_ON_UNDONE;
  150. break;
  151. }
  152. if (wmt_params->status)
  153. *wmt_params->status = status;
  154. err_free_wc:
  155. kfree(wc);
  156. err_free_skb:
  157. kfree_skb(bdev->evt_skb);
  158. bdev->evt_skb = NULL;
  159. return err;
  160. }
  161. static int btmtkuart_recv_event(struct hci_dev *hdev, struct sk_buff *skb)
  162. {
  163. struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
  164. struct hci_event_hdr *hdr = (void *)skb->data;
  165. int err;
  166. /* When someone waits for the WMT event, the skb is being cloned
  167. * and being processed the events from there then.
  168. */
  169. if (test_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state)) {
  170. bdev->evt_skb = skb_clone(skb, GFP_KERNEL);
  171. if (!bdev->evt_skb) {
  172. err = -ENOMEM;
  173. goto err_out;
  174. }
  175. }
  176. err = hci_recv_frame(hdev, skb);
  177. if (err < 0)
  178. goto err_free_skb;
  179. if (hdr->evt == HCI_EV_WMT) {
  180. if (test_and_clear_bit(BTMTKUART_TX_WAIT_VND_EVT,
  181. &bdev->tx_state)) {
  182. /* Barrier to sync with other CPUs */
  183. smp_mb__after_atomic();
  184. wake_up_bit(&bdev->tx_state, BTMTKUART_TX_WAIT_VND_EVT);
  185. }
  186. }
  187. return 0;
  188. err_free_skb:
  189. kfree_skb(bdev->evt_skb);
  190. bdev->evt_skb = NULL;
  191. err_out:
  192. return err;
  193. }
  194. static const struct h4_recv_pkt mtk_recv_pkts[] = {
  195. { H4_RECV_ACL, .recv = hci_recv_frame },
  196. { H4_RECV_SCO, .recv = hci_recv_frame },
  197. { H4_RECV_EVENT, .recv = btmtkuart_recv_event },
  198. };
  199. static void btmtkuart_tx_work(struct work_struct *work)
  200. {
  201. struct btmtkuart_dev *bdev = container_of(work, struct btmtkuart_dev,
  202. tx_work);
  203. struct serdev_device *serdev = bdev->serdev;
  204. struct hci_dev *hdev = bdev->hdev;
  205. while (1) {
  206. clear_bit(BTMTKUART_TX_STATE_WAKEUP, &bdev->tx_state);
  207. while (1) {
  208. struct sk_buff *skb = skb_dequeue(&bdev->txq);
  209. int len;
  210. if (!skb)
  211. break;
  212. len = serdev_device_write_buf(serdev, skb->data,
  213. skb->len);
  214. hdev->stat.byte_tx += len;
  215. skb_pull(skb, len);
  216. if (skb->len > 0) {
  217. skb_queue_head(&bdev->txq, skb);
  218. break;
  219. }
  220. switch (hci_skb_pkt_type(skb)) {
  221. case HCI_COMMAND_PKT:
  222. hdev->stat.cmd_tx++;
  223. break;
  224. case HCI_ACLDATA_PKT:
  225. hdev->stat.acl_tx++;
  226. break;
  227. case HCI_SCODATA_PKT:
  228. hdev->stat.sco_tx++;
  229. break;
  230. }
  231. kfree_skb(skb);
  232. }
  233. if (!test_bit(BTMTKUART_TX_STATE_WAKEUP, &bdev->tx_state))
  234. break;
  235. }
  236. clear_bit(BTMTKUART_TX_STATE_ACTIVE, &bdev->tx_state);
  237. }
  238. static void btmtkuart_tx_wakeup(struct btmtkuart_dev *bdev)
  239. {
  240. if (test_and_set_bit(BTMTKUART_TX_STATE_ACTIVE, &bdev->tx_state))
  241. set_bit(BTMTKUART_TX_STATE_WAKEUP, &bdev->tx_state);
  242. schedule_work(&bdev->tx_work);
  243. }
  244. static const unsigned char *
  245. mtk_stp_split(struct btmtkuart_dev *bdev, const unsigned char *data, int count,
  246. int *sz_h4)
  247. {
  248. struct mtk_stp_hdr *shdr;
  249. /* The cursor is reset when all the data of STP is consumed out */
  250. if (!bdev->stp_dlen && bdev->stp_cursor >= 6)
  251. bdev->stp_cursor = 0;
  252. /* Filling pad until all STP info is obtained */
  253. while (bdev->stp_cursor < 6 && count > 0) {
  254. bdev->stp_pad[bdev->stp_cursor] = *data;
  255. bdev->stp_cursor++;
  256. data++;
  257. count--;
  258. }
  259. /* Retrieve STP info and have a sanity check */
  260. if (!bdev->stp_dlen && bdev->stp_cursor >= 6) {
  261. shdr = (struct mtk_stp_hdr *)&bdev->stp_pad[2];
  262. bdev->stp_dlen = be16_to_cpu(shdr->dlen) & 0x0fff;
  263. /* Resync STP when unexpected data is being read */
  264. if (shdr->prefix != 0x80 || bdev->stp_dlen > 2048) {
  265. bt_dev_err(bdev->hdev, "stp format unexpected (%d, %d)",
  266. shdr->prefix, bdev->stp_dlen);
  267. bdev->stp_cursor = 2;
  268. bdev->stp_dlen = 0;
  269. }
  270. }
  271. /* Directly quit when there's no data found for H4 can process */
  272. if (count <= 0)
  273. return NULL;
  274. /* Translate to how much the size of data H4 can handle so far */
  275. *sz_h4 = min_t(int, count, bdev->stp_dlen);
  276. /* Update the remaining size of STP packet */
  277. bdev->stp_dlen -= *sz_h4;
  278. /* Data points to STP payload which can be handled by H4 */
  279. return data;
  280. }
  281. static void btmtkuart_recv(struct hci_dev *hdev, const u8 *data, size_t count)
  282. {
  283. struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
  284. const unsigned char *p_left = data, *p_h4;
  285. int sz_left = count, sz_h4, adv;
  286. int err;
  287. while (sz_left > 0) {
  288. /* The serial data received from MT7622 BT controller is
  289. * at all time padded around with the STP header and tailer.
  290. *
  291. * A full STP packet is looking like
  292. * -----------------------------------
  293. * | STP header | H:4 | STP tailer |
  294. * -----------------------------------
  295. * but it doesn't guarantee to contain a full H:4 packet which
  296. * means that it's possible for multiple STP packets forms a
  297. * full H:4 packet that means extra STP header + length doesn't
  298. * indicate a full H:4 frame, things can fragment. Whose length
  299. * recorded in STP header just shows up the most length the
  300. * H:4 engine can handle currently.
  301. */
  302. p_h4 = mtk_stp_split(bdev, p_left, sz_left, &sz_h4);
  303. if (!p_h4)
  304. break;
  305. adv = p_h4 - p_left;
  306. sz_left -= adv;
  307. p_left += adv;
  308. bdev->rx_skb = h4_recv_buf(&bdev->hu, bdev->rx_skb, p_h4,
  309. sz_h4, mtk_recv_pkts,
  310. ARRAY_SIZE(mtk_recv_pkts));
  311. if (IS_ERR(bdev->rx_skb)) {
  312. err = PTR_ERR(bdev->rx_skb);
  313. bt_dev_err(bdev->hdev,
  314. "Frame reassembly failed (%d)", err);
  315. bdev->rx_skb = NULL;
  316. return;
  317. }
  318. sz_left -= sz_h4;
  319. p_left += sz_h4;
  320. }
  321. }
  322. static size_t btmtkuart_receive_buf(struct serdev_device *serdev,
  323. const u8 *data, size_t count)
  324. {
  325. struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev);
  326. btmtkuart_recv(bdev->hdev, data, count);
  327. bdev->hdev->stat.byte_rx += count;
  328. return count;
  329. }
  330. static void btmtkuart_write_wakeup(struct serdev_device *serdev)
  331. {
  332. struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev);
  333. btmtkuart_tx_wakeup(bdev);
  334. }
  335. static const struct serdev_device_ops btmtkuart_client_ops = {
  336. .receive_buf = btmtkuart_receive_buf,
  337. .write_wakeup = btmtkuart_write_wakeup,
  338. };
  339. static int btmtkuart_open(struct hci_dev *hdev)
  340. {
  341. struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
  342. struct device *dev;
  343. int err;
  344. err = serdev_device_open(bdev->serdev);
  345. if (err) {
  346. bt_dev_err(hdev, "Unable to open UART device %s",
  347. dev_name(&bdev->serdev->dev));
  348. goto err_open;
  349. }
  350. if (btmtkuart_is_standalone(bdev)) {
  351. if (bdev->curr_speed != bdev->desired_speed)
  352. err = serdev_device_set_baudrate(bdev->serdev,
  353. 115200);
  354. else
  355. err = serdev_device_set_baudrate(bdev->serdev,
  356. bdev->desired_speed);
  357. if (err < 0) {
  358. bt_dev_err(hdev, "Unable to set baudrate UART device %s",
  359. dev_name(&bdev->serdev->dev));
  360. goto err_serdev_close;
  361. }
  362. serdev_device_set_flow_control(bdev->serdev, false);
  363. }
  364. bdev->stp_cursor = 2;
  365. bdev->stp_dlen = 0;
  366. dev = &bdev->serdev->dev;
  367. /* Enable the power domain and clock the device requires */
  368. pm_runtime_enable(dev);
  369. err = pm_runtime_resume_and_get(dev);
  370. if (err < 0)
  371. goto err_disable_rpm;
  372. err = clk_prepare_enable(bdev->clk);
  373. if (err < 0)
  374. goto err_put_rpm;
  375. return 0;
  376. err_put_rpm:
  377. pm_runtime_put_sync(dev);
  378. err_disable_rpm:
  379. pm_runtime_disable(dev);
  380. err_serdev_close:
  381. serdev_device_close(bdev->serdev);
  382. err_open:
  383. return err;
  384. }
  385. static int btmtkuart_close(struct hci_dev *hdev)
  386. {
  387. struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
  388. struct device *dev = &bdev->serdev->dev;
  389. /* Shutdown the clock and power domain the device requires */
  390. clk_disable_unprepare(bdev->clk);
  391. pm_runtime_put_sync(dev);
  392. pm_runtime_disable(dev);
  393. serdev_device_close(bdev->serdev);
  394. return 0;
  395. }
  396. static int btmtkuart_flush(struct hci_dev *hdev)
  397. {
  398. struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
  399. /* Flush any pending characters */
  400. serdev_device_write_flush(bdev->serdev);
  401. skb_queue_purge(&bdev->txq);
  402. cancel_work_sync(&bdev->tx_work);
  403. kfree_skb(bdev->rx_skb);
  404. bdev->rx_skb = NULL;
  405. bdev->stp_cursor = 2;
  406. bdev->stp_dlen = 0;
  407. return 0;
  408. }
  409. static int btmtkuart_func_query(struct hci_dev *hdev)
  410. {
  411. struct btmtk_hci_wmt_params wmt_params;
  412. int status, err;
  413. u8 param = 0;
  414. /* Query whether the function is enabled */
  415. wmt_params.op = BTMTK_WMT_FUNC_CTRL;
  416. wmt_params.flag = 4;
  417. wmt_params.dlen = sizeof(param);
  418. wmt_params.data = &param;
  419. wmt_params.status = &status;
  420. err = mtk_hci_wmt_sync(hdev, &wmt_params);
  421. if (err < 0) {
  422. bt_dev_err(hdev, "Failed to query function status (%d)", err);
  423. return err;
  424. }
  425. return status;
  426. }
  427. static int btmtkuart_change_baudrate(struct hci_dev *hdev)
  428. {
  429. struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
  430. struct btmtk_hci_wmt_params wmt_params;
  431. __le32 baudrate;
  432. u8 param;
  433. int err;
  434. /* Indicate the device to enter the probe state the host is
  435. * ready to change a new baudrate.
  436. */
  437. baudrate = cpu_to_le32(bdev->desired_speed);
  438. wmt_params.op = BTMTK_WMT_HIF;
  439. wmt_params.flag = 1;
  440. wmt_params.dlen = 4;
  441. wmt_params.data = &baudrate;
  442. wmt_params.status = NULL;
  443. err = mtk_hci_wmt_sync(hdev, &wmt_params);
  444. if (err < 0) {
  445. bt_dev_err(hdev, "Failed to device baudrate (%d)", err);
  446. return err;
  447. }
  448. err = serdev_device_set_baudrate(bdev->serdev,
  449. bdev->desired_speed);
  450. if (err < 0) {
  451. bt_dev_err(hdev, "Failed to set up host baudrate (%d)",
  452. err);
  453. return err;
  454. }
  455. serdev_device_set_flow_control(bdev->serdev, false);
  456. /* Send a dummy byte 0xff to activate the new baudrate */
  457. param = 0xff;
  458. err = serdev_device_write_buf(bdev->serdev, &param, sizeof(param));
  459. if (err < 0 || err < sizeof(param))
  460. return err;
  461. serdev_device_wait_until_sent(bdev->serdev, 0);
  462. /* Wait some time for the device changing baudrate done */
  463. usleep_range(20000, 22000);
  464. /* Test the new baudrate */
  465. wmt_params.op = BTMTK_WMT_TEST;
  466. wmt_params.flag = 7;
  467. wmt_params.dlen = 0;
  468. wmt_params.data = NULL;
  469. wmt_params.status = NULL;
  470. err = mtk_hci_wmt_sync(hdev, &wmt_params);
  471. if (err < 0) {
  472. bt_dev_err(hdev, "Failed to test new baudrate (%d)",
  473. err);
  474. return err;
  475. }
  476. bdev->curr_speed = bdev->desired_speed;
  477. return 0;
  478. }
  479. static int btmtkuart_setup(struct hci_dev *hdev)
  480. {
  481. struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
  482. struct btmtk_hci_wmt_params wmt_params;
  483. ktime_t calltime, delta, rettime;
  484. struct btmtk_tci_sleep tci_sleep;
  485. unsigned long long duration;
  486. struct sk_buff *skb;
  487. int err, status;
  488. u8 param = 0x1;
  489. calltime = ktime_get();
  490. /* Wakeup MCUSYS is required for certain devices before we start to
  491. * do any setups.
  492. */
  493. if (test_bit(BTMTKUART_REQUIRED_WAKEUP, &bdev->tx_state)) {
  494. wmt_params.op = BTMTK_WMT_WAKEUP;
  495. wmt_params.flag = 3;
  496. wmt_params.dlen = 0;
  497. wmt_params.data = NULL;
  498. wmt_params.status = NULL;
  499. err = mtk_hci_wmt_sync(hdev, &wmt_params);
  500. if (err < 0) {
  501. bt_dev_err(hdev, "Failed to wakeup the chip (%d)", err);
  502. return err;
  503. }
  504. clear_bit(BTMTKUART_REQUIRED_WAKEUP, &bdev->tx_state);
  505. }
  506. if (btmtkuart_is_standalone(bdev))
  507. btmtkuart_change_baudrate(hdev);
  508. /* Query whether the firmware is already download */
  509. wmt_params.op = BTMTK_WMT_SEMAPHORE;
  510. wmt_params.flag = 1;
  511. wmt_params.dlen = 0;
  512. wmt_params.data = NULL;
  513. wmt_params.status = &status;
  514. err = mtk_hci_wmt_sync(hdev, &wmt_params);
  515. if (err < 0) {
  516. bt_dev_err(hdev, "Failed to query firmware status (%d)", err);
  517. return err;
  518. }
  519. if (status == BTMTK_WMT_PATCH_DONE) {
  520. bt_dev_info(hdev, "Firmware already downloaded");
  521. goto ignore_setup_fw;
  522. }
  523. /* Setup a firmware which the device definitely requires */
  524. err = btmtk_setup_firmware(hdev, bdev->data->fwname, mtk_hci_wmt_sync);
  525. if (err < 0)
  526. return err;
  527. ignore_setup_fw:
  528. /* Query whether the device is already enabled */
  529. err = readx_poll_timeout(btmtkuart_func_query, hdev, status,
  530. status < 0 || status != BTMTK_WMT_ON_PROGRESS,
  531. 2000, 5000000);
  532. /* -ETIMEDOUT happens */
  533. if (err < 0)
  534. return err;
  535. /* The other errors happen in btusb_mtk_func_query */
  536. if (status < 0)
  537. return status;
  538. if (status == BTMTK_WMT_ON_DONE) {
  539. bt_dev_info(hdev, "function already on");
  540. goto ignore_func_on;
  541. }
  542. /* Enable Bluetooth protocol */
  543. wmt_params.op = BTMTK_WMT_FUNC_CTRL;
  544. wmt_params.flag = 0;
  545. wmt_params.dlen = sizeof(param);
  546. wmt_params.data = &param;
  547. wmt_params.status = NULL;
  548. err = mtk_hci_wmt_sync(hdev, &wmt_params);
  549. if (err < 0) {
  550. bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
  551. return err;
  552. }
  553. ignore_func_on:
  554. /* Apply the low power environment setup */
  555. tci_sleep.mode = 0x5;
  556. tci_sleep.duration = cpu_to_le16(0x640);
  557. tci_sleep.host_duration = cpu_to_le16(0x640);
  558. tci_sleep.host_wakeup_pin = 0;
  559. tci_sleep.time_compensation = 0;
  560. skb = __hci_cmd_sync(hdev, 0xfc7a, sizeof(tci_sleep), &tci_sleep,
  561. HCI_INIT_TIMEOUT);
  562. if (IS_ERR(skb)) {
  563. err = PTR_ERR(skb);
  564. bt_dev_err(hdev, "Failed to apply low power setting (%d)", err);
  565. return err;
  566. }
  567. kfree_skb(skb);
  568. rettime = ktime_get();
  569. delta = ktime_sub(rettime, calltime);
  570. duration = (unsigned long long)ktime_to_ns(delta) >> 10;
  571. bt_dev_info(hdev, "Device setup in %llu usecs", duration);
  572. return 0;
  573. }
  574. static int btmtkuart_shutdown(struct hci_dev *hdev)
  575. {
  576. struct btmtk_hci_wmt_params wmt_params;
  577. u8 param = 0x0;
  578. int err;
  579. /* Disable the device */
  580. wmt_params.op = BTMTK_WMT_FUNC_CTRL;
  581. wmt_params.flag = 0;
  582. wmt_params.dlen = sizeof(param);
  583. wmt_params.data = &param;
  584. wmt_params.status = NULL;
  585. err = mtk_hci_wmt_sync(hdev, &wmt_params);
  586. if (err < 0) {
  587. bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
  588. return err;
  589. }
  590. return 0;
  591. }
  592. static int btmtkuart_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
  593. {
  594. struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
  595. struct mtk_stp_hdr *shdr;
  596. int err, dlen, type = 0;
  597. /* Prepend skb with frame type */
  598. memcpy(skb_push(skb, 1), &hci_skb_pkt_type(skb), 1);
  599. /* Make sure that there is enough rooms for STP header and trailer */
  600. if (unlikely(skb_headroom(skb) < sizeof(*shdr)) ||
  601. (skb_tailroom(skb) < MTK_STP_TLR_SIZE)) {
  602. err = pskb_expand_head(skb, sizeof(*shdr), MTK_STP_TLR_SIZE,
  603. GFP_ATOMIC);
  604. if (err < 0)
  605. return err;
  606. }
  607. /* Add the STP header */
  608. dlen = skb->len;
  609. shdr = skb_push(skb, sizeof(*shdr));
  610. shdr->prefix = 0x80;
  611. shdr->dlen = cpu_to_be16((dlen & 0x0fff) | (type << 12));
  612. shdr->cs = 0; /* MT7622 doesn't care about checksum value */
  613. /* Add the STP trailer */
  614. skb_put_zero(skb, MTK_STP_TLR_SIZE);
  615. skb_queue_tail(&bdev->txq, skb);
  616. btmtkuart_tx_wakeup(bdev);
  617. return 0;
  618. }
  619. static int btmtkuart_parse_dt(struct serdev_device *serdev)
  620. {
  621. struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev);
  622. struct device_node *node = serdev->dev.of_node;
  623. u32 speed = 921600;
  624. int err;
  625. if (btmtkuart_is_standalone(bdev)) {
  626. of_property_read_u32(node, "current-speed", &speed);
  627. bdev->desired_speed = speed;
  628. bdev->vcc = devm_regulator_get(&serdev->dev, "vcc");
  629. if (IS_ERR(bdev->vcc)) {
  630. err = PTR_ERR(bdev->vcc);
  631. return err;
  632. }
  633. bdev->osc = devm_clk_get_optional(&serdev->dev, "osc");
  634. if (IS_ERR(bdev->osc)) {
  635. err = PTR_ERR(bdev->osc);
  636. return err;
  637. }
  638. bdev->boot = devm_gpiod_get_optional(&serdev->dev, "boot",
  639. GPIOD_OUT_LOW);
  640. if (IS_ERR(bdev->boot)) {
  641. err = PTR_ERR(bdev->boot);
  642. return err;
  643. }
  644. bdev->pinctrl = devm_pinctrl_get(&serdev->dev);
  645. if (IS_ERR(bdev->pinctrl)) {
  646. err = PTR_ERR(bdev->pinctrl);
  647. return err;
  648. }
  649. bdev->pins_boot = pinctrl_lookup_state(bdev->pinctrl,
  650. "default");
  651. if (IS_ERR(bdev->pins_boot) && !bdev->boot) {
  652. err = PTR_ERR(bdev->pins_boot);
  653. dev_err(&serdev->dev,
  654. "Should assign RXD to LOW at boot stage\n");
  655. return err;
  656. }
  657. bdev->pins_runtime = pinctrl_lookup_state(bdev->pinctrl,
  658. "runtime");
  659. if (IS_ERR(bdev->pins_runtime)) {
  660. err = PTR_ERR(bdev->pins_runtime);
  661. return err;
  662. }
  663. bdev->reset = devm_gpiod_get_optional(&serdev->dev, "reset",
  664. GPIOD_OUT_LOW);
  665. if (IS_ERR(bdev->reset)) {
  666. err = PTR_ERR(bdev->reset);
  667. return err;
  668. }
  669. } else if (btmtkuart_is_builtin_soc(bdev)) {
  670. bdev->clk = devm_clk_get(&serdev->dev, "ref");
  671. if (IS_ERR(bdev->clk))
  672. return PTR_ERR(bdev->clk);
  673. }
  674. return 0;
  675. }
  676. static int btmtkuart_probe(struct serdev_device *serdev)
  677. {
  678. struct btmtkuart_dev *bdev;
  679. struct hci_dev *hdev;
  680. int err;
  681. bdev = devm_kzalloc(&serdev->dev, sizeof(*bdev), GFP_KERNEL);
  682. if (!bdev)
  683. return -ENOMEM;
  684. bdev->data = of_device_get_match_data(&serdev->dev);
  685. if (!bdev->data)
  686. return -ENODEV;
  687. bdev->serdev = serdev;
  688. serdev_device_set_drvdata(serdev, bdev);
  689. serdev_device_set_client_ops(serdev, &btmtkuart_client_ops);
  690. err = btmtkuart_parse_dt(serdev);
  691. if (err < 0)
  692. return err;
  693. INIT_WORK(&bdev->tx_work, btmtkuart_tx_work);
  694. skb_queue_head_init(&bdev->txq);
  695. /* Initialize and register HCI device */
  696. hdev = hci_alloc_dev();
  697. if (!hdev) {
  698. dev_err(&serdev->dev, "Can't allocate HCI device\n");
  699. return -ENOMEM;
  700. }
  701. bdev->hdev = hdev;
  702. bdev->hu.hdev = hdev;
  703. hdev->bus = HCI_UART;
  704. hci_set_drvdata(hdev, bdev);
  705. hdev->open = btmtkuart_open;
  706. hdev->close = btmtkuart_close;
  707. hdev->flush = btmtkuart_flush;
  708. hdev->setup = btmtkuart_setup;
  709. hdev->shutdown = btmtkuart_shutdown;
  710. hdev->send = btmtkuart_send_frame;
  711. hdev->set_bdaddr = btmtk_set_bdaddr;
  712. SET_HCIDEV_DEV(hdev, &serdev->dev);
  713. hdev->manufacturer = 70;
  714. hci_set_quirk(hdev, HCI_QUIRK_NON_PERSISTENT_SETUP);
  715. if (btmtkuart_is_standalone(bdev)) {
  716. err = clk_prepare_enable(bdev->osc);
  717. if (err < 0)
  718. goto err_hci_free_dev;
  719. if (bdev->boot) {
  720. gpiod_set_value_cansleep(bdev->boot, 1);
  721. } else {
  722. /* Switch to the specific pin state for the booting
  723. * requires.
  724. */
  725. pinctrl_select_state(bdev->pinctrl, bdev->pins_boot);
  726. }
  727. /* Power on */
  728. err = regulator_enable(bdev->vcc);
  729. if (err < 0)
  730. goto err_clk_disable_unprepare;
  731. /* Reset if the reset-gpios is available otherwise the board
  732. * -level design should be guaranteed.
  733. */
  734. if (bdev->reset) {
  735. gpiod_set_value_cansleep(bdev->reset, 1);
  736. usleep_range(1000, 2000);
  737. gpiod_set_value_cansleep(bdev->reset, 0);
  738. }
  739. /* Wait some time until device got ready and switch to the pin
  740. * mode the device requires for UART transfers.
  741. */
  742. msleep(50);
  743. if (bdev->boot)
  744. devm_gpiod_put(&serdev->dev, bdev->boot);
  745. pinctrl_select_state(bdev->pinctrl, bdev->pins_runtime);
  746. /* A standalone device doesn't depends on power domain on SoC,
  747. * so mark it as no callbacks.
  748. */
  749. pm_runtime_no_callbacks(&serdev->dev);
  750. set_bit(BTMTKUART_REQUIRED_WAKEUP, &bdev->tx_state);
  751. }
  752. err = hci_register_dev(hdev);
  753. if (err < 0) {
  754. dev_err(&serdev->dev, "Can't register HCI device\n");
  755. goto err_regulator_disable;
  756. }
  757. return 0;
  758. err_regulator_disable:
  759. if (btmtkuart_is_standalone(bdev))
  760. regulator_disable(bdev->vcc);
  761. err_clk_disable_unprepare:
  762. if (btmtkuart_is_standalone(bdev))
  763. clk_disable_unprepare(bdev->osc);
  764. err_hci_free_dev:
  765. hci_free_dev(hdev);
  766. return err;
  767. }
  768. static void btmtkuart_remove(struct serdev_device *serdev)
  769. {
  770. struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev);
  771. struct hci_dev *hdev = bdev->hdev;
  772. if (btmtkuart_is_standalone(bdev)) {
  773. regulator_disable(bdev->vcc);
  774. clk_disable_unprepare(bdev->osc);
  775. }
  776. hci_unregister_dev(hdev);
  777. hci_free_dev(hdev);
  778. }
  779. static const struct btmtkuart_data mt7622_data __maybe_unused = {
  780. .fwname = FIRMWARE_MT7622,
  781. };
  782. static const struct btmtkuart_data mt7663_data __maybe_unused = {
  783. .flags = BTMTKUART_FLAG_STANDALONE_HW,
  784. .fwname = FIRMWARE_MT7663,
  785. };
  786. static const struct btmtkuart_data mt7668_data __maybe_unused = {
  787. .flags = BTMTKUART_FLAG_STANDALONE_HW,
  788. .fwname = FIRMWARE_MT7668,
  789. };
  790. #ifdef CONFIG_OF
  791. static const struct of_device_id mtk_of_match_table[] = {
  792. { .compatible = "mediatek,mt7622-bluetooth", .data = &mt7622_data},
  793. { .compatible = "mediatek,mt7663u-bluetooth", .data = &mt7663_data},
  794. { .compatible = "mediatek,mt7668u-bluetooth", .data = &mt7668_data},
  795. { }
  796. };
  797. MODULE_DEVICE_TABLE(of, mtk_of_match_table);
  798. #endif
  799. static struct serdev_device_driver btmtkuart_driver = {
  800. .probe = btmtkuart_probe,
  801. .remove = btmtkuart_remove,
  802. .driver = {
  803. .name = "btmtkuart",
  804. .of_match_table = of_match_ptr(mtk_of_match_table),
  805. },
  806. };
  807. module_serdev_device_driver(btmtkuart_driver);
  808. MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
  809. MODULE_DESCRIPTION("MediaTek Bluetooth Serial driver ver " VERSION);
  810. MODULE_VERSION(VERSION);
  811. MODULE_LICENSE("GPL");