Lines Matching defs:hdev
126 struct hci_dev *hdev;
149 struct hci_dev *hdev;
286 static struct sk_buff *nxp_drv_send_cmd(struct hci_dev *hdev, u16 opcode,
290 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
298 skb = __hci_cmd_sync(hdev, opcode, plen, param, HCI_CMD_TIMEOUT);
330 static void ps_control(struct hci_dev *hdev, u8 ps_state)
332 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
353 bt_dev_dbg(hdev, "Set UART break: %s, status=%d",
368 ps_control(data->hdev, PS_STATE_SLEEP);
370 ps_control(data->hdev, PS_STATE_AWAKE);
376 struct hci_dev *hdev = data->hdev;
377 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
387 static void ps_setup(struct hci_dev *hdev)
389 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
392 psdata->hdev = hdev;
407 static int send_ps_cmd(struct hci_dev *hdev, void *data)
409 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
421 skb = nxp_drv_send_cmd(hdev, HCI_NXP_AUTO_SLEEP_MODE, sizeof(pcmd), &pcmd);
423 bt_dev_err(hdev, "Setting Power Save mode failed (%ld)", PTR_ERR(skb));
437 bt_dev_dbg(hdev, "Power Save mode response: status=%d, ps_mode=%d",
445 static int send_wakeup_method_cmd(struct hci_dev *hdev, void *data)
447 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
466 skb = nxp_drv_send_cmd(hdev, HCI_NXP_WAKEUP_METHOD, sizeof(pcmd), &pcmd);
468 bt_dev_err(hdev, "Setting wake-up method failed (%ld)", PTR_ERR(skb));
478 bt_dev_dbg(hdev, "Set Wakeup Method response: status=%d, h2c_wakeupmode=%d",
486 static void ps_init(struct hci_dev *hdev)
488 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
522 hci_cmd_sync_queue(hdev, send_wakeup_method_cmd, NULL, NULL);
524 hci_cmd_sync_queue(hdev, send_ps_cmd, NULL, NULL);
528 static int nxp_download_firmware(struct hci_dev *hdev)
530 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
552 bt_dev_err(hdev, "FW Download Timeout.");
566 static void nxp_send_ack(u8 ack, struct hci_dev *hdev)
568 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
580 static bool nxp_fw_change_baudrate(struct hci_dev *hdev, u16 req_len)
582 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
627 static bool nxp_fw_change_timeout(struct hci_dev *hdev, u16 req_len)
629 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
669 static int nxp_request_firmware(struct hci_dev *hdev, const char *fw_name)
671 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
680 bt_dev_dbg(hdev, "Request Firmware: %s", nxpdev->fw_name);
681 err = request_firmware(&nxpdev->fw, nxpdev->fw_name, &hdev->dev);
683 bt_dev_err(hdev, "Firmware file %s not found", nxpdev->fw_name);
691 static int nxp_recv_chip_ver_v1(struct hci_dev *hdev, struct sk_buff *skb)
693 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
708 nxp_send_ack(NXP_ACK_V1, hdev);
716 static int nxp_recv_fw_req_v1(struct hci_dev *hdev, struct sk_buff *skb)
718 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
732 bt_dev_dbg(hdev, "ERR: Send NAK");
733 nxp_send_ack(NXP_NAK_V1, hdev);
736 nxp_send_ack(NXP_ACK_V1, hdev);
742 nxpdev->timeout_changed = nxp_fw_change_timeout(hdev,
747 nxpdev->baudrate_changed = nxp_fw_change_baudrate(hdev,
760 if (nxp_request_firmware(hdev, nxp_data->fw_name))
763 if (nxp_request_firmware(hdev, nxp_data->helper_fw_name))
768 bt_dev_dbg(hdev, "FW Downloaded Successfully: %zu bytes",
787 bt_dev_dbg(hdev, "CRC error. Resend %d bytes of FW.", len);
824 static char *nxp_get_fw_name_from_chipid(struct hci_dev *hdev, u16 chipid,
827 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
848 bt_dev_err(hdev, "Illegal loader version %02x", loader_ver);
856 bt_dev_err(hdev, "Illegal loader version %02x", loader_ver);
859 bt_dev_err(hdev, "Unknown chip signature %04x", chipid);
865 static int nxp_recv_chip_ver_v3(struct hci_dev *hdev, struct sk_buff *skb)
868 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
877 if (!nxp_request_firmware(hdev, nxp_get_fw_name_from_chipid(hdev,
879 nxp_send_ack(NXP_ACK_V3, hdev);
886 static int nxp_recv_fw_req_v3(struct hci_dev *hdev, struct sk_buff *skb)
888 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
900 nxp_send_ack(NXP_ACK_V3, hdev);
905 nxpdev->timeout_changed = nxp_fw_change_timeout(hdev, len);
910 nxpdev->baudrate_changed = nxp_fw_change_baudrate(hdev, len);
921 bt_dev_dbg(hdev, "FW Downloaded Successfully: %zu bytes",
928 bt_dev_dbg(hdev, "FW Download received err 0x%02x from chip",
936 bt_dev_err(hdev, "Something went wrong during FW download");
937 bt_dev_err(hdev, "Please power cycle and try again");
949 static int nxp_set_baudrate_cmd(struct hci_dev *hdev, void *data)
951 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
960 skb = nxp_drv_send_cmd(hdev, HCI_NXP_SET_OPER_SPEED, 4, (u8 *)&new_baudrate);
962 bt_dev_err(hdev, "Setting baudrate failed (%ld)", PTR_ERR(skb));
972 bt_dev_dbg(hdev, "Set baudrate response: status=%d, baudrate=%d",
995 static int nxp_set_ind_reset(struct hci_dev *hdev, void *data)
1009 return hci_recv_frame(hdev, skb);
1013 static int nxp_setup(struct hci_dev *hdev)
1015 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
1019 bt_dev_dbg(hdev, "Need FW Download.");
1020 err = nxp_download_firmware(hdev);
1024 bt_dev_dbg(hdev, "FW already running.");
1033 hci_cmd_sync_queue(hdev, nxp_set_baudrate_cmd, NULL, NULL);
1036 ps_init(hdev);
1039 hci_dev_clear_flag(hdev, HCI_SETUP);
1044 static void nxp_hw_err(struct hci_dev *hdev, u8 code)
1046 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
1051 hci_dev_set_flag(hdev, HCI_SETUP);
1058 static int nxp_shutdown(struct hci_dev *hdev)
1060 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
1066 skb = nxp_drv_send_cmd(hdev, HCI_NXP_IND_RESET, 1, &pcmd);
1081 static int btnxpuart_queue_skb(struct hci_dev *hdev, struct sk_buff *skb)
1083 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
1092 static int nxp_enqueue(struct hci_dev *hdev, struct sk_buff *skb)
1094 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
1110 return btnxpuart_queue_skb(hdev, skb);
1121 hci_cmd_sync_queue(hdev, send_ps_cmd, NULL, NULL);
1140 hci_cmd_sync_queue(hdev, send_wakeup_method_cmd, NULL, NULL);
1148 hci_cmd_sync_queue(hdev, nxp_set_baudrate_cmd, NULL, NULL);
1154 hci_cmd_sync_queue(hdev, nxp_set_ind_reset, NULL, NULL);
1163 return btnxpuart_queue_skb(hdev, skb);
1185 struct hci_dev *hdev = nxpdev->hdev;
1191 hdev->stat.byte_tx += len;
1201 hdev->stat.cmd_tx++;
1204 hdev->stat.acl_tx++;
1207 hdev->stat.sco_tx++;
1216 static int btnxpuart_open(struct hci_dev *hdev)
1218 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
1223 bt_dev_err(hdev, "Unable to open UART device %s",
1231 static int btnxpuart_close(struct hci_dev *hdev)
1233 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
1244 static int btnxpuart_flush(struct hci_dev *hdev)
1246 struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
1277 nxpdev->rx_skb = h4_recv_buf(nxpdev->hdev, nxpdev->rx_skb, data, count,
1283 bt_dev_err(nxpdev->hdev, "Frame reassembly failed (%d)", err);
1288 nxpdev->hdev->stat.byte_rx += count;
1304 struct hci_dev *hdev;
1334 hdev = hci_alloc_dev();
1335 if (!hdev) {
1340 nxpdev->hdev = hdev;
1342 hdev->bus = HCI_UART;
1343 hci_set_drvdata(hdev, nxpdev);
1345 hdev->manufacturer = MANUFACTURER_NXP;
1346 hdev->open = btnxpuart_open;
1347 hdev->close = btnxpuart_close;
1348 hdev->flush = btnxpuart_flush;
1349 hdev->setup = nxp_setup;
1350 hdev->send = nxp_enqueue;
1351 hdev->hw_error = nxp_hw_err;
1352 hdev->shutdown = nxp_shutdown;
1353 SET_HCIDEV_DEV(hdev, &serdev->dev);
1355 if (hci_register_dev(hdev) < 0) {
1357 hci_free_dev(hdev);
1361 ps_setup(hdev);
1369 struct hci_dev *hdev = nxpdev->hdev;
1377 nxp_set_baudrate_cmd(hdev, NULL);
1381 hci_unregister_dev(hdev);
1382 hci_free_dev(hdev);