root/drivers/bluetooth/btmtksdio.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. mtk_hci_wmt_sync
  2. btmtksdio_tx_packet
  3. btmtksdio_drv_own_query
  4. btmtksdio_tx_work
  5. btmtksdio_recv_event
  6. btmtksdio_rx_packet
  7. btmtksdio_interrupt
  8. btmtksdio_open
  9. btmtksdio_close
  10. btmtksdio_flush
  11. btmtksdio_func_query
  12. mtk_setup_firmware
  13. btmtksdio_setup
  14. btmtksdio_shutdown
  15. btmtksdio_send_frame
  16. btmtksdio_probe
  17. btmtksdio_remove
  18. btmtksdio_runtime_suspend
  19. btmtksdio_runtime_resume

   1 // SPDX-License-Identifier: GPL-2.0
   2 // Copyright (c) 2019 MediaTek Inc.
   3 
   4 /*
   5  * Bluetooth support for MediaTek SDIO devices
   6  *
   7  * This file is written based on btsdio.c and btmtkuart.c.
   8  *
   9  * Author: Sean Wang <sean.wang@mediatek.com>
  10  *
  11  */
  12 
  13 #include <asm/unaligned.h>
  14 #include <linux/atomic.h>
  15 #include <linux/firmware.h>
  16 #include <linux/init.h>
  17 #include <linux/iopoll.h>
  18 #include <linux/kernel.h>
  19 #include <linux/module.h>
  20 #include <linux/pm_runtime.h>
  21 #include <linux/skbuff.h>
  22 
  23 #include <linux/mmc/host.h>
  24 #include <linux/mmc/sdio_ids.h>
  25 #include <linux/mmc/sdio_func.h>
  26 
  27 #include <net/bluetooth/bluetooth.h>
  28 #include <net/bluetooth/hci_core.h>
  29 
  30 #include "h4_recv.h"
  31 
  32 #define VERSION "0.1"
  33 
  34 #define FIRMWARE_MT7663         "mediatek/mt7663pr2h.bin"
  35 #define FIRMWARE_MT7668         "mediatek/mt7668pr2h.bin"
  36 
  37 #define MTKBTSDIO_AUTOSUSPEND_DELAY     8000
  38 
  39 static bool enable_autosuspend;
  40 
  41 struct btmtksdio_data {
  42         const char *fwname;
  43 };
  44 
  45 static const struct btmtksdio_data mt7663_data = {
  46         .fwname = FIRMWARE_MT7663,
  47 };
  48 
  49 static const struct btmtksdio_data mt7668_data = {
  50         .fwname = FIRMWARE_MT7668,
  51 };
  52 
  53 static const struct sdio_device_id btmtksdio_table[] = {
  54         {SDIO_DEVICE(SDIO_VENDOR_ID_MEDIATEK, 0x7663),
  55          .driver_data = (kernel_ulong_t)&mt7663_data },
  56         {SDIO_DEVICE(SDIO_VENDOR_ID_MEDIATEK, 0x7668),
  57          .driver_data = (kernel_ulong_t)&mt7668_data },
  58         { }     /* Terminating entry */
  59 };
  60 
  61 #define MTK_REG_CHLPCR          0x4     /* W1S */
  62 #define C_INT_EN_SET            BIT(0)
  63 #define C_INT_EN_CLR            BIT(1)
  64 #define C_FW_OWN_REQ_SET        BIT(8)  /* For write */
  65 #define C_COM_DRV_OWN           BIT(8)  /* For read */
  66 #define C_FW_OWN_REQ_CLR        BIT(9)
  67 
  68 #define MTK_REG_CSDIOCSR        0x8
  69 #define SDIO_RE_INIT_EN         BIT(0)
  70 #define SDIO_INT_CTL            BIT(2)
  71 
  72 #define MTK_REG_CHCR            0xc
  73 #define C_INT_CLR_CTRL          BIT(1)
  74 
  75 /* CHISR have the same bits field definition with CHIER */
  76 #define MTK_REG_CHISR           0x10
  77 #define MTK_REG_CHIER           0x14
  78 #define FW_OWN_BACK_INT         BIT(0)
  79 #define RX_DONE_INT             BIT(1)
  80 #define TX_EMPTY                BIT(2)
  81 #define TX_FIFO_OVERFLOW        BIT(8)
  82 #define RX_PKT_LEN              GENMASK(31, 16)
  83 
  84 #define MTK_REG_CTDR            0x18
  85 
  86 #define MTK_REG_CRDR            0x1c
  87 
  88 #define MTK_SDIO_BLOCK_SIZE     256
  89 
  90 #define BTMTKSDIO_TX_WAIT_VND_EVT       1
  91 
  92 enum {
  93         MTK_WMT_PATCH_DWNLD = 0x1,
  94         MTK_WMT_TEST = 0x2,
  95         MTK_WMT_WAKEUP = 0x3,
  96         MTK_WMT_HIF = 0x4,
  97         MTK_WMT_FUNC_CTRL = 0x6,
  98         MTK_WMT_RST = 0x7,
  99         MTK_WMT_SEMAPHORE = 0x17,
 100 };
 101 
 102 enum {
 103         BTMTK_WMT_INVALID,
 104         BTMTK_WMT_PATCH_UNDONE,
 105         BTMTK_WMT_PATCH_DONE,
 106         BTMTK_WMT_ON_UNDONE,
 107         BTMTK_WMT_ON_DONE,
 108         BTMTK_WMT_ON_PROGRESS,
 109 };
 110 
 111 struct mtkbtsdio_hdr {
 112         __le16  len;
 113         __le16  reserved;
 114         u8      bt_type;
 115 } __packed;
 116 
 117 struct mtk_wmt_hdr {
 118         u8      dir;
 119         u8      op;
 120         __le16  dlen;
 121         u8      flag;
 122 } __packed;
 123 
 124 struct mtk_hci_wmt_cmd {
 125         struct mtk_wmt_hdr hdr;
 126         u8 data[256];
 127 } __packed;
 128 
 129 struct btmtk_hci_wmt_evt {
 130         struct hci_event_hdr hhdr;
 131         struct mtk_wmt_hdr whdr;
 132 } __packed;
 133 
 134 struct btmtk_hci_wmt_evt_funcc {
 135         struct btmtk_hci_wmt_evt hwhdr;
 136         __be16 status;
 137 } __packed;
 138 
 139 struct btmtk_tci_sleep {
 140         u8 mode;
 141         __le16 duration;
 142         __le16 host_duration;
 143         u8 host_wakeup_pin;
 144         u8 time_compensation;
 145 } __packed;
 146 
 147 struct btmtk_hci_wmt_params {
 148         u8 op;
 149         u8 flag;
 150         u16 dlen;
 151         const void *data;
 152         u32 *status;
 153 };
 154 
 155 struct btmtksdio_dev {
 156         struct hci_dev *hdev;
 157         struct sdio_func *func;
 158         struct device *dev;
 159 
 160         struct work_struct tx_work;
 161         unsigned long tx_state;
 162         struct sk_buff_head txq;
 163 
 164         struct sk_buff *evt_skb;
 165 
 166         const struct btmtksdio_data *data;
 167 };
 168 
 169 static int mtk_hci_wmt_sync(struct hci_dev *hdev,
 170                             struct btmtk_hci_wmt_params *wmt_params)
 171 {
 172         struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
 173         struct btmtk_hci_wmt_evt_funcc *wmt_evt_funcc;
 174         u32 hlen, status = BTMTK_WMT_INVALID;
 175         struct btmtk_hci_wmt_evt *wmt_evt;
 176         struct mtk_hci_wmt_cmd wc;
 177         struct mtk_wmt_hdr *hdr;
 178         int err;
 179 
 180         hlen = sizeof(*hdr) + wmt_params->dlen;
 181         if (hlen > 255)
 182                 return -EINVAL;
 183 
 184         hdr = (struct mtk_wmt_hdr *)&wc;
 185         hdr->dir = 1;
 186         hdr->op = wmt_params->op;
 187         hdr->dlen = cpu_to_le16(wmt_params->dlen + 1);
 188         hdr->flag = wmt_params->flag;
 189         memcpy(wc.data, wmt_params->data, wmt_params->dlen);
 190 
 191         set_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
 192 
 193         err = __hci_cmd_send(hdev, 0xfc6f, hlen, &wc);
 194         if (err < 0) {
 195                 clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
 196                 return err;
 197         }
 198 
 199         /* The vendor specific WMT commands are all answered by a vendor
 200          * specific event and will not have the Command Status or Command
 201          * Complete as with usual HCI command flow control.
 202          *
 203          * After sending the command, wait for BTMTKSDIO_TX_WAIT_VND_EVT
 204          * state to be cleared. The driver specific event receive routine
 205          * will clear that state and with that indicate completion of the
 206          * WMT command.
 207          */
 208         err = wait_on_bit_timeout(&bdev->tx_state, BTMTKSDIO_TX_WAIT_VND_EVT,
 209                                   TASK_INTERRUPTIBLE, HCI_INIT_TIMEOUT);
 210         if (err == -EINTR) {
 211                 bt_dev_err(hdev, "Execution of wmt command interrupted");
 212                 clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
 213                 return err;
 214         }
 215 
 216         if (err) {
 217                 bt_dev_err(hdev, "Execution of wmt command timed out");
 218                 clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
 219                 return -ETIMEDOUT;
 220         }
 221 
 222         /* Parse and handle the return WMT event */
 223         wmt_evt = (struct btmtk_hci_wmt_evt *)bdev->evt_skb->data;
 224         if (wmt_evt->whdr.op != hdr->op) {
 225                 bt_dev_err(hdev, "Wrong op received %d expected %d",
 226                            wmt_evt->whdr.op, hdr->op);
 227                 err = -EIO;
 228                 goto err_free_skb;
 229         }
 230 
 231         switch (wmt_evt->whdr.op) {
 232         case MTK_WMT_SEMAPHORE:
 233                 if (wmt_evt->whdr.flag == 2)
 234                         status = BTMTK_WMT_PATCH_UNDONE;
 235                 else
 236                         status = BTMTK_WMT_PATCH_DONE;
 237                 break;
 238         case MTK_WMT_FUNC_CTRL:
 239                 wmt_evt_funcc = (struct btmtk_hci_wmt_evt_funcc *)wmt_evt;
 240                 if (be16_to_cpu(wmt_evt_funcc->status) == 0x404)
 241                         status = BTMTK_WMT_ON_DONE;
 242                 else if (be16_to_cpu(wmt_evt_funcc->status) == 0x420)
 243                         status = BTMTK_WMT_ON_PROGRESS;
 244                 else
 245                         status = BTMTK_WMT_ON_UNDONE;
 246                 break;
 247         }
 248 
 249         if (wmt_params->status)
 250                 *wmt_params->status = status;
 251 
 252 err_free_skb:
 253         kfree_skb(bdev->evt_skb);
 254         bdev->evt_skb = NULL;
 255 
 256         return err;
 257 }
 258 
 259 static int btmtksdio_tx_packet(struct btmtksdio_dev *bdev,
 260                                struct sk_buff *skb)
 261 {
 262         struct mtkbtsdio_hdr *sdio_hdr;
 263         int err;
 264 
 265         /* Make sure that there are enough rooms for SDIO header */
 266         if (unlikely(skb_headroom(skb) < sizeof(*sdio_hdr))) {
 267                 err = pskb_expand_head(skb, sizeof(*sdio_hdr), 0,
 268                                        GFP_ATOMIC);
 269                 if (err < 0)
 270                         return err;
 271         }
 272 
 273         /* Prepend MediaTek SDIO Specific Header */
 274         skb_push(skb, sizeof(*sdio_hdr));
 275 
 276         sdio_hdr = (void *)skb->data;
 277         sdio_hdr->len = cpu_to_le16(skb->len);
 278         sdio_hdr->reserved = cpu_to_le16(0);
 279         sdio_hdr->bt_type = hci_skb_pkt_type(skb);
 280 
 281         err = sdio_writesb(bdev->func, MTK_REG_CTDR, skb->data,
 282                            round_up(skb->len, MTK_SDIO_BLOCK_SIZE));
 283         if (err < 0)
 284                 goto err_skb_pull;
 285 
 286         bdev->hdev->stat.byte_tx += skb->len;
 287 
 288         kfree_skb(skb);
 289 
 290         return 0;
 291 
 292 err_skb_pull:
 293         skb_pull(skb, sizeof(*sdio_hdr));
 294 
 295         return err;
 296 }
 297 
 298 static u32 btmtksdio_drv_own_query(struct btmtksdio_dev *bdev)
 299 {
 300         return sdio_readl(bdev->func, MTK_REG_CHLPCR, NULL);
 301 }
 302 
 303 static void btmtksdio_tx_work(struct work_struct *work)
 304 {
 305         struct btmtksdio_dev *bdev = container_of(work, struct btmtksdio_dev,
 306                                                   tx_work);
 307         struct sk_buff *skb;
 308         int err;
 309 
 310         pm_runtime_get_sync(bdev->dev);
 311 
 312         sdio_claim_host(bdev->func);
 313 
 314         while ((skb = skb_dequeue(&bdev->txq))) {
 315                 err = btmtksdio_tx_packet(bdev, skb);
 316                 if (err < 0) {
 317                         bdev->hdev->stat.err_tx++;
 318                         skb_queue_head(&bdev->txq, skb);
 319                         break;
 320                 }
 321         }
 322 
 323         sdio_release_host(bdev->func);
 324 
 325         pm_runtime_mark_last_busy(bdev->dev);
 326         pm_runtime_put_autosuspend(bdev->dev);
 327 }
 328 
 329 static int btmtksdio_recv_event(struct hci_dev *hdev, struct sk_buff *skb)
 330 {
 331         struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
 332         struct hci_event_hdr *hdr = (void *)skb->data;
 333         int err;
 334 
 335         /* Fix up the vendor event id with 0xff for vendor specific instead
 336          * of 0xe4 so that event send via monitoring socket can be parsed
 337          * properly.
 338          */
 339         if (hdr->evt == 0xe4)
 340                 hdr->evt = HCI_EV_VENDOR;
 341 
 342         /* When someone waits for the WMT event, the skb is being cloned
 343          * and being processed the events from there then.
 344          */
 345         if (test_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state)) {
 346                 bdev->evt_skb = skb_clone(skb, GFP_KERNEL);
 347                 if (!bdev->evt_skb) {
 348                         err = -ENOMEM;
 349                         goto err_out;
 350                 }
 351         }
 352 
 353         err = hci_recv_frame(hdev, skb);
 354         if (err < 0)
 355                 goto err_free_skb;
 356 
 357         if (hdr->evt == HCI_EV_VENDOR) {
 358                 if (test_and_clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT,
 359                                        &bdev->tx_state)) {
 360                         /* Barrier to sync with other CPUs */
 361                         smp_mb__after_atomic();
 362                         wake_up_bit(&bdev->tx_state, BTMTKSDIO_TX_WAIT_VND_EVT);
 363                 }
 364         }
 365 
 366         return 0;
 367 
 368 err_free_skb:
 369         kfree_skb(bdev->evt_skb);
 370         bdev->evt_skb = NULL;
 371 
 372 err_out:
 373         return err;
 374 }
 375 
 376 static const struct h4_recv_pkt mtk_recv_pkts[] = {
 377         { H4_RECV_ACL,      .recv = hci_recv_frame },
 378         { H4_RECV_SCO,      .recv = hci_recv_frame },
 379         { H4_RECV_EVENT,    .recv = btmtksdio_recv_event },
 380 };
 381 
 382 static int btmtksdio_rx_packet(struct btmtksdio_dev *bdev, u16 rx_size)
 383 {
 384         const struct h4_recv_pkt *pkts = mtk_recv_pkts;
 385         int pkts_count = ARRAY_SIZE(mtk_recv_pkts);
 386         struct mtkbtsdio_hdr *sdio_hdr;
 387         int err, i, pad_size;
 388         struct sk_buff *skb;
 389         u16 dlen;
 390 
 391         if (rx_size < sizeof(*sdio_hdr))
 392                 return -EILSEQ;
 393 
 394         /* A SDIO packet is exactly containing a Bluetooth packet */
 395         skb = bt_skb_alloc(rx_size, GFP_KERNEL);
 396         if (!skb)
 397                 return -ENOMEM;
 398 
 399         skb_put(skb, rx_size);
 400 
 401         err = sdio_readsb(bdev->func, skb->data, MTK_REG_CRDR, rx_size);
 402         if (err < 0)
 403                 goto err_kfree_skb;
 404 
 405         sdio_hdr = (void *)skb->data;
 406 
 407         /* We assume the default error as -EILSEQ simply to make the error path
 408          * be cleaner.
 409          */
 410         err = -EILSEQ;
 411 
 412         if (rx_size != le16_to_cpu(sdio_hdr->len)) {
 413                 bt_dev_err(bdev->hdev, "Rx size in sdio header is mismatched ");
 414                 goto err_kfree_skb;
 415         }
 416 
 417         hci_skb_pkt_type(skb) = sdio_hdr->bt_type;
 418 
 419         /* Remove MediaTek SDIO header */
 420         skb_pull(skb, sizeof(*sdio_hdr));
 421 
 422         /* We have to dig into the packet to get payload size and then know how
 423          * many padding bytes at the tail, these padding bytes should be removed
 424          * before the packet is indicated to the core layer.
 425          */
 426         for (i = 0; i < pkts_count; i++) {
 427                 if (sdio_hdr->bt_type == (&pkts[i])->type)
 428                         break;
 429         }
 430 
 431         if (i >= pkts_count) {
 432                 bt_dev_err(bdev->hdev, "Invalid bt type 0x%02x",
 433                            sdio_hdr->bt_type);
 434                 goto err_kfree_skb;
 435         }
 436 
 437         /* Remaining bytes cannot hold a header*/
 438         if (skb->len < (&pkts[i])->hlen) {
 439                 bt_dev_err(bdev->hdev, "The size of bt header is mismatched");
 440                 goto err_kfree_skb;
 441         }
 442 
 443         switch ((&pkts[i])->lsize) {
 444                 case 1:
 445                         dlen = skb->data[(&pkts[i])->loff];
 446                         break;
 447                 case 2:
 448                         dlen = get_unaligned_le16(skb->data +
 449                                                   (&pkts[i])->loff);
 450                         break;
 451                 default:
 452                         goto err_kfree_skb;
 453         }
 454 
 455         pad_size = skb->len - (&pkts[i])->hlen -  dlen;
 456 
 457         /* Remaining bytes cannot hold a payload */
 458         if (pad_size < 0) {
 459                 bt_dev_err(bdev->hdev, "The size of bt payload is mismatched");
 460                 goto err_kfree_skb;
 461         }
 462 
 463         /* Remove padding bytes */
 464         skb_trim(skb, skb->len - pad_size);
 465 
 466         /* Complete frame */
 467         (&pkts[i])->recv(bdev->hdev, skb);
 468 
 469         bdev->hdev->stat.byte_rx += rx_size;
 470 
 471         return 0;
 472 
 473 err_kfree_skb:
 474         kfree_skb(skb);
 475 
 476         return err;
 477 }
 478 
 479 static void btmtksdio_interrupt(struct sdio_func *func)
 480 {
 481         struct btmtksdio_dev *bdev = sdio_get_drvdata(func);
 482         u32 int_status;
 483         u16 rx_size;
 484 
 485         /* It is required that the host gets ownership from the device before
 486          * accessing any register, however, if SDIO host is not being released,
 487          * a potential deadlock probably happens in a circular wait between SDIO
 488          * IRQ work and PM runtime work. So, we have to explicitly release SDIO
 489          * host here and claim again after the PM runtime work is all done.
 490          */
 491         sdio_release_host(bdev->func);
 492 
 493         pm_runtime_get_sync(bdev->dev);
 494 
 495         sdio_claim_host(bdev->func);
 496 
 497         /* Disable interrupt */
 498         sdio_writel(func, C_INT_EN_CLR, MTK_REG_CHLPCR, 0);
 499 
 500         int_status = sdio_readl(func, MTK_REG_CHISR, NULL);
 501 
 502         /* Ack an interrupt as soon as possible before any operation on
 503          * hardware.
 504          *
 505          * Note that we don't ack any status during operations to avoid race
 506          * condition between the host and the device such as it's possible to
 507          * mistakenly ack RX_DONE for the next packet and then cause interrupts
 508          * not be raised again but there is still pending data in the hardware
 509          * FIFO.
 510          */
 511         sdio_writel(func, int_status, MTK_REG_CHISR, NULL);
 512 
 513         if (unlikely(!int_status))
 514                 bt_dev_err(bdev->hdev, "CHISR is 0");
 515 
 516         if (int_status & FW_OWN_BACK_INT)
 517                 bt_dev_dbg(bdev->hdev, "Get fw own back");
 518 
 519         if (int_status & TX_EMPTY)
 520                 schedule_work(&bdev->tx_work);
 521         else if (unlikely(int_status & TX_FIFO_OVERFLOW))
 522                 bt_dev_warn(bdev->hdev, "Tx fifo overflow");
 523 
 524         if (int_status & RX_DONE_INT) {
 525                 rx_size = (int_status & RX_PKT_LEN) >> 16;
 526 
 527                 if (btmtksdio_rx_packet(bdev, rx_size) < 0)
 528                         bdev->hdev->stat.err_rx++;
 529         }
 530 
 531         /* Enable interrupt */
 532         sdio_writel(func, C_INT_EN_SET, MTK_REG_CHLPCR, 0);
 533 
 534         pm_runtime_mark_last_busy(bdev->dev);
 535         pm_runtime_put_autosuspend(bdev->dev);
 536 }
 537 
 538 static int btmtksdio_open(struct hci_dev *hdev)
 539 {
 540         struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
 541         int err;
 542         u32 status;
 543 
 544         sdio_claim_host(bdev->func);
 545 
 546         err = sdio_enable_func(bdev->func);
 547         if (err < 0)
 548                 goto err_release_host;
 549 
 550         /* Get ownership from the device */
 551         sdio_writel(bdev->func, C_FW_OWN_REQ_CLR, MTK_REG_CHLPCR, &err);
 552         if (err < 0)
 553                 goto err_disable_func;
 554 
 555         err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status,
 556                                  status & C_COM_DRV_OWN, 2000, 1000000);
 557         if (err < 0) {
 558                 bt_dev_err(bdev->hdev, "Cannot get ownership from device");
 559                 goto err_disable_func;
 560         }
 561 
 562         /* Disable interrupt & mask out all interrupt sources */
 563         sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, &err);
 564         if (err < 0)
 565                 goto err_disable_func;
 566 
 567         sdio_writel(bdev->func, 0, MTK_REG_CHIER, &err);
 568         if (err < 0)
 569                 goto err_disable_func;
 570 
 571         err = sdio_claim_irq(bdev->func, btmtksdio_interrupt);
 572         if (err < 0)
 573                 goto err_disable_func;
 574 
 575         err = sdio_set_block_size(bdev->func, MTK_SDIO_BLOCK_SIZE);
 576         if (err < 0)
 577                 goto err_release_irq;
 578 
 579         /* SDIO CMD 5 allows the SDIO device back to idle state an
 580          * synchronous interrupt is supported in SDIO 4-bit mode
 581          */
 582         sdio_writel(bdev->func, SDIO_INT_CTL | SDIO_RE_INIT_EN,
 583                     MTK_REG_CSDIOCSR, &err);
 584         if (err < 0)
 585                 goto err_release_irq;
 586 
 587         /* Setup write-1-clear for CHISR register */
 588         sdio_writel(bdev->func, C_INT_CLR_CTRL, MTK_REG_CHCR, &err);
 589         if (err < 0)
 590                 goto err_release_irq;
 591 
 592         /* Setup interrupt sources */
 593         sdio_writel(bdev->func, RX_DONE_INT | TX_EMPTY | TX_FIFO_OVERFLOW,
 594                     MTK_REG_CHIER, &err);
 595         if (err < 0)
 596                 goto err_release_irq;
 597 
 598         /* Enable interrupt */
 599         sdio_writel(bdev->func, C_INT_EN_SET, MTK_REG_CHLPCR, &err);
 600         if (err < 0)
 601                 goto err_release_irq;
 602 
 603         sdio_release_host(bdev->func);
 604 
 605         return 0;
 606 
 607 err_release_irq:
 608         sdio_release_irq(bdev->func);
 609 
 610 err_disable_func:
 611         sdio_disable_func(bdev->func);
 612 
 613 err_release_host:
 614         sdio_release_host(bdev->func);
 615 
 616         return err;
 617 }
 618 
 619 static int btmtksdio_close(struct hci_dev *hdev)
 620 {
 621         struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
 622         u32 status;
 623         int err;
 624 
 625         sdio_claim_host(bdev->func);
 626 
 627         /* Disable interrupt */
 628         sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, NULL);
 629 
 630         sdio_release_irq(bdev->func);
 631 
 632         /* Return ownership to the device */
 633         sdio_writel(bdev->func, C_FW_OWN_REQ_SET, MTK_REG_CHLPCR, NULL);
 634 
 635         err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status,
 636                                  !(status & C_COM_DRV_OWN), 2000, 1000000);
 637         if (err < 0)
 638                 bt_dev_err(bdev->hdev, "Cannot return ownership to device");
 639 
 640         sdio_disable_func(bdev->func);
 641 
 642         sdio_release_host(bdev->func);
 643 
 644         return 0;
 645 }
 646 
 647 static int btmtksdio_flush(struct hci_dev *hdev)
 648 {
 649         struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
 650 
 651         skb_queue_purge(&bdev->txq);
 652 
 653         cancel_work_sync(&bdev->tx_work);
 654 
 655         return 0;
 656 }
 657 
 658 static int btmtksdio_func_query(struct hci_dev *hdev)
 659 {
 660         struct btmtk_hci_wmt_params wmt_params;
 661         int status, err;
 662         u8 param = 0;
 663 
 664         /* Query whether the function is enabled */
 665         wmt_params.op = MTK_WMT_FUNC_CTRL;
 666         wmt_params.flag = 4;
 667         wmt_params.dlen = sizeof(param);
 668         wmt_params.data = &param;
 669         wmt_params.status = &status;
 670 
 671         err = mtk_hci_wmt_sync(hdev, &wmt_params);
 672         if (err < 0) {
 673                 bt_dev_err(hdev, "Failed to query function status (%d)", err);
 674                 return err;
 675         }
 676 
 677         return status;
 678 }
 679 
 680 static int mtk_setup_firmware(struct hci_dev *hdev, const char *fwname)
 681 {
 682         struct btmtk_hci_wmt_params wmt_params;
 683         const struct firmware *fw;
 684         const u8 *fw_ptr;
 685         size_t fw_size;
 686         int err, dlen;
 687         u8 flag;
 688 
 689         err = request_firmware(&fw, fwname, &hdev->dev);
 690         if (err < 0) {
 691                 bt_dev_err(hdev, "Failed to load firmware file (%d)", err);
 692                 return err;
 693         }
 694 
 695         fw_ptr = fw->data;
 696         fw_size = fw->size;
 697 
 698         /* The size of patch header is 30 bytes, should be skip */
 699         if (fw_size < 30) {
 700                 err = -EINVAL;
 701                 goto free_fw;
 702         }
 703 
 704         fw_size -= 30;
 705         fw_ptr += 30;
 706         flag = 1;
 707 
 708         wmt_params.op = MTK_WMT_PATCH_DWNLD;
 709         wmt_params.status = NULL;
 710 
 711         while (fw_size > 0) {
 712                 dlen = min_t(int, 250, fw_size);
 713 
 714                 /* Tell device the position in sequence */
 715                 if (fw_size - dlen <= 0)
 716                         flag = 3;
 717                 else if (fw_size < fw->size - 30)
 718                         flag = 2;
 719 
 720                 wmt_params.flag = flag;
 721                 wmt_params.dlen = dlen;
 722                 wmt_params.data = fw_ptr;
 723 
 724                 err = mtk_hci_wmt_sync(hdev, &wmt_params);
 725                 if (err < 0) {
 726                         bt_dev_err(hdev, "Failed to send wmt patch dwnld (%d)",
 727                                    err);
 728                         goto free_fw;
 729                 }
 730 
 731                 fw_size -= dlen;
 732                 fw_ptr += dlen;
 733         }
 734 
 735         wmt_params.op = MTK_WMT_RST;
 736         wmt_params.flag = 4;
 737         wmt_params.dlen = 0;
 738         wmt_params.data = NULL;
 739         wmt_params.status = NULL;
 740 
 741         /* Activate funciton the firmware providing to */
 742         err = mtk_hci_wmt_sync(hdev, &wmt_params);
 743         if (err < 0) {
 744                 bt_dev_err(hdev, "Failed to send wmt rst (%d)", err);
 745                 goto free_fw;
 746         }
 747 
 748         /* Wait a few moments for firmware activation done */
 749         usleep_range(10000, 12000);
 750 
 751 free_fw:
 752         release_firmware(fw);
 753         return err;
 754 }
 755 
 756 static int btmtksdio_setup(struct hci_dev *hdev)
 757 {
 758         struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
 759         struct btmtk_hci_wmt_params wmt_params;
 760         ktime_t calltime, delta, rettime;
 761         struct btmtk_tci_sleep tci_sleep;
 762         unsigned long long duration;
 763         struct sk_buff *skb;
 764         int err, status;
 765         u8 param = 0x1;
 766 
 767         calltime = ktime_get();
 768 
 769         /* Query whether the firmware is already download */
 770         wmt_params.op = MTK_WMT_SEMAPHORE;
 771         wmt_params.flag = 1;
 772         wmt_params.dlen = 0;
 773         wmt_params.data = NULL;
 774         wmt_params.status = &status;
 775 
 776         err = mtk_hci_wmt_sync(hdev, &wmt_params);
 777         if (err < 0) {
 778                 bt_dev_err(hdev, "Failed to query firmware status (%d)", err);
 779                 return err;
 780         }
 781 
 782         if (status == BTMTK_WMT_PATCH_DONE) {
 783                 bt_dev_info(hdev, "Firmware already downloaded");
 784                 goto ignore_setup_fw;
 785         }
 786 
 787         /* Setup a firmware which the device definitely requires */
 788         err = mtk_setup_firmware(hdev, bdev->data->fwname);
 789         if (err < 0)
 790                 return err;
 791 
 792 ignore_setup_fw:
 793         /* Query whether the device is already enabled */
 794         err = readx_poll_timeout(btmtksdio_func_query, hdev, status,
 795                                  status < 0 || status != BTMTK_WMT_ON_PROGRESS,
 796                                  2000, 5000000);
 797         /* -ETIMEDOUT happens */
 798         if (err < 0)
 799                 return err;
 800 
 801         /* The other errors happen in btusb_mtk_func_query */
 802         if (status < 0)
 803                 return status;
 804 
 805         if (status == BTMTK_WMT_ON_DONE) {
 806                 bt_dev_info(hdev, "function already on");
 807                 goto ignore_func_on;
 808         }
 809 
 810         /* Enable Bluetooth protocol */
 811         wmt_params.op = MTK_WMT_FUNC_CTRL;
 812         wmt_params.flag = 0;
 813         wmt_params.dlen = sizeof(param);
 814         wmt_params.data = &param;
 815         wmt_params.status = NULL;
 816 
 817         err = mtk_hci_wmt_sync(hdev, &wmt_params);
 818         if (err < 0) {
 819                 bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
 820                 return err;
 821         }
 822 
 823 ignore_func_on:
 824         /* Apply the low power environment setup */
 825         tci_sleep.mode = 0x5;
 826         tci_sleep.duration = cpu_to_le16(0x640);
 827         tci_sleep.host_duration = cpu_to_le16(0x640);
 828         tci_sleep.host_wakeup_pin = 0;
 829         tci_sleep.time_compensation = 0;
 830 
 831         skb = __hci_cmd_sync(hdev, 0xfc7a, sizeof(tci_sleep), &tci_sleep,
 832                              HCI_INIT_TIMEOUT);
 833         if (IS_ERR(skb)) {
 834                 err = PTR_ERR(skb);
 835                 bt_dev_err(hdev, "Failed to apply low power setting (%d)", err);
 836                 return err;
 837         }
 838         kfree_skb(skb);
 839 
 840         rettime = ktime_get();
 841         delta = ktime_sub(rettime, calltime);
 842         duration = (unsigned long long)ktime_to_ns(delta) >> 10;
 843 
 844         pm_runtime_set_autosuspend_delay(bdev->dev,
 845                                          MTKBTSDIO_AUTOSUSPEND_DELAY);
 846         pm_runtime_use_autosuspend(bdev->dev);
 847 
 848         err = pm_runtime_set_active(bdev->dev);
 849         if (err < 0)
 850                 return err;
 851 
 852         /* Default forbid runtime auto suspend, that can be allowed by
 853          * enable_autosuspend flag or the PM runtime entry under sysfs.
 854          */
 855         pm_runtime_forbid(bdev->dev);
 856         pm_runtime_enable(bdev->dev);
 857 
 858         if (enable_autosuspend)
 859                 pm_runtime_allow(bdev->dev);
 860 
 861         bt_dev_info(hdev, "Device setup in %llu usecs", duration);
 862 
 863         return 0;
 864 }
 865 
 866 static int btmtksdio_shutdown(struct hci_dev *hdev)
 867 {
 868         struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
 869         struct btmtk_hci_wmt_params wmt_params;
 870         u8 param = 0x0;
 871         int err;
 872 
 873         /* Get back the state to be consistent with the state
 874          * in btmtksdio_setup.
 875          */
 876         pm_runtime_get_sync(bdev->dev);
 877 
 878         /* Disable the device */
 879         wmt_params.op = MTK_WMT_FUNC_CTRL;
 880         wmt_params.flag = 0;
 881         wmt_params.dlen = sizeof(param);
 882         wmt_params.data = &param;
 883         wmt_params.status = NULL;
 884 
 885         err = mtk_hci_wmt_sync(hdev, &wmt_params);
 886         if (err < 0) {
 887                 bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
 888                 return err;
 889         }
 890 
 891         pm_runtime_put_noidle(bdev->dev);
 892         pm_runtime_disable(bdev->dev);
 893 
 894         return 0;
 895 }
 896 
 897 static int btmtksdio_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
 898 {
 899         struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
 900 
 901         switch (hci_skb_pkt_type(skb)) {
 902         case HCI_COMMAND_PKT:
 903                 hdev->stat.cmd_tx++;
 904                 break;
 905 
 906         case HCI_ACLDATA_PKT:
 907                 hdev->stat.acl_tx++;
 908                 break;
 909 
 910         case HCI_SCODATA_PKT:
 911                 hdev->stat.sco_tx++;
 912                 break;
 913 
 914         default:
 915                 return -EILSEQ;
 916         }
 917 
 918         skb_queue_tail(&bdev->txq, skb);
 919 
 920         schedule_work(&bdev->tx_work);
 921 
 922         return 0;
 923 }
 924 
 925 static int btmtksdio_probe(struct sdio_func *func,
 926                            const struct sdio_device_id *id)
 927 {
 928         struct btmtksdio_dev *bdev;
 929         struct hci_dev *hdev;
 930         int err;
 931 
 932         bdev = devm_kzalloc(&func->dev, sizeof(*bdev), GFP_KERNEL);
 933         if (!bdev)
 934                 return -ENOMEM;
 935 
 936         bdev->data = (void *)id->driver_data;
 937         if (!bdev->data)
 938                 return -ENODEV;
 939 
 940         bdev->dev = &func->dev;
 941         bdev->func = func;
 942 
 943         INIT_WORK(&bdev->tx_work, btmtksdio_tx_work);
 944         skb_queue_head_init(&bdev->txq);
 945 
 946         /* Initialize and register HCI device */
 947         hdev = hci_alloc_dev();
 948         if (!hdev) {
 949                 dev_err(&func->dev, "Can't allocate HCI device\n");
 950                 return -ENOMEM;
 951         }
 952 
 953         bdev->hdev = hdev;
 954 
 955         hdev->bus = HCI_SDIO;
 956         hci_set_drvdata(hdev, bdev);
 957 
 958         hdev->open     = btmtksdio_open;
 959         hdev->close    = btmtksdio_close;
 960         hdev->flush    = btmtksdio_flush;
 961         hdev->setup    = btmtksdio_setup;
 962         hdev->shutdown = btmtksdio_shutdown;
 963         hdev->send     = btmtksdio_send_frame;
 964         SET_HCIDEV_DEV(hdev, &func->dev);
 965 
 966         hdev->manufacturer = 70;
 967         set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks);
 968 
 969         err = hci_register_dev(hdev);
 970         if (err < 0) {
 971                 dev_err(&func->dev, "Can't register HCI device\n");
 972                 hci_free_dev(hdev);
 973                 return err;
 974         }
 975 
 976         sdio_set_drvdata(func, bdev);
 977 
 978         /* pm_runtime_enable would be done after the firmware is being
 979          * downloaded because the core layer probably already enables
 980          * runtime PM for this func such as the case host->caps &
 981          * MMC_CAP_POWER_OFF_CARD.
 982          */
 983         if (pm_runtime_enabled(bdev->dev))
 984                 pm_runtime_disable(bdev->dev);
 985 
 986         /* As explaination in drivers/mmc/core/sdio_bus.c tells us:
 987          * Unbound SDIO functions are always suspended.
 988          * During probe, the function is set active and the usage count
 989          * is incremented.  If the driver supports runtime PM,
 990          * it should call pm_runtime_put_noidle() in its probe routine and
 991          * pm_runtime_get_noresume() in its remove routine.
 992          *
 993          * So, put a pm_runtime_put_noidle here !
 994          */
 995         pm_runtime_put_noidle(bdev->dev);
 996 
 997         return 0;
 998 }
 999 
1000 static void btmtksdio_remove(struct sdio_func *func)
1001 {
1002         struct btmtksdio_dev *bdev = sdio_get_drvdata(func);
1003         struct hci_dev *hdev;
1004 
1005         if (!bdev)
1006                 return;
1007 
1008         /* Be consistent the state in btmtksdio_probe */
1009         pm_runtime_get_noresume(bdev->dev);
1010 
1011         hdev = bdev->hdev;
1012 
1013         sdio_set_drvdata(func, NULL);
1014         hci_unregister_dev(hdev);
1015         hci_free_dev(hdev);
1016 }
1017 
1018 #ifdef CONFIG_PM
1019 static int btmtksdio_runtime_suspend(struct device *dev)
1020 {
1021         struct sdio_func *func = dev_to_sdio_func(dev);
1022         struct btmtksdio_dev *bdev;
1023         u32 status;
1024         int err;
1025 
1026         bdev = sdio_get_drvdata(func);
1027         if (!bdev)
1028                 return 0;
1029 
1030         sdio_claim_host(bdev->func);
1031 
1032         sdio_writel(bdev->func, C_FW_OWN_REQ_SET, MTK_REG_CHLPCR, &err);
1033         if (err < 0)
1034                 goto out;
1035 
1036         err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status,
1037                                  !(status & C_COM_DRV_OWN), 2000, 1000000);
1038 out:
1039         bt_dev_info(bdev->hdev, "status (%d) return ownership to device", err);
1040 
1041         sdio_release_host(bdev->func);
1042 
1043         return err;
1044 }
1045 
1046 static int btmtksdio_runtime_resume(struct device *dev)
1047 {
1048         struct sdio_func *func = dev_to_sdio_func(dev);
1049         struct btmtksdio_dev *bdev;
1050         u32 status;
1051         int err;
1052 
1053         bdev = sdio_get_drvdata(func);
1054         if (!bdev)
1055                 return 0;
1056 
1057         sdio_claim_host(bdev->func);
1058 
1059         sdio_writel(bdev->func, C_FW_OWN_REQ_CLR, MTK_REG_CHLPCR, &err);
1060         if (err < 0)
1061                 goto out;
1062 
1063         err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status,
1064                                  status & C_COM_DRV_OWN, 2000, 1000000);
1065 out:
1066         bt_dev_info(bdev->hdev, "status (%d) get ownership from device", err);
1067 
1068         sdio_release_host(bdev->func);
1069 
1070         return err;
1071 }
1072 
1073 static UNIVERSAL_DEV_PM_OPS(btmtksdio_pm_ops, btmtksdio_runtime_suspend,
1074                             btmtksdio_runtime_resume, NULL);
1075 #define BTMTKSDIO_PM_OPS (&btmtksdio_pm_ops)
1076 #else   /* CONFIG_PM */
1077 #define BTMTKSDIO_PM_OPS NULL
1078 #endif  /* CONFIG_PM */
1079 
1080 static struct sdio_driver btmtksdio_driver = {
1081         .name           = "btmtksdio",
1082         .probe          = btmtksdio_probe,
1083         .remove         = btmtksdio_remove,
1084         .id_table       = btmtksdio_table,
1085         .drv = {
1086                 .owner = THIS_MODULE,
1087                 .pm = BTMTKSDIO_PM_OPS,
1088         }
1089 };
1090 
1091 module_sdio_driver(btmtksdio_driver);
1092 
1093 module_param(enable_autosuspend, bool, 0644);
1094 MODULE_PARM_DESC(enable_autosuspend, "Enable autosuspend by default");
1095 
1096 MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
1097 MODULE_DESCRIPTION("MediaTek Bluetooth SDIO driver ver " VERSION);
1098 MODULE_VERSION(VERSION);
1099 MODULE_LICENSE("GPL");
1100 MODULE_FIRMWARE(FIRMWARE_MT7663);
1101 MODULE_FIRMWARE(FIRMWARE_MT7668);

/* [<][>][^][v][top][bottom][index][help] */