Lines Matching refs:hdev
39 int btbcm_check_bdaddr(struct hci_dev *hdev) in btbcm_check_bdaddr() argument
44 skb = __hci_cmd_sync(hdev, HCI_OP_READ_BD_ADDR, 0, NULL, in btbcm_check_bdaddr()
48 bt_dev_err(hdev, "BCM: Reading device address failed (%d)", err); in btbcm_check_bdaddr()
53 bt_dev_err(hdev, "BCM: Device address length mismatch"); in btbcm_check_bdaddr()
76 bt_dev_info(hdev, "BCM: Using default device address (%pMR)", in btbcm_check_bdaddr()
78 set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks); in btbcm_check_bdaddr()
87 int btbcm_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr) in btbcm_set_bdaddr() argument
92 skb = __hci_cmd_sync(hdev, 0xfc01, 6, bdaddr, HCI_INIT_TIMEOUT); in btbcm_set_bdaddr()
95 bt_dev_err(hdev, "BCM: Change address command failed (%d)", err); in btbcm_set_bdaddr()
104 int btbcm_patchram(struct hci_dev *hdev, const struct firmware *fw) in btbcm_patchram() argument
114 skb = __hci_cmd_sync(hdev, 0xfc2e, 0, NULL, HCI_INIT_TIMEOUT); in btbcm_patchram()
117 bt_dev_err(hdev, "BCM: Download Minidrv command failed (%d)", in btbcm_patchram()
137 bt_dev_err(hdev, "BCM: Patch is corrupted"); in btbcm_patchram()
148 skb = __hci_cmd_sync(hdev, opcode, cmd->plen, cmd_param, in btbcm_patchram()
152 bt_dev_err(hdev, "BCM: Patch command %04x failed (%d)", in btbcm_patchram()
167 static int btbcm_reset(struct hci_dev *hdev) in btbcm_reset() argument
171 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT); in btbcm_reset()
174 bt_dev_err(hdev, "BCM: Reset failed (%d)", err); in btbcm_reset()
185 static struct sk_buff *btbcm_read_local_name(struct hci_dev *hdev) in btbcm_read_local_name() argument
189 skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_NAME, 0, NULL, in btbcm_read_local_name()
192 bt_dev_err(hdev, "BCM: Reading local name failed (%ld)", in btbcm_read_local_name()
198 bt_dev_err(hdev, "BCM: Local name length mismatch"); in btbcm_read_local_name()
206 static struct sk_buff *btbcm_read_local_version(struct hci_dev *hdev) in btbcm_read_local_version() argument
210 skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL, in btbcm_read_local_version()
213 bt_dev_err(hdev, "BCM: Reading local version info failed (%ld)", in btbcm_read_local_version()
219 bt_dev_err(hdev, "BCM: Local version length mismatch"); in btbcm_read_local_version()
227 static struct sk_buff *btbcm_read_verbose_config(struct hci_dev *hdev) in btbcm_read_verbose_config() argument
231 skb = __hci_cmd_sync(hdev, 0xfc79, 0, NULL, HCI_INIT_TIMEOUT); in btbcm_read_verbose_config()
233 bt_dev_err(hdev, "BCM: Read verbose config info failed (%ld)", in btbcm_read_verbose_config()
239 bt_dev_err(hdev, "BCM: Verbose config length mismatch"); in btbcm_read_verbose_config()
247 static struct sk_buff *btbcm_read_controller_features(struct hci_dev *hdev) in btbcm_read_controller_features() argument
251 skb = __hci_cmd_sync(hdev, 0xfc6e, 0, NULL, HCI_INIT_TIMEOUT); in btbcm_read_controller_features()
253 bt_dev_err(hdev, "BCM: Read controller features failed (%ld)", in btbcm_read_controller_features()
259 bt_dev_err(hdev, "BCM: Controller features length mismatch"); in btbcm_read_controller_features()
267 static struct sk_buff *btbcm_read_usb_product(struct hci_dev *hdev) in btbcm_read_usb_product() argument
271 skb = __hci_cmd_sync(hdev, 0xfc5a, 0, NULL, HCI_INIT_TIMEOUT); in btbcm_read_usb_product()
273 bt_dev_err(hdev, "BCM: Read USB product info failed (%ld)", in btbcm_read_usb_product()
279 bt_dev_err(hdev, "BCM: USB product length mismatch"); in btbcm_read_usb_product()
287 static int btbcm_read_info(struct hci_dev *hdev) in btbcm_read_info() argument
292 skb = btbcm_read_verbose_config(hdev); in btbcm_read_info()
296 bt_dev_info(hdev, "BCM: chip id %u", skb->data[1]); in btbcm_read_info()
300 skb = btbcm_read_controller_features(hdev); in btbcm_read_info()
304 bt_dev_info(hdev, "BCM: features 0x%2.2x", skb->data[1]); in btbcm_read_info()
308 skb = btbcm_read_local_name(hdev); in btbcm_read_info()
312 bt_dev_info(hdev, "%s", (char *)(skb->data + 1)); in btbcm_read_info()
349 int btbcm_initialize(struct hci_dev *hdev, char *fw_name, size_t len, in btbcm_initialize() argument
360 err = btbcm_reset(hdev); in btbcm_initialize()
365 skb = btbcm_read_local_version(hdev); in btbcm_initialize()
376 err = btbcm_read_info(hdev); in btbcm_initialize()
385 bcm_subver_table = (hdev->bus == HCI_USB) ? bcm_usb_subver_table : in btbcm_initialize()
395 if (hdev->bus == HCI_USB) { in btbcm_initialize()
397 skb = btbcm_read_usb_product(hdev); in btbcm_initialize()
411 bt_dev_info(hdev, "%s (%3.3u.%3.3u.%3.3u) build %4.4u", in btbcm_initialize()
419 int btbcm_finalize(struct hci_dev *hdev) in btbcm_finalize() argument
425 err = btbcm_initialize(hdev, fw_name, sizeof(fw_name), true); in btbcm_finalize()
429 btbcm_check_bdaddr(hdev); in btbcm_finalize()
431 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); in btbcm_finalize()
437 int btbcm_setup_patchram(struct hci_dev *hdev) in btbcm_setup_patchram() argument
445 err = btbcm_initialize(hdev, fw_name, sizeof(fw_name), false); in btbcm_setup_patchram()
449 err = request_firmware(&fw, fw_name, &hdev->dev); in btbcm_setup_patchram()
451 bt_dev_info(hdev, "BCM: Patch %s not found", fw_name); in btbcm_setup_patchram()
455 btbcm_patchram(hdev, fw); in btbcm_setup_patchram()
460 err = btbcm_initialize(hdev, fw_name, sizeof(fw_name), true); in btbcm_setup_patchram()
465 skb = btbcm_read_local_name(hdev); in btbcm_setup_patchram()
469 bt_dev_info(hdev, "%s", (char *)(skb->data + 1)); in btbcm_setup_patchram()
473 btbcm_check_bdaddr(hdev); in btbcm_setup_patchram()
475 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); in btbcm_setup_patchram()
481 int btbcm_setup_apple(struct hci_dev *hdev) in btbcm_setup_apple() argument
487 err = btbcm_reset(hdev); in btbcm_setup_apple()
492 skb = btbcm_read_verbose_config(hdev); in btbcm_setup_apple()
494 bt_dev_info(hdev, "BCM: chip id %u build %4.4u", in btbcm_setup_apple()
500 skb = btbcm_read_usb_product(hdev); in btbcm_setup_apple()
502 bt_dev_info(hdev, "BCM: product %4.4x:%4.4x", in btbcm_setup_apple()
509 skb = btbcm_read_controller_features(hdev); in btbcm_setup_apple()
511 bt_dev_info(hdev, "BCM: features 0x%2.2x", skb->data[1]); in btbcm_setup_apple()
516 skb = btbcm_read_local_name(hdev); in btbcm_setup_apple()
518 bt_dev_info(hdev, "%s", (char *)(skb->data + 1)); in btbcm_setup_apple()
522 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); in btbcm_setup_apple()