Lines Matching refs:card

31 MMC_DEV_ATTR(vendor, "0x%04x\n", card->cis.vendor);
32 MMC_DEV_ATTR(device, "0x%04x\n", card->cis.device);
33 MMC_DEV_ATTR(revision, "%u.%u\n", card->major_rev, card->minor_rev);
34 MMC_DEV_ATTR(ocr, "0x%08x\n", card->ocr);
35 MMC_DEV_ATTR(rca, "0x%04x\n", card->rca);
40 struct mmc_card *card = mmc_dev_to_card(dev); \
42 if (num > card->num_info) \
44 if (!card->info[num - 1][0]) \
46 return sysfs_emit(buf, "%s\n", card->info[num - 1]); \
78 if (mmc_card_nonstd_func_interface(func->card)) { in sdio_read_fbr()
83 ret = mmc_io_rw_direct(func->card, 0, 0, in sdio_read_fbr()
91 ret = mmc_io_rw_direct(func->card, 0, 0, in sdio_read_fbr()
103 static int sdio_init_func(struct mmc_card *card, unsigned int fn) in sdio_init_func() argument
111 func = sdio_alloc_func(card); in sdio_init_func()
117 if (!(card->quirks & MMC_QUIRK_NONSTD_SDIO)) { in sdio_init_func()
126 func->vendor = func->card->cis.vendor; in sdio_init_func()
127 func->device = func->card->cis.device; in sdio_init_func()
128 func->max_blksize = func->card->cis.blksize; in sdio_init_func()
131 card->sdio_func[fn - 1] = func; in sdio_init_func()
144 static int sdio_read_cccr(struct mmc_card *card, u32 ocr) in sdio_read_cccr() argument
152 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CCCR, 0, &data); in sdio_read_cccr()
160 mmc_hostname(card->host), cccr_vsn); in sdio_read_cccr()
164 card->cccr.sdio_vsn = (data & 0xf0) >> 4; in sdio_read_cccr()
166 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CAPS, 0, &data); in sdio_read_cccr()
171 card->cccr.multi_block = 1; in sdio_read_cccr()
173 card->cccr.low_speed = 1; in sdio_read_cccr()
175 card->cccr.wide_bus = 1; in sdio_read_cccr()
178 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_POWER, 0, &data); in sdio_read_cccr()
183 card->cccr.high_power = 1; in sdio_read_cccr()
187 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed); in sdio_read_cccr()
191 card->scr.sda_spec3 = 0; in sdio_read_cccr()
192 card->sw_caps.sd3_bus_mode = 0; in sdio_read_cccr()
193 card->sw_caps.sd3_drv_type = 0; in sdio_read_cccr()
195 card->scr.sda_spec3 = 1; in sdio_read_cccr()
196 ret = mmc_io_rw_direct(card, 0, 0, in sdio_read_cccr()
201 if (mmc_host_uhs(card->host)) { in sdio_read_cccr()
203 card->sw_caps.sd3_bus_mode in sdio_read_cccr()
208 card->sw_caps.sd3_bus_mode in sdio_read_cccr()
213 card->sw_caps.sd3_bus_mode in sdio_read_cccr()
218 ret = mmc_io_rw_direct(card, 0, 0, in sdio_read_cccr()
224 card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_A; in sdio_read_cccr()
226 card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_C; in sdio_read_cccr()
228 card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_D; in sdio_read_cccr()
230 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_INTERRUPT_EXT, 0, &data); in sdio_read_cccr()
236 ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_INTERRUPT_EXT, in sdio_read_cccr()
241 card->cccr.enable_async_irq = 1; in sdio_read_cccr()
246 if (!card->sw_caps.sd3_bus_mode) { in sdio_read_cccr()
248 card->cccr.high_speed = 1; in sdio_read_cccr()
249 card->sw_caps.hs_max_dtr = 50000000; in sdio_read_cccr()
251 card->cccr.high_speed = 0; in sdio_read_cccr()
252 card->sw_caps.hs_max_dtr = 25000000; in sdio_read_cccr()
261 static int sdio_enable_wide(struct mmc_card *card) in sdio_enable_wide() argument
266 if (!(card->host->caps & MMC_CAP_4_BIT_DATA)) in sdio_enable_wide()
269 if (card->cccr.low_speed && !card->cccr.wide_bus) in sdio_enable_wide()
272 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl); in sdio_enable_wide()
278 mmc_hostname(card->host), ctrl); in sdio_enable_wide()
284 ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL); in sdio_enable_wide()
297 static int sdio_disable_cd(struct mmc_card *card) in sdio_disable_cd() argument
302 if (!mmc_card_disable_cd(card)) in sdio_disable_cd()
305 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl); in sdio_disable_cd()
311 return mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL); in sdio_disable_cd()
318 static int sdio_disable_wide(struct mmc_card *card) in sdio_disable_wide() argument
323 if (!(card->host->caps & MMC_CAP_4_BIT_DATA)) in sdio_disable_wide()
326 if (card->cccr.low_speed && !card->cccr.wide_bus) in sdio_disable_wide()
329 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl); in sdio_disable_wide()
339 ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL); in sdio_disable_wide()
343 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_1); in sdio_disable_wide()
348 static int sdio_disable_4bit_bus(struct mmc_card *card) in sdio_disable_4bit_bus() argument
352 if (mmc_card_sdio(card)) in sdio_disable_4bit_bus()
355 if (!(card->host->caps & MMC_CAP_4_BIT_DATA)) in sdio_disable_4bit_bus()
358 if (!(card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) in sdio_disable_4bit_bus()
361 err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_1); in sdio_disable_4bit_bus()
366 return sdio_disable_wide(card); in sdio_disable_4bit_bus()
370 static int sdio_enable_4bit_bus(struct mmc_card *card) in sdio_enable_4bit_bus() argument
374 err = sdio_enable_wide(card); in sdio_enable_4bit_bus()
377 if (mmc_card_sdio(card)) in sdio_enable_4bit_bus()
380 if (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4) { in sdio_enable_4bit_bus()
381 err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4); in sdio_enable_4bit_bus()
383 sdio_disable_wide(card); in sdio_enable_4bit_bus()
388 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4); in sdio_enable_4bit_bus()
397 static int mmc_sdio_switch_hs(struct mmc_card *card, int enable) in mmc_sdio_switch_hs() argument
402 if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED)) in mmc_sdio_switch_hs()
405 if (!card->cccr.high_speed) in mmc_sdio_switch_hs()
408 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed); in mmc_sdio_switch_hs()
417 ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_SPEED, speed, NULL); in mmc_sdio_switch_hs()
427 static int sdio_enable_hs(struct mmc_card *card) in sdio_enable_hs() argument
431 ret = mmc_sdio_switch_hs(card, true); in sdio_enable_hs()
432 if (ret <= 0 || mmc_card_sdio(card)) in sdio_enable_hs()
435 ret = mmc_sd_switch_hs(card); in sdio_enable_hs()
437 mmc_sdio_switch_hs(card, false); in sdio_enable_hs()
442 static unsigned mmc_sdio_get_max_clock(struct mmc_card *card) in mmc_sdio_get_max_clock() argument
446 if (mmc_card_hs(card)) { in mmc_sdio_get_max_clock()
455 max_dtr = card->cis.max_dtr; in mmc_sdio_get_max_clock()
458 if (mmc_card_sd_combo(card)) in mmc_sdio_get_max_clock()
459 max_dtr = min(max_dtr, mmc_sd_get_max_clock(card)); in mmc_sdio_get_max_clock()
480 static void sdio_select_driver_type(struct mmc_card *card) in sdio_select_driver_type() argument
486 card->drive_strength = 0; in sdio_select_driver_type()
488 card_drv_type = card->sw_caps.sd3_drv_type | SD_DRIVER_TYPE_B; in sdio_select_driver_type()
490 drive_strength = mmc_select_drive_strength(card, in sdio_select_driver_type()
491 card->sw_caps.uhs_max_dtr, in sdio_select_driver_type()
496 err = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_DRIVE_STRENGTH, 0, in sdio_select_driver_type()
505 err = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_DRIVE_STRENGTH, in sdio_select_driver_type()
509 card->drive_strength = drive_strength; in sdio_select_driver_type()
513 mmc_set_driver_type(card->host, drv_type); in sdio_select_driver_type()
517 static int sdio_set_bus_speed_mode(struct mmc_card *card) in sdio_set_bus_speed_mode() argument
528 if (!mmc_host_uhs(card->host)) in sdio_set_bus_speed_mode()
533 if ((card->host->caps & MMC_CAP_UHS_SDR104) && in sdio_set_bus_speed_mode()
534 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104)) { in sdio_set_bus_speed_mode()
537 card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR; in sdio_set_bus_speed_mode()
538 card->sd_bus_speed = UHS_SDR104_BUS_SPEED; in sdio_set_bus_speed_mode()
539 } else if ((card->host->caps & MMC_CAP_UHS_DDR50) && in sdio_set_bus_speed_mode()
540 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) { in sdio_set_bus_speed_mode()
543 card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR; in sdio_set_bus_speed_mode()
544 card->sd_bus_speed = UHS_DDR50_BUS_SPEED; in sdio_set_bus_speed_mode()
545 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sdio_set_bus_speed_mode()
546 MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode & in sdio_set_bus_speed_mode()
550 card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR; in sdio_set_bus_speed_mode()
551 card->sd_bus_speed = UHS_SDR50_BUS_SPEED; in sdio_set_bus_speed_mode()
552 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sdio_set_bus_speed_mode()
554 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25)) { in sdio_set_bus_speed_mode()
557 card->sw_caps.uhs_max_dtr = UHS_SDR25_MAX_DTR; in sdio_set_bus_speed_mode()
558 card->sd_bus_speed = UHS_SDR25_BUS_SPEED; in sdio_set_bus_speed_mode()
559 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sdio_set_bus_speed_mode()
561 MMC_CAP_UHS_SDR12)) && (card->sw_caps.sd3_bus_mode & in sdio_set_bus_speed_mode()
565 card->sw_caps.uhs_max_dtr = UHS_SDR12_MAX_DTR; in sdio_set_bus_speed_mode()
566 card->sd_bus_speed = UHS_SDR12_BUS_SPEED; in sdio_set_bus_speed_mode()
569 err = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed); in sdio_set_bus_speed_mode()
575 err = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_SPEED, speed, NULL); in sdio_set_bus_speed_mode()
579 max_rate = min_not_zero(card->quirk_max_rate, in sdio_set_bus_speed_mode()
580 card->sw_caps.uhs_max_dtr); in sdio_set_bus_speed_mode()
582 mmc_set_timing(card->host, timing); in sdio_set_bus_speed_mode()
583 mmc_set_clock(card->host, max_rate); in sdio_set_bus_speed_mode()
591 static int mmc_sdio_init_uhs_card(struct mmc_card *card) in mmc_sdio_init_uhs_card() argument
595 if (!card->scr.sda_spec3) in mmc_sdio_init_uhs_card()
599 err = sdio_enable_4bit_bus(card); in mmc_sdio_init_uhs_card()
604 sdio_select_driver_type(card); in mmc_sdio_init_uhs_card()
607 err = sdio_set_bus_speed_mode(card); in mmc_sdio_init_uhs_card()
615 if (!mmc_host_is_spi(card->host) && in mmc_sdio_init_uhs_card()
616 ((card->host->ios.timing == MMC_TIMING_UHS_SDR50) || in mmc_sdio_init_uhs_card()
617 (card->host->ios.timing == MMC_TIMING_UHS_SDR104))) in mmc_sdio_init_uhs_card()
618 err = mmc_execute_tuning(card); in mmc_sdio_init_uhs_card()
624 struct mmc_card *card) in mmc_sdio_pre_init() argument
626 if (card) in mmc_sdio_pre_init()
627 mmc_remove_card(card); in mmc_sdio_pre_init()
661 struct mmc_card *card; in mmc_sdio_init_card() local
698 card = mmc_alloc_card(host, &sdio_type); in mmc_sdio_init_card()
699 if (IS_ERR(card)) in mmc_sdio_init_card()
700 return PTR_ERR(card); in mmc_sdio_init_card()
703 mmc_sd_get_cid(host, ocr & rocr, card->raw_cid, NULL) == 0) { in mmc_sdio_init_card()
704 card->type = MMC_TYPE_SD_COMBO; in mmc_sdio_init_card()
707 memcmp(card->raw_cid, oldcard->raw_cid, sizeof(card->raw_cid)) != 0)) { in mmc_sdio_init_card()
712 card->type = MMC_TYPE_SDIO; in mmc_sdio_init_card()
724 host->ops->init_card(host, card); in mmc_sdio_init_card()
725 mmc_fixup_device(card, sdio_card_init_methods); in mmc_sdio_init_card()
727 card->ocr = ocr_card; in mmc_sdio_init_card()
743 mmc_sdio_pre_init(host, ocr_card, card); in mmc_sdio_init_card()
755 err = mmc_send_relative_addr(host, &card->rca); in mmc_sdio_init_card()
765 oldcard->rca = card->rca; in mmc_sdio_init_card()
771 if (!oldcard && mmc_card_sd_combo(card)) { in mmc_sdio_init_card()
772 err = mmc_sd_get_csd(card); in mmc_sdio_init_card()
776 mmc_decode_cid(card); in mmc_sdio_init_card()
783 err = mmc_select_card(card); in mmc_sdio_init_card()
788 if (card->quirks & MMC_QUIRK_NONSTD_SDIO) { in mmc_sdio_init_card()
795 mmc_set_clock(host, card->cis.max_dtr); in mmc_sdio_init_card()
797 if (card->cccr.high_speed) { in mmc_sdio_init_card()
798 mmc_set_timing(card->host, MMC_TIMING_SD_HS); in mmc_sdio_init_card()
802 mmc_remove_card(card); in mmc_sdio_init_card()
804 host->card = card; in mmc_sdio_init_card()
813 err = sdio_read_cccr(card, ocr); in mmc_sdio_init_card()
815 mmc_sdio_pre_init(host, ocr_card, card); in mmc_sdio_init_card()
827 err = sdio_read_common_cis(card); in mmc_sdio_init_card()
832 if (card->cis.vendor == oldcard->cis.vendor && in mmc_sdio_init_card()
833 card->cis.device == oldcard->cis.device) { in mmc_sdio_init_card()
834 mmc_remove_card(card); in mmc_sdio_init_card()
835 card = oldcard; in mmc_sdio_init_card()
842 mmc_fixup_device(card, sdio_fixup_methods); in mmc_sdio_init_card()
844 if (mmc_card_sd_combo(card)) { in mmc_sdio_init_card()
845 err = mmc_sd_setup_card(host, card, oldcard != NULL); in mmc_sdio_init_card()
852 card->type = MMC_TYPE_SDIO; in mmc_sdio_init_card()
854 card->dev.type = &sd_type; in mmc_sdio_init_card()
860 err = sdio_disable_cd(card); in mmc_sdio_init_card()
866 if ((ocr & R4_18V_PRESENT) && card->sw_caps.sd3_bus_mode) { in mmc_sdio_init_card()
867 err = mmc_sdio_init_uhs_card(card); in mmc_sdio_init_card()
874 err = sdio_enable_hs(card); in mmc_sdio_init_card()
876 mmc_set_timing(card->host, MMC_TIMING_SD_HS); in mmc_sdio_init_card()
883 mmc_set_clock(host, mmc_sdio_get_max_clock(card)); in mmc_sdio_init_card()
888 err = sdio_enable_4bit_bus(card); in mmc_sdio_init_card()
901 host->card = card; in mmc_sdio_init_card()
907 if (oldcard != card) in mmc_sdio_init_card()
908 mmc_remove_card(card); in mmc_sdio_init_card()
916 ret = mmc_sdio_pre_init(host, host->card->ocr, NULL); in mmc_sdio_reinit_card()
920 return mmc_sdio_init_card(host, host->card->ocr, host->card); in mmc_sdio_reinit_card()
930 for (i = 0;i < host->card->sdio_funcs;i++) { in mmc_sdio_remove()
931 if (host->card->sdio_func[i]) { in mmc_sdio_remove()
932 sdio_remove_func(host->card->sdio_func[i]); in mmc_sdio_remove()
933 host->card->sdio_func[i] = NULL; in mmc_sdio_remove()
937 mmc_remove_card(host->card); in mmc_sdio_remove()
938 host->card = NULL; in mmc_sdio_remove()
946 return mmc_select_card(host->card); in mmc_sdio_alive()
958 err = pm_runtime_resume_and_get(&host->card->dev); in mmc_sdio_detect()
984 pm_runtime_put_sync(&host->card->dev); in mmc_sdio_detect()
1006 for (i = 0; i < host->card->sdio_funcs; i++) { in mmc_sdio_pre_suspend()
1007 struct sdio_func *func = host->card->sdio_func[i]; in mmc_sdio_pre_suspend()
1045 mmc_card_set_suspended(host->card); in mmc_sdio_suspend()
1051 sdio_disable_4bit_bus(host->card); in mmc_sdio_suspend()
1078 mmc_power_up(host, host->card->ocr); in mmc_sdio_resume()
1086 pm_runtime_disable(&host->card->dev); in mmc_sdio_resume()
1087 pm_runtime_set_active(&host->card->dev); in mmc_sdio_resume()
1088 pm_runtime_enable(&host->card->dev); in mmc_sdio_resume()
1098 err = sdio_enable_4bit_bus(host->card); in mmc_sdio_resume()
1106 mmc_card_clr_suspended(host->card); in mmc_sdio_resume()
1138 mmc_power_up(host, host->card->ocr); in mmc_sdio_runtime_resume()
1153 struct mmc_card *card = host->card; in mmc_sdio_hw_reset() local
1160 if (atomic_read(&card->sdio_funcs_probed) > 1) { in mmc_sdio_hw_reset()
1161 if (mmc_card_removed(card)) in mmc_sdio_hw_reset()
1164 mmc_card_set_removed(card); in mmc_sdio_hw_reset()
1173 mmc_power_cycle(host, card->ocr); in mmc_sdio_hw_reset()
1210 struct mmc_card *card; in mmc_attach_sdio() local
1240 card = host->card; in mmc_attach_sdio()
1250 pm_runtime_get_noresume(&card->dev); in mmc_attach_sdio()
1255 err = pm_runtime_set_active(&card->dev); in mmc_attach_sdio()
1262 pm_runtime_enable(&card->dev); in mmc_attach_sdio()
1270 card->sdio_funcs = 0; in mmc_attach_sdio()
1275 for (i = 0; i < funcs; i++, card->sdio_funcs++) { in mmc_attach_sdio()
1276 err = sdio_init_func(host->card, i + 1); in mmc_attach_sdio()
1284 pm_runtime_enable(&card->sdio_func[i]->dev); in mmc_attach_sdio()
1291 err = mmc_add_card(host->card); in mmc_attach_sdio()
1299 err = sdio_add_func(host->card->sdio_func[i]); in mmc_attach_sdio()
1305 pm_runtime_put(&card->dev); in mmc_attach_sdio()