Lines Matching refs:hu

141 	struct hci_uart *hu;  member
232 static void qca_power_shutdown(struct hci_uart *hu);
236 static enum qca_btsoc_type qca_soc_type(struct hci_uart *hu) in qca_soc_type() argument
240 if (hu->serdev) { in qca_soc_type()
241 struct qca_serdev *qsd = serdev_device_get_drvdata(hu->serdev); in qca_soc_type()
251 static const char *qca_get_firmware_name(struct hci_uart *hu) in qca_get_firmware_name() argument
253 if (hu->serdev) { in qca_get_firmware_name()
254 struct qca_serdev *qsd = serdev_device_get_drvdata(hu->serdev); in qca_get_firmware_name()
279 static void serial_clock_vote(unsigned long vote, struct hci_uart *hu) in serial_clock_vote() argument
281 struct qca_data *qca = hu->priv; in serial_clock_vote()
326 __serial_clock_on(hu->tty); in serial_clock_vote()
328 __serial_clock_off(hu->tty); in serial_clock_vote()
349 static int send_hci_ibs_cmd(u8 cmd, struct hci_uart *hu) in send_hci_ibs_cmd() argument
353 struct qca_data *qca = hu->priv; in send_hci_ibs_cmd()
355 BT_DBG("hu %p send hci ibs cmd 0x%x", hu, cmd); in send_hci_ibs_cmd()
375 struct hci_uart *hu = qca->hu; in qca_wq_awake_device() local
379 BT_DBG("hu %p wq awake device", hu); in qca_wq_awake_device()
382 serial_clock_vote(HCI_IBS_TX_VOTE_CLOCK_ON, hu); in qca_wq_awake_device()
387 if (send_hci_ibs_cmd(HCI_IBS_WAKE_IND, hu) < 0) in qca_wq_awake_device()
399 hci_uart_tx_wakeup(hu); in qca_wq_awake_device()
406 struct hci_uart *hu = qca->hu; in qca_wq_awake_rx() local
409 BT_DBG("hu %p wq awake rx", hu); in qca_wq_awake_rx()
411 serial_clock_vote(HCI_IBS_RX_VOTE_CLOCK_ON, hu); in qca_wq_awake_rx()
419 if (send_hci_ibs_cmd(HCI_IBS_WAKE_ACK, hu) < 0) in qca_wq_awake_rx()
427 hci_uart_tx_wakeup(hu); in qca_wq_awake_rx()
434 struct hci_uart *hu = qca->hu; in qca_wq_serial_rx_clock_vote_off() local
436 BT_DBG("hu %p rx clock vote off", hu); in qca_wq_serial_rx_clock_vote_off()
438 serial_clock_vote(HCI_IBS_RX_VOTE_CLOCK_OFF, hu); in qca_wq_serial_rx_clock_vote_off()
445 struct hci_uart *hu = qca->hu; in qca_wq_serial_tx_clock_vote_off() local
447 BT_DBG("hu %p tx clock vote off", hu); in qca_wq_serial_tx_clock_vote_off()
450 hci_uart_tx_wakeup(hu); in qca_wq_serial_tx_clock_vote_off()
455 serial_clock_vote(HCI_IBS_TX_VOTE_CLOCK_OFF, hu); in qca_wq_serial_tx_clock_vote_off()
461 struct hci_uart *hu = qca->hu; in hci_ibs_tx_idle_timeout() local
464 BT_DBG("hu %p idle timeout in %d state", hu, qca->tx_ibs_state); in hci_ibs_tx_idle_timeout()
472 if (send_hci_ibs_cmd(HCI_IBS_SLEEP_IND, hu) < 0) { in hci_ibs_tx_idle_timeout()
494 struct hci_uart *hu = qca->hu; in hci_ibs_wake_retrans_timeout() local
499 hu, qca->tx_ibs_state); in hci_ibs_wake_retrans_timeout()
514 if (send_hci_ibs_cmd(HCI_IBS_WAKE_IND, hu) < 0) { in hci_ibs_wake_retrans_timeout()
533 hci_uart_tx_wakeup(hu); in hci_ibs_wake_retrans_timeout()
541 struct hci_uart *hu = qca->hu; in qca_controller_memdump_timeout() local
550 hci_reset_dev(hu->hdev); in qca_controller_memdump_timeout()
559 static int qca_open(struct hci_uart *hu) in qca_open() argument
564 BT_DBG("hu %p qca_open", hu); in qca_open()
566 if (!hci_uart_has_flow_control(hu)) in qca_open()
594 qca->hu = hu; in qca_open()
603 hu->priv = qca; in qca_open()
605 if (hu->serdev) { in qca_open()
606 qcadev = serdev_device_get_drvdata(hu->serdev); in qca_open()
610 hu->init_speed = qcadev->init_speed; in qca_open()
613 hu->oper_speed = qcadev->oper_speed; in qca_open()
630 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_debugfs_init() local
631 struct qca_data *qca = hu->priv; in qca_debugfs_init()
675 static int qca_flush(struct hci_uart *hu) in qca_flush() argument
677 struct qca_data *qca = hu->priv; in qca_flush()
679 BT_DBG("hu %p qca flush", hu); in qca_flush()
688 static int qca_close(struct hci_uart *hu) in qca_close() argument
690 struct qca_data *qca = hu->priv; in qca_close()
692 BT_DBG("hu %p qca close", hu); in qca_close()
694 serial_clock_vote(HCI_IBS_VOTE_STATS_UPDATE, hu); in qca_close()
708 qca->hu = NULL; in qca_close()
712 hu->priv = NULL; in qca_close()
721 static void device_want_to_wakeup(struct hci_uart *hu) in device_want_to_wakeup() argument
724 struct qca_data *qca = hu->priv; in device_want_to_wakeup()
726 BT_DBG("hu %p want to wake up", hu); in device_want_to_wakeup()
751 if (send_hci_ibs_cmd(HCI_IBS_WAKE_ACK, hu) < 0) { in device_want_to_wakeup()
768 hci_uart_tx_wakeup(hu); in device_want_to_wakeup()
773 static void device_want_to_sleep(struct hci_uart *hu) in device_want_to_sleep() argument
776 struct qca_data *qca = hu->priv; in device_want_to_sleep()
778 BT_DBG("hu %p want to sleep in %d state", hu, qca->rx_ibs_state); in device_want_to_sleep()
809 static void device_woke_up(struct hci_uart *hu) in device_woke_up() argument
812 struct qca_data *qca = hu->priv; in device_woke_up()
815 BT_DBG("hu %p woke up", hu); in device_woke_up()
856 hci_uart_tx_wakeup(hu); in device_woke_up()
862 static int qca_enqueue(struct hci_uart *hu, struct sk_buff *skb) in qca_enqueue() argument
865 struct qca_data *qca = hu->priv; in qca_enqueue()
867 BT_DBG("hu %p qca enq skb %p tx_ibs_state %d", hu, skb, in qca_enqueue()
872 bt_dev_dbg(hu->hdev, "SSR is in progress"); in qca_enqueue()
932 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_ibs_sleep_ind() local
934 BT_DBG("hu %p recv hci ibs cmd 0x%x", hu, HCI_IBS_SLEEP_IND); in qca_ibs_sleep_ind()
936 device_want_to_sleep(hu); in qca_ibs_sleep_ind()
944 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_ibs_wake_ind() local
946 BT_DBG("hu %p recv hci ibs cmd 0x%x", hu, HCI_IBS_WAKE_IND); in qca_ibs_wake_ind()
948 device_want_to_wakeup(hu); in qca_ibs_wake_ind()
956 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_ibs_wake_ack() local
958 BT_DBG("hu %p recv hci ibs cmd 0x%x", hu, HCI_IBS_WAKE_ACK); in qca_ibs_wake_ack()
960 device_woke_up(hu); in qca_ibs_wake_ack()
983 struct hci_uart *hu = qca->hu; in qca_controller_memdump() local
993 enum qca_btsoc_type soc_type = qca_soc_type(hu); in qca_controller_memdump()
1036 bt_dev_err(hu->hdev, "Rx invalid memdump size"); in qca_controller_memdump()
1044 bt_dev_info(hu->hdev, "QCA collecting dump of size:%u", in qca_controller_memdump()
1064 bt_dev_err(hu->hdev, "QCA: Discarding other packets"); in qca_controller_memdump()
1083 bt_dev_err(hu->hdev, "QCA controller missed packet:%d", in qca_controller_memdump()
1088 bt_dev_err(hu->hdev, in qca_controller_memdump()
1103 bt_dev_err(hu->hdev, in qca_controller_memdump()
1106 bt_dev_dbg(hu->hdev, in qca_controller_memdump()
1116 bt_dev_err(hu->hdev, in qca_controller_memdump()
1123 bt_dev_info(hu->hdev, in qca_controller_memdump()
1128 dev_coredumpv(&hu->serdev->dev, memdump_buf, in qca_controller_memdump()
1145 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_controller_memdump_event() local
1146 struct qca_data *qca = hu->priv; in qca_controller_memdump_event()
1157 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_recv_event() local
1158 struct qca_data *qca = hu->priv; in qca_recv_event()
1222 static int qca_recv(struct hci_uart *hu, const void *data, int count) in qca_recv() argument
1224 struct qca_data *qca = hu->priv; in qca_recv()
1226 if (!test_bit(HCI_UART_REGISTERED, &hu->flags)) in qca_recv()
1229 qca->rx_skb = h4_recv_buf(hu->hdev, qca->rx_skb, data, count, in qca_recv()
1233 bt_dev_err(hu->hdev, "Frame reassembly failed (%d)", err); in qca_recv()
1241 static struct sk_buff *qca_dequeue(struct hci_uart *hu) in qca_dequeue() argument
1243 struct qca_data *qca = hu->priv; in qca_dequeue()
1286 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_set_baudrate() local
1287 struct qca_data *qca = hu->priv; in qca_set_baudrate()
1307 hci_uart_tx_wakeup(hu); in qca_set_baudrate()
1314 if (hu->serdev) in qca_set_baudrate()
1315 serdev_device_wait_until_sent(hu->serdev, in qca_set_baudrate()
1319 if (qca_is_wcn399x(qca_soc_type(hu)) || in qca_set_baudrate()
1320 qca_is_wcn6750(qca_soc_type(hu))) in qca_set_baudrate()
1328 static inline void host_set_baudrate(struct hci_uart *hu, unsigned int speed) in host_set_baudrate() argument
1330 if (hu->serdev) in host_set_baudrate()
1331 serdev_device_set_baudrate(hu->serdev, speed); in host_set_baudrate()
1333 hci_uart_set_baudrate(hu, speed); in host_set_baudrate()
1336 static int qca_send_power_pulse(struct hci_uart *hu, bool on) in qca_send_power_pulse() argument
1352 bt_dev_dbg(hu->hdev, "sending power pulse %02x to controller", cmd); in qca_send_power_pulse()
1354 serdev_device_write_flush(hu->serdev); in qca_send_power_pulse()
1355 hci_uart_set_flow_control(hu, true); in qca_send_power_pulse()
1356 ret = serdev_device_write_buf(hu->serdev, &cmd, sizeof(cmd)); in qca_send_power_pulse()
1358 bt_dev_err(hu->hdev, "failed to send power pulse %02x", cmd); in qca_send_power_pulse()
1362 serdev_device_wait_until_sent(hu->serdev, timeout); in qca_send_power_pulse()
1363 hci_uart_set_flow_control(hu, false); in qca_send_power_pulse()
1374 static unsigned int qca_get_speed(struct hci_uart *hu, in qca_get_speed() argument
1380 if (hu->init_speed) in qca_get_speed()
1381 speed = hu->init_speed; in qca_get_speed()
1382 else if (hu->proto->init_speed) in qca_get_speed()
1383 speed = hu->proto->init_speed; in qca_get_speed()
1385 if (hu->oper_speed) in qca_get_speed()
1386 speed = hu->oper_speed; in qca_get_speed()
1387 else if (hu->proto->oper_speed) in qca_get_speed()
1388 speed = hu->proto->oper_speed; in qca_get_speed()
1394 static int qca_check_speeds(struct hci_uart *hu) in qca_check_speeds() argument
1396 if (qca_is_wcn399x(qca_soc_type(hu)) || in qca_check_speeds()
1397 qca_is_wcn6750(qca_soc_type(hu))) { in qca_check_speeds()
1398 if (!qca_get_speed(hu, QCA_INIT_SPEED) && in qca_check_speeds()
1399 !qca_get_speed(hu, QCA_OPER_SPEED)) in qca_check_speeds()
1402 if (!qca_get_speed(hu, QCA_INIT_SPEED) || in qca_check_speeds()
1403 !qca_get_speed(hu, QCA_OPER_SPEED)) in qca_check_speeds()
1410 static int qca_set_speed(struct hci_uart *hu, enum qca_speed_type speed_type) in qca_set_speed() argument
1413 struct qca_data *qca = hu->priv; in qca_set_speed()
1417 speed = qca_get_speed(hu, QCA_INIT_SPEED); in qca_set_speed()
1419 host_set_baudrate(hu, speed); in qca_set_speed()
1421 enum qca_btsoc_type soc_type = qca_soc_type(hu); in qca_set_speed()
1423 speed = qca_get_speed(hu, QCA_OPER_SPEED); in qca_set_speed()
1432 hci_uart_set_flow_control(hu, true); in qca_set_speed()
1440 bt_dev_dbg(hu->hdev, "Set UART speed to %d", speed); in qca_set_speed()
1441 ret = qca_set_baudrate(hu->hdev, qca_baudrate); in qca_set_speed()
1445 host_set_baudrate(hu, speed); in qca_set_speed()
1450 hci_uart_set_flow_control(hu, false); in qca_set_speed()
1458 bt_dev_err(hu->hdev, in qca_set_speed()
1470 static int qca_send_crashbuffer(struct hci_uart *hu) in qca_send_crashbuffer() argument
1472 struct qca_data *qca = hu->priv; in qca_send_crashbuffer()
1477 bt_dev_err(hu->hdev, "Failed to allocate memory for skb packet"); in qca_send_crashbuffer()
1488 bt_dev_info(hu->hdev, "crash the soc to collect controller dump"); in qca_send_crashbuffer()
1490 hci_uart_tx_wakeup(hu); in qca_send_crashbuffer()
1497 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_wait_for_dump_collection() local
1498 struct qca_data *qca = hu->priv; in qca_wait_for_dump_collection()
1508 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_hw_error() local
1509 struct qca_data *qca = hu->priv; in qca_hw_error()
1523 qca_send_crashbuffer(hu); in qca_hw_error()
1535 bt_dev_err(hu->hdev, "clearing allocated memory due to memdump timeout"); in qca_hw_error()
1557 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_cmd_timeout() local
1558 struct qca_data *qca = hu->priv; in qca_cmd_timeout()
1563 qca_send_crashbuffer(hu); in qca_cmd_timeout()
1580 hci_reset_dev(hu->hdev); in qca_cmd_timeout()
1588 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_wakeup() local
1595 wakeup = device_may_wakeup(&hu->serdev->ctrl->dev); in qca_wakeup()
1596 bt_dev_dbg(hu->hdev, "wakeup status : %d", wakeup); in qca_wakeup()
1601 static int qca_regulator_init(struct hci_uart *hu) in qca_regulator_init() argument
1603 enum qca_btsoc_type soc_type = qca_soc_type(hu); in qca_regulator_init()
1611 qcadev = serdev_device_get_drvdata(hu->serdev); in qca_regulator_init()
1613 serdev_device_close(hu->serdev); in qca_regulator_init()
1618 ret = serdev_device_open(hu->serdev); in qca_regulator_init()
1620 bt_dev_err(hu->hdev, "failed to open port"); in qca_regulator_init()
1627 host_set_baudrate(hu, 2400); in qca_regulator_init()
1628 ret = qca_send_power_pulse(hu, false); in qca_regulator_init()
1641 bt_dev_dbg(hu->hdev, "SW_CTRL is %d", sw_ctrl_state); in qca_regulator_init()
1645 qca_set_speed(hu, QCA_INIT_SPEED); in qca_regulator_init()
1648 ret = qca_send_power_pulse(hu, true); in qca_regulator_init()
1658 serdev_device_close(hu->serdev); in qca_regulator_init()
1659 ret = serdev_device_open(hu->serdev); in qca_regulator_init()
1661 bt_dev_err(hu->hdev, "failed to open port"); in qca_regulator_init()
1665 hci_uart_set_flow_control(hu, false); in qca_regulator_init()
1672 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_power_on() local
1673 enum qca_btsoc_type soc_type = qca_soc_type(hu); in qca_power_on()
1675 struct qca_data *qca = hu->priv; in qca_power_on()
1681 if (!hu->serdev) in qca_power_on()
1686 ret = qca_regulator_init(hu); in qca_power_on()
1688 qcadev = serdev_device_get_drvdata(hu->serdev); in qca_power_on()
1700 static int qca_setup(struct hci_uart *hu) in qca_setup() argument
1702 struct hci_dev *hdev = hu->hdev; in qca_setup()
1703 struct qca_data *qca = hu->priv; in qca_setup()
1706 enum qca_btsoc_type soc_type = qca_soc_type(hu); in qca_setup()
1707 const char *firmware_name = qca_get_firmware_name(hu); in qca_setup()
1711 ret = qca_check_speeds(hu); in qca_setup()
1746 qca_set_speed(hu, QCA_INIT_SPEED); in qca_setup()
1750 speed = qca_get_speed(hu, QCA_OPER_SPEED); in qca_setup()
1752 ret = qca_set_speed(hu, QCA_OPER_SPEED); in qca_setup()
1773 hu->hdev->hw_error = qca_hw_error; in qca_setup()
1774 hu->hdev->cmd_timeout = qca_cmd_timeout; in qca_setup()
1775 if (device_can_wakeup(hu->serdev->ctrl->dev.parent)) in qca_setup()
1776 hu->hdev->wakeup = qca_wakeup; in qca_setup()
1793 qca_power_shutdown(hu); in qca_setup()
1794 if (hu->serdev) { in qca_setup()
1795 serdev_device_close(hu->serdev); in qca_setup()
1796 ret = serdev_device_open(hu->serdev); in qca_setup()
1808 hu->hdev->set_bdaddr = qca_set_bdaddr_rome; in qca_setup()
1810 hu->hdev->set_bdaddr = qca_set_bdaddr; in qca_setup()
1886 static void qca_power_shutdown(struct hci_uart *hu) in qca_power_shutdown() argument
1889 struct qca_data *qca = hu->priv; in qca_power_shutdown()
1891 enum qca_btsoc_type soc_type = qca_soc_type(hu); in qca_power_shutdown()
1900 qca_flush(hu); in qca_power_shutdown()
1906 if (!hu->serdev) in qca_power_shutdown()
1909 qcadev = serdev_device_get_drvdata(hu->serdev); in qca_power_shutdown()
1912 host_set_baudrate(hu, 2400); in qca_power_shutdown()
1913 qca_send_power_pulse(hu, false); in qca_power_shutdown()
1921 bt_dev_dbg(hu->hdev, "SW_CTRL is %d", sw_ctrl_state); in qca_power_shutdown()
1932 struct hci_uart *hu = hci_get_drvdata(hdev); in qca_power_off() local
1933 struct qca_data *qca = hu->priv; in qca_power_off()
1934 enum qca_btsoc_type soc_type = qca_soc_type(hu); in qca_power_off()
1936 hu->hdev->hw_error = NULL; in qca_power_off()
1937 hu->hdev->cmd_timeout = NULL; in qca_power_off()
1949 qca_power_shutdown(hu); in qca_power_off()
2168 struct hci_uart *hu = &qcadev->serdev_hu; in qca_serdev_shutdown() local
2169 struct hci_dev *hdev = hu->hdev; in qca_serdev_shutdown()
2170 struct qca_data *qca = hu->priv; in qca_serdev_shutdown()
2205 struct hci_uart *hu = &qcadev->serdev_hu; in qca_suspend() local
2206 struct qca_data *qca = hu->priv; in qca_suspend()
2243 bt_dev_err(hu->hdev, "SSR or FW download time out"); in qca_suspend()
2262 serdev_device_write_flush(hu->serdev); in qca_suspend()
2264 ret = serdev_device_write_buf(hu->serdev, &cmd, sizeof(cmd)); in qca_suspend()
2291 serdev_device_wait_until_sent(hu->serdev, in qca_suspend()
2293 serial_clock_vote(HCI_IBS_TX_VOTE_CLOCK_OFF, hu); in qca_suspend()
2319 struct hci_uart *hu = &qcadev->serdev_hu; in qca_resume() local
2320 struct qca_data *qca = hu->priv; in qca_resume()