Lines Matching refs:bdev

148 	struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
173 set_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
177 clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
190 err = wait_on_bit_timeout(&bdev->tx_state, BTMTKSDIO_TX_WAIT_VND_EVT,
194 clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
200 clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
206 wmt_evt = (struct btmtk_hci_wmt_evt *)bdev->evt_skb->data;
249 kfree_skb(bdev->evt_skb);
250 bdev->evt_skb = NULL;
257 static int btmtksdio_tx_packet(struct btmtksdio_dev *bdev,
279 clear_bit(BTMTKSDIO_HW_TX_READY, &bdev->tx_state);
280 err = sdio_writesb(bdev->func, MTK_REG_CTDR, skb->data,
285 bdev->hdev->stat.byte_tx += skb->len;
297 static u32 btmtksdio_drv_own_query(struct btmtksdio_dev *bdev)
299 return sdio_readl(bdev->func, MTK_REG_CHLPCR, NULL);
302 static u32 btmtksdio_drv_own_query_79xx(struct btmtksdio_dev *bdev)
304 return sdio_readl(bdev->func, MTK_REG_PD2HRM0R, NULL);
307 static u32 btmtksdio_chcr_query(struct btmtksdio_dev *bdev)
309 return sdio_readl(bdev->func, MTK_REG_CHCR, NULL);
312 static int btmtksdio_fw_pmctrl(struct btmtksdio_dev *bdev)
317 sdio_claim_host(bdev->func);
319 if (bdev->data->lp_mbox_supported &&
320 test_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state)) {
321 sdio_writel(bdev->func, CSICR_CLR_MBOX_ACK, MTK_REG_CSICR,
323 err = readx_poll_timeout(btmtksdio_drv_own_query_79xx, bdev,
327 bt_dev_err(bdev->hdev, "mailbox ACK not cleared");
333 sdio_writel(bdev->func, C_FW_OWN_REQ_SET, MTK_REG_CHLPCR, &err);
337 err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status,
341 sdio_release_host(bdev->func);
344 bt_dev_err(bdev->hdev, "Cannot return ownership to device");
349 static int btmtksdio_drv_pmctrl(struct btmtksdio_dev *bdev)
354 sdio_claim_host(bdev->func);
357 sdio_writel(bdev->func, C_FW_OWN_REQ_CLR, MTK_REG_CHLPCR, &err);
361 err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status,
364 if (!err && bdev->data->lp_mbox_supported &&
365 test_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state))
366 err = readx_poll_timeout(btmtksdio_drv_own_query_79xx, bdev,
371 sdio_release_host(bdev->func);
374 bt_dev_err(bdev->hdev, "Cannot get ownership from device");
381 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
389 if (test_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state)) {
390 bdev->evt_skb = skb_clone(skb, GFP_KERNEL);
391 if (!bdev->evt_skb) {
403 &bdev->tx_state)) {
406 wake_up_bit(&bdev->tx_state, BTMTKSDIO_TX_WAIT_VND_EVT);
413 kfree_skb(bdev->evt_skb);
414 bdev->evt_skb = NULL;
422 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
430 pm_runtime_forbid(bdev->dev);
447 static int btmtksdio_rx_packet(struct btmtksdio_dev *bdev, u16 rx_size)
466 err = sdio_readsb(bdev->func, skb->data, MTK_REG_CRDR, rx_size);
478 bt_dev_err(bdev->hdev, "Rx size in sdio header is mismatched ");
497 bt_dev_err(bdev->hdev, "Invalid bt type 0x%02x",
504 bt_dev_err(bdev->hdev, "The size of bt header is mismatched");
524 bt_dev_err(bdev->hdev, "The size of bt payload is mismatched");
532 (&pkts[i])->recv(bdev->hdev, skb);
534 bdev->hdev->stat.byte_rx += rx_size;
546 struct btmtksdio_dev *bdev = container_of(work, struct btmtksdio_dev,
553 pm_runtime_get_sync(bdev->dev);
555 sdio_claim_host(bdev->func);
558 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, NULL);
563 int_status = sdio_readl(bdev->func, MTK_REG_CHISR, NULL);
574 sdio_writel(bdev->func, int_status, MTK_REG_CHISR, NULL);
578 bdev->data->chipid == 0x7921) {
579 sdio_writel(bdev->func, PH2DSM0R_DRIVER_OWN,
584 bt_dev_dbg(bdev->hdev, "Get fw own back");
587 set_bit(BTMTKSDIO_HW_TX_READY, &bdev->tx_state);
590 bt_dev_warn(bdev->hdev, "Tx fifo overflow");
592 if (test_bit(BTMTKSDIO_HW_TX_READY, &bdev->tx_state)) {
593 skb = skb_dequeue(&bdev->txq);
595 err = btmtksdio_tx_packet(bdev, skb);
597 bdev->hdev->stat.err_tx++;
598 skb_queue_head(&bdev->txq, skb);
604 rx_size = sdio_readl(bdev->func, MTK_REG_CRPLR, NULL);
606 if (btmtksdio_rx_packet(bdev, rx_size) < 0)
607 bdev->hdev->stat.err_rx++;
612 sdio_writel(bdev->func, C_INT_EN_SET, MTK_REG_CHLPCR, NULL);
614 sdio_release_host(bdev->func);
616 pm_runtime_mark_last_busy(bdev->dev);
617 pm_runtime_put_autosuspend(bdev->dev);
622 struct btmtksdio_dev *bdev = sdio_get_drvdata(func);
624 if (test_bit(BTMTKSDIO_BT_WAKE_ENABLED, &bdev->tx_state)) {
625 if (bdev->hdev->suspended)
626 pm_wakeup_event(bdev->dev, 0);
627 clear_bit(BTMTKSDIO_BT_WAKE_ENABLED, &bdev->tx_state);
631 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, NULL);
633 schedule_work(&bdev->txrx_work);
638 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
642 sdio_claim_host(bdev->func);
644 err = sdio_enable_func(bdev->func);
648 set_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state);
650 err = btmtksdio_drv_pmctrl(bdev);
655 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, &err);
659 sdio_writel(bdev->func, 0, MTK_REG_CHIER, &err);
663 err = sdio_claim_irq(bdev->func, btmtksdio_interrupt);
667 err = sdio_set_block_size(bdev->func, MTK_SDIO_BLOCK_SIZE);
674 val = sdio_readl(bdev->func, MTK_REG_CSDIOCSR, &err);
679 sdio_writel(bdev->func, val, MTK_REG_CSDIOCSR, &err);
684 val = sdio_readl(bdev->func, MTK_REG_CHCR, &err);
689 sdio_writel(bdev->func, val, MTK_REG_CHCR, &err);
694 sdio_writel(bdev->func, RX_DONE_INT | TX_EMPTY | TX_FIFO_OVERFLOW,
700 sdio_writel(bdev->func, C_INT_EN_SET, MTK_REG_CHLPCR, &err);
704 sdio_release_host(bdev->func);
709 sdio_release_irq(bdev->func);
712 sdio_disable_func(bdev->func);
715 sdio_release_host(bdev->func);
722 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
724 sdio_claim_host(bdev->func);
727 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, NULL);
729 sdio_release_irq(bdev->func);
731 cancel_work_sync(&bdev->txrx_work);
733 btmtksdio_fw_pmctrl(bdev);
735 clear_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state);
736 sdio_disable_func(bdev->func);
738 sdio_release_host(bdev->func);
745 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
747 skb_queue_purge(&bdev->txq);
749 cancel_work_sync(&bdev->txrx_work);
778 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
839 set_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state);
863 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
874 err = btmtksdio_fw_pmctrl(bdev);
878 err = btmtksdio_drv_pmctrl(bdev);
897 set_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state);
1077 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
1085 set_bit(BTMTKSDIO_HW_TX_READY, &bdev->tx_state);
1087 switch (bdev->data->chipid) {
1089 if (test_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state)) {
1101 btmtksdio_fw_pmctrl(bdev);
1103 btmtksdio_drv_pmctrl(bdev);
1105 clear_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state);
1138 if (bdev->reset) {
1142 devm_gpiod_put(bdev->dev, bdev->reset);
1143 bdev->reset = NULL;
1153 err = mt76xx_setup(hdev, bdev->data->fwname);
1165 pm_runtime_set_autosuspend_delay(bdev->dev,
1167 pm_runtime_use_autosuspend(bdev->dev);
1169 err = pm_runtime_set_active(bdev->dev);
1176 pm_runtime_forbid(bdev->dev);
1177 pm_runtime_enable(bdev->dev);
1180 pm_runtime_allow(bdev->dev);
1189 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
1197 pm_runtime_get_sync(bdev->dev);
1200 if (test_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state))
1217 pm_runtime_put_noidle(bdev->dev);
1218 pm_runtime_disable(bdev->dev);
1225 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
1244 skb_queue_tail(&bdev->txq, skb);
1246 schedule_work(&bdev->txrx_work);
1253 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
1257 if (!bdev->reset || bdev->data->chipid != 0x7921)
1260 pm_runtime_get_sync(bdev->dev);
1262 if (test_and_set_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state))
1265 sdio_claim_host(bdev->func);
1267 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, NULL);
1268 skb_queue_purge(&bdev->txq);
1269 cancel_work_sync(&bdev->txrx_work);
1271 gpiod_set_value_cansleep(bdev->reset, 1);
1273 gpiod_set_value_cansleep(bdev->reset, 0);
1275 err = readx_poll_timeout(btmtksdio_chcr_query, bdev, status,
1282 clear_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state);
1284 sdio_release_host(bdev->func);
1286 pm_runtime_put_noidle(bdev->dev);
1287 pm_runtime_disable(bdev->dev);
1294 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
1296 return device_may_wakeup(bdev->dev);
1301 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
1302 bool may_wakeup = device_may_wakeup(bdev->dev);
1311 if (may_wakeup && bdev->data->chipid == 0x7921) {
1328 struct btmtksdio_dev *bdev;
1332 bdev = devm_kzalloc(&func->dev, sizeof(*bdev), GFP_KERNEL);
1333 if (!bdev)
1336 bdev->data = (void *)id->driver_data;
1337 if (!bdev->data)
1340 bdev->dev = &func->dev;
1341 bdev->func = func;
1343 INIT_WORK(&bdev->txrx_work, btmtksdio_txrx_work);
1344 skb_queue_head_init(&bdev->txq);
1353 bdev->hdev = hdev;
1356 hci_set_drvdata(hdev, bdev);
1381 sdio_set_drvdata(func, bdev);
1395 if (pm_runtime_enabled(bdev->dev))
1396 pm_runtime_disable(bdev->dev);
1407 pm_runtime_put_noidle(bdev->dev);
1409 err = device_init_wakeup(bdev->dev, true);
1413 bdev->dev->of_node = of_find_compatible_node(NULL, NULL,
1415 bdev->reset = devm_gpiod_get_optional(bdev->dev, "reset",
1417 if (IS_ERR(bdev->reset))
1418 err = PTR_ERR(bdev->reset);
1425 struct btmtksdio_dev *bdev = sdio_get_drvdata(func);
1428 if (!bdev)
1432 pm_runtime_get_noresume(bdev->dev);
1434 hdev = bdev->hdev;
1445 struct btmtksdio_dev *bdev;
1448 bdev = sdio_get_drvdata(func);
1449 if (!bdev)
1452 if (!test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state))
1457 err = btmtksdio_fw_pmctrl(bdev);
1459 bt_dev_dbg(bdev->hdev, "status (%d) return ownership to device", err);
1467 struct btmtksdio_dev *bdev;
1469 bdev = sdio_get_drvdata(func);
1470 if (!bdev)
1473 if (!test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state))
1476 set_bit(BTMTKSDIO_BT_WAKE_ENABLED, &bdev->tx_state);
1484 struct btmtksdio_dev *bdev;
1487 bdev = sdio_get_drvdata(func);
1488 if (!bdev)
1491 if (!test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state))
1494 err = btmtksdio_drv_pmctrl(bdev);
1496 bt_dev_dbg(bdev->hdev, "status (%d) get ownership from device", err);