• Home
  • Raw
  • Download

Lines Matching refs:bdev

144 #define btmtkuart_is_standalone(bdev)	\  argument
145 ((bdev)->data->flags & BTMTKUART_FLAG_STANDALONE_HW)
146 #define btmtkuart_is_builtin_soc(bdev) \ argument
147 !((bdev)->data->flags & BTMTKUART_FLAG_STANDALONE_HW)
152 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev); in mtk_hci_wmt_sync() local
173 set_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state); in mtk_hci_wmt_sync()
177 clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state); in mtk_hci_wmt_sync()
190 err = wait_on_bit_timeout(&bdev->tx_state, BTMTKUART_TX_WAIT_VND_EVT, in mtk_hci_wmt_sync()
194 clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state); in mtk_hci_wmt_sync()
200 clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state); in mtk_hci_wmt_sync()
206 wmt_evt = (struct btmtk_hci_wmt_evt *)bdev->evt_skb->data; in mtk_hci_wmt_sync()
236 kfree_skb(bdev->evt_skb); in mtk_hci_wmt_sync()
237 bdev->evt_skb = NULL; in mtk_hci_wmt_sync()
320 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev); in btmtkuart_recv_event() local
334 if (test_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state)) { in btmtkuart_recv_event()
335 bdev->evt_skb = skb_clone(skb, GFP_KERNEL); in btmtkuart_recv_event()
336 if (!bdev->evt_skb) { in btmtkuart_recv_event()
348 &bdev->tx_state)) { in btmtkuart_recv_event()
351 wake_up_bit(&bdev->tx_state, BTMTKUART_TX_WAIT_VND_EVT); in btmtkuart_recv_event()
358 kfree_skb(bdev->evt_skb); in btmtkuart_recv_event()
359 bdev->evt_skb = NULL; in btmtkuart_recv_event()
373 struct btmtkuart_dev *bdev = container_of(work, struct btmtkuart_dev, in btmtkuart_tx_work() local
375 struct serdev_device *serdev = bdev->serdev; in btmtkuart_tx_work()
376 struct hci_dev *hdev = bdev->hdev; in btmtkuart_tx_work()
379 clear_bit(BTMTKUART_TX_STATE_WAKEUP, &bdev->tx_state); in btmtkuart_tx_work()
382 struct sk_buff *skb = skb_dequeue(&bdev->txq); in btmtkuart_tx_work()
394 skb_queue_head(&bdev->txq, skb); in btmtkuart_tx_work()
413 if (!test_bit(BTMTKUART_TX_STATE_WAKEUP, &bdev->tx_state)) in btmtkuart_tx_work()
417 clear_bit(BTMTKUART_TX_STATE_ACTIVE, &bdev->tx_state); in btmtkuart_tx_work()
420 static void btmtkuart_tx_wakeup(struct btmtkuart_dev *bdev) in btmtkuart_tx_wakeup() argument
422 if (test_and_set_bit(BTMTKUART_TX_STATE_ACTIVE, &bdev->tx_state)) in btmtkuart_tx_wakeup()
423 set_bit(BTMTKUART_TX_STATE_WAKEUP, &bdev->tx_state); in btmtkuart_tx_wakeup()
425 schedule_work(&bdev->tx_work); in btmtkuart_tx_wakeup()
429 mtk_stp_split(struct btmtkuart_dev *bdev, const unsigned char *data, int count, in mtk_stp_split() argument
435 if (!bdev->stp_dlen && bdev->stp_cursor >= 6) in mtk_stp_split()
436 bdev->stp_cursor = 0; in mtk_stp_split()
439 while (bdev->stp_cursor < 6 && count > 0) { in mtk_stp_split()
440 bdev->stp_pad[bdev->stp_cursor] = *data; in mtk_stp_split()
441 bdev->stp_cursor++; in mtk_stp_split()
447 if (!bdev->stp_dlen && bdev->stp_cursor >= 6) { in mtk_stp_split()
448 shdr = (struct mtk_stp_hdr *)&bdev->stp_pad[2]; in mtk_stp_split()
449 bdev->stp_dlen = be16_to_cpu(shdr->dlen) & 0x0fff; in mtk_stp_split()
452 if (shdr->prefix != 0x80 || bdev->stp_dlen > 2048) { in mtk_stp_split()
453 bt_dev_err(bdev->hdev, "stp format unexpect (%d, %d)", in mtk_stp_split()
454 shdr->prefix, bdev->stp_dlen); in mtk_stp_split()
455 bdev->stp_cursor = 2; in mtk_stp_split()
456 bdev->stp_dlen = 0; in mtk_stp_split()
465 *sz_h4 = min_t(int, count, bdev->stp_dlen); in mtk_stp_split()
468 bdev->stp_dlen -= *sz_h4; in mtk_stp_split()
476 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev); in btmtkuart_recv() local
497 p_h4 = mtk_stp_split(bdev, p_left, sz_left, &sz_h4); in btmtkuart_recv()
505 bdev->rx_skb = h4_recv_buf(bdev->hdev, bdev->rx_skb, p_h4, in btmtkuart_recv()
508 if (IS_ERR(bdev->rx_skb)) { in btmtkuart_recv()
509 err = PTR_ERR(bdev->rx_skb); in btmtkuart_recv()
510 bt_dev_err(bdev->hdev, in btmtkuart_recv()
512 bdev->rx_skb = NULL; in btmtkuart_recv()
524 struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev); in btmtkuart_receive_buf() local
526 btmtkuart_recv(bdev->hdev, data, count); in btmtkuart_receive_buf()
528 bdev->hdev->stat.byte_rx += count; in btmtkuart_receive_buf()
535 struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev); in btmtkuart_write_wakeup() local
537 btmtkuart_tx_wakeup(bdev); in btmtkuart_write_wakeup()
547 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev); in btmtkuart_open() local
551 err = serdev_device_open(bdev->serdev); in btmtkuart_open()
554 dev_name(&bdev->serdev->dev)); in btmtkuart_open()
558 if (btmtkuart_is_standalone(bdev)) { in btmtkuart_open()
559 if (bdev->curr_speed != bdev->desired_speed) in btmtkuart_open()
560 err = serdev_device_set_baudrate(bdev->serdev, in btmtkuart_open()
563 err = serdev_device_set_baudrate(bdev->serdev, in btmtkuart_open()
564 bdev->desired_speed); in btmtkuart_open()
568 dev_name(&bdev->serdev->dev)); in btmtkuart_open()
572 serdev_device_set_flow_control(bdev->serdev, false); in btmtkuart_open()
575 bdev->stp_cursor = 2; in btmtkuart_open()
576 bdev->stp_dlen = 0; in btmtkuart_open()
578 dev = &bdev->serdev->dev; in btmtkuart_open()
586 err = clk_prepare_enable(bdev->clk); in btmtkuart_open()
597 serdev_device_close(bdev->serdev); in btmtkuart_open()
604 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev); in btmtkuart_close() local
605 struct device *dev = &bdev->serdev->dev; in btmtkuart_close()
608 clk_disable_unprepare(bdev->clk); in btmtkuart_close()
612 serdev_device_close(bdev->serdev); in btmtkuart_close()
619 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev); in btmtkuart_flush() local
622 serdev_device_write_flush(bdev->serdev); in btmtkuart_flush()
623 skb_queue_purge(&bdev->txq); in btmtkuart_flush()
625 cancel_work_sync(&bdev->tx_work); in btmtkuart_flush()
627 kfree_skb(bdev->rx_skb); in btmtkuart_flush()
628 bdev->rx_skb = NULL; in btmtkuart_flush()
630 bdev->stp_cursor = 2; in btmtkuart_flush()
631 bdev->stp_dlen = 0; in btmtkuart_flush()
660 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev); in btmtkuart_change_baudrate() local
669 baudrate = cpu_to_le32(bdev->desired_speed); in btmtkuart_change_baudrate()
682 err = serdev_device_set_baudrate(bdev->serdev, in btmtkuart_change_baudrate()
683 bdev->desired_speed); in btmtkuart_change_baudrate()
690 serdev_device_set_flow_control(bdev->serdev, false); in btmtkuart_change_baudrate()
694 err = serdev_device_write_buf(bdev->serdev, &param, sizeof(param)); in btmtkuart_change_baudrate()
698 serdev_device_wait_until_sent(bdev->serdev, 0); in btmtkuart_change_baudrate()
717 bdev->curr_speed = bdev->desired_speed; in btmtkuart_change_baudrate()
724 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev); in btmtkuart_setup() local
738 if (test_bit(BTMTKUART_REQUIRED_WAKEUP, &bdev->tx_state)) { in btmtkuart_setup()
751 clear_bit(BTMTKUART_REQUIRED_WAKEUP, &bdev->tx_state); in btmtkuart_setup()
754 if (btmtkuart_is_standalone(bdev)) in btmtkuart_setup()
776 err = mtk_setup_firmware(hdev, bdev->data->fwname); in btmtkuart_setup()
861 struct btmtkuart_dev *bdev = hci_get_drvdata(hdev); in btmtkuart_send_frame() local
887 skb_queue_tail(&bdev->txq, skb); in btmtkuart_send_frame()
889 btmtkuart_tx_wakeup(bdev); in btmtkuart_send_frame()
895 struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev); in btmtkuart_parse_dt() local
900 if (btmtkuart_is_standalone(bdev)) { in btmtkuart_parse_dt()
903 bdev->desired_speed = speed; in btmtkuart_parse_dt()
905 bdev->vcc = devm_regulator_get(&serdev->dev, "vcc"); in btmtkuart_parse_dt()
906 if (IS_ERR(bdev->vcc)) { in btmtkuart_parse_dt()
907 err = PTR_ERR(bdev->vcc); in btmtkuart_parse_dt()
911 bdev->osc = devm_clk_get_optional(&serdev->dev, "osc"); in btmtkuart_parse_dt()
912 if (IS_ERR(bdev->osc)) { in btmtkuart_parse_dt()
913 err = PTR_ERR(bdev->osc); in btmtkuart_parse_dt()
917 bdev->boot = devm_gpiod_get_optional(&serdev->dev, "boot", in btmtkuart_parse_dt()
919 if (IS_ERR(bdev->boot)) { in btmtkuart_parse_dt()
920 err = PTR_ERR(bdev->boot); in btmtkuart_parse_dt()
924 bdev->pinctrl = devm_pinctrl_get(&serdev->dev); in btmtkuart_parse_dt()
925 if (IS_ERR(bdev->pinctrl)) { in btmtkuart_parse_dt()
926 err = PTR_ERR(bdev->pinctrl); in btmtkuart_parse_dt()
930 bdev->pins_boot = pinctrl_lookup_state(bdev->pinctrl, in btmtkuart_parse_dt()
932 if (IS_ERR(bdev->pins_boot) && !bdev->boot) { in btmtkuart_parse_dt()
933 err = PTR_ERR(bdev->pins_boot); in btmtkuart_parse_dt()
939 bdev->pins_runtime = pinctrl_lookup_state(bdev->pinctrl, in btmtkuart_parse_dt()
941 if (IS_ERR(bdev->pins_runtime)) { in btmtkuart_parse_dt()
942 err = PTR_ERR(bdev->pins_runtime); in btmtkuart_parse_dt()
946 bdev->reset = devm_gpiod_get_optional(&serdev->dev, "reset", in btmtkuart_parse_dt()
948 if (IS_ERR(bdev->reset)) { in btmtkuart_parse_dt()
949 err = PTR_ERR(bdev->reset); in btmtkuart_parse_dt()
952 } else if (btmtkuart_is_builtin_soc(bdev)) { in btmtkuart_parse_dt()
953 bdev->clk = devm_clk_get(&serdev->dev, "ref"); in btmtkuart_parse_dt()
954 if (IS_ERR(bdev->clk)) in btmtkuart_parse_dt()
955 return PTR_ERR(bdev->clk); in btmtkuart_parse_dt()
963 struct btmtkuart_dev *bdev; in btmtkuart_probe() local
967 bdev = devm_kzalloc(&serdev->dev, sizeof(*bdev), GFP_KERNEL); in btmtkuart_probe()
968 if (!bdev) in btmtkuart_probe()
971 bdev->data = of_device_get_match_data(&serdev->dev); in btmtkuart_probe()
972 if (!bdev->data) in btmtkuart_probe()
975 bdev->serdev = serdev; in btmtkuart_probe()
976 serdev_device_set_drvdata(serdev, bdev); in btmtkuart_probe()
984 INIT_WORK(&bdev->tx_work, btmtkuart_tx_work); in btmtkuart_probe()
985 skb_queue_head_init(&bdev->txq); in btmtkuart_probe()
994 bdev->hdev = hdev; in btmtkuart_probe()
997 hci_set_drvdata(hdev, bdev); in btmtkuart_probe()
1010 if (btmtkuart_is_standalone(bdev)) { in btmtkuart_probe()
1011 err = clk_prepare_enable(bdev->osc); in btmtkuart_probe()
1015 if (bdev->boot) { in btmtkuart_probe()
1016 gpiod_set_value_cansleep(bdev->boot, 1); in btmtkuart_probe()
1021 pinctrl_select_state(bdev->pinctrl, bdev->pins_boot); in btmtkuart_probe()
1025 err = regulator_enable(bdev->vcc); in btmtkuart_probe()
1032 if (bdev->reset) { in btmtkuart_probe()
1033 gpiod_set_value_cansleep(bdev->reset, 1); in btmtkuart_probe()
1035 gpiod_set_value_cansleep(bdev->reset, 0); in btmtkuart_probe()
1043 if (bdev->boot) in btmtkuart_probe()
1044 devm_gpiod_put(&serdev->dev, bdev->boot); in btmtkuart_probe()
1046 pinctrl_select_state(bdev->pinctrl, bdev->pins_runtime); in btmtkuart_probe()
1053 set_bit(BTMTKUART_REQUIRED_WAKEUP, &bdev->tx_state); in btmtkuart_probe()
1065 if (btmtkuart_is_standalone(bdev)) in btmtkuart_probe()
1066 regulator_disable(bdev->vcc); in btmtkuart_probe()
1068 if (btmtkuart_is_standalone(bdev)) in btmtkuart_probe()
1069 clk_disable_unprepare(bdev->osc); in btmtkuart_probe()
1078 struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev); in btmtkuart_remove() local
1079 struct hci_dev *hdev = bdev->hdev; in btmtkuart_remove()
1081 if (btmtkuart_is_standalone(bdev)) { in btmtkuart_remove()
1082 regulator_disable(bdev->vcc); in btmtkuart_remove()
1083 clk_disable_unprepare(bdev->osc); in btmtkuart_remove()