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()
416 if (!(card->host->caps & in sdio_select_driver_type()
422 if (!card->host->ops->select_drive_strength) in sdio_select_driver_type()
425 if (card->host->caps & MMC_CAP_DRIVER_TYPE_A) in sdio_select_driver_type()
428 if (card->host->caps & MMC_CAP_DRIVER_TYPE_C) in sdio_select_driver_type()
431 if (card->host->caps & MMC_CAP_DRIVER_TYPE_D) in sdio_select_driver_type()
449 drive_strength = card->host->ops->select_drive_strength( in sdio_select_driver_type()
467 mmc_set_driver_type(card->host, drive_strength); in sdio_select_driver_type()
481 if (!mmc_host_uhs(card->host)) in sdio_set_bus_speed_mode()
486 if ((card->host->caps & MMC_CAP_UHS_SDR104) && in sdio_set_bus_speed_mode()
492 } else if ((card->host->caps & MMC_CAP_UHS_DDR50) && in sdio_set_bus_speed_mode()
498 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sdio_set_bus_speed_mode()
505 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sdio_set_bus_speed_mode()
512 } else if ((card->host->caps & (MMC_CAP_UHS_SDR104 | in sdio_set_bus_speed_mode()
533 mmc_set_timing(card->host, timing); in sdio_set_bus_speed_mode()
534 mmc_set_clock(card->host, card->sw_caps.uhs_max_dtr); in sdio_set_bus_speed_mode()
553 if (card->host->caps & MMC_CAP_4_BIT_DATA) in mmc_sdio_init_uhs_card()
568 if (!mmc_host_is_spi(card->host) && in mmc_sdio_init_uhs_card()
569 ((card->host->ios.timing == MMC_TIMING_UHS_SDR50) || in mmc_sdio_init_uhs_card()
570 (card->host->ios.timing == MMC_TIMING_UHS_SDR104))) in mmc_sdio_init_uhs_card()
582 static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr, in mmc_sdio_init_card() argument
591 BUG_ON(!host); in mmc_sdio_init_card()
592 WARN_ON(!host->claimed); in mmc_sdio_init_card()
595 if (mmc_host_uhs(host)) in mmc_sdio_init_card()
600 pr_warn("%s: Skipping voltage switch\n", mmc_hostname(host)); in mmc_sdio_init_card()
608 err = mmc_send_io_op_cond(host, ocr, &rocr); in mmc_sdio_init_card()
616 if (mmc_host_is_spi(host)) { in mmc_sdio_init_card()
617 err = mmc_spi_set_crc(host, use_spi_crc); in mmc_sdio_init_card()
625 card = mmc_alloc_card(host, NULL); in mmc_sdio_init_card()
632 mmc_sd_get_cid(host, ocr & rocr, card->raw_cid, NULL) == 0) { in mmc_sdio_init_card()
652 if (host->ops->init_card) in mmc_sdio_init_card()
653 host->ops->init_card(host, card); in mmc_sdio_init_card()
663 err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180, in mmc_sdio_init_card()
666 sdio_reset(host); in mmc_sdio_init_card()
667 mmc_go_idle(host); in mmc_sdio_init_card()
668 mmc_send_if_cond(host, host->ocr_avail); in mmc_sdio_init_card()
683 if (!powered_resume && !mmc_host_is_spi(host)) { in mmc_sdio_init_card()
684 err = mmc_send_relative_addr(host, &card->rca); in mmc_sdio_init_card()
701 err = mmc_sd_get_csd(host, card); in mmc_sdio_init_card()
711 if (!powered_resume && !mmc_host_is_spi(host)) { in mmc_sdio_init_card()
724 mmc_set_clock(host, card->cis.max_dtr); in mmc_sdio_init_card()
727 mmc_set_timing(card->host, MMC_TIMING_SD_HS); in mmc_sdio_init_card()
760 err = mmc_sd_setup_card(host, card, oldcard != NULL); in mmc_sdio_init_card()
763 mmc_go_idle(host); in mmc_sdio_init_card()
764 if (mmc_host_is_spi(host)) in mmc_sdio_init_card()
766 mmc_spi_set_crc(host, use_spi_crc); in mmc_sdio_init_card()
791 mmc_set_timing(card->host, MMC_TIMING_SD_HS); in mmc_sdio_init_card()
798 mmc_set_clock(host, mmc_sdio_get_max_clock(card)); in mmc_sdio_init_card()
809 host->card = card; in mmc_sdio_init_card()
823 static void mmc_sdio_remove(struct mmc_host *host) in mmc_sdio_remove() argument
827 BUG_ON(!host); in mmc_sdio_remove()
828 BUG_ON(!host->card); in mmc_sdio_remove()
830 for (i = 0;i < host->card->sdio_funcs;i++) { in mmc_sdio_remove()
831 if (host->card->sdio_func[i]) { in mmc_sdio_remove()
832 sdio_remove_func(host->card->sdio_func[i]); in mmc_sdio_remove()
833 host->card->sdio_func[i] = NULL; in mmc_sdio_remove()
837 mmc_remove_card(host->card); in mmc_sdio_remove()
838 host->card = NULL; in mmc_sdio_remove()
844 static int mmc_sdio_alive(struct mmc_host *host) in mmc_sdio_alive() argument
846 return mmc_select_card(host->card); in mmc_sdio_alive()
852 static void mmc_sdio_detect(struct mmc_host *host) in mmc_sdio_detect() argument
856 BUG_ON(!host); in mmc_sdio_detect()
857 BUG_ON(!host->card); in mmc_sdio_detect()
860 if (host->caps & MMC_CAP_POWER_OFF_CARD) { in mmc_sdio_detect()
861 err = pm_runtime_get_sync(&host->card->dev); in mmc_sdio_detect()
863 pm_runtime_put_noidle(&host->card->dev); in mmc_sdio_detect()
868 mmc_claim_host(host); in mmc_sdio_detect()
873 err = _mmc_detect_card_removed(host); in mmc_sdio_detect()
875 mmc_release_host(host); in mmc_sdio_detect()
888 if (host->caps & MMC_CAP_POWER_OFF_CARD) in mmc_sdio_detect()
889 pm_runtime_put_sync(&host->card->dev); in mmc_sdio_detect()
893 mmc_sdio_remove(host); in mmc_sdio_detect()
895 mmc_claim_host(host); in mmc_sdio_detect()
896 mmc_detach_bus(host); in mmc_sdio_detect()
897 mmc_power_off(host); in mmc_sdio_detect()
898 mmc_release_host(host); in mmc_sdio_detect()
907 static int mmc_sdio_pre_suspend(struct mmc_host *host) in mmc_sdio_pre_suspend() argument
911 for (i = 0; i < host->card->sdio_funcs; i++) { in mmc_sdio_pre_suspend()
912 struct sdio_func *func = host->card->sdio_func[i]; in mmc_sdio_pre_suspend()
929 static int mmc_sdio_suspend(struct mmc_host *host) in mmc_sdio_suspend() argument
931 if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) { in mmc_sdio_suspend()
932 mmc_claim_host(host); in mmc_sdio_suspend()
933 sdio_disable_wide(host->card); in mmc_sdio_suspend()
934 mmc_release_host(host); in mmc_sdio_suspend()
937 if (!mmc_card_keep_power(host)) in mmc_sdio_suspend()
938 mmc_power_off(host); in mmc_sdio_suspend()
943 static int mmc_sdio_resume(struct mmc_host *host) in mmc_sdio_resume() argument
947 BUG_ON(!host); in mmc_sdio_resume()
948 BUG_ON(!host->card); in mmc_sdio_resume()
951 mmc_claim_host(host); in mmc_sdio_resume()
954 if (!mmc_card_keep_power(host)) { in mmc_sdio_resume()
955 mmc_power_up(host, host->card->ocr); in mmc_sdio_resume()
962 if (host->caps & MMC_CAP_POWER_OFF_CARD) { in mmc_sdio_resume()
963 pm_runtime_disable(&host->card->dev); in mmc_sdio_resume()
964 pm_runtime_set_active(&host->card->dev); in mmc_sdio_resume()
965 pm_runtime_enable(&host->card->dev); in mmc_sdio_resume()
970 if (mmc_card_is_removable(host) || !mmc_card_keep_power(host)) { in mmc_sdio_resume()
971 sdio_reset(host); in mmc_sdio_resume()
972 mmc_go_idle(host); in mmc_sdio_resume()
973 mmc_send_if_cond(host, host->card->ocr); in mmc_sdio_resume()
974 err = mmc_send_io_op_cond(host, 0, NULL); in mmc_sdio_resume()
976 err = mmc_sdio_init_card(host, host->card->ocr, in mmc_sdio_resume()
977 host->card, in mmc_sdio_resume()
978 mmc_card_keep_power(host)); in mmc_sdio_resume()
979 } else if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) { in mmc_sdio_resume()
981 err = sdio_enable_4bit_bus(host->card); in mmc_sdio_resume()
984 if (!err && host->sdio_irqs) { in mmc_sdio_resume()
985 if (!(host->caps2 & MMC_CAP2_SDIO_IRQ_NOTHREAD)) { in mmc_sdio_resume()
986 wake_up_process(host->sdio_irq_thread); in mmc_sdio_resume()
987 } else if (host->caps & MMC_CAP_SDIO_IRQ) { in mmc_sdio_resume()
988 mmc_host_clk_hold(host); in mmc_sdio_resume()
989 host->ops->enable_sdio_irq(host, 1); in mmc_sdio_resume()
990 mmc_host_clk_release(host); in mmc_sdio_resume()
994 mmc_release_host(host); in mmc_sdio_resume()
996 host->pm_flags &= ~MMC_PM_KEEP_POWER; in mmc_sdio_resume()
1000 static int mmc_sdio_power_restore(struct mmc_host *host) in mmc_sdio_power_restore() argument
1004 BUG_ON(!host); in mmc_sdio_power_restore()
1005 BUG_ON(!host->card); in mmc_sdio_power_restore()
1007 mmc_claim_host(host); in mmc_sdio_power_restore()
1026 sdio_reset(host); in mmc_sdio_power_restore()
1027 mmc_go_idle(host); in mmc_sdio_power_restore()
1028 mmc_send_if_cond(host, host->card->ocr); in mmc_sdio_power_restore()
1030 ret = mmc_send_io_op_cond(host, 0, NULL); in mmc_sdio_power_restore()
1034 ret = mmc_sdio_init_card(host, host->card->ocr, host->card, in mmc_sdio_power_restore()
1035 mmc_card_keep_power(host)); in mmc_sdio_power_restore()
1036 if (!ret && host->sdio_irqs) in mmc_sdio_power_restore()
1037 mmc_signal_sdio_irq(host); in mmc_sdio_power_restore()
1040 mmc_release_host(host); in mmc_sdio_power_restore()
1045 static int mmc_sdio_runtime_suspend(struct mmc_host *host) in mmc_sdio_runtime_suspend() argument
1048 mmc_power_off(host); in mmc_sdio_runtime_suspend()
1052 static int mmc_sdio_runtime_resume(struct mmc_host *host) in mmc_sdio_runtime_resume() argument
1055 mmc_power_up(host, host->card->ocr); in mmc_sdio_runtime_resume()
1056 return mmc_sdio_power_restore(host); in mmc_sdio_runtime_resume()
1075 int mmc_attach_sdio(struct mmc_host *host) in mmc_attach_sdio() argument
1081 BUG_ON(!host); in mmc_attach_sdio()
1082 WARN_ON(!host->claimed); in mmc_attach_sdio()
1084 err = mmc_send_io_op_cond(host, 0, &ocr); in mmc_attach_sdio()
1088 mmc_attach_bus(host, &mmc_sdio_ops); in mmc_attach_sdio()
1089 if (host->ocr_avail_sdio) in mmc_attach_sdio()
1090 host->ocr_avail = host->ocr_avail_sdio; in mmc_attach_sdio()
1093 rocr = mmc_select_voltage(host, ocr); in mmc_attach_sdio()
1106 err = mmc_sdio_init_card(host, rocr, NULL, 0); in mmc_attach_sdio()
1110 card = host->card; in mmc_attach_sdio()
1115 if (host->caps & MMC_CAP_POWER_OFF_CARD) { in mmc_attach_sdio()
1140 err = sdio_init_func(host->card, i + 1); in mmc_attach_sdio()
1147 if (host->caps & MMC_CAP_POWER_OFF_CARD) in mmc_attach_sdio()
1154 mmc_release_host(host); in mmc_attach_sdio()
1155 err = mmc_add_card(host->card); in mmc_attach_sdio()
1163 err = sdio_add_func(host->card->sdio_func[i]); in mmc_attach_sdio()
1168 mmc_claim_host(host); in mmc_attach_sdio()
1174 mmc_sdio_remove(host); in mmc_attach_sdio()
1175 mmc_claim_host(host); in mmc_attach_sdio()
1178 mmc_release_host(host); in mmc_attach_sdio()
1179 if (host->card) in mmc_attach_sdio()
1180 mmc_sdio_remove(host); in mmc_attach_sdio()
1181 mmc_claim_host(host); in mmc_attach_sdio()
1183 mmc_detach_bus(host); in mmc_attach_sdio()
1186 mmc_hostname(host), err); in mmc_attach_sdio()