Lines Matching refs:card
41 if (mmc_card_nonstd_func_interface(func->card)) { in sdio_read_fbr()
46 ret = mmc_io_rw_direct(func->card, 0, 0, in sdio_read_fbr()
54 ret = mmc_io_rw_direct(func->card, 0, 0, in sdio_read_fbr()
66 static int sdio_init_func(struct mmc_card *card, unsigned int fn) in sdio_init_func() argument
73 func = sdio_alloc_func(card); in sdio_init_func()
79 if (!(card->quirks & MMC_QUIRK_NONSTD_SDIO)) { in sdio_init_func()
88 func->vendor = func->card->cis.vendor; in sdio_init_func()
89 func->device = func->card->cis.device; in sdio_init_func()
90 func->max_blksize = func->card->cis.blksize; in sdio_init_func()
93 card->sdio_func[fn - 1] = func; in sdio_init_func()
106 static int sdio_read_cccr(struct mmc_card *card, u32 ocr) in sdio_read_cccr() argument
114 memset(&card->cccr, 0, sizeof(struct sdio_cccr)); in sdio_read_cccr()
116 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CCCR, 0, &data); in sdio_read_cccr()
124 mmc_hostname(card->host), cccr_vsn); in sdio_read_cccr()
128 card->cccr.sdio_vsn = (data & 0xf0) >> 4; in sdio_read_cccr()
130 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_CAPS, 0, &data); in sdio_read_cccr()
135 card->cccr.multi_block = 1; in sdio_read_cccr()
137 card->cccr.low_speed = 1; in sdio_read_cccr()
139 card->cccr.wide_bus = 1; in sdio_read_cccr()
142 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_POWER, 0, &data); in sdio_read_cccr()
147 card->cccr.high_power = 1; in sdio_read_cccr()
151 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed); in sdio_read_cccr()
155 card->scr.sda_spec3 = 0; in sdio_read_cccr()
156 card->sw_caps.sd3_bus_mode = 0; in sdio_read_cccr()
157 card->sw_caps.sd3_drv_type = 0; in sdio_read_cccr()
159 card->scr.sda_spec3 = 1; in sdio_read_cccr()
160 ret = mmc_io_rw_direct(card, 0, 0, in sdio_read_cccr()
165 if (mmc_host_uhs(card->host)) { in sdio_read_cccr()
167 card->sw_caps.sd3_bus_mode in sdio_read_cccr()
171 card->sw_caps.sd3_bus_mode in sdio_read_cccr()
175 card->sw_caps.sd3_bus_mode in sdio_read_cccr()
179 ret = mmc_io_rw_direct(card, 0, 0, in sdio_read_cccr()
185 card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_A; in sdio_read_cccr()
187 card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_C; in sdio_read_cccr()
189 card->sw_caps.sd3_drv_type |= SD_DRIVER_TYPE_D; in sdio_read_cccr()
193 if (!card->sw_caps.sd3_bus_mode) { in sdio_read_cccr()
195 card->cccr.high_speed = 1; in sdio_read_cccr()
196 card->sw_caps.hs_max_dtr = 50000000; in sdio_read_cccr()
198 card->cccr.high_speed = 0; in sdio_read_cccr()
199 card->sw_caps.hs_max_dtr = 25000000; in sdio_read_cccr()
208 static int sdio_enable_wide(struct mmc_card *card) in sdio_enable_wide() argument
213 if (!(card->host->caps & MMC_CAP_4_BIT_DATA)) in sdio_enable_wide()
216 if (card->cccr.low_speed && !card->cccr.wide_bus) in sdio_enable_wide()
219 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl); in sdio_enable_wide()
225 mmc_hostname(card->host), ctrl); in sdio_enable_wide()
231 ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL); in sdio_enable_wide()
244 static int sdio_disable_cd(struct mmc_card *card) in sdio_disable_cd() argument
249 if (!mmc_card_disable_cd(card)) in sdio_disable_cd()
252 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl); in sdio_disable_cd()
258 return mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL); in sdio_disable_cd()
265 static int sdio_disable_wide(struct mmc_card *card) in sdio_disable_wide() argument
270 if (!(card->host->caps & MMC_CAP_4_BIT_DATA)) in sdio_disable_wide()
273 if (card->cccr.low_speed && !card->cccr.wide_bus) in sdio_disable_wide()
276 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_IF, 0, &ctrl); in sdio_disable_wide()
286 ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_IF, ctrl, NULL); in sdio_disable_wide()
290 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_1); in sdio_disable_wide()
296 static int sdio_enable_4bit_bus(struct mmc_card *card) in sdio_enable_4bit_bus() argument
300 if (card->type == MMC_TYPE_SDIO) in sdio_enable_4bit_bus()
301 return sdio_enable_wide(card); in sdio_enable_4bit_bus()
303 if ((card->host->caps & MMC_CAP_4_BIT_DATA) && in sdio_enable_4bit_bus()
304 (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) { in sdio_enable_4bit_bus()
305 err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4); in sdio_enable_4bit_bus()
311 err = sdio_enable_wide(card); in sdio_enable_4bit_bus()
313 mmc_app_set_bus_width(card, MMC_BUS_WIDTH_1); in sdio_enable_4bit_bus()
322 static int mmc_sdio_switch_hs(struct mmc_card *card, int enable) in mmc_sdio_switch_hs() argument
327 if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED)) in mmc_sdio_switch_hs()
330 if (!card->cccr.high_speed) in mmc_sdio_switch_hs()
333 ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed); in mmc_sdio_switch_hs()
342 ret = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_SPEED, speed, NULL); in mmc_sdio_switch_hs()
352 static int sdio_enable_hs(struct mmc_card *card) in sdio_enable_hs() argument
356 ret = mmc_sdio_switch_hs(card, true); in sdio_enable_hs()
357 if (ret <= 0 || card->type == MMC_TYPE_SDIO) in sdio_enable_hs()
360 ret = mmc_sd_switch_hs(card); in sdio_enable_hs()
362 mmc_sdio_switch_hs(card, false); in sdio_enable_hs()
367 static unsigned mmc_sdio_get_max_clock(struct mmc_card *card) in mmc_sdio_get_max_clock() argument
371 if (mmc_card_hs(card)) { in mmc_sdio_get_max_clock()
380 max_dtr = card->cis.max_dtr; in mmc_sdio_get_max_clock()
383 if (card->type == MMC_TYPE_SD_COMBO) in mmc_sdio_get_max_clock()
384 max_dtr = min(max_dtr, mmc_sd_get_max_clock(card)); in mmc_sdio_get_max_clock()
405 static void sdio_select_driver_type(struct mmc_card *card) in sdio_select_driver_type() argument
418 if (!(card->host->caps & in sdio_select_driver_type()
424 if (!card->host->ops->select_drive_strength) in sdio_select_driver_type()
427 if (card->host->caps & MMC_CAP_DRIVER_TYPE_A) in sdio_select_driver_type()
430 if (card->host->caps & MMC_CAP_DRIVER_TYPE_C) in sdio_select_driver_type()
433 if (card->host->caps & MMC_CAP_DRIVER_TYPE_D) in sdio_select_driver_type()
436 if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_A) in sdio_select_driver_type()
439 if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_C) in sdio_select_driver_type()
442 if (card->sw_caps.sd3_drv_type & SD_DRIVER_TYPE_D) in sdio_select_driver_type()
451 drive_strength = card->host->ops->select_drive_strength( in sdio_select_driver_type()
452 card->sw_caps.uhs_max_dtr, in sdio_select_driver_type()
456 err = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_DRIVE_STRENGTH, 0, in sdio_select_driver_type()
464 err = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_DRIVE_STRENGTH, in sdio_select_driver_type()
469 mmc_set_driver_type(card->host, drive_strength); in sdio_select_driver_type()
473 static int sdio_set_bus_speed_mode(struct mmc_card *card) in sdio_set_bus_speed_mode() argument
483 if (!mmc_host_uhs(card->host)) in sdio_set_bus_speed_mode()
488 if ((card->host->caps & MMC_CAP_UHS_SDR104) && in sdio_set_bus_speed_mode()
489 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104)) { in sdio_set_bus_speed_mode()
492 card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR; in sdio_set_bus_speed_mode()
493 card->sd_bus_speed = UHS_SDR104_BUS_SPEED; in sdio_set_bus_speed_mode()
494 } else if ((card->host->caps & MMC_CAP_UHS_DDR50) && in sdio_set_bus_speed_mode()
495 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) { in sdio_set_bus_speed_mode()
498 card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR; in sdio_set_bus_speed_mode()
499 card->sd_bus_speed = UHS_DDR50_BUS_SPEED; in sdio_set_bus_speed_mode()
500 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sdio_set_bus_speed_mode()
501 MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode & in sdio_set_bus_speed_mode()
505 card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR; in sdio_set_bus_speed_mode()
506 card->sd_bus_speed = UHS_SDR50_BUS_SPEED; in sdio_set_bus_speed_mode()
507 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sdio_set_bus_speed_mode()
509 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25)) { in sdio_set_bus_speed_mode()
512 card->sw_caps.uhs_max_dtr = UHS_SDR25_MAX_DTR; in sdio_set_bus_speed_mode()
513 card->sd_bus_speed = UHS_SDR25_BUS_SPEED; in sdio_set_bus_speed_mode()
514 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sdio_set_bus_speed_mode()
516 MMC_CAP_UHS_SDR12)) && (card->sw_caps.sd3_bus_mode & in sdio_set_bus_speed_mode()
520 card->sw_caps.uhs_max_dtr = UHS_SDR12_MAX_DTR; in sdio_set_bus_speed_mode()
521 card->sd_bus_speed = UHS_SDR12_BUS_SPEED; in sdio_set_bus_speed_mode()
524 err = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed); in sdio_set_bus_speed_mode()
530 err = mmc_io_rw_direct(card, 1, 0, SDIO_CCCR_SPEED, speed, NULL); in sdio_set_bus_speed_mode()
535 mmc_set_timing(card->host, timing); in sdio_set_bus_speed_mode()
536 mmc_set_clock(card->host, card->sw_caps.uhs_max_dtr); in sdio_set_bus_speed_mode()
545 static int mmc_sdio_init_uhs_card(struct mmc_card *card) in mmc_sdio_init_uhs_card() argument
549 if (!card->scr.sda_spec3) in mmc_sdio_init_uhs_card()
555 if (card->host->caps & MMC_CAP_4_BIT_DATA) { in mmc_sdio_init_uhs_card()
556 err = sdio_enable_4bit_bus(card); in mmc_sdio_init_uhs_card()
558 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4); in mmc_sdio_init_uhs_card()
564 sdio_select_driver_type(card); in mmc_sdio_init_uhs_card()
567 err = sdio_set_bus_speed_mode(card); in mmc_sdio_init_uhs_card()
575 if (!mmc_host_is_spi(card->host) && in mmc_sdio_init_uhs_card()
576 ((card->host->ios.timing == MMC_TIMING_UHS_SDR50) || in mmc_sdio_init_uhs_card()
577 (card->host->ios.timing == MMC_TIMING_UHS_SDR104))) in mmc_sdio_init_uhs_card()
578 err = mmc_execute_tuning(card); in mmc_sdio_init_uhs_card()
592 struct mmc_card *card; in mmc_sdio_init_card() local
632 card = mmc_alloc_card(host, NULL); in mmc_sdio_init_card()
633 if (IS_ERR(card)) { in mmc_sdio_init_card()
634 err = PTR_ERR(card); in mmc_sdio_init_card()
639 mmc_sd_get_cid(host, ocr & rocr, card->raw_cid, NULL) == 0) { in mmc_sdio_init_card()
640 card->type = MMC_TYPE_SD_COMBO; in mmc_sdio_init_card()
643 memcmp(card->raw_cid, oldcard->raw_cid, sizeof(card->raw_cid)) != 0)) { in mmc_sdio_init_card()
644 mmc_remove_card(card); in mmc_sdio_init_card()
648 card->type = MMC_TYPE_SDIO; in mmc_sdio_init_card()
651 mmc_remove_card(card); in mmc_sdio_init_card()
660 host->ops->init_card(host, card); in mmc_sdio_init_card()
676 mmc_remove_card(card); in mmc_sdio_init_card()
691 err = mmc_send_relative_addr(host, &card->rca); in mmc_sdio_init_card()
701 oldcard->rca = card->rca; in mmc_sdio_init_card()
707 if (!oldcard && card->type == MMC_TYPE_SD_COMBO) { in mmc_sdio_init_card()
708 err = mmc_sd_get_csd(host, card); in mmc_sdio_init_card()
712 mmc_decode_cid(card); in mmc_sdio_init_card()
719 err = mmc_select_card(card); in mmc_sdio_init_card()
724 if (card->quirks & MMC_QUIRK_NONSTD_SDIO) { in mmc_sdio_init_card()
731 mmc_set_clock(host, card->cis.max_dtr); in mmc_sdio_init_card()
733 if (card->cccr.high_speed) { in mmc_sdio_init_card()
734 mmc_set_timing(card->host, MMC_TIMING_SD_HS); in mmc_sdio_init_card()
742 memcpy(&card->cccr, host->embedded_sdio_data.cccr, sizeof(struct sdio_cccr)); in mmc_sdio_init_card()
748 err = sdio_read_cccr(card, ocr); in mmc_sdio_init_card()
757 memcpy(&card->cis, host->embedded_sdio_data.cis, sizeof(struct sdio_cis)); in mmc_sdio_init_card()
763 err = sdio_read_common_cis(card); in mmc_sdio_init_card()
771 int same = (card->cis.vendor == oldcard->cis.vendor && in mmc_sdio_init_card()
772 card->cis.device == oldcard->cis.device); in mmc_sdio_init_card()
773 mmc_remove_card(card); in mmc_sdio_init_card()
777 card = oldcard; in mmc_sdio_init_card()
779 card->ocr = ocr_card; in mmc_sdio_init_card()
780 mmc_fixup_device(card, NULL); in mmc_sdio_init_card()
782 if (card->type == MMC_TYPE_SD_COMBO) { in mmc_sdio_init_card()
783 err = mmc_sd_setup_card(host, card, oldcard != NULL); in mmc_sdio_init_card()
790 card->type = MMC_TYPE_SDIO; in mmc_sdio_init_card()
792 card->dev.type = &sd_type; in mmc_sdio_init_card()
798 err = sdio_disable_cd(card); in mmc_sdio_init_card()
804 if ((ocr & R4_18V_PRESENT) && card->sw_caps.sd3_bus_mode) { in mmc_sdio_init_card()
805 err = mmc_sdio_init_uhs_card(card); in mmc_sdio_init_card()
812 err = sdio_enable_hs(card); in mmc_sdio_init_card()
814 mmc_set_timing(card->host, MMC_TIMING_SD_HS); in mmc_sdio_init_card()
821 mmc_set_clock(host, mmc_sdio_get_max_clock(card)); in mmc_sdio_init_card()
826 err = sdio_enable_4bit_bus(card); in mmc_sdio_init_card()
828 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4); in mmc_sdio_init_card()
834 host->card = card; in mmc_sdio_init_card()
839 mmc_remove_card(card); in mmc_sdio_init_card()
853 BUG_ON(!host->card); in mmc_sdio_remove()
855 for (i = 0;i < host->card->sdio_funcs;i++) { in mmc_sdio_remove()
856 if (host->card->sdio_func[i]) { in mmc_sdio_remove()
857 sdio_remove_func(host->card->sdio_func[i]); in mmc_sdio_remove()
858 host->card->sdio_func[i] = NULL; in mmc_sdio_remove()
862 mmc_remove_card(host->card); in mmc_sdio_remove()
863 host->card = NULL; in mmc_sdio_remove()
871 return mmc_select_card(host->card); in mmc_sdio_alive()
882 BUG_ON(!host->card); in mmc_sdio_detect()
886 err = pm_runtime_get_sync(&host->card->dev); in mmc_sdio_detect()
888 pm_runtime_put_noidle(&host->card->dev); in mmc_sdio_detect()
914 pm_runtime_put_sync(&host->card->dev); in mmc_sdio_detect()
936 for (i = 0; i < host->card->sdio_funcs; i++) { in mmc_sdio_pre_suspend()
937 struct sdio_func *func = host->card->sdio_func[i]; in mmc_sdio_pre_suspend()
958 sdio_disable_wide(host->card); in mmc_sdio_suspend()
973 BUG_ON(!host->card); in mmc_sdio_resume()
980 mmc_power_up(host, host->card->ocr); in mmc_sdio_resume()
988 pm_runtime_disable(&host->card->dev); in mmc_sdio_resume()
989 pm_runtime_set_active(&host->card->dev); in mmc_sdio_resume()
990 pm_runtime_enable(&host->card->dev); in mmc_sdio_resume()
998 err = mmc_sdio_init_card(host, host->card->ocr, host->card, in mmc_sdio_resume()
1002 err = sdio_enable_4bit_bus(host->card); in mmc_sdio_resume()
1030 BUG_ON(!host->card); in mmc_sdio_power_restore()
1059 ret = mmc_sdio_init_card(host, host->card->ocr, host->card, in mmc_sdio_power_restore()
1080 mmc_power_up(host, host->card->ocr); in mmc_sdio_runtime_resume()
1104 struct mmc_card *card; in mmc_attach_sdio() local
1135 card = host->card; in mmc_attach_sdio()
1144 err = pm_runtime_set_active(&card->dev); in mmc_attach_sdio()
1151 pm_runtime_enable(&card->dev); in mmc_attach_sdio()
1159 card->sdio_funcs = 0; in mmc_attach_sdio()
1163 card->sdio_funcs = funcs = host->embedded_sdio_data.num_funcs; in mmc_attach_sdio()
1169 for (i = 0; i < funcs; i++, card->sdio_funcs++) { in mmc_attach_sdio()
1174 tmp = sdio_alloc_func(host->card); in mmc_attach_sdio()
1178 card->sdio_func[i] = tmp; in mmc_attach_sdio()
1181 tmp->vendor = card->cis.vendor; in mmc_attach_sdio()
1182 tmp->device = card->cis.device; in mmc_attach_sdio()
1185 err = sdio_init_func(host->card, i + 1); in mmc_attach_sdio()
1195 pm_runtime_enable(&card->sdio_func[i]->dev); in mmc_attach_sdio()
1202 err = mmc_add_card(host->card); in mmc_attach_sdio()
1210 err = sdio_add_func(host->card->sdio_func[i]); in mmc_attach_sdio()
1226 if (host->card) in mmc_attach_sdio()
1238 int sdio_reset_comm(struct mmc_card *card) in sdio_reset_comm() argument
1240 struct mmc_host *host = card->host; in sdio_reset_comm()
1262 err = mmc_sdio_init_card(host, rocr, card, 0); in sdio_reset_comm()