Lines Matching refs:bdev

147 	struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
172 set_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
176 clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
189 err = wait_on_bit_timeout(&bdev->tx_state, BTMTKSDIO_TX_WAIT_VND_EVT,
193 clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
199 clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
205 wmt_evt = (struct btmtk_hci_wmt_evt *)bdev->evt_skb->data;
248 kfree_skb(bdev->evt_skb);
249 bdev->evt_skb = NULL;
256 static int btmtksdio_tx_packet(struct btmtksdio_dev *bdev,
278 clear_bit(BTMTKSDIO_HW_TX_READY, &bdev->tx_state);
279 err = sdio_writesb(bdev->func, MTK_REG_CTDR, skb->data,
284 bdev->hdev->stat.byte_tx += skb->len;
296 static u32 btmtksdio_drv_own_query(struct btmtksdio_dev *bdev)
298 return sdio_readl(bdev->func, MTK_REG_CHLPCR, NULL);
301 static u32 btmtksdio_drv_own_query_79xx(struct btmtksdio_dev *bdev)
303 return sdio_readl(bdev->func, MTK_REG_PD2HRM0R, NULL);
306 static u32 btmtksdio_chcr_query(struct btmtksdio_dev *bdev)
308 return sdio_readl(bdev->func, MTK_REG_CHCR, NULL);
311 static int btmtksdio_fw_pmctrl(struct btmtksdio_dev *bdev)
316 sdio_claim_host(bdev->func);
318 if (bdev->data->lp_mbox_supported &&
319 test_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state)) {
320 sdio_writel(bdev->func, CSICR_CLR_MBOX_ACK, MTK_REG_CSICR,
322 err = readx_poll_timeout(btmtksdio_drv_own_query_79xx, bdev,
326 bt_dev_err(bdev->hdev, "mailbox ACK not cleared");
332 sdio_writel(bdev->func, C_FW_OWN_REQ_SET, MTK_REG_CHLPCR, &err);
336 err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status,
340 sdio_release_host(bdev->func);
343 bt_dev_err(bdev->hdev, "Cannot return ownership to device");
348 static int btmtksdio_drv_pmctrl(struct btmtksdio_dev *bdev)
353 sdio_claim_host(bdev->func);
356 sdio_writel(bdev->func, C_FW_OWN_REQ_CLR, MTK_REG_CHLPCR, &err);
360 err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status,
363 if (!err && bdev->data->lp_mbox_supported &&
364 test_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state))
365 err = readx_poll_timeout(btmtksdio_drv_own_query_79xx, bdev,
370 sdio_release_host(bdev->func);
373 bt_dev_err(bdev->hdev, "Cannot get ownership from device");
380 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
388 if (test_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state)) {
389 bdev->evt_skb = skb_clone(skb, GFP_KERNEL);
390 if (!bdev->evt_skb) {
402 &bdev->tx_state)) {
405 wake_up_bit(&bdev->tx_state, BTMTKSDIO_TX_WAIT_VND_EVT);
412 kfree_skb(bdev->evt_skb);
413 bdev->evt_skb = NULL;
421 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
429 pm_runtime_forbid(bdev->dev);
446 static int btmtksdio_rx_packet(struct btmtksdio_dev *bdev, u16 rx_size)
465 err = sdio_readsb(bdev->func, skb->data, MTK_REG_CRDR, rx_size);
477 bt_dev_err(bdev->hdev, "Rx size in sdio header is mismatched ");
496 bt_dev_err(bdev->hdev, "Invalid bt type 0x%02x",
503 bt_dev_err(bdev->hdev, "The size of bt header is mismatched");
523 bt_dev_err(bdev->hdev, "The size of bt payload is mismatched");
531 (&pkts[i])->recv(bdev->hdev, skb);
533 bdev->hdev->stat.byte_rx += rx_size;
545 struct btmtksdio_dev *bdev = container_of(work, struct btmtksdio_dev,
552 pm_runtime_get_sync(bdev->dev);
554 sdio_claim_host(bdev->func);
557 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, 0);
562 int_status = sdio_readl(bdev->func, MTK_REG_CHISR, NULL);
573 sdio_writel(bdev->func, int_status, MTK_REG_CHISR, NULL);
577 bdev->data->chipid == 0x7921) {
578 sdio_writel(bdev->func, PH2DSM0R_DRIVER_OWN,
583 bt_dev_dbg(bdev->hdev, "Get fw own back");
586 set_bit(BTMTKSDIO_HW_TX_READY, &bdev->tx_state);
589 bt_dev_warn(bdev->hdev, "Tx fifo overflow");
591 if (test_bit(BTMTKSDIO_HW_TX_READY, &bdev->tx_state)) {
592 skb = skb_dequeue(&bdev->txq);
594 err = btmtksdio_tx_packet(bdev, skb);
596 bdev->hdev->stat.err_tx++;
597 skb_queue_head(&bdev->txq, skb);
603 rx_size = sdio_readl(bdev->func, MTK_REG_CRPLR, NULL);
605 if (btmtksdio_rx_packet(bdev, rx_size) < 0)
606 bdev->hdev->stat.err_rx++;
611 sdio_writel(bdev->func, C_INT_EN_SET, MTK_REG_CHLPCR, 0);
613 sdio_release_host(bdev->func);
615 pm_runtime_mark_last_busy(bdev->dev);
616 pm_runtime_put_autosuspend(bdev->dev);
621 struct btmtksdio_dev *bdev = sdio_get_drvdata(func);
624 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, 0);
626 schedule_work(&bdev->txrx_work);
631 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
635 sdio_claim_host(bdev->func);
637 err = sdio_enable_func(bdev->func);
641 set_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state);
643 err = btmtksdio_drv_pmctrl(bdev);
648 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, &err);
652 sdio_writel(bdev->func, 0, MTK_REG_CHIER, &err);
656 err = sdio_claim_irq(bdev->func, btmtksdio_interrupt);
660 err = sdio_set_block_size(bdev->func, MTK_SDIO_BLOCK_SIZE);
667 val = sdio_readl(bdev->func, MTK_REG_CSDIOCSR, &err);
672 sdio_writel(bdev->func, val, MTK_REG_CSDIOCSR, &err);
677 val = sdio_readl(bdev->func, MTK_REG_CHCR, &err);
682 sdio_writel(bdev->func, val, MTK_REG_CHCR, &err);
687 sdio_writel(bdev->func, RX_DONE_INT | TX_EMPTY | TX_FIFO_OVERFLOW,
693 sdio_writel(bdev->func, C_INT_EN_SET, MTK_REG_CHLPCR, &err);
697 sdio_release_host(bdev->func);
702 sdio_release_irq(bdev->func);
705 sdio_disable_func(bdev->func);
708 sdio_release_host(bdev->func);
715 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
717 sdio_claim_host(bdev->func);
720 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, NULL);
722 sdio_release_irq(bdev->func);
724 cancel_work_sync(&bdev->txrx_work);
726 btmtksdio_fw_pmctrl(bdev);
728 clear_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state);
729 sdio_disable_func(bdev->func);
731 sdio_release_host(bdev->func);
738 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
740 skb_queue_purge(&bdev->txq);
742 cancel_work_sync(&bdev->txrx_work);
771 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
832 set_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state);
856 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
867 err = btmtksdio_fw_pmctrl(bdev);
871 err = btmtksdio_drv_pmctrl(bdev);
890 set_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state);
1070 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
1078 set_bit(BTMTKSDIO_HW_TX_READY, &bdev->tx_state);
1080 switch (bdev->data->chipid) {
1082 if (test_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state)) {
1094 btmtksdio_fw_pmctrl(bdev);
1096 btmtksdio_drv_pmctrl(bdev);
1098 clear_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state);
1131 if (bdev->reset) {
1135 devm_gpiod_put(bdev->dev, bdev->reset);
1136 bdev->reset = NULL;
1146 err = mt76xx_setup(hdev, bdev->data->fwname);
1158 pm_runtime_set_autosuspend_delay(bdev->dev,
1160 pm_runtime_use_autosuspend(bdev->dev);
1162 err = pm_runtime_set_active(bdev->dev);
1169 pm_runtime_forbid(bdev->dev);
1170 pm_runtime_enable(bdev->dev);
1173 pm_runtime_allow(bdev->dev);
1182 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
1190 pm_runtime_get_sync(bdev->dev);
1193 if (test_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state))
1210 pm_runtime_put_noidle(bdev->dev);
1211 pm_runtime_disable(bdev->dev);
1218 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
1237 skb_queue_tail(&bdev->txq, skb);
1239 schedule_work(&bdev->txrx_work);
1246 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
1250 if (!bdev->reset || bdev->data->chipid != 0x7921)
1253 pm_runtime_get_sync(bdev->dev);
1255 if (test_and_set_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state))
1258 sdio_claim_host(bdev->func);
1260 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, NULL);
1261 skb_queue_purge(&bdev->txq);
1262 cancel_work_sync(&bdev->txrx_work);
1264 gpiod_set_value_cansleep(bdev->reset, 1);
1266 gpiod_set_value_cansleep(bdev->reset, 0);
1268 err = readx_poll_timeout(btmtksdio_chcr_query, bdev, status,
1275 clear_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state);
1277 sdio_release_host(bdev->func);
1279 pm_runtime_put_noidle(bdev->dev);
1280 pm_runtime_disable(bdev->dev);
1287 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
1289 return device_may_wakeup(bdev->dev);
1294 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
1295 bool may_wakeup = device_may_wakeup(bdev->dev);
1304 if (may_wakeup && bdev->data->chipid == 0x7921) {
1321 struct btmtksdio_dev *bdev;
1325 bdev = devm_kzalloc(&func->dev, sizeof(*bdev), GFP_KERNEL);
1326 if (!bdev)
1329 bdev->data = (void *)id->driver_data;
1330 if (!bdev->data)
1333 bdev->dev = &func->dev;
1334 bdev->func = func;
1336 INIT_WORK(&bdev->txrx_work, btmtksdio_txrx_work);
1337 skb_queue_head_init(&bdev->txq);
1346 bdev->hdev = hdev;
1349 hci_set_drvdata(hdev, bdev);
1374 sdio_set_drvdata(func, bdev);
1388 if (pm_runtime_enabled(bdev->dev))
1389 pm_runtime_disable(bdev->dev);
1400 pm_runtime_put_noidle(bdev->dev);
1402 err = device_init_wakeup(bdev->dev, true);
1406 bdev->dev->of_node = of_find_compatible_node(NULL, NULL,
1408 bdev->reset = devm_gpiod_get_optional(bdev->dev, "reset",
1410 if (IS_ERR(bdev->reset))
1411 err = PTR_ERR(bdev->reset);
1418 struct btmtksdio_dev *bdev = sdio_get_drvdata(func);
1421 if (!bdev)
1425 pm_runtime_get_noresume(bdev->dev);
1427 hdev = bdev->hdev;
1438 struct btmtksdio_dev *bdev;
1441 bdev = sdio_get_drvdata(func);
1442 if (!bdev)
1445 if (!test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state))
1450 err = btmtksdio_fw_pmctrl(bdev);
1452 bt_dev_dbg(bdev->hdev, "status (%d) return ownership to device", err);
1460 struct btmtksdio_dev *bdev;
1463 bdev = sdio_get_drvdata(func);
1464 if (!bdev)
1467 if (!test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state))
1470 err = btmtksdio_drv_pmctrl(bdev);
1472 bt_dev_dbg(bdev->hdev, "status (%d) get ownership from device", err);