Lines Matching +full:battery +full:- +full:powered
1 // SPDX-License-Identifier: GPL-2.0-or-later
9 * Copyright (C) 2000-2001 Qualcomm Incorporated
10 * Copyright (C) 2002-2003 Maxim Krasnyansky <maxk@qualcomm.com>
11 * Copyright (C) 2004-2005 Marcel Holtmann <marcel@holtmann.org>
26 struct hci_dev *hdev = hu->hdev; in hci_uart_tx_complete()
31 hdev->stat.cmd_tx++; in hci_uart_tx_complete()
35 hdev->stat.acl_tx++; in hci_uart_tx_complete()
39 hdev->stat.sco_tx++; in hci_uart_tx_complete()
46 struct sk_buff *skb = hu->tx_skb; in hci_uart_dequeue()
49 if (test_bit(HCI_UART_PROTO_READY, &hu->flags)) in hci_uart_dequeue()
50 skb = hu->proto->dequeue(hu); in hci_uart_dequeue()
52 hu->tx_skb = NULL; in hci_uart_dequeue()
60 struct serdev_device *serdev = hu->serdev; in hci_uart_write_work()
61 struct hci_dev *hdev = hu->hdev; in hci_uart_write_work()
65 * should we cope with bad skbs or ->write() returning an error value? in hci_uart_write_work()
68 clear_bit(HCI_UART_TX_WAKEUP, &hu->tx_state); in hci_uart_write_work()
74 skb->data, skb->len); in hci_uart_write_work()
75 hdev->stat.byte_tx += len; in hci_uart_write_work()
78 if (skb->len) { in hci_uart_write_work()
79 hu->tx_skb = skb; in hci_uart_write_work()
87 clear_bit(HCI_UART_SENDING, &hu->tx_state); in hci_uart_write_work()
88 } while (test_bit(HCI_UART_TX_WAKEUP, &hu->tx_state)); in hci_uart_write_work()
91 /* ------- Interface to HCI layer ------ */
98 BT_DBG("hdev %p serdev %p", hdev, hu->serdev); in hci_uart_flush()
100 if (hu->tx_skb) { in hci_uart_flush()
101 kfree_skb(hu->tx_skb); hu->tx_skb = NULL; in hci_uart_flush()
105 serdev_device_write_flush(hu->serdev); in hci_uart_flush()
107 if (test_bit(HCI_UART_PROTO_READY, &hu->flags)) in hci_uart_flush()
108 hu->proto->flush(hu); in hci_uart_flush()
119 BT_DBG("%s %p", hdev->name, hdev); in hci_uart_open()
125 if (!test_bit(HCI_UART_PROTO_READY, &hu->flags)) { in hci_uart_open()
126 err = serdev_device_open(hu->serdev); in hci_uart_open()
129 set_bit(HCI_UART_PROTO_READY, &hu->flags); in hci_uart_open()
133 hdev->flush = hci_uart_flush; in hci_uart_open()
145 if (!test_bit(HCI_UART_PROTO_READY, &hu->flags)) in hci_uart_close()
149 hdev->flush = NULL; in hci_uart_close()
152 * BT SOC is completely powered OFF during BT OFF, holding port in hci_uart_close()
153 * open may drain the battery. in hci_uart_close()
156 clear_bit(HCI_UART_PROTO_READY, &hu->flags); in hci_uart_close()
157 serdev_device_close(hu->serdev); in hci_uart_close()
168 BT_DBG("%s: type %d len %d", hdev->name, hci_skb_pkt_type(skb), in hci_uart_send_frame()
169 skb->len); in hci_uart_send_frame()
171 hu->proto->enqueue(hu, skb); in hci_uart_send_frame()
187 if (hu->init_speed) in hci_uart_setup()
188 speed = hu->init_speed; in hci_uart_setup()
189 else if (hu->proto->init_speed) in hci_uart_setup()
190 speed = hu->proto->init_speed; in hci_uart_setup()
195 serdev_device_set_baudrate(hu->serdev, speed); in hci_uart_setup()
198 if (hu->oper_speed) in hci_uart_setup()
199 speed = hu->oper_speed; in hci_uart_setup()
200 else if (hu->proto->oper_speed) in hci_uart_setup()
201 speed = hu->proto->oper_speed; in hci_uart_setup()
205 if (hu->proto->set_baudrate && speed) { in hci_uart_setup()
206 err = hu->proto->set_baudrate(hu, speed); in hci_uart_setup()
210 serdev_device_set_baudrate(hu->serdev, speed); in hci_uart_setup()
213 if (hu->proto->setup) in hci_uart_setup()
214 return hu->proto->setup(hu); in hci_uart_setup()
216 if (!test_bit(HCI_UART_VND_DETECT, &hu->hdev_flags)) in hci_uart_setup()
227 if (skb->len != sizeof(*ver)) in hci_uart_setup()
243 /** hci_uart_write_wakeup - transmit buffer wakeup
255 if (!hu || serdev != hu->serdev) { in hci_uart_write_wakeup()
260 if (test_bit(HCI_UART_PROTO_READY, &hu->flags)) in hci_uart_write_wakeup()
264 /** hci_uart_receive_buf - receive buffer wakeup
279 if (!hu || serdev != hu->serdev) { in hci_uart_receive_buf()
284 if (!test_bit(HCI_UART_PROTO_READY, &hu->flags)) in hci_uart_receive_buf()
290 hu->proto->recv(hu, data, count); in hci_uart_receive_buf()
292 if (hu->hdev) in hci_uart_receive_buf()
293 hu->hdev->stat.byte_rx += count; in hci_uart_receive_buf()
312 serdev_device_set_client_ops(hu->serdev, &hci_serdev_client_ops); in hci_uart_register_device_priv()
314 if (percpu_init_rwsem(&hu->proto_lock)) in hci_uart_register_device_priv()
315 return -ENOMEM; in hci_uart_register_device_priv()
317 err = serdev_device_open(hu->serdev); in hci_uart_register_device_priv()
321 err = p->open(hu); in hci_uart_register_device_priv()
325 hu->proto = p; in hci_uart_register_device_priv()
326 set_bit(HCI_UART_PROTO_READY, &hu->flags); in hci_uart_register_device_priv()
332 err = -ENOMEM; in hci_uart_register_device_priv()
336 hu->hdev = hdev; in hci_uart_register_device_priv()
338 hdev->bus = HCI_UART; in hci_uart_register_device_priv()
341 INIT_WORK(&hu->init_ready, hci_uart_init_work); in hci_uart_register_device_priv()
342 INIT_WORK(&hu->write_work, hci_uart_write_work); in hci_uart_register_device_priv()
348 if (hu->proto->setup) in hci_uart_register_device_priv()
349 hdev->manufacturer = hu->proto->manufacturer; in hci_uart_register_device_priv()
351 hdev->open = hci_uart_open; in hci_uart_register_device_priv()
352 hdev->close = hci_uart_close; in hci_uart_register_device_priv()
353 hdev->flush = hci_uart_flush; in hci_uart_register_device_priv()
354 hdev->send = hci_uart_send_frame; in hci_uart_register_device_priv()
355 hdev->setup = hci_uart_setup; in hci_uart_register_device_priv()
356 if (!hdev->wakeup) in hci_uart_register_device_priv()
357 hdev->wakeup = hci_uart_wakeup; in hci_uart_register_device_priv()
358 SET_HCIDEV_DEV(hdev, &hu->serdev->dev); in hci_uart_register_device_priv()
360 if (test_bit(HCI_UART_NO_SUSPEND_NOTIFIER, &hu->flags)) in hci_uart_register_device_priv()
363 if (test_bit(HCI_UART_RAW_DEVICE, &hu->hdev_flags)) in hci_uart_register_device_priv()
366 if (test_bit(HCI_UART_EXT_CONFIG, &hu->hdev_flags)) in hci_uart_register_device_priv()
369 if (test_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags)) in hci_uart_register_device_priv()
374 err = -ENODEV; in hci_uart_register_device_priv()
378 set_bit(HCI_UART_REGISTERED, &hu->flags); in hci_uart_register_device_priv()
385 clear_bit(HCI_UART_PROTO_READY, &hu->flags); in hci_uart_register_device_priv()
386 p->close(hu); in hci_uart_register_device_priv()
388 serdev_device_close(hu->serdev); in hci_uart_register_device_priv()
390 percpu_free_rwsem(&hu->proto_lock); in hci_uart_register_device_priv()
397 struct hci_dev *hdev = hu->hdev; in hci_uart_unregister_device()
399 cancel_work_sync(&hu->init_ready); in hci_uart_unregister_device()
400 if (test_bit(HCI_UART_REGISTERED, &hu->flags)) in hci_uart_unregister_device()
404 cancel_work_sync(&hu->write_work); in hci_uart_unregister_device()
406 hu->proto->close(hu); in hci_uart_unregister_device()
408 if (test_bit(HCI_UART_PROTO_READY, &hu->flags)) { in hci_uart_unregister_device()
409 clear_bit(HCI_UART_PROTO_READY, &hu->flags); in hci_uart_unregister_device()
410 serdev_device_close(hu->serdev); in hci_uart_unregister_device()
412 percpu_free_rwsem(&hu->proto_lock); in hci_uart_unregister_device()