Lines Matching refs:hu

140 	struct hci_uart *hu;  member
233 static void qca_power_shutdown(struct hci_uart *hu);
238 static enum qca_btsoc_type qca_soc_type(struct hci_uart *hu) in qca_soc_type() argument
242 if (hu->serdev) { in qca_soc_type()
243 struct qca_serdev *qsd = serdev_device_get_drvdata(hu->serdev); in qca_soc_type()
253 static const char *qca_get_firmware_name(struct hci_uart *hu) in qca_get_firmware_name() argument
255 if (hu->serdev) { in qca_get_firmware_name()
256 struct qca_serdev *qsd = serdev_device_get_drvdata(hu->serdev); in qca_get_firmware_name()
281 static void serial_clock_vote(unsigned long vote, struct hci_uart *hu) in serial_clock_vote() argument
283 struct qca_data *qca = hu->priv; in serial_clock_vote()
328 __serial_clock_on(hu->tty); in serial_clock_vote()
330 __serial_clock_off(hu->tty); in serial_clock_vote()
351 static int send_hci_ibs_cmd(u8 cmd, struct hci_uart *hu) in send_hci_ibs_cmd() argument
355 struct qca_data *qca = hu->priv; in send_hci_ibs_cmd()
357 BT_DBG("hu %p send hci ibs cmd 0x%x", hu, cmd); in send_hci_ibs_cmd()
377 struct hci_uart *hu = qca->hu; in qca_wq_awake_device() local
381 BT_DBG("hu %p wq awake device", hu); in qca_wq_awake_device()
384 serial_clock_vote(HCI_IBS_TX_VOTE_CLOCK_ON, hu); in qca_wq_awake_device()
389 if (send_hci_ibs_cmd(HCI_IBS_WAKE_IND, hu) < 0) in qca_wq_awake_device()
401 hci_uart_tx_wakeup(hu); in qca_wq_awake_device()
408 struct hci_uart *hu = qca->hu; in qca_wq_awake_rx() local
411 BT_DBG("hu %p wq awake rx", hu); in qca_wq_awake_rx()
413 serial_clock_vote(HCI_IBS_RX_VOTE_CLOCK_ON, hu); in qca_wq_awake_rx()
421 if (send_hci_ibs_cmd(HCI_IBS_WAKE_ACK, hu) < 0) in qca_wq_awake_rx()
429 hci_uart_tx_wakeup(hu); in qca_wq_awake_rx()
436 struct hci_uart *hu = qca->hu; in qca_wq_serial_rx_clock_vote_off() local
438 BT_DBG("hu %p rx clock vote off", hu); in qca_wq_serial_rx_clock_vote_off()
440 serial_clock_vote(HCI_IBS_RX_VOTE_CLOCK_OFF, hu); in qca_wq_serial_rx_clock_vote_off()
447 struct hci_uart *hu = qca->hu; in qca_wq_serial_tx_clock_vote_off() local
449 BT_DBG("hu %p tx clock vote off", hu); in qca_wq_serial_tx_clock_vote_off()
452 hci_uart_tx_wakeup(hu); in qca_wq_serial_tx_clock_vote_off()
457 serial_clock_vote(HCI_IBS_TX_VOTE_CLOCK_OFF, hu); in qca_wq_serial_tx_clock_vote_off()
463 struct hci_uart *hu = qca->hu; in hci_ibs_tx_idle_timeout() local
466 BT_DBG("hu %p idle timeout in %d state", hu, qca->tx_ibs_state); in hci_ibs_tx_idle_timeout()
474 if (send_hci_ibs_cmd(HCI_IBS_SLEEP_IND, hu) < 0) { in hci_ibs_tx_idle_timeout()
496 struct hci_uart *hu = qca->hu; in hci_ibs_wake_retrans_timeout() local
501 hu, qca->tx_ibs_state); in hci_ibs_wake_retrans_timeout()
516 if (send_hci_ibs_cmd(HCI_IBS_WAKE_IND, hu) < 0) { in hci_ibs_wake_retrans_timeout()
535 hci_uart_tx_wakeup(hu); in hci_ibs_wake_retrans_timeout()
543 struct hci_uart *hu = qca->hu; in qca_controller_memdump_timeout() local
552 hci_reset_dev(hu->hdev); in qca_controller_memdump_timeout()
561 static int qca_open(struct hci_uart *hu) in qca_open() argument
566 BT_DBG("hu %p qca_open", hu); in qca_open()
568 if (!hci_uart_has_flow_control(hu)) in qca_open()
596 qca->hu = hu; in qca_open()
605 hu->priv = qca; in qca_open()
607 if (hu->serdev) { in qca_open()
608 qcadev = serdev_device_get_drvdata(hu->serdev); in qca_open()
616 hu->init_speed = qcadev->init_speed; in qca_open()
624 hu->oper_speed = qcadev->oper_speed; in qca_open()
641 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_debugfs_init() local
642 struct qca_data *qca = hu->priv; in qca_debugfs_init()
689 static int qca_flush(struct hci_uart *hu) in qca_flush() argument
691 struct qca_data *qca = hu->priv; in qca_flush()
693 BT_DBG("hu %p qca flush", hu); in qca_flush()
702 static int qca_close(struct hci_uart *hu) in qca_close() argument
704 struct qca_data *qca = hu->priv; in qca_close()
706 BT_DBG("hu %p qca close", hu); in qca_close()
708 serial_clock_vote(HCI_IBS_VOTE_STATS_UPDATE, hu); in qca_close()
722 qca->hu = NULL; in qca_close()
726 hu->priv = NULL; in qca_close()
735 static void device_want_to_wakeup(struct hci_uart *hu) in device_want_to_wakeup() argument
738 struct qca_data *qca = hu->priv; in device_want_to_wakeup()
740 BT_DBG("hu %p want to wake up", hu); in device_want_to_wakeup()
765 if (send_hci_ibs_cmd(HCI_IBS_WAKE_ACK, hu) < 0) { in device_want_to_wakeup()
782 hci_uart_tx_wakeup(hu); in device_want_to_wakeup()
787 static void device_want_to_sleep(struct hci_uart *hu) in device_want_to_sleep() argument
790 struct qca_data *qca = hu->priv; in device_want_to_sleep()
792 BT_DBG("hu %p want to sleep in %d state", hu, qca->rx_ibs_state); in device_want_to_sleep()
823 static void device_woke_up(struct hci_uart *hu) in device_woke_up() argument
826 struct qca_data *qca = hu->priv; in device_woke_up()
829 BT_DBG("hu %p woke up", hu); in device_woke_up()
870 hci_uart_tx_wakeup(hu); in device_woke_up()
876 static int qca_enqueue(struct hci_uart *hu, struct sk_buff *skb) in qca_enqueue() argument
879 struct qca_data *qca = hu->priv; in qca_enqueue()
881 BT_DBG("hu %p qca enq skb %p tx_ibs_state %d", hu, skb, in qca_enqueue()
886 bt_dev_dbg(hu->hdev, "SSR is in progress"); in qca_enqueue()
946 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_ibs_sleep_ind() local
948 BT_DBG("hu %p recv hci ibs cmd 0x%x", hu, HCI_IBS_SLEEP_IND); in qca_ibs_sleep_ind()
950 device_want_to_sleep(hu); in qca_ibs_sleep_ind()
958 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_ibs_wake_ind() local
960 BT_DBG("hu %p recv hci ibs cmd 0x%x", hu, HCI_IBS_WAKE_IND); in qca_ibs_wake_ind()
962 device_want_to_wakeup(hu); in qca_ibs_wake_ind()
970 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_ibs_wake_ack() local
972 BT_DBG("hu %p recv hci ibs cmd 0x%x", hu, HCI_IBS_WAKE_ACK); in qca_ibs_wake_ack()
974 device_woke_up(hu); in qca_ibs_wake_ack()
995 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_dmp_hdr() local
996 struct qca_data *qca = hu->priv; in qca_dmp_hdr()
1011 hu->serdev->dev.driver->name); in qca_dmp_hdr()
1019 struct hci_uart *hu = qca->hu; in qca_controller_memdump() local
1027 enum qca_btsoc_type soc_type = qca_soc_type(hu); in qca_controller_memdump()
1070 bt_dev_err(hu->hdev, "Rx invalid memdump size"); in qca_controller_memdump()
1083 ret = hci_devcd_init(hu->hdev, qca_memdump->ram_dump_size); in qca_controller_memdump()
1084 bt_dev_info(hu->hdev, "hci_devcd_init Return:%d", in qca_controller_memdump()
1096 bt_dev_info(hu->hdev, "QCA collecting dump of size:%u", in qca_controller_memdump()
1105 bt_dev_err(hu->hdev, "QCA: Discarding other packets"); in qca_controller_memdump()
1122 bt_dev_err(hu->hdev, "QCA controller missed packet:%d", in qca_controller_memdump()
1127 bt_dev_err(hu->hdev, in qca_controller_memdump()
1132 hci_devcd_append_pattern(hu->hdev, 0x00, in qca_controller_memdump()
1142 bt_dev_err(hu->hdev, in qca_controller_memdump()
1146 bt_dev_dbg(hu->hdev, in qca_controller_memdump()
1149 hci_devcd_append(hu->hdev, skb); in qca_controller_memdump()
1153 bt_dev_err(hu->hdev, in qca_controller_memdump()
1159 bt_dev_info(hu->hdev, in qca_controller_memdump()
1163 hci_devcd_complete(hu->hdev); in qca_controller_memdump()
1179 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_controller_memdump_event() local
1180 struct qca_data *qca = hu->priv; in qca_controller_memdump_event()
1191 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_recv_event() local
1192 struct qca_data *qca = hu->priv; in qca_recv_event()
1256 static int qca_recv(struct hci_uart *hu, const void *data, int count) in qca_recv() argument
1258 struct qca_data *qca = hu->priv; in qca_recv()
1260 if (!test_bit(HCI_UART_REGISTERED, &hu->flags)) in qca_recv()
1263 qca->rx_skb = h4_recv_buf(hu->hdev, qca->rx_skb, data, count, in qca_recv()
1267 bt_dev_err(hu->hdev, "Frame reassembly failed (%d)", err); in qca_recv()
1275 static struct sk_buff *qca_dequeue(struct hci_uart *hu) in qca_dequeue() argument
1277 struct qca_data *qca = hu->priv; in qca_dequeue()
1320 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_set_baudrate() local
1321 struct qca_data *qca = hu->priv; in qca_set_baudrate()
1341 hci_uart_tx_wakeup(hu); in qca_set_baudrate()
1348 if (hu->serdev) in qca_set_baudrate()
1349 serdev_device_wait_until_sent(hu->serdev, in qca_set_baudrate()
1353 switch (qca_soc_type(hu)) { in qca_set_baudrate()
1371 static inline void host_set_baudrate(struct hci_uart *hu, unsigned int speed) in host_set_baudrate() argument
1373 if (hu->serdev) in host_set_baudrate()
1374 serdev_device_set_baudrate(hu->serdev, speed); in host_set_baudrate()
1376 hci_uart_set_baudrate(hu, speed); in host_set_baudrate()
1379 static int qca_send_power_pulse(struct hci_uart *hu, bool on) in qca_send_power_pulse() argument
1395 bt_dev_dbg(hu->hdev, "sending power pulse %02x to controller", cmd); in qca_send_power_pulse()
1397 serdev_device_write_flush(hu->serdev); in qca_send_power_pulse()
1398 hci_uart_set_flow_control(hu, true); in qca_send_power_pulse()
1399 ret = serdev_device_write_buf(hu->serdev, &cmd, sizeof(cmd)); in qca_send_power_pulse()
1401 bt_dev_err(hu->hdev, "failed to send power pulse %02x", cmd); in qca_send_power_pulse()
1405 serdev_device_wait_until_sent(hu->serdev, timeout); in qca_send_power_pulse()
1406 hci_uart_set_flow_control(hu, false); in qca_send_power_pulse()
1417 static unsigned int qca_get_speed(struct hci_uart *hu, in qca_get_speed() argument
1423 if (hu->init_speed) in qca_get_speed()
1424 speed = hu->init_speed; in qca_get_speed()
1425 else if (hu->proto->init_speed) in qca_get_speed()
1426 speed = hu->proto->init_speed; in qca_get_speed()
1428 if (hu->oper_speed) in qca_get_speed()
1429 speed = hu->oper_speed; in qca_get_speed()
1430 else if (hu->proto->oper_speed) in qca_get_speed()
1431 speed = hu->proto->oper_speed; in qca_get_speed()
1437 static int qca_check_speeds(struct hci_uart *hu) in qca_check_speeds() argument
1439 switch (qca_soc_type(hu)) { in qca_check_speeds()
1447 if (!qca_get_speed(hu, QCA_INIT_SPEED) && in qca_check_speeds()
1448 !qca_get_speed(hu, QCA_OPER_SPEED)) in qca_check_speeds()
1453 if (!qca_get_speed(hu, QCA_INIT_SPEED) || in qca_check_speeds()
1454 !qca_get_speed(hu, QCA_OPER_SPEED)) in qca_check_speeds()
1461 static int qca_set_speed(struct hci_uart *hu, enum qca_speed_type speed_type) in qca_set_speed() argument
1464 struct qca_data *qca = hu->priv; in qca_set_speed()
1468 speed = qca_get_speed(hu, QCA_INIT_SPEED); in qca_set_speed()
1470 host_set_baudrate(hu, speed); in qca_set_speed()
1472 enum qca_btsoc_type soc_type = qca_soc_type(hu); in qca_set_speed()
1474 speed = qca_get_speed(hu, QCA_OPER_SPEED); in qca_set_speed()
1489 hci_uart_set_flow_control(hu, true); in qca_set_speed()
1507 bt_dev_dbg(hu->hdev, "Set UART speed to %d", speed); in qca_set_speed()
1508 ret = qca_set_baudrate(hu->hdev, qca_baudrate); in qca_set_speed()
1512 host_set_baudrate(hu, speed); in qca_set_speed()
1523 hci_uart_set_flow_control(hu, false); in qca_set_speed()
1537 bt_dev_err(hu->hdev, in qca_set_speed()
1553 static int qca_send_crashbuffer(struct hci_uart *hu) in qca_send_crashbuffer() argument
1555 struct qca_data *qca = hu->priv; in qca_send_crashbuffer()
1560 bt_dev_err(hu->hdev, "Failed to allocate memory for skb packet"); in qca_send_crashbuffer()
1571 bt_dev_info(hu->hdev, "crash the soc to collect controller dump"); in qca_send_crashbuffer()
1573 hci_uart_tx_wakeup(hu); in qca_send_crashbuffer()
1580 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_wait_for_dump_collection() local
1581 struct qca_data *qca = hu->priv; in qca_wait_for_dump_collection()
1591 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_hw_error() local
1592 struct qca_data *qca = hu->priv; in qca_hw_error()
1606 qca_send_crashbuffer(hu); in qca_hw_error()
1618 bt_dev_err(hu->hdev, "clearing allocated memory due to memdump timeout"); in qca_hw_error()
1619 hci_devcd_abort(hu->hdev); in qca_hw_error()
1640 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_cmd_timeout() local
1641 struct qca_data *qca = hu->priv; in qca_cmd_timeout()
1646 qca_send_crashbuffer(hu); in qca_cmd_timeout()
1663 hci_reset_dev(hu->hdev); in qca_cmd_timeout()
1671 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_wakeup() local
1678 wakeup = device_may_wakeup(&hu->serdev->ctrl->dev); in qca_wakeup()
1679 bt_dev_dbg(hu->hdev, "wakeup status : %d", wakeup); in qca_wakeup()
1684 static int qca_regulator_init(struct hci_uart *hu) in qca_regulator_init() argument
1686 enum qca_btsoc_type soc_type = qca_soc_type(hu); in qca_regulator_init()
1694 qcadev = serdev_device_get_drvdata(hu->serdev); in qca_regulator_init()
1696 serdev_device_close(hu->serdev); in qca_regulator_init()
1701 ret = serdev_device_open(hu->serdev); in qca_regulator_init()
1703 bt_dev_err(hu->hdev, "failed to open port"); in qca_regulator_init()
1714 host_set_baudrate(hu, 2400); in qca_regulator_init()
1715 ret = qca_send_power_pulse(hu, false); in qca_regulator_init()
1732 bt_dev_dbg(hu->hdev, "SW_CTRL is %d", sw_ctrl_state); in qca_regulator_init()
1736 qca_set_speed(hu, QCA_INIT_SPEED); in qca_regulator_init()
1743 ret = qca_send_power_pulse(hu, true); in qca_regulator_init()
1757 serdev_device_close(hu->serdev); in qca_regulator_init()
1758 ret = serdev_device_open(hu->serdev); in qca_regulator_init()
1760 bt_dev_err(hu->hdev, "failed to open port"); in qca_regulator_init()
1764 hci_uart_set_flow_control(hu, false); in qca_regulator_init()
1771 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_power_on() local
1772 enum qca_btsoc_type soc_type = qca_soc_type(hu); in qca_power_on()
1774 struct qca_data *qca = hu->priv; in qca_power_on()
1780 if (!hu->serdev) in qca_power_on()
1791 ret = qca_regulator_init(hu); in qca_power_on()
1795 qcadev = serdev_device_get_drvdata(hu->serdev); in qca_power_on()
1818 static int qca_setup(struct hci_uart *hu) in qca_setup() argument
1820 struct hci_dev *hdev = hu->hdev; in qca_setup()
1821 struct qca_data *qca = hu->priv; in qca_setup()
1824 enum qca_btsoc_type soc_type = qca_soc_type(hu); in qca_setup()
1825 const char *firmware_name = qca_get_firmware_name(hu); in qca_setup()
1830 ret = qca_check_speeds(hu); in qca_setup()
1894 qca_set_speed(hu, QCA_INIT_SPEED); in qca_setup()
1898 speed = qca_get_speed(hu, QCA_OPER_SPEED); in qca_setup()
1900 ret = qca_set_speed(hu, QCA_OPER_SPEED); in qca_setup()
1930 hu->hdev->hw_error = qca_hw_error; in qca_setup()
1931 hu->hdev->cmd_timeout = qca_cmd_timeout; in qca_setup()
1932 if (device_can_wakeup(hu->serdev->ctrl->dev.parent)) in qca_setup()
1933 hu->hdev->wakeup = qca_wakeup; in qca_setup()
1950 qca_power_shutdown(hu); in qca_setup()
1951 if (hu->serdev) { in qca_setup()
1952 serdev_device_close(hu->serdev); in qca_setup()
1953 ret = serdev_device_open(hu->serdev); in qca_setup()
1965 hu->hdev->set_bdaddr = qca_set_bdaddr_rome; in qca_setup()
1967 hu->hdev->set_bdaddr = qca_set_bdaddr; in qca_setup()
2085 static void qca_power_shutdown(struct hci_uart *hu) in qca_power_shutdown() argument
2088 struct qca_data *qca = hu->priv; in qca_power_shutdown()
2090 enum qca_btsoc_type soc_type = qca_soc_type(hu); in qca_power_shutdown()
2099 qca_flush(hu); in qca_power_shutdown()
2105 if (!hu->serdev) in qca_power_shutdown()
2108 qcadev = serdev_device_get_drvdata(hu->serdev); in qca_power_shutdown()
2115 host_set_baudrate(hu, 2400); in qca_power_shutdown()
2116 qca_send_power_pulse(hu, false); in qca_power_shutdown()
2127 bt_dev_dbg(hu->hdev, "SW_CTRL is %d", sw_ctrl_state); in qca_power_shutdown()
2140 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_power_off() local
2141 struct qca_data *qca = hu->priv; in qca_power_off()
2142 enum qca_btsoc_type soc_type = qca_soc_type(hu); in qca_power_off()
2144 hu->hdev->hw_error = NULL; in qca_power_off()
2145 hu->hdev->cmd_timeout = NULL; in qca_power_off()
2157 qca_power_shutdown(hu); in qca_power_off()
2399 struct hci_uart *hu = &qcadev->serdev_hu; in qca_serdev_shutdown() local
2400 struct hci_dev *hdev = hu->hdev; in qca_serdev_shutdown()
2401 struct qca_data *qca = hu->priv; in qca_serdev_shutdown()
2436 struct hci_uart *hu = &qcadev->serdev_hu; in qca_suspend() local
2437 struct qca_data *qca = hu->priv; in qca_suspend()
2474 bt_dev_err(hu->hdev, "SSR or FW download time out"); in qca_suspend()
2493 serdev_device_write_flush(hu->serdev); in qca_suspend()
2495 ret = serdev_device_write_buf(hu->serdev, &cmd, sizeof(cmd)); in qca_suspend()
2522 serdev_device_wait_until_sent(hu->serdev, in qca_suspend()
2524 serial_clock_vote(HCI_IBS_TX_VOTE_CLOCK_OFF, hu); in qca_suspend()
2550 struct hci_uart *hu = &qcadev->serdev_hu; in qca_resume() local
2551 struct qca_data *qca = hu->priv; in qca_resume()
2593 struct hci_uart *hu = &qcadev->serdev_hu; in hciqca_coredump() local
2594 struct hci_dev *hdev = hu->hdev; in hciqca_coredump()