btmtkuart.c 24 KB

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