Lines Matching refs:bdev
80 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev); in mtk_hci_wmt_sync() local
97 set_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state); in mtk_hci_wmt_sync()
101 clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state); in mtk_hci_wmt_sync()
114 err = wait_on_bit_timeout(&bdev->tx_state, BTMTKUART_TX_WAIT_VND_EVT, in mtk_hci_wmt_sync()
184 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev); in btmtkuart_recv_event() local
199 &bdev->tx_state)) { in btmtkuart_recv_event()
202 wake_up_bit(&bdev->tx_state, BTMTKUART_TX_WAIT_VND_EVT); in btmtkuart_recv_event()
217 struct btmtkuart_dev *bdev = container_of(work, struct btmtkuart_dev, in btmtkuart_tx_work() local
219 struct serdev_device *serdev = bdev->serdev; in btmtkuart_tx_work()
220 struct hci_dev *hdev = bdev->hdev; in btmtkuart_tx_work()
223 clear_bit(BTMTKUART_TX_STATE_WAKEUP, &bdev->tx_state); in btmtkuart_tx_work()
226 struct sk_buff *skb = skb_dequeue(&bdev->txq); in btmtkuart_tx_work()
238 skb_queue_head(&bdev->txq, skb); in btmtkuart_tx_work()
257 if (!test_bit(BTMTKUART_TX_STATE_WAKEUP, &bdev->tx_state)) in btmtkuart_tx_work()
261 clear_bit(BTMTKUART_TX_STATE_ACTIVE, &bdev->tx_state); in btmtkuart_tx_work()
264 static void btmtkuart_tx_wakeup(struct btmtkuart_dev *bdev) in btmtkuart_tx_wakeup() argument
266 if (test_and_set_bit(BTMTKUART_TX_STATE_ACTIVE, &bdev->tx_state)) in btmtkuart_tx_wakeup()
267 set_bit(BTMTKUART_TX_STATE_WAKEUP, &bdev->tx_state); in btmtkuart_tx_wakeup()
269 schedule_work(&bdev->tx_work); in btmtkuart_tx_wakeup()
273 mtk_stp_split(struct btmtkuart_dev *bdev, const unsigned char *data, int count, in mtk_stp_split() argument
279 if (!bdev->stp_dlen && bdev->stp_cursor >= 6) in mtk_stp_split()
280 bdev->stp_cursor = 0; in mtk_stp_split()
283 while (bdev->stp_cursor < 6 && count > 0) { in mtk_stp_split()
284 bdev->stp_pad[bdev->stp_cursor] = *data; in mtk_stp_split()
285 bdev->stp_cursor++; in mtk_stp_split()
291 if (!bdev->stp_dlen && bdev->stp_cursor >= 6) { in mtk_stp_split()
292 shdr = (struct mtk_stp_hdr *)&bdev->stp_pad[2]; in mtk_stp_split()
293 bdev->stp_dlen = be16_to_cpu(shdr->dlen) & 0x0fff; in mtk_stp_split()
296 if (shdr->prefix != 0x80 || bdev->stp_dlen > 2048) { in mtk_stp_split()
297 bt_dev_err(bdev->hdev, "stp format unexpect (%d, %d)", in mtk_stp_split()
298 shdr->prefix, bdev->stp_dlen); in mtk_stp_split()
299 bdev->stp_cursor = 2; in mtk_stp_split()
300 bdev->stp_dlen = 0; in mtk_stp_split()
309 *sz_h4 = min_t(int, count, bdev->stp_dlen); in mtk_stp_split()
312 bdev->stp_dlen -= *sz_h4; in mtk_stp_split()
320 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev); in btmtkuart_recv() local
341 p_h4 = mtk_stp_split(bdev, p_left, sz_left, &sz_h4); in btmtkuart_recv()
349 bdev->rx_skb = h4_recv_buf(bdev->hdev, bdev->rx_skb, p_h4, in btmtkuart_recv()
352 if (IS_ERR(bdev->rx_skb)) { in btmtkuart_recv()
353 err = PTR_ERR(bdev->rx_skb); in btmtkuart_recv()
354 bt_dev_err(bdev->hdev, in btmtkuart_recv()
356 bdev->rx_skb = NULL; in btmtkuart_recv()
370 struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev); in btmtkuart_receive_buf() local
373 err = btmtkuart_recv(bdev->hdev, data, count); in btmtkuart_receive_buf()
377 bdev->hdev->stat.byte_rx += count; in btmtkuart_receive_buf()
384 struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev); in btmtkuart_write_wakeup() local
386 btmtkuart_tx_wakeup(bdev); in btmtkuart_write_wakeup()
396 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev); in btmtkuart_open() local
400 err = serdev_device_open(bdev->serdev); in btmtkuart_open()
403 dev_name(&bdev->serdev->dev)); in btmtkuart_open()
407 bdev->stp_cursor = 2; in btmtkuart_open()
408 bdev->stp_dlen = 0; in btmtkuart_open()
410 dev = &bdev->serdev->dev; in btmtkuart_open()
420 err = clk_prepare_enable(bdev->clk); in btmtkuart_open()
436 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev); in btmtkuart_close() local
437 struct device *dev = &bdev->serdev->dev; in btmtkuart_close()
440 clk_disable_unprepare(bdev->clk); in btmtkuart_close()
444 serdev_device_close(bdev->serdev); in btmtkuart_close()
451 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev); in btmtkuart_flush() local
454 serdev_device_write_flush(bdev->serdev); in btmtkuart_flush()
455 skb_queue_purge(&bdev->txq); in btmtkuart_flush()
457 cancel_work_sync(&bdev->tx_work); in btmtkuart_flush()
459 kfree_skb(bdev->rx_skb); in btmtkuart_flush()
460 bdev->rx_skb = NULL; in btmtkuart_flush()
462 bdev->stp_cursor = 2; in btmtkuart_flush()
463 bdev->stp_dlen = 0; in btmtkuart_flush()
514 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev); in btmtkuart_send_frame() local
540 skb_queue_tail(&bdev->txq, skb); in btmtkuart_send_frame()
542 btmtkuart_tx_wakeup(bdev); in btmtkuart_send_frame()
548 struct btmtkuart_dev *bdev; in btmtkuart_probe() local
551 bdev = devm_kzalloc(&serdev->dev, sizeof(*bdev), GFP_KERNEL); in btmtkuart_probe()
552 if (!bdev) in btmtkuart_probe()
555 bdev->clk = devm_clk_get(&serdev->dev, "ref"); in btmtkuart_probe()
556 if (IS_ERR(bdev->clk)) in btmtkuart_probe()
557 return PTR_ERR(bdev->clk); in btmtkuart_probe()
559 bdev->serdev = serdev; in btmtkuart_probe()
560 serdev_device_set_drvdata(serdev, bdev); in btmtkuart_probe()
564 INIT_WORK(&bdev->tx_work, btmtkuart_tx_work); in btmtkuart_probe()
565 skb_queue_head_init(&bdev->txq); in btmtkuart_probe()
574 bdev->hdev = hdev; in btmtkuart_probe()
577 hci_set_drvdata(hdev, bdev); in btmtkuart_probe()
601 struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev); in btmtkuart_remove() local
602 struct hci_dev *hdev = bdev->hdev; in btmtkuart_remove()