Lines Matching refs:hu

83 	struct hci_uart *hu;  member
165 static int qca_power_setup(struct hci_uart *hu, bool on);
166 static void qca_power_shutdown(struct hci_uart *hu);
169 static enum qca_btsoc_type qca_soc_type(struct hci_uart *hu) in qca_soc_type() argument
173 if (hu->serdev) { in qca_soc_type()
174 struct qca_serdev *qsd = serdev_device_get_drvdata(hu->serdev); in qca_soc_type()
184 static const char *qca_get_firmware_name(struct hci_uart *hu) in qca_get_firmware_name() argument
186 if (hu->serdev) { in qca_get_firmware_name()
187 struct qca_serdev *qsd = serdev_device_get_drvdata(hu->serdev); in qca_get_firmware_name()
212 static void serial_clock_vote(unsigned long vote, struct hci_uart *hu) in serial_clock_vote() argument
214 struct qca_data *qca = hu->priv; in serial_clock_vote()
261 __serial_clock_on(hu->tty); in serial_clock_vote()
263 __serial_clock_off(hu->tty); in serial_clock_vote()
284 static int send_hci_ibs_cmd(u8 cmd, struct hci_uart *hu) in send_hci_ibs_cmd() argument
288 struct qca_data *qca = hu->priv; in send_hci_ibs_cmd()
290 BT_DBG("hu %p send hci ibs cmd 0x%x", hu, cmd); in send_hci_ibs_cmd()
310 struct hci_uart *hu = qca->hu; in qca_wq_awake_device() local
314 BT_DBG("hu %p wq awake device", hu); in qca_wq_awake_device()
317 serial_clock_vote(HCI_IBS_TX_VOTE_CLOCK_ON, hu); in qca_wq_awake_device()
322 if (send_hci_ibs_cmd(HCI_IBS_WAKE_IND, hu) < 0) in qca_wq_awake_device()
334 hci_uart_tx_wakeup(hu); in qca_wq_awake_device()
341 struct hci_uart *hu = qca->hu; in qca_wq_awake_rx() local
344 BT_DBG("hu %p wq awake rx", hu); in qca_wq_awake_rx()
346 serial_clock_vote(HCI_IBS_RX_VOTE_CLOCK_ON, hu); in qca_wq_awake_rx()
354 if (send_hci_ibs_cmd(HCI_IBS_WAKE_ACK, hu) < 0) in qca_wq_awake_rx()
362 hci_uart_tx_wakeup(hu); in qca_wq_awake_rx()
369 struct hci_uart *hu = qca->hu; in qca_wq_serial_rx_clock_vote_off() local
371 BT_DBG("hu %p rx clock vote off", hu); in qca_wq_serial_rx_clock_vote_off()
373 serial_clock_vote(HCI_IBS_RX_VOTE_CLOCK_OFF, hu); in qca_wq_serial_rx_clock_vote_off()
380 struct hci_uart *hu = qca->hu; in qca_wq_serial_tx_clock_vote_off() local
382 BT_DBG("hu %p tx clock vote off", hu); in qca_wq_serial_tx_clock_vote_off()
385 hci_uart_tx_wakeup(hu); in qca_wq_serial_tx_clock_vote_off()
390 serial_clock_vote(HCI_IBS_TX_VOTE_CLOCK_OFF, hu); in qca_wq_serial_tx_clock_vote_off()
396 struct hci_uart *hu = qca->hu; in hci_ibs_tx_idle_timeout() local
399 BT_DBG("hu %p idle timeout in %d state", hu, qca->tx_ibs_state); in hci_ibs_tx_idle_timeout()
407 if (send_hci_ibs_cmd(HCI_IBS_SLEEP_IND, hu) < 0) { in hci_ibs_tx_idle_timeout()
431 struct hci_uart *hu = qca->hu; in hci_ibs_wake_retrans_timeout() local
436 hu, qca->tx_ibs_state); in hci_ibs_wake_retrans_timeout()
445 if (send_hci_ibs_cmd(HCI_IBS_WAKE_IND, hu) < 0) { in hci_ibs_wake_retrans_timeout()
466 hci_uart_tx_wakeup(hu); in hci_ibs_wake_retrans_timeout()
470 static int qca_open(struct hci_uart *hu) in qca_open() argument
476 BT_DBG("hu %p qca_open", hu); in qca_open()
478 if (!hci_uart_has_flow_control(hu)) in qca_open()
500 qca->hu = hu; in qca_open()
509 hu->priv = qca; in qca_open()
511 if (hu->serdev) { in qca_open()
513 qcadev = serdev_device_get_drvdata(hu->serdev); in qca_open()
519 hu->init_speed = qcadev->init_speed; in qca_open()
520 hu->oper_speed = qcadev->oper_speed; in qca_open()
521 ret = qca_power_setup(hu, true); in qca_open()
525 hu->priv = NULL; in qca_open()
546 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_debugfs_init() local
547 struct qca_data *qca = hu->priv; in qca_debugfs_init()
591 static int qca_flush(struct hci_uart *hu) in qca_flush() argument
593 struct qca_data *qca = hu->priv; in qca_flush()
595 BT_DBG("hu %p qca flush", hu); in qca_flush()
604 static int qca_close(struct hci_uart *hu) in qca_close() argument
607 struct qca_data *qca = hu->priv; in qca_close()
609 BT_DBG("hu %p qca close", hu); in qca_close()
611 serial_clock_vote(HCI_IBS_VOTE_STATS_UPDATE, hu); in qca_close()
618 qca->hu = NULL; in qca_close()
620 if (hu->serdev) { in qca_close()
621 qcadev = serdev_device_get_drvdata(hu->serdev); in qca_close()
623 qca_power_shutdown(hu); in qca_close()
631 hu->priv = NULL; in qca_close()
640 static void device_want_to_wakeup(struct hci_uart *hu) in device_want_to_wakeup() argument
643 struct qca_data *qca = hu->priv; in device_want_to_wakeup()
645 BT_DBG("hu %p want to wake up", hu); in device_want_to_wakeup()
664 if (send_hci_ibs_cmd(HCI_IBS_WAKE_ACK, hu) < 0) { in device_want_to_wakeup()
681 hci_uart_tx_wakeup(hu); in device_want_to_wakeup()
686 static void device_want_to_sleep(struct hci_uart *hu) in device_want_to_sleep() argument
689 struct qca_data *qca = hu->priv; in device_want_to_sleep()
691 BT_DBG("hu %p want to sleep in %d state", hu, qca->rx_ibs_state); in device_want_to_sleep()
720 static void device_woke_up(struct hci_uart *hu) in device_woke_up() argument
723 struct qca_data *qca = hu->priv; in device_woke_up()
726 BT_DBG("hu %p woke up", hu); in device_woke_up()
763 hci_uart_tx_wakeup(hu); in device_woke_up()
769 static int qca_enqueue(struct hci_uart *hu, struct sk_buff *skb) in qca_enqueue() argument
772 struct qca_data *qca = hu->priv; in qca_enqueue()
774 BT_DBG("hu %p qca enq skb %p tx_ibs_state %d", hu, skb, in qca_enqueue()
830 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_ibs_sleep_ind() local
832 BT_DBG("hu %p recv hci ibs cmd 0x%x", hu, HCI_IBS_SLEEP_IND); in qca_ibs_sleep_ind()
834 device_want_to_sleep(hu); in qca_ibs_sleep_ind()
842 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_ibs_wake_ind() local
844 BT_DBG("hu %p recv hci ibs cmd 0x%x", hu, HCI_IBS_WAKE_IND); in qca_ibs_wake_ind()
846 device_want_to_wakeup(hu); in qca_ibs_wake_ind()
854 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_ibs_wake_ack() local
856 BT_DBG("hu %p recv hci ibs cmd 0x%x", hu, HCI_IBS_WAKE_ACK); in qca_ibs_wake_ack()
858 device_woke_up(hu); in qca_ibs_wake_ack()
879 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_recv_event() local
880 struct qca_data *qca = hu->priv; in qca_recv_event()
936 static int qca_recv(struct hci_uart *hu, const void *data, int count) in qca_recv() argument
938 struct qca_data *qca = hu->priv; in qca_recv()
940 if (!test_bit(HCI_UART_REGISTERED, &hu->flags)) in qca_recv()
943 qca->rx_skb = h4_recv_buf(hu->hdev, qca->rx_skb, data, count, in qca_recv()
947 bt_dev_err(hu->hdev, "Frame reassembly failed (%d)", err); in qca_recv()
955 static struct sk_buff *qca_dequeue(struct hci_uart *hu) in qca_dequeue() argument
957 struct qca_data *qca = hu->priv; in qca_dequeue()
1000 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_set_baudrate() local
1001 struct qca_data *qca = hu->priv; in qca_set_baudrate()
1021 hci_uart_tx_wakeup(hu); in qca_set_baudrate()
1028 if (hu->serdev) in qca_set_baudrate()
1029 serdev_device_wait_until_sent(hu->serdev, in qca_set_baudrate()
1033 if (qca_is_wcn399x(qca_soc_type(hu))) in qca_set_baudrate()
1041 static inline void host_set_baudrate(struct hci_uart *hu, unsigned int speed) in host_set_baudrate() argument
1043 if (hu->serdev) in host_set_baudrate()
1044 serdev_device_set_baudrate(hu->serdev, speed); in host_set_baudrate()
1046 hci_uart_set_baudrate(hu, speed); in host_set_baudrate()
1049 static int qca_send_power_pulse(struct hci_uart *hu, bool on) in qca_send_power_pulse() argument
1065 bt_dev_dbg(hu->hdev, "sending power pulse %02x to controller", cmd); in qca_send_power_pulse()
1067 serdev_device_write_flush(hu->serdev); in qca_send_power_pulse()
1068 hci_uart_set_flow_control(hu, true); in qca_send_power_pulse()
1069 ret = serdev_device_write_buf(hu->serdev, &cmd, sizeof(cmd)); in qca_send_power_pulse()
1071 bt_dev_err(hu->hdev, "failed to send power pulse %02x", cmd); in qca_send_power_pulse()
1075 serdev_device_wait_until_sent(hu->serdev, timeout); in qca_send_power_pulse()
1076 hci_uart_set_flow_control(hu, false); in qca_send_power_pulse()
1087 static unsigned int qca_get_speed(struct hci_uart *hu, in qca_get_speed() argument
1093 if (hu->init_speed) in qca_get_speed()
1094 speed = hu->init_speed; in qca_get_speed()
1095 else if (hu->proto->init_speed) in qca_get_speed()
1096 speed = hu->proto->init_speed; in qca_get_speed()
1098 if (hu->oper_speed) in qca_get_speed()
1099 speed = hu->oper_speed; in qca_get_speed()
1100 else if (hu->proto->oper_speed) in qca_get_speed()
1101 speed = hu->proto->oper_speed; in qca_get_speed()
1107 static int qca_check_speeds(struct hci_uart *hu) in qca_check_speeds() argument
1109 if (qca_is_wcn399x(qca_soc_type(hu))) { in qca_check_speeds()
1110 if (!qca_get_speed(hu, QCA_INIT_SPEED) && in qca_check_speeds()
1111 !qca_get_speed(hu, QCA_OPER_SPEED)) in qca_check_speeds()
1114 if (!qca_get_speed(hu, QCA_INIT_SPEED) || in qca_check_speeds()
1115 !qca_get_speed(hu, QCA_OPER_SPEED)) in qca_check_speeds()
1122 static int qca_set_speed(struct hci_uart *hu, enum qca_speed_type speed_type) in qca_set_speed() argument
1125 struct qca_data *qca = hu->priv; in qca_set_speed()
1129 speed = qca_get_speed(hu, QCA_INIT_SPEED); in qca_set_speed()
1131 host_set_baudrate(hu, speed); in qca_set_speed()
1133 enum qca_btsoc_type soc_type = qca_soc_type(hu); in qca_set_speed()
1135 speed = qca_get_speed(hu, QCA_OPER_SPEED); in qca_set_speed()
1143 hci_uart_set_flow_control(hu, true); in qca_set_speed()
1151 bt_dev_dbg(hu->hdev, "Set UART speed to %d", speed); in qca_set_speed()
1152 ret = qca_set_baudrate(hu->hdev, qca_baudrate); in qca_set_speed()
1156 host_set_baudrate(hu, speed); in qca_set_speed()
1160 hci_uart_set_flow_control(hu, false); in qca_set_speed()
1168 bt_dev_err(hu->hdev, in qca_set_speed()
1180 static int qca_wcn3990_init(struct hci_uart *hu) in qca_wcn3990_init() argument
1188 qcadev = serdev_device_get_drvdata(hu->serdev); in qca_wcn3990_init()
1190 serdev_device_close(hu->serdev); in qca_wcn3990_init()
1191 ret = qca_power_setup(hu, true); in qca_wcn3990_init()
1195 ret = serdev_device_open(hu->serdev); in qca_wcn3990_init()
1197 bt_dev_err(hu->hdev, "failed to open port"); in qca_wcn3990_init()
1203 host_set_baudrate(hu, 2400); in qca_wcn3990_init()
1204 ret = qca_send_power_pulse(hu, false); in qca_wcn3990_init()
1208 qca_set_speed(hu, QCA_INIT_SPEED); in qca_wcn3990_init()
1209 ret = qca_send_power_pulse(hu, true); in qca_wcn3990_init()
1218 serdev_device_close(hu->serdev); in qca_wcn3990_init()
1219 ret = serdev_device_open(hu->serdev); in qca_wcn3990_init()
1221 bt_dev_err(hu->hdev, "failed to open port"); in qca_wcn3990_init()
1225 hci_uart_set_flow_control(hu, false); in qca_wcn3990_init()
1230 static int qca_setup(struct hci_uart *hu) in qca_setup() argument
1232 struct hci_dev *hdev = hu->hdev; in qca_setup()
1233 struct qca_data *qca = hu->priv; in qca_setup()
1235 enum qca_btsoc_type soc_type = qca_soc_type(hu); in qca_setup()
1236 const char *firmware_name = qca_get_firmware_name(hu); in qca_setup()
1240 ret = qca_check_speeds(hu); in qca_setup()
1260 hu->hdev->shutdown = qca_power_off; in qca_setup()
1261 ret = qca_wcn3990_init(hu); in qca_setup()
1270 qca_set_speed(hu, QCA_INIT_SPEED); in qca_setup()
1274 speed = qca_get_speed(hu, QCA_OPER_SPEED); in qca_setup()
1276 ret = qca_set_speed(hu, QCA_OPER_SPEED); in qca_setup()
1310 hu->hdev->set_bdaddr = qca_set_bdaddr; in qca_setup()
1312 hu->hdev->set_bdaddr = qca_set_bdaddr_rome; in qca_setup()
1354 static void qca_power_shutdown(struct hci_uart *hu) in qca_power_shutdown() argument
1356 struct qca_data *qca = hu->priv; in qca_power_shutdown()
1365 qca_flush(hu); in qca_power_shutdown()
1368 host_set_baudrate(hu, 2400); in qca_power_shutdown()
1369 qca_send_power_pulse(hu, false); in qca_power_shutdown()
1370 qca_power_setup(hu, false); in qca_power_shutdown()
1375 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_power_off() local
1382 qca_power_shutdown(hu); in qca_power_off()
1417 static int qca_power_setup(struct hci_uart *hu, bool on) in qca_power_setup() argument
1424 qcadev = serdev_device_get_drvdata(hu->serdev); in qca_power_setup()