Lines Matching refs:host
119 mmc_hostname(card->host), cccr_vsn); in sdio_read_cccr()
160 if (mmc_host_uhs(card->host)) { in sdio_read_cccr()
208 if (!(card->host->caps & MMC_CAP_4_BIT_DATA)) in sdio_enable_wide()
220 mmc_hostname(card->host), ctrl); in sdio_enable_wide()
265 if (!(card->host->caps & MMC_CAP_4_BIT_DATA)) in sdio_disable_wide()
285 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_1); in sdio_disable_wide()
297 else if ((card->host->caps & MMC_CAP_4_BIT_DATA) && in sdio_enable_4bit_bus()
309 mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4); in sdio_enable_4bit_bus()
325 if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED)) in mmc_sdio_switch_hs()
436 mmc_set_driver_type(card->host, drv_type); in sdio_select_driver_type()
450 if (!mmc_host_uhs(card->host)) in sdio_set_bus_speed_mode()
455 if ((card->host->caps & MMC_CAP_UHS_SDR104) && in sdio_set_bus_speed_mode()
461 } else if ((card->host->caps & MMC_CAP_UHS_DDR50) && in sdio_set_bus_speed_mode()
467 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sdio_set_bus_speed_mode()
474 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sdio_set_bus_speed_mode()
481 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sdio_set_bus_speed_mode()
502 mmc_set_timing(card->host, timing); in sdio_set_bus_speed_mode()
503 mmc_set_clock(card->host, card->sw_caps.uhs_max_dtr); in sdio_set_bus_speed_mode()
522 if (card->host->caps & MMC_CAP_4_BIT_DATA) in mmc_sdio_init_uhs_card()
537 if (!mmc_host_is_spi(card->host) && in mmc_sdio_init_uhs_card()
538 ((card->host->ios.timing == MMC_TIMING_UHS_SDR50) || in mmc_sdio_init_uhs_card()
539 (card->host->ios.timing == MMC_TIMING_UHS_SDR104))) in mmc_sdio_init_uhs_card()
551 static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr, in mmc_sdio_init_card() argument
560 BUG_ON(!host); in mmc_sdio_init_card()
561 WARN_ON(!host->claimed); in mmc_sdio_init_card()
564 if (mmc_host_uhs(host)) in mmc_sdio_init_card()
569 pr_warn("%s: Skipping voltage switch\n", mmc_hostname(host)); in mmc_sdio_init_card()
577 err = mmc_send_io_op_cond(host, ocr, &rocr); in mmc_sdio_init_card()
585 if (mmc_host_is_spi(host)) { in mmc_sdio_init_card()
586 err = mmc_spi_set_crc(host, use_spi_crc); in mmc_sdio_init_card()
594 card = mmc_alloc_card(host, NULL); in mmc_sdio_init_card()
601 mmc_sd_get_cid(host, ocr & rocr, card->raw_cid, NULL) == 0) { in mmc_sdio_init_card()
621 if (host->ops->init_card) in mmc_sdio_init_card()
622 host->ops->init_card(host, card); in mmc_sdio_init_card()
632 err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180, in mmc_sdio_init_card()
635 sdio_reset(host); in mmc_sdio_init_card()
636 mmc_go_idle(host); in mmc_sdio_init_card()
637 mmc_send_if_cond(host, host->ocr_avail); in mmc_sdio_init_card()
652 if (!powered_resume && !mmc_host_is_spi(host)) { in mmc_sdio_init_card()
653 err = mmc_send_relative_addr(host, &card->rca); in mmc_sdio_init_card()
670 err = mmc_sd_get_csd(host, card); in mmc_sdio_init_card()
680 if (!powered_resume && !mmc_host_is_spi(host)) { in mmc_sdio_init_card()
693 mmc_set_clock(host, card->cis.max_dtr); in mmc_sdio_init_card()
696 mmc_set_timing(card->host, MMC_TIMING_SD_HS); in mmc_sdio_init_card()
729 err = mmc_sd_setup_card(host, card, oldcard != NULL); in mmc_sdio_init_card()
732 mmc_go_idle(host); in mmc_sdio_init_card()
733 if (mmc_host_is_spi(host)) in mmc_sdio_init_card()
735 mmc_spi_set_crc(host, use_spi_crc); in mmc_sdio_init_card()
760 mmc_set_timing(card->host, MMC_TIMING_SD_HS); in mmc_sdio_init_card()
767 mmc_set_clock(host, mmc_sdio_get_max_clock(card)); in mmc_sdio_init_card()
778 host->card = card; in mmc_sdio_init_card()
792 static void mmc_sdio_remove(struct mmc_host *host) in mmc_sdio_remove() argument
796 BUG_ON(!host); in mmc_sdio_remove()
797 BUG_ON(!host->card); in mmc_sdio_remove()
799 for (i = 0;i < host->card->sdio_funcs;i++) { in mmc_sdio_remove()
800 if (host->card->sdio_func[i]) { in mmc_sdio_remove()
801 sdio_remove_func(host->card->sdio_func[i]); in mmc_sdio_remove()
802 host->card->sdio_func[i] = NULL; in mmc_sdio_remove()
806 mmc_remove_card(host->card); in mmc_sdio_remove()
807 host->card = NULL; in mmc_sdio_remove()
813 static int mmc_sdio_alive(struct mmc_host *host) in mmc_sdio_alive() argument
815 return mmc_select_card(host->card); in mmc_sdio_alive()
821 static void mmc_sdio_detect(struct mmc_host *host) in mmc_sdio_detect() argument
825 BUG_ON(!host); in mmc_sdio_detect()
826 BUG_ON(!host->card); in mmc_sdio_detect()
829 if (host->caps & MMC_CAP_POWER_OFF_CARD) { in mmc_sdio_detect()
830 err = pm_runtime_get_sync(&host->card->dev); in mmc_sdio_detect()
832 pm_runtime_put_noidle(&host->card->dev); in mmc_sdio_detect()
837 mmc_claim_host(host); in mmc_sdio_detect()
842 err = _mmc_detect_card_removed(host); in mmc_sdio_detect()
844 mmc_release_host(host); in mmc_sdio_detect()
857 if (host->caps & MMC_CAP_POWER_OFF_CARD) in mmc_sdio_detect()
858 pm_runtime_put_sync(&host->card->dev); in mmc_sdio_detect()
862 mmc_sdio_remove(host); in mmc_sdio_detect()
864 mmc_claim_host(host); in mmc_sdio_detect()
865 mmc_detach_bus(host); in mmc_sdio_detect()
866 mmc_power_off(host); in mmc_sdio_detect()
867 mmc_release_host(host); in mmc_sdio_detect()
876 static int mmc_sdio_pre_suspend(struct mmc_host *host) in mmc_sdio_pre_suspend() argument
880 for (i = 0; i < host->card->sdio_funcs; i++) { in mmc_sdio_pre_suspend()
881 struct sdio_func *func = host->card->sdio_func[i]; in mmc_sdio_pre_suspend()
898 static int mmc_sdio_suspend(struct mmc_host *host) in mmc_sdio_suspend() argument
900 mmc_claim_host(host); in mmc_sdio_suspend()
902 if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) in mmc_sdio_suspend()
903 sdio_disable_wide(host->card); in mmc_sdio_suspend()
905 if (!mmc_card_keep_power(host)) { in mmc_sdio_suspend()
906 mmc_power_off(host); in mmc_sdio_suspend()
907 } else if (host->retune_period) { in mmc_sdio_suspend()
908 mmc_retune_timer_stop(host); in mmc_sdio_suspend()
909 mmc_retune_needed(host); in mmc_sdio_suspend()
912 mmc_release_host(host); in mmc_sdio_suspend()
917 static int mmc_sdio_resume(struct mmc_host *host) in mmc_sdio_resume() argument
921 BUG_ON(!host); in mmc_sdio_resume()
922 BUG_ON(!host->card); in mmc_sdio_resume()
925 mmc_claim_host(host); in mmc_sdio_resume()
928 if (!mmc_card_keep_power(host)) { in mmc_sdio_resume()
929 mmc_power_up(host, host->card->ocr); in mmc_sdio_resume()
936 if (host->caps & MMC_CAP_POWER_OFF_CARD) { in mmc_sdio_resume()
937 pm_runtime_disable(&host->card->dev); in mmc_sdio_resume()
938 pm_runtime_set_active(&host->card->dev); in mmc_sdio_resume()
939 pm_runtime_enable(&host->card->dev); in mmc_sdio_resume()
944 if (mmc_card_is_removable(host) || !mmc_card_keep_power(host)) { in mmc_sdio_resume()
945 sdio_reset(host); in mmc_sdio_resume()
946 mmc_go_idle(host); in mmc_sdio_resume()
947 mmc_send_if_cond(host, host->card->ocr); in mmc_sdio_resume()
948 err = mmc_send_io_op_cond(host, 0, NULL); in mmc_sdio_resume()
950 err = mmc_sdio_init_card(host, host->card->ocr, in mmc_sdio_resume()
951 host->card, in mmc_sdio_resume()
952 mmc_card_keep_power(host)); in mmc_sdio_resume()
953 } else if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) { in mmc_sdio_resume()
955 err = sdio_enable_4bit_bus(host->card); in mmc_sdio_resume()
958 if (!err && host->sdio_irqs) { in mmc_sdio_resume()
959 if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) in mmc_sdio_resume()
960 wake_up_process(host->sdio_irq_thread); in mmc_sdio_resume()
961 else if (host->caps & MMC_CAP_SDIO_IRQ) in mmc_sdio_resume()
962 host->ops->enable_sdio_irq(host, 1); in mmc_sdio_resume()
965 mmc_release_host(host); in mmc_sdio_resume()
967 host->pm_flags &= ~MMC_PM_KEEP_POWER; in mmc_sdio_resume()
971 static int mmc_sdio_power_restore(struct mmc_host *host) in mmc_sdio_power_restore() argument
975 BUG_ON(!host); in mmc_sdio_power_restore()
976 BUG_ON(!host->card); in mmc_sdio_power_restore()
978 mmc_claim_host(host); in mmc_sdio_power_restore()
997 sdio_reset(host); in mmc_sdio_power_restore()
998 mmc_go_idle(host); in mmc_sdio_power_restore()
999 mmc_send_if_cond(host, host->card->ocr); in mmc_sdio_power_restore()
1001 ret = mmc_send_io_op_cond(host, 0, NULL); in mmc_sdio_power_restore()
1005 ret = mmc_sdio_init_card(host, host->card->ocr, host->card, in mmc_sdio_power_restore()
1006 mmc_card_keep_power(host)); in mmc_sdio_power_restore()
1007 if (!ret && host->sdio_irqs) in mmc_sdio_power_restore()
1008 mmc_signal_sdio_irq(host); in mmc_sdio_power_restore()
1011 mmc_release_host(host); in mmc_sdio_power_restore()
1016 static int mmc_sdio_runtime_suspend(struct mmc_host *host) in mmc_sdio_runtime_suspend() argument
1019 mmc_claim_host(host); in mmc_sdio_runtime_suspend()
1020 mmc_power_off(host); in mmc_sdio_runtime_suspend()
1021 mmc_release_host(host); in mmc_sdio_runtime_suspend()
1026 static int mmc_sdio_runtime_resume(struct mmc_host *host) in mmc_sdio_runtime_resume() argument
1031 mmc_claim_host(host); in mmc_sdio_runtime_resume()
1032 mmc_power_up(host, host->card->ocr); in mmc_sdio_runtime_resume()
1033 ret = mmc_sdio_power_restore(host); in mmc_sdio_runtime_resume()
1034 mmc_release_host(host); in mmc_sdio_runtime_resume()
1039 static int mmc_sdio_reset(struct mmc_host *host) in mmc_sdio_reset() argument
1041 mmc_power_cycle(host, host->card->ocr); in mmc_sdio_reset()
1042 return mmc_sdio_power_restore(host); in mmc_sdio_reset()
1062 int mmc_attach_sdio(struct mmc_host *host) in mmc_attach_sdio() argument
1068 BUG_ON(!host); in mmc_attach_sdio()
1069 WARN_ON(!host->claimed); in mmc_attach_sdio()
1071 err = mmc_send_io_op_cond(host, 0, &ocr); in mmc_attach_sdio()
1075 mmc_attach_bus(host, &mmc_sdio_ops); in mmc_attach_sdio()
1076 if (host->ocr_avail_sdio) in mmc_attach_sdio()
1077 host->ocr_avail = host->ocr_avail_sdio; in mmc_attach_sdio()
1080 rocr = mmc_select_voltage(host, ocr); in mmc_attach_sdio()
1093 err = mmc_sdio_init_card(host, rocr, NULL, 0); in mmc_attach_sdio()
1097 card = host->card; in mmc_attach_sdio()
1102 if (host->caps & MMC_CAP_POWER_OFF_CARD) { in mmc_attach_sdio()
1127 err = sdio_init_func(host->card, i + 1); in mmc_attach_sdio()
1134 if (host->caps & MMC_CAP_POWER_OFF_CARD) in mmc_attach_sdio()
1141 mmc_release_host(host); in mmc_attach_sdio()
1142 err = mmc_add_card(host->card); in mmc_attach_sdio()
1150 err = sdio_add_func(host->card->sdio_func[i]); in mmc_attach_sdio()
1155 mmc_claim_host(host); in mmc_attach_sdio()
1161 mmc_sdio_remove(host); in mmc_attach_sdio()
1162 mmc_claim_host(host); in mmc_attach_sdio()
1165 mmc_release_host(host); in mmc_attach_sdio()
1166 if (host->card) in mmc_attach_sdio()
1167 mmc_sdio_remove(host); in mmc_attach_sdio()
1168 mmc_claim_host(host); in mmc_attach_sdio()
1170 mmc_detach_bus(host); in mmc_attach_sdio()
1173 mmc_hostname(host), err); in mmc_attach_sdio()