Lines Matching refs:btdev

164 	struct nokia_bt_dev *btdev = data;
165 struct device *dev = &btdev->serdev->dev;
166 int wake_state = gpiod_get_value(btdev->wakeup_host);
168 if (btdev->rx_enabled == wake_state)
176 btdev->rx_enabled = wake_state;
183 struct nokia_bt_dev *btdev = hu->priv;
184 struct device *dev = &btdev->serdev->dev;
188 gpiod_set_value_cansleep(btdev->reset, 1);
189 gpiod_set_value_cansleep(btdev->wakeup_bt, 1);
194 err = gpiod_get_value_cansleep(btdev->wakeup_host);
201 serdev_device_write_flush(btdev->serdev);
204 nokia_flow_control(btdev->serdev, false);
205 serdev_device_set_baudrate(btdev->serdev, INIT_BAUD_RATE);
207 gpiod_set_value_cansleep(btdev->reset, 0);
210 err = serdev_device_wait_for_cts(btdev->serdev, true, 200);
216 nokia_flow_control(btdev->serdev, true);
223 struct nokia_bt_dev *btdev = hu->priv;
224 struct device *dev = &btdev->serdev->dev;
230 init_completion(&btdev->init_completion);
250 if (!wait_for_completion_interruptible_timeout(&btdev->init_completion,
255 if (btdev->init_error < 0)
256 return btdev->init_error;
263 struct nokia_bt_dev *btdev = hu->priv;
264 struct device *dev = &btdev->serdev->dev;
269 u16 baud = DIV_ROUND_CLOSEST(btdev->sysclk_speed * 10, SETUP_BAUD_RATE);
270 int sysclk = btdev->sysclk_speed / 1000;
290 btdev->init_error = 0;
291 init_completion(&btdev->init_completion);
298 if (!wait_for_completion_interruptible_timeout(&btdev->init_completion,
303 if (btdev->init_error < 0)
304 return btdev->init_error;
310 nokia_flow_control(btdev->serdev, false);
311 serdev_device_set_baudrate(btdev->serdev, SETUP_BAUD_RATE);
312 err = serdev_device_wait_for_cts(btdev->serdev, true, 200);
317 nokia_flow_control(btdev->serdev, true);
326 struct nokia_bt_dev *btdev = hu->priv;
327 struct device *dev = &btdev->serdev->dev;
336 if (btdev->man_id == NOKIA_ID_BCM2048) {
338 } else if (btdev->man_id == NOKIA_ID_TI1271) {
395 struct nokia_bt_dev *btdev = hu->priv;
396 struct device *dev = &btdev->serdev->dev;
399 btdev->initialized = false;
401 nokia_flow_control(btdev->serdev, false);
405 if (btdev->tx_enabled) {
406 gpiod_set_value_cansleep(btdev->wakeup_bt, 0);
407 pm_runtime_put(&btdev->serdev->dev);
408 btdev->tx_enabled = false;
441 nokia_flow_control(btdev->serdev, false);
442 serdev_device_set_baudrate(btdev->serdev, MAX_BAUD_RATE);
443 nokia_flow_control(btdev->serdev, true);
445 if (btdev->man_id == NOKIA_ID_BCM2048) {
453 gpiod_set_value_cansleep(btdev->wakeup_bt, 0);
455 btdev->tx_enabled = false;
456 btdev->initialized = true;
478 struct nokia_bt_dev *btdev = hu->priv;
480 dev_dbg(&btdev->serdev->dev, "flush device");
482 skb_queue_purge(&btdev->txq);
489 struct nokia_bt_dev *btdev = hu->priv;
490 struct device *dev = &btdev->serdev->dev;
494 btdev->initialized = false;
496 skb_queue_purge(&btdev->txq);
498 kfree_skb(btdev->rx_skb);
501 gpiod_set_value(btdev->reset, 1);
502 gpiod_set_value(btdev->wakeup_bt, 0);
504 pm_runtime_disable(&btdev->serdev->dev);
512 struct nokia_bt_dev *btdev = hu->priv;
526 skb_queue_tail(&btdev->txq, skb);
535 struct nokia_bt_dev *btdev = hu->priv;
536 struct device *dev = &btdev->serdev->dev;
543 btdev->init_error = -EIO;
552 btdev->init_error = -EINVAL;
557 btdev->man_id = evt->man_id;
558 btdev->ver_id = evt->ver_id;
564 complete(&btdev->init_completion);
572 struct nokia_bt_dev *btdev = hu->priv;
573 struct device *dev = &btdev->serdev->dev;
581 btdev->init_error = -EIO;
591 btdev->init_error = -EINVAL;
599 complete(&btdev->init_completion);
625 struct nokia_bt_dev *btdev = hu->priv;
626 struct device *dev = &btdev->serdev->dev;
632 btdev->rx_skb = h4_recv_buf(hu->hdev, btdev->rx_skb, data, count,
634 if (IS_ERR(btdev->rx_skb)) {
635 err = PTR_ERR(btdev->rx_skb);
637 btdev->rx_skb = NULL;
646 struct nokia_bt_dev *btdev = hu->priv;
647 struct device *dev = &btdev->serdev->dev;
648 struct sk_buff *result = skb_dequeue(&btdev->txq);
650 if (!btdev->initialized)
653 if (btdev->tx_enabled == !!result)
658 gpiod_set_value_cansleep(btdev->wakeup_bt, 1);
660 serdev_device_wait_until_sent(btdev->serdev, 0);
661 gpiod_set_value_cansleep(btdev->wakeup_bt, 0);
665 btdev->tx_enabled = !!result;
686 struct nokia_bt_dev *btdev;
690 btdev = devm_kzalloc(dev, sizeof(*btdev), GFP_KERNEL);
691 if (!btdev)
694 btdev->hu.serdev = btdev->serdev = serdev;
695 serdev_device_set_drvdata(serdev, btdev);
697 btdev->reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
698 if (IS_ERR(btdev->reset)) {
699 err = PTR_ERR(btdev->reset);
704 btdev->wakeup_host = devm_gpiod_get(dev, "host-wakeup", GPIOD_IN);
705 if (IS_ERR(btdev->wakeup_host)) {
706 err = PTR_ERR(btdev->wakeup_host);
711 btdev->wake_irq = gpiod_to_irq(btdev->wakeup_host);
713 err = devm_request_threaded_irq(dev, btdev->wake_irq, NULL,
716 "wakeup", btdev);
722 btdev->wakeup_bt = devm_gpiod_get(dev, "bluetooth-wakeup",
724 if (IS_ERR(btdev->wakeup_bt)) {
725 err = PTR_ERR(btdev->wakeup_bt);
742 btdev->sysclk_speed = clk_get_rate(sysclk);
745 skb_queue_head_init(&btdev->txq);
747 btdev->hu.priv = btdev;
748 btdev->hu.alignment = 2; /* Nokia H4+ is word aligned */
750 err = hci_uart_register_device(&btdev->hu, &nokia_proto);
761 struct nokia_bt_dev *btdev = serdev_device_get_drvdata(serdev);
763 hci_uart_unregister_device(&btdev->hu);