Lines Matching +full:pm +full:- +full:alive

1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * Copyright 2006-2007 Pierre Ossman
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);
42 if (num > card->num_info) \
43 return -ENODATA; \
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()
79 func->class = SDIO_CLASS_NONE; in sdio_read_fbr()
83 ret = mmc_io_rw_direct(func->card, 0, 0, in sdio_read_fbr()
84 SDIO_FBR_BASE(func->num) + SDIO_FBR_STD_IF, 0, &data); in sdio_read_fbr()
91 ret = mmc_io_rw_direct(func->card, 0, 0, in sdio_read_fbr()
92 SDIO_FBR_BASE(func->num) + SDIO_FBR_STD_IF_EXT, 0, &data); in sdio_read_fbr()
97 func->class = data; in sdio_read_fbr()
109 return -EINVAL; in sdio_init_func()
115 func->num = fn; 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()
160 mmc_hostname(card->host), cccr_vsn); in sdio_read_cccr()
161 return -EINVAL; in sdio_read_cccr()
164 card->cccr.sdio_vsn = (data & 0xf0) >> 4; 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()
183 card->cccr.high_power = 1; 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()
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()
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()
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()
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()
278 mmc_hostname(card->host), ctrl); in sdio_enable_wide()
280 /* set as 4-bit bus width */ in sdio_enable_wide()
292 * If desired, disconnect the pull-up resistor on CD/DAT[3] (pin 1)
295 * pull-up. As a result, card detection is disabled and power is saved.
316 * put back into 1-bit mode.
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()
343 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_1); in sdio_disable_wide()
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()
380 if (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4) { in sdio_enable_4bit_bus()
388 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4); in sdio_enable_4bit_bus()
395 * Test if the card supports high-speed mode and, if so, switch to it.
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()
425 * Enable SDIO/combo card's high-speed mode. Return 0/1 if [not]supported.
450 * high-speed, but it seems that 50 MHz is in mmc_sdio_get_max_clock()
455 max_dtr = card->cis.max_dtr; in mmc_sdio_get_max_clock()
461 max_dtr = min_not_zero(max_dtr, card->quirk_max_rate); in mmc_sdio_get_max_clock()
488 card->drive_strength = 0; in sdio_select_driver_type()
490 card_drv_type = card->sw_caps.sd3_drv_type | SD_DRIVER_TYPE_B; in sdio_select_driver_type()
493 card->sw_caps.uhs_max_dtr, in sdio_select_driver_type()
511 card->drive_strength = drive_strength; in sdio_select_driver_type()
515 mmc_set_driver_type(card->host, drv_type); in sdio_select_driver_type()
527 * If the host doesn't support any of the UHS-I modes, fallback on in sdio_set_bus_speed_mode()
530 if (!mmc_host_uhs(card->host)) in sdio_set_bus_speed_mode()
535 if ((card->host->caps & MMC_CAP_UHS_SDR104) && in sdio_set_bus_speed_mode()
536 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104)) { in sdio_set_bus_speed_mode()
539 card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR; in sdio_set_bus_speed_mode()
540 card->sd_bus_speed = UHS_SDR104_BUS_SPEED; in sdio_set_bus_speed_mode()
541 } else if ((card->host->caps & MMC_CAP_UHS_DDR50) && in sdio_set_bus_speed_mode()
542 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) { in sdio_set_bus_speed_mode()
545 card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR; in sdio_set_bus_speed_mode()
546 card->sd_bus_speed = UHS_DDR50_BUS_SPEED; in sdio_set_bus_speed_mode()
547 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sdio_set_bus_speed_mode()
548 MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode & in sdio_set_bus_speed_mode()
552 card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR; in sdio_set_bus_speed_mode()
553 card->sd_bus_speed = UHS_SDR50_BUS_SPEED; in sdio_set_bus_speed_mode()
554 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sdio_set_bus_speed_mode()
556 (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25)) { in sdio_set_bus_speed_mode()
559 card->sw_caps.uhs_max_dtr = UHS_SDR25_MAX_DTR; in sdio_set_bus_speed_mode()
560 card->sd_bus_speed = UHS_SDR25_BUS_SPEED; in sdio_set_bus_speed_mode()
561 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sdio_set_bus_speed_mode()
563 MMC_CAP_UHS_SDR12)) && (card->sw_caps.sd3_bus_mode & in sdio_set_bus_speed_mode()
567 card->sw_caps.uhs_max_dtr = UHS_SDR12_MAX_DTR; in sdio_set_bus_speed_mode()
568 card->sd_bus_speed = UHS_SDR12_BUS_SPEED; in sdio_set_bus_speed_mode()
581 max_rate = min_not_zero(card->quirk_max_rate, in sdio_set_bus_speed_mode()
582 card->sw_caps.uhs_max_dtr); in sdio_set_bus_speed_mode()
584 mmc_set_timing(card->host, timing); in sdio_set_bus_speed_mode()
585 mmc_set_clock(card->host, max_rate); in sdio_set_bus_speed_mode()
591 * UHS-I specific initialization procedure
597 if (!card->scr.sda_spec3) in mmc_sdio_init_uhs_card()
615 * SDR104 mode SD-cards. Note that tuning is mandatory for SDR104. in mmc_sdio_init_uhs_card()
617 if (!mmc_host_is_spi(card->host) && in mmc_sdio_init_uhs_card()
618 ((card->host->ios.timing == MMC_TIMING_UHS_SDR50) || in mmc_sdio_init_uhs_card()
619 (card->host->ios.timing == MMC_TIMING_UHS_SDR104))) in mmc_sdio_init_uhs_card()
642 * is not necessary for non-removable cards. However, it is required in mmc_sdio_pre_init()
669 WARN_ON(!host->claimed); in mmc_sdio_init_card()
705 mmc_sd_get_cid(host, ocr & rocr, card->raw_cid, NULL) == 0) { in mmc_sdio_init_card()
706 card->type = MMC_TYPE_SD_COMBO; in mmc_sdio_init_card()
709 memcmp(card->raw_cid, oldcard->raw_cid, sizeof(card->raw_cid)) != 0)) { in mmc_sdio_init_card()
710 err = -ENOENT; in mmc_sdio_init_card()
714 card->type = MMC_TYPE_SDIO; in mmc_sdio_init_card()
717 err = -ENOENT; in mmc_sdio_init_card()
725 if (host->ops->init_card) in mmc_sdio_init_card()
726 host->ops->init_card(host, card); in mmc_sdio_init_card()
729 card->ocr = ocr_card; in mmc_sdio_init_card()
732 * If the host and card support UHS-I mode request the card in mmc_sdio_init_card()
744 if (err == -EAGAIN) { in mmc_sdio_init_card()
746 retries--; in mmc_sdio_init_card()
757 err = mmc_send_relative_addr(host, &card->rca); in mmc_sdio_init_card()
763 * device -- we're doing this so that it's updated in the in mmc_sdio_init_card()
767 oldcard->rca = card->rca; in mmc_sdio_init_card()
790 if (card->quirks & MMC_QUIRK_NONSTD_SDIO) { in mmc_sdio_init_card()
792 * This is non-standard SDIO device, meaning it doesn't in mmc_sdio_init_card()
797 mmc_set_clock(host, card->cis.max_dtr); in mmc_sdio_init_card()
799 if (card->cccr.high_speed) { in mmc_sdio_init_card()
800 mmc_set_timing(card->host, MMC_TIMING_SD_HS); in mmc_sdio_init_card()
806 host->card = card; in mmc_sdio_init_card()
834 if (card->cis.vendor == oldcard->cis.vendor && in mmc_sdio_init_card()
835 card->cis.device == oldcard->cis.device) { in mmc_sdio_init_card()
839 err = -ENOENT; in mmc_sdio_init_card()
848 /* handle as SDIO-only card if memory init failed */ in mmc_sdio_init_card()
854 card->type = MMC_TYPE_SDIO; in mmc_sdio_init_card()
856 card->dev.type = &sd_type; in mmc_sdio_init_card()
860 * If needed, disconnect card detection pull-up resistor. in mmc_sdio_init_card()
866 /* Initialization sequence for UHS-I cards */ in mmc_sdio_init_card()
868 if ((ocr & R4_18V_PRESENT) && card->sw_caps.sd3_bus_mode) { in mmc_sdio_init_card()
874 * Switch to high-speed (if supported). in mmc_sdio_init_card()
878 mmc_set_timing(card->host, MMC_TIMING_SD_HS); in mmc_sdio_init_card()
895 if (host->caps2 & MMC_CAP2_AVOID_3_3V && in mmc_sdio_init_card()
896 host->ios.signal_voltage == MMC_SIGNAL_VOLTAGE_330) { in mmc_sdio_init_card()
899 err = -EINVAL; in mmc_sdio_init_card()
903 host->card = card; in mmc_sdio_init_card()
918 ret = mmc_sdio_pre_init(host, host->card->ocr, NULL); in mmc_sdio_reinit_card()
922 return mmc_sdio_init_card(host, host->card->ocr, host->card); in mmc_sdio_reinit_card()
932 for (i = 0;i < host->card->sdio_funcs;i++) { in mmc_sdio_remove()
933 if (host->card->sdio_func[i]) { in mmc_sdio_remove()
934 sdio_remove_func(host->card->sdio_func[i]); in mmc_sdio_remove()
935 host->card->sdio_func[i] = NULL; in mmc_sdio_remove()
939 mmc_remove_card(host->card); in mmc_sdio_remove()
940 host->card = NULL; in mmc_sdio_remove()
944 * Card detection - card is alive.
948 return mmc_select_card(host->card); in mmc_sdio_alive()
959 if (host->caps & MMC_CAP_POWER_OFF_CARD) { in mmc_sdio_detect()
960 err = pm_runtime_resume_and_get(&host->card->dev); in mmc_sdio_detect()
975 * Tell PM core it's OK to power off the card now. in mmc_sdio_detect()
985 if (host->caps & MMC_CAP_POWER_OFF_CARD) in mmc_sdio_detect()
986 pm_runtime_put_sync(&host->card->dev); in mmc_sdio_detect()
1008 for (i = 0; i < host->card->sdio_funcs; i++) { in mmc_sdio_pre_suspend()
1009 struct sdio_func *func = host->card->sdio_func[i]; in mmc_sdio_pre_suspend()
1010 if (func && sdio_func_present(func) && func->dev.driver) { in mmc_sdio_pre_suspend()
1011 const struct dev_pm_ops *pmops = func->dev.driver->pm; in mmc_sdio_pre_suspend()
1012 if (!pmops || !pmops->suspend || !pmops->resume) in mmc_sdio_pre_suspend()
1023 "missing suspend/resume ops for non-removable SDIO card\n"); in mmc_sdio_pre_suspend()
1024 /* Don't remove a non-removable card - we can't re-detect it. */ in mmc_sdio_pre_suspend()
1028 /* Remove the SDIO card and let it be re-detected later on. */ in mmc_sdio_pre_suspend()
1034 host->pm_flags = 0; in mmc_sdio_pre_suspend()
1044 WARN_ON(host->sdio_irqs && !mmc_card_keep_power(host)); in mmc_sdio_suspend()
1047 mmc_card_set_suspended(host->card); in mmc_sdio_suspend()
1048 cancel_work_sync(&host->sdio_irq_work); in mmc_sdio_suspend()
1053 sdio_disable_4bit_bus(host->card); in mmc_sdio_suspend()
1057 } else if (host->retune_period) { in mmc_sdio_suspend()
1080 mmc_power_up(host, host->card->ocr); in mmc_sdio_resume()
1082 * Tell runtime PM core we just powered up the card, in mmc_sdio_resume()
1084 * Note that currently runtime PM is only enabled in mmc_sdio_resume()
1087 if (host->caps & MMC_CAP_POWER_OFF_CARD) { in mmc_sdio_resume()
1088 pm_runtime_disable(&host->card->dev); in mmc_sdio_resume()
1089 pm_runtime_set_active(&host->card->dev); in mmc_sdio_resume()
1090 pm_runtime_enable(&host->card->dev); in mmc_sdio_resume()
1095 * We may have switched to 1-bit mode during suspend, in mmc_sdio_resume()
1097 * 4-bit mode or 8 bit mode. in mmc_sdio_resume()
1100 err = sdio_enable_4bit_bus(host->card); in mmc_sdio_resume()
1108 mmc_card_clr_suspended(host->card); in mmc_sdio_resume()
1110 if (host->sdio_irqs) { in mmc_sdio_resume()
1111 if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) in mmc_sdio_resume()
1112 wake_up_process(host->sdio_irq_thread); in mmc_sdio_resume()
1113 else if (host->caps & MMC_CAP_SDIO_IRQ) in mmc_sdio_resume()
1114 schedule_work(&host->sdio_irq_work); in mmc_sdio_resume()
1120 host->pm_flags &= ~MMC_PM_KEEP_POWER; in mmc_sdio_resume()
1138 /* Restore power and re-initialize. */ in mmc_sdio_runtime_resume()
1140 mmc_power_up(host, host->card->ocr); in mmc_sdio_runtime_resume()
1155 struct mmc_card *card = host->card; in mmc_sdio_hw_reset()
1160 * re-detected, thus all func drivers becomes informed about it. in mmc_sdio_hw_reset()
1162 if (atomic_read(&card->sdio_funcs_probed) > 1) { in mmc_sdio_hw_reset()
1165 host->rescan_entered = 0; in mmc_sdio_hw_reset()
1175 mmc_power_cycle(host, card->ocr); in mmc_sdio_hw_reset()
1181 mmc_set_clock(host, host->f_init); in mmc_sdio_sw_reset()
1199 .alive = mmc_sdio_alive,
1214 WARN_ON(!host->claimed); in mmc_attach_sdio()
1221 if (host->ocr_avail_sdio) in mmc_attach_sdio()
1222 host->ocr_avail = host->ocr_avail_sdio; in mmc_attach_sdio()
1231 err = -EINVAL; in mmc_attach_sdio()
1242 card = host->card; in mmc_attach_sdio()
1245 * Enable runtime PM only if supported by host+card+board in mmc_attach_sdio()
1247 if (host->caps & MMC_CAP_POWER_OFF_CARD) { in mmc_attach_sdio()
1252 pm_runtime_get_noresume(&card->dev); in mmc_attach_sdio()
1255 * Let runtime PM core know our card is active in mmc_attach_sdio()
1257 err = pm_runtime_set_active(&card->dev); in mmc_attach_sdio()
1262 * Enable runtime PM for this card in mmc_attach_sdio()
1264 pm_runtime_enable(&card->dev); in mmc_attach_sdio()
1272 card->sdio_funcs = 0; in mmc_attach_sdio()
1277 for (i = 0; i < funcs; i++, card->sdio_funcs++) { in mmc_attach_sdio()
1278 err = sdio_init_func(host->card, i + 1); in mmc_attach_sdio()
1283 * Enable Runtime PM for this func (if supported) in mmc_attach_sdio()
1285 if (host->caps & MMC_CAP_POWER_OFF_CARD) in mmc_attach_sdio()
1286 pm_runtime_enable(&card->sdio_func[i]->dev); in mmc_attach_sdio()
1293 err = mmc_add_card(host->card); in mmc_attach_sdio()
1301 err = sdio_add_func(host->card->sdio_func[i]); in mmc_attach_sdio()
1306 if (host->caps & MMC_CAP_POWER_OFF_CARD) in mmc_attach_sdio()
1307 pm_runtime_put(&card->dev); in mmc_attach_sdio()
1318 * runtime PM. Similarly we also don't pm_runtime_put() the SDIO card in mmc_attach_sdio()