Lines Matching refs:card
74 struct mmc_card *card; member
81 void mmc_decode_cid(struct mmc_card *card) in mmc_decode_cid() argument
83 u32 *resp = card->raw_cid; in mmc_decode_cid()
89 card->cid.manfid = UNSTUFF_BITS(resp, 120, 8); in mmc_decode_cid()
90 card->cid.oemid = UNSTUFF_BITS(resp, 104, 16); in mmc_decode_cid()
91 card->cid.prod_name[0] = UNSTUFF_BITS(resp, 96, 8); in mmc_decode_cid()
92 card->cid.prod_name[1] = UNSTUFF_BITS(resp, 88, 8); in mmc_decode_cid()
93 card->cid.prod_name[2] = UNSTUFF_BITS(resp, 80, 8); in mmc_decode_cid()
94 card->cid.prod_name[3] = UNSTUFF_BITS(resp, 72, 8); in mmc_decode_cid()
95 card->cid.prod_name[4] = UNSTUFF_BITS(resp, 64, 8); in mmc_decode_cid()
96 card->cid.hwrev = UNSTUFF_BITS(resp, 60, 4); in mmc_decode_cid()
97 card->cid.fwrev = UNSTUFF_BITS(resp, 56, 4); in mmc_decode_cid()
98 card->cid.serial = UNSTUFF_BITS(resp, 24, 32); in mmc_decode_cid()
99 card->cid.year = UNSTUFF_BITS(resp, 12, 8); in mmc_decode_cid()
100 card->cid.month = UNSTUFF_BITS(resp, 8, 4); in mmc_decode_cid()
102 card->cid.year += 2000; /* SD cards year offset */ in mmc_decode_cid()
108 static int mmc_decode_csd(struct mmc_card *card) in mmc_decode_csd() argument
110 struct mmc_csd *csd = &card->csd; in mmc_decode_csd()
112 u32 *resp = card->raw_csd; in mmc_decode_csd()
149 mmc_card_set_readonly(card); in mmc_decode_csd()
158 mmc_card_set_blockaddr(card); in mmc_decode_csd()
171 mmc_card_set_ext_capacity(card); in mmc_decode_csd()
186 mmc_card_set_readonly(card); in mmc_decode_csd()
190 mmc_hostname(card->host), csd_struct); in mmc_decode_csd()
194 card->erase_size = csd->erase_size; in mmc_decode_csd()
202 static int mmc_decode_scr(struct mmc_card *card) in mmc_decode_scr() argument
204 struct sd_scr *scr = &card->scr; in mmc_decode_scr()
208 resp[3] = card->raw_scr[1]; in mmc_decode_scr()
209 resp[2] = card->raw_scr[0]; in mmc_decode_scr()
214 mmc_hostname(card->host), scr_struct); in mmc_decode_scr()
230 card->erased_byte = 0xFF; in mmc_decode_scr()
232 card->erased_byte = 0x0; in mmc_decode_scr()
242 pr_err("%s: invalid bus width\n", mmc_hostname(card->host)); in mmc_decode_scr()
252 static int mmc_read_ssr(struct mmc_card *card) in mmc_read_ssr() argument
260 if (!(card->csd.cmdclass & CCC_APP_SPEC)) { in mmc_read_ssr()
262 mmc_hostname(card->host)); in mmc_read_ssr()
266 raw_ssr = kmalloc(sizeof(card->raw_ssr), GFP_KERNEL); in mmc_read_ssr()
270 if (mmc_app_sd_status(card, raw_ssr)) { in mmc_read_ssr()
272 mmc_hostname(card->host)); in mmc_read_ssr()
278 card->raw_ssr[i] = be32_to_cpu(raw_ssr[i]); in mmc_read_ssr()
286 au = UNSTUFF_BITS(card->raw_ssr, 428 - 384, 4); in mmc_read_ssr()
288 if (au <= 9 || card->scr.sda_spec3) { in mmc_read_ssr()
289 card->ssr.au = sd_au_size[au]; in mmc_read_ssr()
290 es = UNSTUFF_BITS(card->raw_ssr, 408 - 384, 16); in mmc_read_ssr()
291 et = UNSTUFF_BITS(card->raw_ssr, 402 - 384, 6); in mmc_read_ssr()
293 eo = UNSTUFF_BITS(card->raw_ssr, 400 - 384, 2); in mmc_read_ssr()
294 card->ssr.erase_timeout = (et * 1000) / es; in mmc_read_ssr()
295 card->ssr.erase_offset = eo * 1000; in mmc_read_ssr()
299 mmc_hostname(card->host)); in mmc_read_ssr()
306 resp[3] = card->raw_ssr[6]; in mmc_read_ssr()
308 card->erase_arg = (card->scr.sda_specx && discard_support) ? in mmc_read_ssr()
317 static int mmc_read_switch(struct mmc_card *card) in mmc_read_switch() argument
322 if (card->scr.sda_vsn < SCR_SPEC_VER_1) in mmc_read_switch()
325 if (!(card->csd.cmdclass & CCC_SWITCH)) { in mmc_read_switch()
327 mmc_hostname(card->host)); in mmc_read_switch()
340 err = mmc_sd_switch(card, 0, 0, 0, status); in mmc_read_switch()
350 mmc_hostname(card->host)); in mmc_read_switch()
357 card->sw_caps.hs_max_dtr = HIGH_SPEED_MAX_DTR; in mmc_read_switch()
359 if (card->scr.sda_spec3) { in mmc_read_switch()
360 card->sw_caps.sd3_bus_mode = status[13]; in mmc_read_switch()
362 card->sw_caps.sd3_drv_type = status[9]; in mmc_read_switch()
363 card->sw_caps.sd3_curr_limit = status[7] | status[6] << 8; in mmc_read_switch()
375 int mmc_sd_switch_hs(struct mmc_card *card) in mmc_sd_switch_hs() argument
380 if (card->scr.sda_vsn < SCR_SPEC_VER_1) in mmc_sd_switch_hs()
383 if (!(card->csd.cmdclass & CCC_SWITCH)) in mmc_sd_switch_hs()
386 if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED)) in mmc_sd_switch_hs()
389 if (card->sw_caps.hs_max_dtr == 0) in mmc_sd_switch_hs()
396 err = mmc_sd_switch(card, 1, 0, HIGH_SPEED_BUS_SPEED, status); in mmc_sd_switch_hs()
402 mmc_hostname(card->host)); in mmc_sd_switch_hs()
414 static int sd_select_driver_type(struct mmc_card *card, u8 *status) in sd_select_driver_type() argument
419 card->drive_strength = 0; in sd_select_driver_type()
421 card_drv_type = card->sw_caps.sd3_drv_type | SD_DRIVER_TYPE_B; in sd_select_driver_type()
423 drive_strength = mmc_select_drive_strength(card, in sd_select_driver_type()
424 card->sw_caps.uhs_max_dtr, in sd_select_driver_type()
428 err = mmc_sd_switch(card, 1, 2, drive_strength, status); in sd_select_driver_type()
433 mmc_hostname(card->host)); in sd_select_driver_type()
436 card->drive_strength = drive_strength; in sd_select_driver_type()
440 mmc_set_driver_type(card->host, drv_type); in sd_select_driver_type()
445 static void sd_update_bus_speed_mode(struct mmc_card *card) in sd_update_bus_speed_mode() argument
451 if (!mmc_host_uhs(card->host)) { in sd_update_bus_speed_mode()
452 card->sd_bus_speed = 0; in sd_update_bus_speed_mode()
456 if ((card->host->caps & MMC_CAP_UHS_SDR104) && in sd_update_bus_speed_mode()
457 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104)) { in sd_update_bus_speed_mode()
458 card->sd_bus_speed = UHS_SDR104_BUS_SPEED; in sd_update_bus_speed_mode()
459 } else if ((card->host->caps & MMC_CAP_UHS_DDR50) && in sd_update_bus_speed_mode()
460 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) { in sd_update_bus_speed_mode()
461 card->sd_bus_speed = UHS_DDR50_BUS_SPEED; in sd_update_bus_speed_mode()
462 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sd_update_bus_speed_mode()
463 MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode & in sd_update_bus_speed_mode()
465 card->sd_bus_speed = UHS_SDR50_BUS_SPEED; in sd_update_bus_speed_mode()
466 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sd_update_bus_speed_mode()
468 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25)) { in sd_update_bus_speed_mode()
469 card->sd_bus_speed = UHS_SDR25_BUS_SPEED; in sd_update_bus_speed_mode()
470 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sd_update_bus_speed_mode()
472 MMC_CAP_UHS_SDR12)) && (card->sw_caps.sd3_bus_mode & in sd_update_bus_speed_mode()
474 card->sd_bus_speed = UHS_SDR12_BUS_SPEED; in sd_update_bus_speed_mode()
478 static int sd_set_bus_speed_mode(struct mmc_card *card, u8 *status) in sd_set_bus_speed_mode() argument
483 switch (card->sd_bus_speed) { in sd_set_bus_speed_mode()
486 card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR; in sd_set_bus_speed_mode()
490 card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR; in sd_set_bus_speed_mode()
494 card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR; in sd_set_bus_speed_mode()
498 card->sw_caps.uhs_max_dtr = UHS_SDR25_MAX_DTR; in sd_set_bus_speed_mode()
502 card->sw_caps.uhs_max_dtr = UHS_SDR12_MAX_DTR; in sd_set_bus_speed_mode()
508 err = mmc_sd_switch(card, 1, 0, card->sd_bus_speed, status); in sd_set_bus_speed_mode()
512 if ((status[16] & 0xF) != card->sd_bus_speed) in sd_set_bus_speed_mode()
514 mmc_hostname(card->host)); in sd_set_bus_speed_mode()
516 mmc_set_timing(card->host, timing); in sd_set_bus_speed_mode()
517 mmc_set_clock(card->host, card->sw_caps.uhs_max_dtr); in sd_set_bus_speed_mode()
548 static int sd_set_current_limit(struct mmc_card *card, u8 *status) in sd_set_current_limit() argument
559 if ((card->sd_bus_speed != UHS_SDR50_BUS_SPEED) && in sd_set_current_limit()
560 (card->sd_bus_speed != UHS_SDR104_BUS_SPEED) && in sd_set_current_limit()
561 (card->sd_bus_speed != UHS_DDR50_BUS_SPEED)) in sd_set_current_limit()
568 max_current = sd_get_host_max_current(card->host); in sd_set_current_limit()
586 card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_800) in sd_set_current_limit()
589 card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_600) in sd_set_current_limit()
592 card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_400) in sd_set_current_limit()
595 card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_200) in sd_set_current_limit()
599 err = mmc_sd_switch(card, 1, 3, current_limit, status); in sd_set_current_limit()
605 mmc_hostname(card->host)); in sd_set_current_limit()
615 static int mmc_sd_init_uhs_card(struct mmc_card *card) in mmc_sd_init_uhs_card() argument
620 if (!(card->csd.cmdclass & CCC_SWITCH)) in mmc_sd_init_uhs_card()
628 err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4); in mmc_sd_init_uhs_card()
632 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4); in mmc_sd_init_uhs_card()
638 sd_update_bus_speed_mode(card); in mmc_sd_init_uhs_card()
641 err = sd_select_driver_type(card, status); in mmc_sd_init_uhs_card()
646 err = sd_set_current_limit(card, status); in mmc_sd_init_uhs_card()
651 err = sd_set_bus_speed_mode(card, status); in mmc_sd_init_uhs_card()
659 if (!mmc_host_is_spi(card->host) && in mmc_sd_init_uhs_card()
660 (card->host->ios.timing == MMC_TIMING_UHS_SDR50 || in mmc_sd_init_uhs_card()
661 card->host->ios.timing == MMC_TIMING_UHS_DDR50 || in mmc_sd_init_uhs_card()
662 card->host->ios.timing == MMC_TIMING_UHS_SDR104)) { in mmc_sd_init_uhs_card()
663 err = mmc_execute_tuning(card); in mmc_sd_init_uhs_card()
672 if (err && card->host->ios.timing == MMC_TIMING_UHS_DDR50) { in mmc_sd_init_uhs_card()
674 mmc_hostname(card->host)); in mmc_sd_init_uhs_card()
685 MMC_DEV_ATTR(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1],
686 card->raw_cid[2], card->raw_cid[3]);
687 MMC_DEV_ATTR(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1],
688 card->raw_csd[2], card->raw_csd[3]);
689 MMC_DEV_ATTR(scr, "%08x%08x\n", card->raw_scr[0], card->raw_scr[1]);
692 card->raw_ssr[0], card->raw_ssr[1], card->raw_ssr[2],
693 card->raw_ssr[3], card->raw_ssr[4], card->raw_ssr[5],
694 card->raw_ssr[6], card->raw_ssr[7], card->raw_ssr[8],
695 card->raw_ssr[9], card->raw_ssr[10], card->raw_ssr[11],
696 card->raw_ssr[12], card->raw_ssr[13], card->raw_ssr[14],
697 card->raw_ssr[15]);
698 MMC_DEV_ATTR(date, "%02d/%04d\n", card->cid.month, card->cid.year);
699 MMC_DEV_ATTR(erase_size, "%u\n", card->erase_size << 9);
700 MMC_DEV_ATTR(preferred_erase_size, "%u\n", card->pref_erase << 9);
701 MMC_DEV_ATTR(fwrev, "0x%x\n", card->cid.fwrev);
702 MMC_DEV_ATTR(hwrev, "0x%x\n", card->cid.hwrev);
703 MMC_DEV_ATTR(manfid, "0x%06x\n", card->cid.manfid);
704 MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name);
705 MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid);
706 MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial);
707 MMC_DEV_ATTR(ocr, "0x%08x\n", card->ocr);
708 MMC_DEV_ATTR(rca, "0x%04x\n", card->rca);
715 struct mmc_card *card = mmc_dev_to_card(dev); in mmc_dsr_show() local
716 struct mmc_host *host = card->host; in mmc_dsr_show()
718 if (card->csd.dsr_imp && host->dsr_req) in mmc_dsr_show()
727 MMC_DEV_ATTR(vendor, "0x%04x\n", card->cis.vendor);
728 MMC_DEV_ATTR(device, "0x%04x\n", card->cis.device);
729 MMC_DEV_ATTR(revision, "%u.%u\n", card->major_rev, card->minor_rev);
734 struct mmc_card *card = mmc_dev_to_card(dev); \
736 if (num > card->num_info) \
738 if (!card->info[num-1][0]) \
740 return sprintf(buf, "%s\n", card->info[num-1]); \
780 struct mmc_card *card = mmc_dev_to_card(dev); in sd_std_is_visible() local
790 ) && card->type != MMC_TYPE_SD_COMBO) in sd_std_is_visible()
882 int mmc_sd_get_csd(struct mmc_card *card) in mmc_sd_get_csd() argument
889 err = mmc_send_csd(card, card->raw_csd); in mmc_sd_get_csd()
893 err = mmc_decode_csd(card); in mmc_sd_get_csd()
920 int mmc_sd_setup_card(struct mmc_host *host, struct mmc_card *card, in mmc_sd_setup_card() argument
929 err = mmc_app_send_scr(card); in mmc_sd_setup_card()
933 err = mmc_decode_scr(card); in mmc_sd_setup_card()
940 err = mmc_read_ssr(card); in mmc_sd_setup_card()
945 mmc_init_erase(card); in mmc_sd_setup_card()
950 err = mmc_read_switch(card); in mmc_sd_setup_card()
977 mmc_card_set_readonly(card); in mmc_sd_setup_card()
984 unsigned mmc_sd_get_max_clock(struct mmc_card *card) in mmc_sd_get_max_clock() argument
988 if (mmc_card_hs(card)) { in mmc_sd_get_max_clock()
989 if (max_dtr > card->sw_caps.hs_max_dtr) in mmc_sd_get_max_clock()
990 max_dtr = card->sw_caps.hs_max_dtr; in mmc_sd_get_max_clock()
991 } else if (max_dtr > card->csd.max_dtr) { in mmc_sd_get_max_clock()
992 max_dtr = card->csd.max_dtr; in mmc_sd_get_max_clock()
998 static bool mmc_sd_card_using_v18(struct mmc_card *card) in mmc_sd_card_using_v18() argument
1006 return card->sw_caps.sd3_bus_mode & in mmc_sd_card_using_v18()
1010 static int sd_write_ext_reg(struct mmc_card *card, u8 fno, u8 page, u16 offset, in sd_write_ext_reg() argument
1013 struct mmc_host *host = card->host; in sd_write_ext_reg()
1051 mmc_set_data_timeout(&data, card); in sd_write_ext_reg()
1070 static int sd_read_ext_reg(struct mmc_card *card, u8 fno, u8 page, in sd_read_ext_reg() argument
1086 return mmc_send_adtc_data(card, card->host, SD_READ_EXTR_SINGLE, in sd_read_ext_reg()
1090 static int sd_parse_ext_reg_power(struct mmc_card *card, u8 fno, u8 page, in sd_parse_ext_reg_power() argument
1101 err = sd_read_ext_reg(card, fno, page, offset, 512, reg_buf); in sd_parse_ext_reg_power()
1104 mmc_hostname(card->host), err); in sd_parse_ext_reg_power()
1109 card->ext_power.rev = reg_buf[0] & 0xf; in sd_parse_ext_reg_power()
1113 card->ext_power.feature_support |= SD_EXT_POWER_OFF_NOTIFY; in sd_parse_ext_reg_power()
1117 card->ext_power.feature_support |= SD_EXT_POWER_SUSTENANCE; in sd_parse_ext_reg_power()
1121 card->ext_power.feature_support |= SD_EXT_POWER_DOWN_MODE; in sd_parse_ext_reg_power()
1123 card->ext_power.fno = fno; in sd_parse_ext_reg_power()
1124 card->ext_power.page = page; in sd_parse_ext_reg_power()
1125 card->ext_power.offset = offset; in sd_parse_ext_reg_power()
1132 static int sd_parse_ext_reg_perf(struct mmc_card *card, u8 fno, u8 page, in sd_parse_ext_reg_perf() argument
1142 err = sd_read_ext_reg(card, fno, page, offset, 512, reg_buf); in sd_parse_ext_reg_perf()
1145 mmc_hostname(card->host), err); in sd_parse_ext_reg_perf()
1150 card->ext_perf.rev = reg_buf[0]; in sd_parse_ext_reg_perf()
1154 card->ext_perf.feature_support |= SD_EXT_PERF_FX_EVENT; in sd_parse_ext_reg_perf()
1158 card->ext_perf.feature_support |= SD_EXT_PERF_CARD_MAINT; in sd_parse_ext_reg_perf()
1162 card->ext_perf.feature_support |= SD_EXT_PERF_HOST_MAINT; in sd_parse_ext_reg_perf()
1166 card->ext_perf.feature_support |= SD_EXT_PERF_CACHE; in sd_parse_ext_reg_perf()
1170 card->ext_perf.feature_support |= SD_EXT_PERF_CMD_QUEUE; in sd_parse_ext_reg_perf()
1172 card->ext_perf.fno = fno; in sd_parse_ext_reg_perf()
1173 card->ext_perf.page = page; in sd_parse_ext_reg_perf()
1174 card->ext_perf.offset = offset; in sd_parse_ext_reg_perf()
1181 static int sd_parse_ext_reg(struct mmc_card *card, u8 *gen_info_buf, in sd_parse_ext_reg() argument
1223 return sd_parse_ext_reg_power(card, fno, page, offset); in sd_parse_ext_reg()
1227 return sd_parse_ext_reg_perf(card, fno, page, offset); in sd_parse_ext_reg()
1232 static int sd_read_ext_regs(struct mmc_card *card) in sd_read_ext_regs() argument
1238 if (mmc_host_is_spi(card->host)) in sd_read_ext_regs()
1241 if (!(card->scr.cmds & SD_SCR_CMD48_SUPPORT)) in sd_read_ext_regs()
1252 err = sd_read_ext_reg(card, 0, 0, 0, 512, gen_info_buf); in sd_read_ext_regs()
1255 mmc_hostname(card->host), err); in sd_read_ext_regs()
1271 mmc_hostname(card->host)); in sd_read_ext_regs()
1281 err = sd_parse_ext_reg(card, gen_info_buf, &next_ext_addr); in sd_read_ext_regs()
1284 mmc_hostname(card->host), err); in sd_read_ext_regs()
1296 return host->card->ext_perf.feature_enabled & SD_EXT_PERF_CACHE; in sd_cache_enabled()
1301 struct mmc_card *card = host->card; in sd_flush_cache() local
1317 fno = card->ext_perf.fno; in sd_flush_cache()
1318 page = card->ext_perf.page; in sd_flush_cache()
1319 offset = card->ext_perf.offset + 261; in sd_flush_cache()
1321 err = sd_write_ext_reg(card, fno, page, offset, BIT(0)); in sd_flush_cache()
1328 err = mmc_poll_for_busy(card, SD_WRITE_EXTR_SINGLE_TIMEOUT_MS, false, in sd_flush_cache()
1337 err = sd_read_ext_reg(card, fno, page, offset, 1, reg_buf); in sd_flush_cache()
1351 static int sd_enable_cache(struct mmc_card *card) in sd_enable_cache() argument
1356 card->ext_perf.feature_enabled &= ~SD_EXT_PERF_CACHE; in sd_enable_cache()
1366 err = sd_write_ext_reg(card, card->ext_perf.fno, card->ext_perf.page, in sd_enable_cache()
1367 card->ext_perf.offset + 260, BIT(0)); in sd_enable_cache()
1370 mmc_hostname(card->host), err); in sd_enable_cache()
1374 err = mmc_poll_for_busy(card, SD_WRITE_EXTR_SINGLE_TIMEOUT_MS, false, in sd_enable_cache()
1377 card->ext_perf.feature_enabled |= SD_EXT_PERF_CACHE; in sd_enable_cache()
1393 struct mmc_card *card; in mmc_sd_init_card() local
1412 card = oldcard; in mmc_sd_init_card()
1417 card = mmc_alloc_card(host, &sd_type); in mmc_sd_init_card()
1418 if (IS_ERR(card)) in mmc_sd_init_card()
1419 return PTR_ERR(card); in mmc_sd_init_card()
1421 card->ocr = ocr; in mmc_sd_init_card()
1422 card->type = MMC_TYPE_SD; in mmc_sd_init_card()
1423 memcpy(card->raw_cid, cid, sizeof(card->raw_cid)); in mmc_sd_init_card()
1430 host->ops->init_card(host, card); in mmc_sd_init_card()
1436 err = mmc_send_relative_addr(host, &card->rca); in mmc_sd_init_card()
1442 err = mmc_sd_get_csd(card); in mmc_sd_init_card()
1446 mmc_decode_cid(card); in mmc_sd_init_card()
1453 if (card->csd.dsr_imp && host->dsr_req) in mmc_sd_init_card()
1460 err = mmc_select_card(card); in mmc_sd_init_card()
1465 err = mmc_sd_setup_card(host, card, oldcard != NULL); in mmc_sd_init_card()
1475 mmc_sd_card_using_v18(card) && in mmc_sd_init_card()
1482 err = mmc_read_switch(card); in mmc_sd_init_card()
1486 if (mmc_sd_card_using_v18(card)) { in mmc_sd_init_card()
1488 mmc_sd_init_uhs_card(card)) { in mmc_sd_init_card()
1492 mmc_remove_card(card); in mmc_sd_init_card()
1501 err = mmc_sd_init_uhs_card(card); in mmc_sd_init_card()
1508 err = mmc_sd_switch_hs(card); in mmc_sd_init_card()
1510 mmc_set_timing(card->host, MMC_TIMING_SD_HS); in mmc_sd_init_card()
1517 mmc_set_clock(host, mmc_sd_get_max_clock(card)); in mmc_sd_init_card()
1523 (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) { in mmc_sd_init_card()
1524 err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4); in mmc_sd_init_card()
1534 err = sd_read_ext_regs(card); in mmc_sd_init_card()
1540 if (card->ext_perf.feature_support & SD_EXT_PERF_CACHE) { in mmc_sd_init_card()
1541 err = sd_enable_cache(card); in mmc_sd_init_card()
1547 err = host->cqe_ops->cqe_enable(host, card); in mmc_sd_init_card()
1564 host->card = card; in mmc_sd_init_card()
1569 mmc_remove_card(card); in mmc_sd_init_card()
1579 mmc_remove_card(host->card); in mmc_sd_remove()
1580 host->card = NULL; in mmc_sd_remove()
1588 return mmc_send_status(host->card, NULL); in mmc_sd_alive()
1598 mmc_get_card(host->card, NULL); in mmc_sd_detect()
1605 mmc_put_card(host->card, NULL); in mmc_sd_detect()
1617 static int sd_can_poweroff_notify(struct mmc_card *card) in sd_can_poweroff_notify() argument
1619 return card->ext_power.feature_support & SD_EXT_POWER_OFF_NOTIFY; in sd_can_poweroff_notify()
1625 struct mmc_card *card = data->card; in sd_busy_poweroff_notify_cb() local
1633 err = sd_read_ext_reg(card, card->ext_power.fno, card->ext_power.page, in sd_busy_poweroff_notify_cb()
1634 card->ext_power.offset + 1, 1, data->reg_buf); in sd_busy_poweroff_notify_cb()
1637 mmc_hostname(card->host), err); in sd_busy_poweroff_notify_cb()
1645 static int sd_poweroff_notify(struct mmc_card *card) in sd_poweroff_notify() argument
1659 err = sd_write_ext_reg(card, card->ext_power.fno, card->ext_power.page, in sd_poweroff_notify()
1660 card->ext_power.offset + 2, BIT(0)); in sd_poweroff_notify()
1663 mmc_hostname(card->host), err); in sd_poweroff_notify()
1667 cb_data.card = card; in sd_poweroff_notify()
1669 err = __mmc_poll_for_busy(card, SD_POWEROFF_NOTIFY_TIMEOUT_MS, in sd_poweroff_notify()
1679 struct mmc_card *card = host->card; in _mmc_sd_suspend() local
1684 if (mmc_card_suspended(card)) in _mmc_sd_suspend()
1687 if (sd_can_poweroff_notify(card)) in _mmc_sd_suspend()
1688 err = sd_poweroff_notify(card); in _mmc_sd_suspend()
1694 mmc_card_set_suspended(card); in _mmc_sd_suspend()
1711 pm_runtime_disable(&host->card->dev); in mmc_sd_suspend()
1712 pm_runtime_set_suspended(&host->card->dev); in mmc_sd_suspend()
1728 if (!mmc_card_suspended(host->card)) in _mmc_sd_resume()
1731 mmc_power_up(host, host->card->ocr); in _mmc_sd_resume()
1732 err = mmc_sd_init_card(host, host->card->ocr, host->card); in _mmc_sd_resume()
1733 mmc_card_clr_suspended(host->card); in _mmc_sd_resume()
1745 pm_runtime_enable(&host->card->dev); in mmc_sd_resume()
1784 mmc_power_cycle(host, host->card->ocr); in mmc_sd_hw_reset()
1785 return mmc_sd_init_card(host, host->card->ocr, host->card); in mmc_sd_hw_reset()
1855 err = mmc_add_card(host->card); in mmc_attach_sd()
1863 mmc_remove_card(host->card); in mmc_attach_sd()
1864 host->card = NULL; in mmc_attach_sd()