Lines Matching refs:bdev
144 #define btmtkuart_is_standalone(bdev) \
145 ((bdev)->data->flags & BTMTKUART_FLAG_STANDALONE_HW)
146 #define btmtkuart_is_builtin_soc(bdev) \
147 !((bdev)->data->flags & BTMTKUART_FLAG_STANDALONE_HW)
152 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
173 set_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
177 clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
190 err = wait_on_bit_timeout(&bdev->tx_state, BTMTKUART_TX_WAIT_VND_EVT,
194 clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
200 clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
206 wmt_evt = (struct btmtk_hci_wmt_evt *)bdev->evt_skb->data;
236 kfree_skb(bdev->evt_skb);
237 bdev->evt_skb = NULL;
320 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
334 if (test_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state)) {
335 bdev->evt_skb = skb_clone(skb, GFP_KERNEL);
336 if (!bdev->evt_skb) {
348 &bdev->tx_state)) {
351 wake_up_bit(&bdev->tx_state, BTMTKUART_TX_WAIT_VND_EVT);
358 kfree_skb(bdev->evt_skb);
359 bdev->evt_skb = NULL;
373 struct btmtkuart_dev *bdev = container_of(work, struct btmtkuart_dev,
375 struct serdev_device *serdev = bdev->serdev;
376 struct hci_dev *hdev = bdev->hdev;
379 clear_bit(BTMTKUART_TX_STATE_WAKEUP, &bdev->tx_state);
382 struct sk_buff *skb = skb_dequeue(&bdev->txq);
394 skb_queue_head(&bdev->txq, skb);
413 if (!test_bit(BTMTKUART_TX_STATE_WAKEUP, &bdev->tx_state))
417 clear_bit(BTMTKUART_TX_STATE_ACTIVE, &bdev->tx_state);
420 static void btmtkuart_tx_wakeup(struct btmtkuart_dev *bdev)
422 if (test_and_set_bit(BTMTKUART_TX_STATE_ACTIVE, &bdev->tx_state))
423 set_bit(BTMTKUART_TX_STATE_WAKEUP, &bdev->tx_state);
425 schedule_work(&bdev->tx_work);
429 mtk_stp_split(struct btmtkuart_dev *bdev, const unsigned char *data, int count,
435 if (!bdev->stp_dlen && bdev->stp_cursor >= 6)
436 bdev->stp_cursor = 0;
439 while (bdev->stp_cursor < 6 && count > 0) {
440 bdev->stp_pad[bdev->stp_cursor] = *data;
441 bdev->stp_cursor++;
447 if (!bdev->stp_dlen && bdev->stp_cursor >= 6) {
448 shdr = (struct mtk_stp_hdr *)&bdev->stp_pad[2];
449 bdev->stp_dlen = be16_to_cpu(shdr->dlen) & 0x0fff;
452 if (shdr->prefix != 0x80 || bdev->stp_dlen > 2048) {
453 bt_dev_err(bdev->hdev, "stp format unexpect (%d, %d)",
454 shdr->prefix, bdev->stp_dlen);
455 bdev->stp_cursor = 2;
456 bdev->stp_dlen = 0;
465 *sz_h4 = min_t(int, count, bdev->stp_dlen);
468 bdev->stp_dlen -= *sz_h4;
476 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
497 p_h4 = mtk_stp_split(bdev, p_left, sz_left, &sz_h4);
505 bdev->rx_skb = h4_recv_buf(bdev->hdev, bdev->rx_skb, p_h4,
508 if (IS_ERR(bdev->rx_skb)) {
509 err = PTR_ERR(bdev->rx_skb);
510 bt_dev_err(bdev->hdev,
512 bdev->rx_skb = NULL;
524 struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev);
526 btmtkuart_recv(bdev->hdev, data, count);
528 bdev->hdev->stat.byte_rx += count;
535 struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev);
537 btmtkuart_tx_wakeup(bdev);
547 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
551 err = serdev_device_open(bdev->serdev);
554 dev_name(&bdev->serdev->dev));
558 if (btmtkuart_is_standalone(bdev)) {
559 if (bdev->curr_speed != bdev->desired_speed)
560 err = serdev_device_set_baudrate(bdev->serdev,
563 err = serdev_device_set_baudrate(bdev->serdev,
564 bdev->desired_speed);
568 dev_name(&bdev->serdev->dev));
572 serdev_device_set_flow_control(bdev->serdev, false);
575 bdev->stp_cursor = 2;
576 bdev->stp_dlen = 0;
578 dev = &bdev->serdev->dev;
588 err = clk_prepare_enable(bdev->clk);
599 serdev_device_close(bdev->serdev);
606 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
607 struct device *dev = &bdev->serdev->dev;
610 clk_disable_unprepare(bdev->clk);
614 serdev_device_close(bdev->serdev);
621 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
624 serdev_device_write_flush(bdev->serdev);
625 skb_queue_purge(&bdev->txq);
627 cancel_work_sync(&bdev->tx_work);
629 kfree_skb(bdev->rx_skb);
630 bdev->rx_skb = NULL;
632 bdev->stp_cursor = 2;
633 bdev->stp_dlen = 0;
662 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
671 baudrate = cpu_to_le32(bdev->desired_speed);
684 err = serdev_device_set_baudrate(bdev->serdev,
685 bdev->desired_speed);
692 serdev_device_set_flow_control(bdev->serdev, false);
696 err = serdev_device_write_buf(bdev->serdev, ¶m, sizeof(param));
700 serdev_device_wait_until_sent(bdev->serdev, 0);
719 bdev->curr_speed = bdev->desired_speed;
726 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
740 if (test_bit(BTMTKUART_REQUIRED_WAKEUP, &bdev->tx_state)) {
753 clear_bit(BTMTKUART_REQUIRED_WAKEUP, &bdev->tx_state);
756 if (btmtkuart_is_standalone(bdev))
778 err = mtk_setup_firmware(hdev, bdev->data->fwname);
863 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
889 skb_queue_tail(&bdev->txq, skb);
891 btmtkuart_tx_wakeup(bdev);
897 struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev);
902 if (btmtkuart_is_standalone(bdev)) {
905 bdev->desired_speed = speed;
907 bdev->vcc = devm_regulator_get(&serdev->dev, "vcc");
908 if (IS_ERR(bdev->vcc)) {
909 err = PTR_ERR(bdev->vcc);
913 bdev->osc = devm_clk_get_optional(&serdev->dev, "osc");
914 if (IS_ERR(bdev->osc)) {
915 err = PTR_ERR(bdev->osc);
919 bdev->boot = devm_gpiod_get_optional(&serdev->dev, "boot",
921 if (IS_ERR(bdev->boot)) {
922 err = PTR_ERR(bdev->boot);
926 bdev->pinctrl = devm_pinctrl_get(&serdev->dev);
927 if (IS_ERR(bdev->pinctrl)) {
928 err = PTR_ERR(bdev->pinctrl);
932 bdev->pins_boot = pinctrl_lookup_state(bdev->pinctrl,
934 if (IS_ERR(bdev->pins_boot) && !bdev->boot) {
935 err = PTR_ERR(bdev->pins_boot);
941 bdev->pins_runtime = pinctrl_lookup_state(bdev->pinctrl,
943 if (IS_ERR(bdev->pins_runtime)) {
944 err = PTR_ERR(bdev->pins_runtime);
948 bdev->reset = devm_gpiod_get_optional(&serdev->dev, "reset",
950 if (IS_ERR(bdev->reset)) {
951 err = PTR_ERR(bdev->reset);
954 } else if (btmtkuart_is_builtin_soc(bdev)) {
955 bdev->clk = devm_clk_get(&serdev->dev, "ref");
956 if (IS_ERR(bdev->clk))
957 return PTR_ERR(bdev->clk);
965 struct btmtkuart_dev *bdev;
969 bdev = devm_kzalloc(&serdev->dev, sizeof(*bdev), GFP_KERNEL);
970 if (!bdev)
973 bdev->data = of_device_get_match_data(&serdev->dev);
974 if (!bdev->data)
977 bdev->serdev = serdev;
978 serdev_device_set_drvdata(serdev, bdev);
986 INIT_WORK(&bdev->tx_work, btmtkuart_tx_work);
987 skb_queue_head_init(&bdev->txq);
996 bdev->hdev = hdev;
999 hci_set_drvdata(hdev, bdev);
1012 if (btmtkuart_is_standalone(bdev)) {
1013 err = clk_prepare_enable(bdev->osc);
1017 if (bdev->boot) {
1018 gpiod_set_value_cansleep(bdev->boot, 1);
1023 pinctrl_select_state(bdev->pinctrl, bdev->pins_boot);
1027 err = regulator_enable(bdev->vcc);
1034 if (bdev->reset) {
1035 gpiod_set_value_cansleep(bdev->reset, 1);
1037 gpiod_set_value_cansleep(bdev->reset, 0);
1045 if (bdev->boot)
1046 devm_gpiod_put(&serdev->dev, bdev->boot);
1048 pinctrl_select_state(bdev->pinctrl, bdev->pins_runtime);
1055 set_bit(BTMTKUART_REQUIRED_WAKEUP, &bdev->tx_state);
1067 if (btmtkuart_is_standalone(bdev))
1068 regulator_disable(bdev->vcc);
1070 if (btmtkuart_is_standalone(bdev))
1071 clk_disable_unprepare(bdev->osc);
1080 struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev);
1081 struct hci_dev *hdev = bdev->hdev;
1083 if (btmtkuart_is_standalone(bdev)) {
1084 regulator_disable(bdev->vcc);
1085 clk_disable_unprepare(bdev->osc);