Lines Matching refs:bdev

83 #define btmtkuart_is_standalone(bdev)	\
84 ((bdev)->data->flags & BTMTKUART_FLAG_STANDALONE_HW)
85 #define btmtkuart_is_builtin_soc(bdev) \
86 !((bdev)->data->flags & BTMTKUART_FLAG_STANDALONE_HW)
91 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
119 set_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
123 clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
136 err = wait_on_bit_timeout(&bdev->tx_state, BTMTKUART_TX_WAIT_VND_EVT,
140 clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
146 clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
152 wmt_evt = (struct btmtk_hci_wmt_evt *)bdev->evt_skb->data;
184 kfree_skb(bdev->evt_skb);
185 bdev->evt_skb = NULL;
192 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
199 if (test_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state)) {
200 bdev->evt_skb = skb_clone(skb, GFP_KERNEL);
201 if (!bdev->evt_skb) {
213 &bdev->tx_state)) {
216 wake_up_bit(&bdev->tx_state, BTMTKUART_TX_WAIT_VND_EVT);
223 kfree_skb(bdev->evt_skb);
224 bdev->evt_skb = NULL;
238 struct btmtkuart_dev *bdev = container_of(work, struct btmtkuart_dev,
240 struct serdev_device *serdev = bdev->serdev;
241 struct hci_dev *hdev = bdev->hdev;
244 clear_bit(BTMTKUART_TX_STATE_WAKEUP, &bdev->tx_state);
247 struct sk_buff *skb = skb_dequeue(&bdev->txq);
259 skb_queue_head(&bdev->txq, skb);
278 if (!test_bit(BTMTKUART_TX_STATE_WAKEUP, &bdev->tx_state))
282 clear_bit(BTMTKUART_TX_STATE_ACTIVE, &bdev->tx_state);
285 static void btmtkuart_tx_wakeup(struct btmtkuart_dev *bdev)
287 if (test_and_set_bit(BTMTKUART_TX_STATE_ACTIVE, &bdev->tx_state))
288 set_bit(BTMTKUART_TX_STATE_WAKEUP, &bdev->tx_state);
290 schedule_work(&bdev->tx_work);
294 mtk_stp_split(struct btmtkuart_dev *bdev, const unsigned char *data, int count,
300 if (!bdev->stp_dlen && bdev->stp_cursor >= 6)
301 bdev->stp_cursor = 0;
304 while (bdev->stp_cursor < 6 && count > 0) {
305 bdev->stp_pad[bdev->stp_cursor] = *data;
306 bdev->stp_cursor++;
312 if (!bdev->stp_dlen && bdev->stp_cursor >= 6) {
313 shdr = (struct mtk_stp_hdr *)&bdev->stp_pad[2];
314 bdev->stp_dlen = be16_to_cpu(shdr->dlen) & 0x0fff;
317 if (shdr->prefix != 0x80 || bdev->stp_dlen > 2048) {
318 bt_dev_err(bdev->hdev, "stp format unexpect (%d, %d)",
319 shdr->prefix, bdev->stp_dlen);
320 bdev->stp_cursor = 2;
321 bdev->stp_dlen = 0;
330 *sz_h4 = min_t(int, count, bdev->stp_dlen);
333 bdev->stp_dlen -= *sz_h4;
341 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
362 p_h4 = mtk_stp_split(bdev, p_left, sz_left, &sz_h4);
370 bdev->rx_skb = h4_recv_buf(bdev->hdev, bdev->rx_skb, p_h4,
373 if (IS_ERR(bdev->rx_skb)) {
374 err = PTR_ERR(bdev->rx_skb);
375 bt_dev_err(bdev->hdev,
377 bdev->rx_skb = NULL;
389 struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev);
391 btmtkuart_recv(bdev->hdev, data, count);
393 bdev->hdev->stat.byte_rx += count;
400 struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev);
402 btmtkuart_tx_wakeup(bdev);
412 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
416 err = serdev_device_open(bdev->serdev);
419 dev_name(&bdev->serdev->dev));
423 if (btmtkuart_is_standalone(bdev)) {
424 if (bdev->curr_speed != bdev->desired_speed)
425 err = serdev_device_set_baudrate(bdev->serdev,
428 err = serdev_device_set_baudrate(bdev->serdev,
429 bdev->desired_speed);
433 dev_name(&bdev->serdev->dev));
437 serdev_device_set_flow_control(bdev->serdev, false);
440 bdev->stp_cursor = 2;
441 bdev->stp_dlen = 0;
443 dev = &bdev->serdev->dev;
451 err = clk_prepare_enable(bdev->clk);
462 serdev_device_close(bdev->serdev);
469 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
470 struct device *dev = &bdev->serdev->dev;
473 clk_disable_unprepare(bdev->clk);
477 serdev_device_close(bdev->serdev);
484 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
487 serdev_device_write_flush(bdev->serdev);
488 skb_queue_purge(&bdev->txq);
490 cancel_work_sync(&bdev->tx_work);
492 kfree_skb(bdev->rx_skb);
493 bdev->rx_skb = NULL;
495 bdev->stp_cursor = 2;
496 bdev->stp_dlen = 0;
525 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
534 baudrate = cpu_to_le32(bdev->desired_speed);
547 err = serdev_device_set_baudrate(bdev->serdev,
548 bdev->desired_speed);
555 serdev_device_set_flow_control(bdev->serdev, false);
559 err = serdev_device_write_buf(bdev->serdev, &param, sizeof(param));
563 serdev_device_wait_until_sent(bdev->serdev, 0);
582 bdev->curr_speed = bdev->desired_speed;
589 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
603 if (test_bit(BTMTKUART_REQUIRED_WAKEUP, &bdev->tx_state)) {
616 clear_bit(BTMTKUART_REQUIRED_WAKEUP, &bdev->tx_state);
619 if (btmtkuart_is_standalone(bdev))
641 err = btmtk_setup_firmware(hdev, bdev->data->fwname, mtk_hci_wmt_sync);
726 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
752 skb_queue_tail(&bdev->txq, skb);
754 btmtkuart_tx_wakeup(bdev);
760 struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev);
765 if (btmtkuart_is_standalone(bdev)) {
768 bdev->desired_speed = speed;
770 bdev->vcc = devm_regulator_get(&serdev->dev, "vcc");
771 if (IS_ERR(bdev->vcc)) {
772 err = PTR_ERR(bdev->vcc);
776 bdev->osc = devm_clk_get_optional(&serdev->dev, "osc");
777 if (IS_ERR(bdev->osc)) {
778 err = PTR_ERR(bdev->osc);
782 bdev->boot = devm_gpiod_get_optional(&serdev->dev, "boot",
784 if (IS_ERR(bdev->boot)) {
785 err = PTR_ERR(bdev->boot);
789 bdev->pinctrl = devm_pinctrl_get(&serdev->dev);
790 if (IS_ERR(bdev->pinctrl)) {
791 err = PTR_ERR(bdev->pinctrl);
795 bdev->pins_boot = pinctrl_lookup_state(bdev->pinctrl,
797 if (IS_ERR(bdev->pins_boot) && !bdev->boot) {
798 err = PTR_ERR(bdev->pins_boot);
804 bdev->pins_runtime = pinctrl_lookup_state(bdev->pinctrl,
806 if (IS_ERR(bdev->pins_runtime)) {
807 err = PTR_ERR(bdev->pins_runtime);
811 bdev->reset = devm_gpiod_get_optional(&serdev->dev, "reset",
813 if (IS_ERR(bdev->reset)) {
814 err = PTR_ERR(bdev->reset);
817 } else if (btmtkuart_is_builtin_soc(bdev)) {
818 bdev->clk = devm_clk_get(&serdev->dev, "ref");
819 if (IS_ERR(bdev->clk))
820 return PTR_ERR(bdev->clk);
828 struct btmtkuart_dev *bdev;
832 bdev = devm_kzalloc(&serdev->dev, sizeof(*bdev), GFP_KERNEL);
833 if (!bdev)
836 bdev->data = of_device_get_match_data(&serdev->dev);
837 if (!bdev->data)
840 bdev->serdev = serdev;
841 serdev_device_set_drvdata(serdev, bdev);
849 INIT_WORK(&bdev->tx_work, btmtkuart_tx_work);
850 skb_queue_head_init(&bdev->txq);
859 bdev->hdev = hdev;
862 hci_set_drvdata(hdev, bdev);
876 if (btmtkuart_is_standalone(bdev)) {
877 err = clk_prepare_enable(bdev->osc);
881 if (bdev->boot) {
882 gpiod_set_value_cansleep(bdev->boot, 1);
887 pinctrl_select_state(bdev->pinctrl, bdev->pins_boot);
891 err = regulator_enable(bdev->vcc);
898 if (bdev->reset) {
899 gpiod_set_value_cansleep(bdev->reset, 1);
901 gpiod_set_value_cansleep(bdev->reset, 0);
909 if (bdev->boot)
910 devm_gpiod_put(&serdev->dev, bdev->boot);
912 pinctrl_select_state(bdev->pinctrl, bdev->pins_runtime);
919 set_bit(BTMTKUART_REQUIRED_WAKEUP, &bdev->tx_state);
931 if (btmtkuart_is_standalone(bdev))
932 regulator_disable(bdev->vcc);
934 if (btmtkuart_is_standalone(bdev))
935 clk_disable_unprepare(bdev->osc);
944 struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev);
945 struct hci_dev *hdev = bdev->hdev;
947 if (btmtkuart_is_standalone(bdev)) {
948 regulator_disable(bdev->vcc);
949 clk_disable_unprepare(bdev->osc);