Lines Matching refs:bdev

173 	struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
192 set_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
196 clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
209 err = wait_on_bit_timeout(&bdev->tx_state, BTMTKSDIO_TX_WAIT_VND_EVT,
213 clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
219 clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
224 wmt_evt = (struct btmtk_hci_wmt_evt *)bdev->evt_skb->data;
254 kfree_skb(bdev->evt_skb);
255 bdev->evt_skb = NULL;
260 static int btmtksdio_tx_packet(struct btmtksdio_dev *bdev,
282 err = sdio_writesb(bdev->func, MTK_REG_CTDR, skb->data,
287 bdev->hdev->stat.byte_tx += skb->len;
299 static u32 btmtksdio_drv_own_query(struct btmtksdio_dev *bdev)
301 return sdio_readl(bdev->func, MTK_REG_CHLPCR, NULL);
306 struct btmtksdio_dev *bdev = container_of(work, struct btmtksdio_dev,
311 pm_runtime_get_sync(bdev->dev);
313 sdio_claim_host(bdev->func);
315 while ((skb = skb_dequeue(&bdev->txq))) {
316 err = btmtksdio_tx_packet(bdev, skb);
318 bdev->hdev->stat.err_tx++;
319 skb_queue_head(&bdev->txq, skb);
324 sdio_release_host(bdev->func);
326 pm_runtime_mark_last_busy(bdev->dev);
327 pm_runtime_put_autosuspend(bdev->dev);
332 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
346 if (test_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state)) {
347 bdev->evt_skb = skb_clone(skb, GFP_KERNEL);
348 if (!bdev->evt_skb) {
360 &bdev->tx_state)) {
363 wake_up_bit(&bdev->tx_state, BTMTKSDIO_TX_WAIT_VND_EVT);
370 kfree_skb(bdev->evt_skb);
371 bdev->evt_skb = NULL;
383 static int btmtksdio_rx_packet(struct btmtksdio_dev *bdev, u16 rx_size)
402 err = sdio_readsb(bdev->func, skb->data, MTK_REG_CRDR, rx_size);
414 bt_dev_err(bdev->hdev, "Rx size in sdio header is mismatched ");
433 bt_dev_err(bdev->hdev, "Invalid bt type 0x%02x",
440 bt_dev_err(bdev->hdev, "The size of bt header is mismatched");
460 bt_dev_err(bdev->hdev, "The size of bt payload is mismatched");
468 (&pkts[i])->recv(bdev->hdev, skb);
470 bdev->hdev->stat.byte_rx += rx_size;
482 struct btmtksdio_dev *bdev = sdio_get_drvdata(func);
492 sdio_release_host(bdev->func);
494 pm_runtime_get_sync(bdev->dev);
496 sdio_claim_host(bdev->func);
515 bt_dev_err(bdev->hdev, "CHISR is 0");
518 bt_dev_dbg(bdev->hdev, "Get fw own back");
521 schedule_work(&bdev->tx_work);
523 bt_dev_warn(bdev->hdev, "Tx fifo overflow");
528 if (btmtksdio_rx_packet(bdev, rx_size) < 0)
529 bdev->hdev->stat.err_rx++;
535 pm_runtime_mark_last_busy(bdev->dev);
536 pm_runtime_put_autosuspend(bdev->dev);
541 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
545 sdio_claim_host(bdev->func);
547 err = sdio_enable_func(bdev->func);
552 sdio_writel(bdev->func, C_FW_OWN_REQ_CLR, MTK_REG_CHLPCR, &err);
556 err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status,
559 bt_dev_err(bdev->hdev, "Cannot get ownership from device");
564 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, &err);
568 sdio_writel(bdev->func, 0, MTK_REG_CHIER, &err);
572 err = sdio_claim_irq(bdev->func, btmtksdio_interrupt);
576 err = sdio_set_block_size(bdev->func, MTK_SDIO_BLOCK_SIZE);
583 sdio_writel(bdev->func, SDIO_INT_CTL | SDIO_RE_INIT_EN,
589 sdio_writel(bdev->func, C_INT_CLR_CTRL, MTK_REG_CHCR, &err);
594 sdio_writel(bdev->func, RX_DONE_INT | TX_EMPTY | TX_FIFO_OVERFLOW,
600 sdio_writel(bdev->func, C_INT_EN_SET, MTK_REG_CHLPCR, &err);
604 sdio_release_host(bdev->func);
609 sdio_release_irq(bdev->func);
612 sdio_disable_func(bdev->func);
615 sdio_release_host(bdev->func);
622 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
626 sdio_claim_host(bdev->func);
629 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, NULL);
631 sdio_release_irq(bdev->func);
634 sdio_writel(bdev->func, C_FW_OWN_REQ_SET, MTK_REG_CHLPCR, NULL);
636 err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status,
639 bt_dev_err(bdev->hdev, "Cannot return ownership to device");
641 sdio_disable_func(bdev->func);
643 sdio_release_host(bdev->func);
650 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
652 skb_queue_purge(&bdev->txq);
654 cancel_work_sync(&bdev->tx_work);
773 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
803 err = mtk_setup_firmware(hdev, bdev->data->fwname);
859 pm_runtime_set_autosuspend_delay(bdev->dev,
861 pm_runtime_use_autosuspend(bdev->dev);
863 err = pm_runtime_set_active(bdev->dev);
870 pm_runtime_forbid(bdev->dev);
871 pm_runtime_enable(bdev->dev);
874 pm_runtime_allow(bdev->dev);
883 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
891 pm_runtime_get_sync(bdev->dev);
906 pm_runtime_put_noidle(bdev->dev);
907 pm_runtime_disable(bdev->dev);
914 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
933 skb_queue_tail(&bdev->txq, skb);
935 schedule_work(&bdev->tx_work);
943 struct btmtksdio_dev *bdev;
947 bdev = devm_kzalloc(&func->dev, sizeof(*bdev), GFP_KERNEL);
948 if (!bdev)
951 bdev->data = (void *)id->driver_data;
952 if (!bdev->data)
955 bdev->dev = &func->dev;
956 bdev->func = func;
958 INIT_WORK(&bdev->tx_work, btmtksdio_tx_work);
959 skb_queue_head_init(&bdev->txq);
968 bdev->hdev = hdev;
971 hci_set_drvdata(hdev, bdev);
984 sdio_set_drvdata(func, bdev);
998 if (pm_runtime_enabled(bdev->dev))
999 pm_runtime_disable(bdev->dev);
1010 pm_runtime_put_noidle(bdev->dev);
1017 struct btmtksdio_dev *bdev = sdio_get_drvdata(func);
1020 if (!bdev)
1024 pm_runtime_get_noresume(bdev->dev);
1026 hdev = bdev->hdev;
1037 struct btmtksdio_dev *bdev;
1041 bdev = sdio_get_drvdata(func);
1042 if (!bdev)
1047 sdio_claim_host(bdev->func);
1049 sdio_writel(bdev->func, C_FW_OWN_REQ_SET, MTK_REG_CHLPCR, &err);
1053 err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status,
1056 bt_dev_info(bdev->hdev, "status (%d) return ownership to device", err);
1058 sdio_release_host(bdev->func);
1066 struct btmtksdio_dev *bdev;
1070 bdev = sdio_get_drvdata(func);
1071 if (!bdev)
1074 sdio_claim_host(bdev->func);
1076 sdio_writel(bdev->func, C_FW_OWN_REQ_CLR, MTK_REG_CHLPCR, &err);
1080 err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status,
1083 bt_dev_info(bdev->hdev, "status (%d) get ownership from device", err);
1085 sdio_release_host(bdev->func);