Lines Matching refs:card
219 static int btmrvl_sdio_get_rx_unit(struct btmrvl_sdio_card *card) in btmrvl_sdio_get_rx_unit() argument
224 reg = sdio_readb(card->func, card->reg->card_rx_unit, &ret); in btmrvl_sdio_get_rx_unit()
226 card->rx_unit = reg; in btmrvl_sdio_get_rx_unit()
231 static int btmrvl_sdio_read_fw_status(struct btmrvl_sdio_card *card, u16 *dat) in btmrvl_sdio_read_fw_status() argument
238 fws0 = sdio_readb(card->func, card->reg->card_fw_status0, &ret); in btmrvl_sdio_read_fw_status()
242 fws1 = sdio_readb(card->func, card->reg->card_fw_status1, &ret); in btmrvl_sdio_read_fw_status()
251 static int btmrvl_sdio_read_rx_len(struct btmrvl_sdio_card *card, u16 *dat) in btmrvl_sdio_read_rx_len() argument
256 reg = sdio_readb(card->func, card->reg->card_rx_len, &ret); in btmrvl_sdio_read_rx_len()
258 *dat = (u16) reg << card->rx_unit; in btmrvl_sdio_read_rx_len()
263 static int btmrvl_sdio_enable_host_int_mask(struct btmrvl_sdio_card *card, in btmrvl_sdio_enable_host_int_mask() argument
268 sdio_writeb(card->func, mask, card->reg->host_int_mask, &ret); in btmrvl_sdio_enable_host_int_mask()
277 static int btmrvl_sdio_disable_host_int_mask(struct btmrvl_sdio_card *card, in btmrvl_sdio_disable_host_int_mask() argument
283 host_int_mask = sdio_readb(card->func, card->reg->host_int_mask, &ret); in btmrvl_sdio_disable_host_int_mask()
289 sdio_writeb(card->func, host_int_mask, card->reg->host_int_mask, &ret); in btmrvl_sdio_disable_host_int_mask()
298 static int btmrvl_sdio_poll_card_status(struct btmrvl_sdio_card *card, u8 bits) in btmrvl_sdio_poll_card_status() argument
305 status = sdio_readb(card->func, card->reg->card_status, &ret); in btmrvl_sdio_poll_card_status()
322 static int btmrvl_sdio_verify_fw_download(struct btmrvl_sdio_card *card, in btmrvl_sdio_verify_fw_download() argument
330 sdio_claim_host(card->func); in btmrvl_sdio_verify_fw_download()
331 ret = btmrvl_sdio_read_fw_status(card, &firmwarestat); in btmrvl_sdio_verify_fw_download()
332 sdio_release_host(card->func); in btmrvl_sdio_verify_fw_download()
345 static int btmrvl_sdio_download_helper(struct btmrvl_sdio_card *card) in btmrvl_sdio_download_helper() argument
355 ret = request_firmware(&fw_helper, card->helper, in btmrvl_sdio_download_helper()
356 &card->func->dev); in btmrvl_sdio_download_helper()
388 ret = btmrvl_sdio_poll_card_status(card, in btmrvl_sdio_download_helper()
413 ret = sdio_writesb(card->func, card->ioport, helperbuf, in btmrvl_sdio_download_helper()
428 ret = sdio_writesb(card->func, card->ioport, helperbuf, in btmrvl_sdio_download_helper()
443 static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card) in btmrvl_sdio_download_fw_w_helper() argument
452 u16 len, blksz_dl = card->sd_blksz_fw_dl; in btmrvl_sdio_download_fw_w_helper()
455 ret = request_firmware(&fw_firmware, card->firmware, in btmrvl_sdio_download_fw_w_helper()
456 &card->func->dev); in btmrvl_sdio_download_fw_w_helper()
484 ret = btmrvl_sdio_poll_card_status(card, in btmrvl_sdio_download_fw_w_helper()
497 base0 = sdio_readb(card->func, in btmrvl_sdio_download_fw_w_helper()
498 card->reg->sq_read_base_addr_a0, &ret); in btmrvl_sdio_download_fw_w_helper()
507 base1 = sdio_readb(card->func, in btmrvl_sdio_download_fw_w_helper()
508 card->reg->sq_read_base_addr_a1, &ret); in btmrvl_sdio_download_fw_w_helper()
561 ret = sdio_writesb(card->func, card->ioport, fwbuf, in btmrvl_sdio_download_fw_w_helper()
567 sdio_writeb(card->func, HOST_CMD53_FIN, in btmrvl_sdio_download_fw_w_helper()
568 card->reg->cfg, &ret); in btmrvl_sdio_download_fw_w_helper()
594 struct btmrvl_sdio_card *card = priv->btmrvl_dev.card; in btmrvl_sdio_card_to_host() local
596 if (!card || !card->func) { in btmrvl_sdio_card_to_host()
603 ret = btmrvl_sdio_read_rx_len(card, &buf_len); in btmrvl_sdio_card_to_host()
637 ret = sdio_readsb(card->func, payload, card->ioport, in btmrvl_sdio_card_to_host()
713 struct btmrvl_sdio_card *card = priv->btmrvl_dev.card; in btmrvl_sdio_process_int_status() local
720 sdio_claim_host(card->func); in btmrvl_sdio_process_int_status()
732 sdio_release_host(card->func); in btmrvl_sdio_process_int_status()
737 static int btmrvl_sdio_read_to_clear(struct btmrvl_sdio_card *card, u8 *ireg) in btmrvl_sdio_read_to_clear() argument
739 struct btmrvl_adapter *adapter = card->priv->adapter; in btmrvl_sdio_read_to_clear()
742 ret = sdio_readsb(card->func, adapter->hw_regs, 0, SDIO_BLOCK_SIZE); in btmrvl_sdio_read_to_clear()
748 *ireg = adapter->hw_regs[card->reg->host_intstatus]; in btmrvl_sdio_read_to_clear()
749 BT_DBG("hw_regs[%#x]=%#x", card->reg->host_intstatus, *ireg); in btmrvl_sdio_read_to_clear()
754 static int btmrvl_sdio_write_to_clear(struct btmrvl_sdio_card *card, u8 *ireg) in btmrvl_sdio_write_to_clear() argument
758 *ireg = sdio_readb(card->func, card->reg->host_intstatus, &ret); in btmrvl_sdio_write_to_clear()
772 sdio_writeb(card->func, ~(*ireg) & (DN_LD_HOST_INT_STATUS | in btmrvl_sdio_write_to_clear()
774 card->reg->host_intstatus, &ret); in btmrvl_sdio_write_to_clear()
787 struct btmrvl_sdio_card *card; in btmrvl_sdio_interrupt() local
792 card = sdio_get_drvdata(func); in btmrvl_sdio_interrupt()
793 if (!card || !card->priv) { in btmrvl_sdio_interrupt()
795 func, card); in btmrvl_sdio_interrupt()
799 priv = card->priv; in btmrvl_sdio_interrupt()
804 if (card->reg->int_read_to_clear) in btmrvl_sdio_interrupt()
805 ret = btmrvl_sdio_read_to_clear(card, &ireg); in btmrvl_sdio_interrupt()
807 ret = btmrvl_sdio_write_to_clear(card, &ireg); in btmrvl_sdio_interrupt()
819 static int btmrvl_sdio_register_dev(struct btmrvl_sdio_card *card) in btmrvl_sdio_register_dev() argument
825 if (!card || !card->func) { in btmrvl_sdio_register_dev()
831 func = card->func; in btmrvl_sdio_register_dev()
849 ret = sdio_set_block_size(card->func, SDIO_BLOCK_SIZE); in btmrvl_sdio_register_dev()
856 reg = sdio_readb(func, card->reg->io_port_0, &ret); in btmrvl_sdio_register_dev()
862 card->ioport = reg; in btmrvl_sdio_register_dev()
864 reg = sdio_readb(func, card->reg->io_port_1, &ret); in btmrvl_sdio_register_dev()
870 card->ioport |= (reg << 8); in btmrvl_sdio_register_dev()
872 reg = sdio_readb(func, card->reg->io_port_2, &ret); in btmrvl_sdio_register_dev()
878 card->ioport |= (reg << 16); in btmrvl_sdio_register_dev()
880 BT_DBG("SDIO FUNC%d IO port: 0x%x", func->num, card->ioport); in btmrvl_sdio_register_dev()
882 if (card->reg->int_read_to_clear) { in btmrvl_sdio_register_dev()
883 reg = sdio_readb(func, card->reg->host_int_rsr, &ret); in btmrvl_sdio_register_dev()
888 sdio_writeb(func, reg | 0x3f, card->reg->host_int_rsr, &ret); in btmrvl_sdio_register_dev()
894 reg = sdio_readb(func, card->reg->card_misc_cfg, &ret); in btmrvl_sdio_register_dev()
899 sdio_writeb(func, reg | 0x10, card->reg->card_misc_cfg, &ret); in btmrvl_sdio_register_dev()
906 sdio_set_drvdata(func, card); in btmrvl_sdio_register_dev()
925 static int btmrvl_sdio_unregister_dev(struct btmrvl_sdio_card *card) in btmrvl_sdio_unregister_dev() argument
927 if (card && card->func) { in btmrvl_sdio_unregister_dev()
928 sdio_claim_host(card->func); in btmrvl_sdio_unregister_dev()
929 sdio_release_irq(card->func); in btmrvl_sdio_unregister_dev()
930 sdio_disable_func(card->func); in btmrvl_sdio_unregister_dev()
931 sdio_release_host(card->func); in btmrvl_sdio_unregister_dev()
932 sdio_set_drvdata(card->func, NULL); in btmrvl_sdio_unregister_dev()
938 static int btmrvl_sdio_enable_host_int(struct btmrvl_sdio_card *card) in btmrvl_sdio_enable_host_int() argument
942 if (!card || !card->func) in btmrvl_sdio_enable_host_int()
945 sdio_claim_host(card->func); in btmrvl_sdio_enable_host_int()
947 ret = btmrvl_sdio_enable_host_int_mask(card, HIM_ENABLE); in btmrvl_sdio_enable_host_int()
949 btmrvl_sdio_get_rx_unit(card); in btmrvl_sdio_enable_host_int()
951 sdio_release_host(card->func); in btmrvl_sdio_enable_host_int()
956 static int btmrvl_sdio_disable_host_int(struct btmrvl_sdio_card *card) in btmrvl_sdio_disable_host_int() argument
960 if (!card || !card->func) in btmrvl_sdio_disable_host_int()
963 sdio_claim_host(card->func); in btmrvl_sdio_disable_host_int()
965 ret = btmrvl_sdio_disable_host_int_mask(card, HIM_DISABLE); in btmrvl_sdio_disable_host_int()
967 sdio_release_host(card->func); in btmrvl_sdio_disable_host_int()
975 struct btmrvl_sdio_card *card = priv->btmrvl_dev.card; in btmrvl_sdio_host_to_card() local
984 if (!card || !card->func) { in btmrvl_sdio_host_to_card()
1002 sdio_claim_host(card->func); in btmrvl_sdio_host_to_card()
1006 ret = sdio_writesb(card->func, card->ioport, buf, in btmrvl_sdio_host_to_card()
1021 sdio_release_host(card->func); in btmrvl_sdio_host_to_card()
1027 static int btmrvl_sdio_download_fw(struct btmrvl_sdio_card *card) in btmrvl_sdio_download_fw() argument
1033 if (!card || !card->func) { in btmrvl_sdio_download_fw()
1038 if (!btmrvl_sdio_verify_fw_download(card, 1)) { in btmrvl_sdio_download_fw()
1043 sdio_claim_host(card->func); in btmrvl_sdio_download_fw()
1046 fws0 = sdio_readb(card->func, card->reg->card_fw_status0, &ret); in btmrvl_sdio_download_fw()
1058 if (card->helper) { in btmrvl_sdio_download_fw()
1059 ret = btmrvl_sdio_download_helper(card); in btmrvl_sdio_download_fw()
1067 if (btmrvl_sdio_download_fw_w_helper(card)) { in btmrvl_sdio_download_fw()
1074 sdio_release_host(card->func); in btmrvl_sdio_download_fw()
1080 if (btmrvl_sdio_verify_fw_download(card, pollnum)) { in btmrvl_sdio_download_fw()
1088 sdio_release_host(card->func); in btmrvl_sdio_download_fw()
1094 struct btmrvl_sdio_card *card = priv->btmrvl_dev.card; in btmrvl_sdio_wakeup_fw() local
1097 if (!card || !card->func) { in btmrvl_sdio_wakeup_fw()
1102 sdio_claim_host(card->func); in btmrvl_sdio_wakeup_fw()
1104 sdio_writeb(card->func, HOST_POWER_UP, card->reg->cfg, &ret); in btmrvl_sdio_wakeup_fw()
1106 sdio_release_host(card->func); in btmrvl_sdio_wakeup_fw()
1115 struct btmrvl_sdio_card *card = priv->btmrvl_dev.card; in btmrvl_sdio_dump_regs() local
1123 sdio_claim_host(card->func); in btmrvl_sdio_dump_regs()
1144 data = sdio_f0_readb(card->func, reg, &ret); in btmrvl_sdio_dump_regs()
1146 data = sdio_readb(card->func, reg, &ret); in btmrvl_sdio_dump_regs()
1159 sdio_release_host(card->func); in btmrvl_sdio_dump_regs()
1167 struct btmrvl_sdio_card *card = priv->btmrvl_dev.card; in btmrvl_sdio_rdwr_firmware() local
1171 sdio_writeb(card->func, FW_DUMP_HOST_READY, card->reg->fw_dump_ctrl, in btmrvl_sdio_rdwr_firmware()
1180 ctrl_data = sdio_readb(card->func, card->reg->fw_dump_ctrl, in btmrvl_sdio_rdwr_firmware()
1194 sdio_writeb(card->func, FW_DUMP_HOST_READY, in btmrvl_sdio_rdwr_firmware()
1195 card->reg->fw_dump_ctrl, &ret); in btmrvl_sdio_rdwr_firmware()
1215 struct btmrvl_sdio_card *card = priv->btmrvl_dev.card; in btmrvl_sdio_dump_firmware() local
1226 if (!card->supports_fw_dump) { in btmrvl_sdio_dump_firmware()
1242 sdio_claim_host(card->func); in btmrvl_sdio_dump_firmware()
1250 reg = card->reg->fw_dump_start; in btmrvl_sdio_dump_firmware()
1252 dump_num = sdio_readb(card->func, reg, &ret); in btmrvl_sdio_dump_firmware()
1268 reg = card->reg->fw_dump_start; in btmrvl_sdio_dump_firmware()
1270 read_reg = sdio_readb(card->func, reg, &ret); in btmrvl_sdio_dump_firmware()
1310 reg_start = card->reg->fw_dump_start; in btmrvl_sdio_dump_firmware()
1311 reg_end = card->reg->fw_dump_end; in btmrvl_sdio_dump_firmware()
1313 *dbg_ptr = sdio_readb(card->func, reg, &ret); in btmrvl_sdio_dump_firmware()
1338 sdio_release_host(card->func); in btmrvl_sdio_dump_firmware()
1389 struct btmrvl_sdio_card *card = NULL; in btmrvl_sdio_probe() local
1394 card = devm_kzalloc(&func->dev, sizeof(*card), GFP_KERNEL); in btmrvl_sdio_probe()
1395 if (!card) in btmrvl_sdio_probe()
1398 card->func = func; in btmrvl_sdio_probe()
1402 card->helper = data->helper; in btmrvl_sdio_probe()
1403 card->firmware = data->firmware; in btmrvl_sdio_probe()
1404 card->reg = data->reg; in btmrvl_sdio_probe()
1405 card->sd_blksz_fw_dl = data->sd_blksz_fw_dl; in btmrvl_sdio_probe()
1406 card->support_pscan_win_report = data->support_pscan_win_report; in btmrvl_sdio_probe()
1407 card->supports_fw_dump = data->supports_fw_dump; in btmrvl_sdio_probe()
1410 if (btmrvl_sdio_register_dev(card) < 0) { in btmrvl_sdio_probe()
1416 btmrvl_sdio_disable_host_int(card); in btmrvl_sdio_probe()
1418 if (btmrvl_sdio_download_fw(card)) { in btmrvl_sdio_probe()
1424 btmrvl_sdio_enable_host_int(card); in btmrvl_sdio_probe()
1426 priv = btmrvl_add_card(card); in btmrvl_sdio_probe()
1433 card->priv = priv; in btmrvl_sdio_probe()
1450 btmrvl_sdio_disable_host_int(card); in btmrvl_sdio_probe()
1452 btmrvl_sdio_unregister_dev(card); in btmrvl_sdio_probe()
1458 struct btmrvl_sdio_card *card; in btmrvl_sdio_remove() local
1461 card = sdio_get_drvdata(func); in btmrvl_sdio_remove()
1462 if (card) { in btmrvl_sdio_remove()
1467 btmrvl_send_module_cfg_cmd(card->priv, in btmrvl_sdio_remove()
1469 btmrvl_sdio_disable_host_int(card); in btmrvl_sdio_remove()
1472 card->priv->surprise_removed = true; in btmrvl_sdio_remove()
1473 btmrvl_sdio_unregister_dev(card); in btmrvl_sdio_remove()
1474 btmrvl_remove_card(card->priv); in btmrvl_sdio_remove()
1482 struct btmrvl_sdio_card *card; in btmrvl_sdio_suspend() local
1496 card = sdio_get_drvdata(func); in btmrvl_sdio_suspend()
1497 if (!card || !card->priv) { in btmrvl_sdio_suspend()
1506 priv = card->priv; in btmrvl_sdio_suspend()
1534 struct btmrvl_sdio_card *card; in btmrvl_sdio_resume() local
1543 card = sdio_get_drvdata(func); in btmrvl_sdio_resume()
1544 if (!card || !card->priv) { in btmrvl_sdio_resume()
1552 priv = card->priv; in btmrvl_sdio_resume()