Lines Matching refs:hu

141 	struct hci_uart *hu;
234 static void qca_power_shutdown(struct hci_uart *hu);
239 static enum qca_btsoc_type qca_soc_type(struct hci_uart *hu)
243 if (hu->serdev) {
244 struct qca_serdev *qsd = serdev_device_get_drvdata(hu->serdev);
254 static const char *qca_get_firmware_name(struct hci_uart *hu)
256 if (hu->serdev) {
257 struct qca_serdev *qsd = serdev_device_get_drvdata(hu->serdev);
282 static void serial_clock_vote(unsigned long vote, struct hci_uart *hu)
284 struct qca_data *qca = hu->priv;
329 __serial_clock_on(hu->tty);
331 __serial_clock_off(hu->tty);
352 static int send_hci_ibs_cmd(u8 cmd, struct hci_uart *hu)
356 struct qca_data *qca = hu->priv;
358 BT_DBG("hu %p send hci ibs cmd 0x%x", hu, cmd);
378 struct hci_uart *hu = qca->hu;
382 BT_DBG("hu %p wq awake device", hu);
385 serial_clock_vote(HCI_IBS_TX_VOTE_CLOCK_ON, hu);
390 if (send_hci_ibs_cmd(HCI_IBS_WAKE_IND, hu) < 0)
402 hci_uart_tx_wakeup(hu);
409 struct hci_uart *hu = qca->hu;
412 BT_DBG("hu %p wq awake rx", hu);
414 serial_clock_vote(HCI_IBS_RX_VOTE_CLOCK_ON, hu);
422 if (send_hci_ibs_cmd(HCI_IBS_WAKE_ACK, hu) < 0)
430 hci_uart_tx_wakeup(hu);
437 struct hci_uart *hu = qca->hu;
439 BT_DBG("hu %p rx clock vote off", hu);
441 serial_clock_vote(HCI_IBS_RX_VOTE_CLOCK_OFF, hu);
448 struct hci_uart *hu = qca->hu;
450 BT_DBG("hu %p tx clock vote off", hu);
453 hci_uart_tx_wakeup(hu);
458 serial_clock_vote(HCI_IBS_TX_VOTE_CLOCK_OFF, hu);
464 struct hci_uart *hu = qca->hu;
467 BT_DBG("hu %p idle timeout in %d state", hu, qca->tx_ibs_state);
475 if (send_hci_ibs_cmd(HCI_IBS_SLEEP_IND, hu) < 0) {
497 struct hci_uart *hu = qca->hu;
501 BT_DBG("hu %p wake retransmit timeout in %d state",
502 hu, qca->tx_ibs_state);
517 if (send_hci_ibs_cmd(HCI_IBS_WAKE_IND, hu) < 0) {
536 hci_uart_tx_wakeup(hu);
544 struct hci_uart *hu = qca->hu;
553 hci_reset_dev(hu->hdev);
562 static int qca_open(struct hci_uart *hu)
567 BT_DBG("hu %p qca_open", hu);
569 if (!hci_uart_has_flow_control(hu))
597 qca->hu = hu;
606 hu->priv = qca;
608 if (hu->serdev) {
609 qcadev = serdev_device_get_drvdata(hu->serdev);
617 hu->init_speed = qcadev->init_speed;
625 hu->oper_speed = qcadev->oper_speed;
642 struct hci_uart *hu = hci_get_drvdata(hdev);
643 struct qca_data *qca = hu->priv;
690 static int qca_flush(struct hci_uart *hu)
692 struct qca_data *qca = hu->priv;
694 BT_DBG("hu %p qca flush", hu);
703 static int qca_close(struct hci_uart *hu)
705 struct qca_data *qca = hu->priv;
707 BT_DBG("hu %p qca close", hu);
709 serial_clock_vote(HCI_IBS_VOTE_STATS_UPDATE, hu);
723 qca->hu = NULL;
727 hu->priv = NULL;
736 static void device_want_to_wakeup(struct hci_uart *hu)
739 struct qca_data *qca = hu->priv;
741 BT_DBG("hu %p want to wake up", hu);
766 if (send_hci_ibs_cmd(HCI_IBS_WAKE_ACK, hu) < 0) {
783 hci_uart_tx_wakeup(hu);
788 static void device_want_to_sleep(struct hci_uart *hu)
791 struct qca_data *qca = hu->priv;
793 BT_DBG("hu %p want to sleep in %d state", hu, qca->rx_ibs_state);
824 static void device_woke_up(struct hci_uart *hu)
827 struct qca_data *qca = hu->priv;
830 BT_DBG("hu %p woke up", hu);
871 hci_uart_tx_wakeup(hu);
877 static int qca_enqueue(struct hci_uart *hu, struct sk_buff *skb)
880 struct qca_data *qca = hu->priv;
882 BT_DBG("hu %p qca enq skb %p tx_ibs_state %d", hu, skb,
887 bt_dev_dbg(hu->hdev, "SSR is in progress");
947 struct hci_uart *hu = hci_get_drvdata(hdev);
949 BT_DBG("hu %p recv hci ibs cmd 0x%x", hu, HCI_IBS_SLEEP_IND);
951 device_want_to_sleep(hu);
959 struct hci_uart *hu = hci_get_drvdata(hdev);
961 BT_DBG("hu %p recv hci ibs cmd 0x%x", hu, HCI_IBS_WAKE_IND);
963 device_want_to_wakeup(hu);
971 struct hci_uart *hu = hci_get_drvdata(hdev);
973 BT_DBG("hu %p recv hci ibs cmd 0x%x", hu, HCI_IBS_WAKE_ACK);
975 device_woke_up(hu);
996 struct hci_uart *hu = hci_get_drvdata(hdev);
997 struct qca_data *qca = hu->priv;
1012 hu->serdev->dev.driver->name);
1020 struct hci_uart *hu = qca->hu;
1028 enum qca_btsoc_type soc_type = qca_soc_type(hu);
1071 bt_dev_err(hu->hdev, "Rx invalid memdump size");
1084 ret = hci_devcd_init(hu->hdev, qca_memdump->ram_dump_size);
1085 bt_dev_info(hu->hdev, "hci_devcd_init Return:%d",
1097 bt_dev_info(hu->hdev, "QCA collecting dump of size:%u",
1106 bt_dev_err(hu->hdev, "QCA: Discarding other packets");
1123 bt_dev_err(hu->hdev, "QCA controller missed packet:%d",
1128 bt_dev_err(hu->hdev,
1133 hci_devcd_append_pattern(hu->hdev, 0x00,
1143 bt_dev_err(hu->hdev,
1147 bt_dev_dbg(hu->hdev,
1150 hci_devcd_append(hu->hdev, skb);
1154 bt_dev_err(hu->hdev,
1160 bt_dev_info(hu->hdev,
1164 hci_devcd_complete(hu->hdev);
1180 struct hci_uart *hu = hci_get_drvdata(hdev);
1181 struct qca_data *qca = hu->priv;
1192 struct hci_uart *hu = hci_get_drvdata(hdev);
1193 struct qca_data *qca = hu->priv;
1257 static int qca_recv(struct hci_uart *hu, const void *data, int count)
1259 struct qca_data *qca = hu->priv;
1261 if (!test_bit(HCI_UART_REGISTERED, &hu->flags))
1264 qca->rx_skb = h4_recv_buf(hu->hdev, qca->rx_skb, data, count,
1268 bt_dev_err(hu->hdev, "Frame reassembly failed (%d)", err);
1276 static struct sk_buff *qca_dequeue(struct hci_uart *hu)
1278 struct qca_data *qca = hu->priv;
1321 struct hci_uart *hu = hci_get_drvdata(hdev);
1322 struct qca_data *qca = hu->priv;
1342 hci_uart_tx_wakeup(hu);
1349 if (hu->serdev)
1350 serdev_device_wait_until_sent(hu->serdev,
1354 switch (qca_soc_type(hu)) {
1372 static inline void host_set_baudrate(struct hci_uart *hu, unsigned int speed)
1374 if (hu->serdev)
1375 serdev_device_set_baudrate(hu->serdev, speed);
1377 hci_uart_set_baudrate(hu, speed);
1380 static int qca_send_power_pulse(struct hci_uart *hu, bool on)
1396 bt_dev_dbg(hu->hdev, "sending power pulse %02x to controller", cmd);
1398 serdev_device_write_flush(hu->serdev);
1399 hci_uart_set_flow_control(hu, true);
1400 ret = serdev_device_write_buf(hu->serdev, &cmd, sizeof(cmd));
1402 bt_dev_err(hu->hdev, "failed to send power pulse %02x", cmd);
1406 serdev_device_wait_until_sent(hu->serdev, timeout);
1407 hci_uart_set_flow_control(hu, false);
1418 static unsigned int qca_get_speed(struct hci_uart *hu,
1424 if (hu->init_speed)
1425 speed = hu->init_speed;
1426 else if (hu->proto->init_speed)
1427 speed = hu->proto->init_speed;
1429 if (hu->oper_speed)
1430 speed = hu->oper_speed;
1431 else if (hu->proto->oper_speed)
1432 speed = hu->proto->oper_speed;
1438 static int qca_check_speeds(struct hci_uart *hu)
1440 switch (qca_soc_type(hu)) {
1448 if (!qca_get_speed(hu, QCA_INIT_SPEED) &&
1449 !qca_get_speed(hu, QCA_OPER_SPEED))
1454 if (!qca_get_speed(hu, QCA_INIT_SPEED) ||
1455 !qca_get_speed(hu, QCA_OPER_SPEED))
1462 static int qca_set_speed(struct hci_uart *hu, enum qca_speed_type speed_type)
1465 struct qca_data *qca = hu->priv;
1469 speed = qca_get_speed(hu, QCA_INIT_SPEED);
1471 host_set_baudrate(hu, speed);
1473 enum qca_btsoc_type soc_type = qca_soc_type(hu);
1475 speed = qca_get_speed(hu, QCA_OPER_SPEED);
1490 hci_uart_set_flow_control(hu, true);
1508 bt_dev_dbg(hu->hdev, "Set UART speed to %d", speed);
1509 ret = qca_set_baudrate(hu->hdev, qca_baudrate);
1513 host_set_baudrate(hu, speed);
1524 hci_uart_set_flow_control(hu, false);
1538 bt_dev_err(hu->hdev,
1554 static int qca_send_crashbuffer(struct hci_uart *hu)
1556 struct qca_data *qca = hu->priv;
1561 bt_dev_err(hu->hdev, "Failed to allocate memory for skb packet");
1572 bt_dev_info(hu->hdev, "crash the soc to collect controller dump");
1574 hci_uart_tx_wakeup(hu);
1581 struct hci_uart *hu = hci_get_drvdata(hdev);
1582 struct qca_data *qca = hu->priv;
1592 struct hci_uart *hu = hci_get_drvdata(hdev);
1593 struct qca_data *qca = hu->priv;
1607 qca_send_crashbuffer(hu);
1619 bt_dev_err(hu->hdev, "clearing allocated memory due to memdump timeout");
1620 hci_devcd_abort(hu->hdev);
1641 struct hci_uart *hu = hci_get_drvdata(hdev);
1642 struct qca_data *qca = hu->priv;
1647 qca_send_crashbuffer(hu);
1664 hci_reset_dev(hu->hdev);
1672 struct hci_uart *hu = hci_get_drvdata(hdev);
1679 wakeup = device_may_wakeup(&hu->serdev->ctrl->dev);
1680 bt_dev_dbg(hu->hdev, "wakeup status : %d", wakeup);
1685 static int qca_regulator_init(struct hci_uart *hu)
1687 enum qca_btsoc_type soc_type = qca_soc_type(hu);
1695 qcadev = serdev_device_get_drvdata(hu->serdev);
1697 serdev_device_close(hu->serdev);
1702 ret = serdev_device_open(hu->serdev);
1704 bt_dev_err(hu->hdev, "failed to open port");
1715 host_set_baudrate(hu, 2400);
1716 ret = qca_send_power_pulse(hu, false);
1733 bt_dev_dbg(hu->hdev, "SW_CTRL is %d", sw_ctrl_state);
1737 qca_set_speed(hu, QCA_INIT_SPEED);
1744 ret = qca_send_power_pulse(hu, true);
1758 serdev_device_close(hu->serdev);
1759 ret = serdev_device_open(hu->serdev);
1761 bt_dev_err(hu->hdev, "failed to open port");
1765 hci_uart_set_flow_control(hu, false);
1772 struct hci_uart *hu = hci_get_drvdata(hdev);
1773 enum qca_btsoc_type soc_type = qca_soc_type(hu);
1775 struct qca_data *qca = hu->priv;
1781 if (!hu->serdev)
1792 ret = qca_regulator_init(hu);
1796 qcadev = serdev_device_get_drvdata(hu->serdev);
1818 static int qca_setup(struct hci_uart *hu)
1820 struct hci_dev *hdev = hu->hdev;
1821 struct qca_data *qca = hu->priv;
1824 enum qca_btsoc_type soc_type = qca_soc_type(hu);
1825 const char *firmware_name = qca_get_firmware_name(hu);
1830 ret = qca_check_speeds(hu);
1904 qca_set_speed(hu, QCA_INIT_SPEED);
1908 speed = qca_get_speed(hu, QCA_OPER_SPEED);
1910 ret = qca_set_speed(hu, QCA_OPER_SPEED);
1940 hu->hdev->hw_error = qca_hw_error;
1941 hu->hdev->cmd_timeout = qca_cmd_timeout;
1942 if (device_can_wakeup(hu->serdev->ctrl->dev.parent))
1943 hu->hdev->wakeup = qca_wakeup;
1960 qca_power_shutdown(hu);
1961 if (hu->serdev) {
1962 serdev_device_close(hu->serdev);
1963 ret = serdev_device_open(hu->serdev);
1975 hu->hdev->set_bdaddr = qca_set_bdaddr_rome;
1977 hu->hdev->set_bdaddr = qca_set_bdaddr;
2096 static void qca_power_shutdown(struct hci_uart *hu)
2099 struct qca_data *qca = hu->priv;
2101 enum qca_btsoc_type soc_type = qca_soc_type(hu);
2110 qca_flush(hu);
2116 if (!hu->serdev)
2119 qcadev = serdev_device_get_drvdata(hu->serdev);
2126 host_set_baudrate(hu, 2400);
2127 qca_send_power_pulse(hu, false);
2138 bt_dev_dbg(hu->hdev, "SW_CTRL is %d", sw_ctrl_state);
2151 struct hci_uart *hu = hci_get_drvdata(hdev);
2152 struct qca_data *qca = hu->priv;
2153 enum qca_btsoc_type soc_type = qca_soc_type(hu);
2155 hu->hdev->hw_error = NULL;
2156 hu->hdev->cmd_timeout = NULL;
2168 qca_power_shutdown(hu);
2410 struct hci_uart *hu = &qcadev->serdev_hu;
2411 struct hci_dev *hdev = hu->hdev;
2412 struct qca_data *qca = hu->priv;
2447 struct hci_uart *hu = &qcadev->serdev_hu;
2448 struct qca_data *qca = hu->priv;
2485 bt_dev_err(hu->hdev, "SSR or FW download time out");
2504 serdev_device_write_flush(hu->serdev);
2506 ret = serdev_device_write_buf(hu->serdev, &cmd, sizeof(cmd));
2533 serdev_device_wait_until_sent(hu->serdev,
2535 serial_clock_vote(HCI_IBS_TX_VOTE_CLOCK_OFF, hu);
2561 struct hci_uart *hu = &qcadev->serdev_hu;
2562 struct qca_data *qca = hu->priv;
2604 struct hci_uart *hu = &qcadev->serdev_hu;
2605 struct hci_dev *hdev = hu->hdev;