Lines Matching refs:mmc

54 static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode);
86 mmc_hostname(host->mmc)); in sdhci_dumpregs()
150 (host->mmc->caps & MMC_CAP_NONREMOVABLE)) in sdhci_set_card_detection()
197 mmc_hostname(host->mmc), (int)mask); in sdhci_reset()
228 static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios);
249 sdhci_set_ios(host->mmc, &host->mmc->ios); in sdhci_init()
506 host->align_addr = dma_map_single(mmc_dev(host->mmc), in sdhci_adma_table_pre()
508 if (dma_mapping_error(mmc_dev(host->mmc), host->align_addr)) in sdhci_adma_table_pre()
593 dma_sync_single_for_device(mmc_dev(host->mmc), in sdhci_adma_table_pre()
600 dma_unmap_single(mmc_dev(host->mmc), host->align_addr, in sdhci_adma_table_pre()
623 dma_unmap_single(mmc_dev(host->mmc), host->align_addr, in sdhci_adma_table_post()
635 dma_sync_sg_for_cpu(mmc_dev(host->mmc), data->sg, in sdhci_adma_table_post()
655 dma_unmap_sg(mmc_dev(host->mmc), data->sg, in sdhci_adma_table_post()
721 mmc_hostname(host->mmc), count, cmd->opcode); in sdhci_calc_timeout()
770 BUG_ON(data->blksz > host->mmc->max_blk_size); in sdhci_prepare_data()
982 dma_unmap_sg(mmc_dev(host->mmc), in sdhci_finish_data()
1049 "inhibit bit(s).\n", mmc_hostname(host->mmc)); in sdhci_send_command()
1077 mmc_hostname(host->mmc)); in sdhci_send_command()
1174 mmc_hostname(host->mmc)); in sdhci_get_preset_value()
1188 host->mmc->actual_clock = 0; in sdhci_set_clock()
1258 host->mmc->actual_clock = (host->max_clk * clk_mul) / real_div; in sdhci_set_clock()
1271 "stabilised.\n", mmc_hostname(host->mmc)); in sdhci_set_clock()
1287 struct mmc_host *mmc = host->mmc; in sdhci_set_power() local
1290 if (!IS_ERR(mmc->supply.vmmc)) { in sdhci_set_power()
1292 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, vdd); in sdhci_set_power()
1369 static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq) in sdhci_request() argument
1376 host = mmc_priv(mmc); in sdhci_request()
1419 if (mmc->card) { in sdhci_request()
1422 mmc->card->type == MMC_TYPE_MMC ? in sdhci_request()
1433 sdhci_execute_tuning(mmc, tuning_opcode); in sdhci_request()
1501 struct mmc_host *mmc = host->mmc; in sdhci_do_set_ios() local
1507 if (!IS_ERR(mmc->supply.vmmc) && in sdhci_do_set_ios()
1509 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0); in sdhci_do_set_ios()
1533 host->timeout_clk = host->mmc->actual_clock ? in sdhci_do_set_ios()
1534 host->mmc->actual_clock / 1000 : in sdhci_do_set_ios()
1536 host->mmc->max_busy_timeout = in sdhci_do_set_ios()
1540 host->mmc->max_busy_timeout /= host->timeout_clk; in sdhci_do_set_ios()
1646 static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) in sdhci_set_ios() argument
1648 struct sdhci_host *host = mmc_priv(mmc); in sdhci_set_ios()
1657 int gpio_cd = mmc_gpio_get_cd(host->mmc); in sdhci_do_get_cd()
1664 (host->mmc->caps & MMC_CAP_NONREMOVABLE)) in sdhci_do_get_cd()
1675 static int sdhci_get_cd(struct mmc_host *mmc) in sdhci_get_cd() argument
1677 struct sdhci_host *host = mmc_priv(mmc); in sdhci_get_cd()
1728 static void sdhci_hw_reset(struct mmc_host *mmc) in sdhci_hw_reset() argument
1730 struct sdhci_host *host = mmc_priv(mmc); in sdhci_hw_reset()
1736 static int sdhci_get_ro(struct mmc_host *mmc) in sdhci_get_ro() argument
1738 struct sdhci_host *host = mmc_priv(mmc); in sdhci_get_ro()
1761 static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable) in sdhci_enable_sdio_irq() argument
1763 struct sdhci_host *host = mmc_priv(mmc); in sdhci_enable_sdio_irq()
1783 struct mmc_host *mmc = host->mmc; in sdhci_do_start_signal_voltage_switch() local
1802 if (!IS_ERR(mmc->supply.vqmmc)) { in sdhci_do_start_signal_voltage_switch()
1803 ret = regulator_set_voltage(mmc->supply.vqmmc, 2700000, in sdhci_do_start_signal_voltage_switch()
1807 mmc_hostname(mmc)); in sdhci_do_start_signal_voltage_switch()
1820 mmc_hostname(mmc)); in sdhci_do_start_signal_voltage_switch()
1824 if (!IS_ERR(mmc->supply.vqmmc)) { in sdhci_do_start_signal_voltage_switch()
1825 ret = regulator_set_voltage(mmc->supply.vqmmc, in sdhci_do_start_signal_voltage_switch()
1829 mmc_hostname(mmc)); in sdhci_do_start_signal_voltage_switch()
1851 mmc_hostname(mmc)); in sdhci_do_start_signal_voltage_switch()
1855 if (!IS_ERR(mmc->supply.vqmmc)) { in sdhci_do_start_signal_voltage_switch()
1856 ret = regulator_set_voltage(mmc->supply.vqmmc, 1100000, in sdhci_do_start_signal_voltage_switch()
1860 mmc_hostname(mmc)); in sdhci_do_start_signal_voltage_switch()
1871 static int sdhci_start_signal_voltage_switch(struct mmc_host *mmc, in sdhci_start_signal_voltage_switch() argument
1874 struct sdhci_host *host = mmc_priv(mmc); in sdhci_start_signal_voltage_switch()
1885 static int sdhci_card_busy(struct mmc_host *mmc) in sdhci_card_busy() argument
1887 struct sdhci_host *host = mmc_priv(mmc); in sdhci_card_busy()
1898 static int sdhci_prepare_hs400_tuning(struct mmc_host *mmc, struct mmc_ios *ios) in sdhci_prepare_hs400_tuning() argument
1900 struct sdhci_host *host = mmc_priv(mmc); in sdhci_prepare_hs400_tuning()
1910 static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode) in sdhci_execute_tuning() argument
1912 struct sdhci_host *host = mmc_priv(mmc); in sdhci_execute_tuning()
2017 if (mmc->ios.bus_width == MMC_BUS_WIDTH_8) in sdhci_execute_tuning()
2020 else if (mmc->ios.bus_width == MMC_BUS_WIDTH_4) in sdhci_execute_tuning()
2144 static void sdhci_post_req(struct mmc_host *mmc, struct mmc_request *mrq, in sdhci_post_req() argument
2147 struct sdhci_host *host = mmc_priv(mmc); in sdhci_post_req()
2153 dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len, in sdhci_post_req()
2172 sg_count = dma_map_sg(mmc_dev(host->mmc), data->sg, data->sg_len, in sdhci_pre_dma_transfer()
2185 static void sdhci_pre_req(struct mmc_host *mmc, struct mmc_request *mrq, in sdhci_pre_req() argument
2188 struct sdhci_host *host = mmc_priv(mmc); in sdhci_pre_req()
2196 static void sdhci_card_event(struct mmc_host *mmc) in sdhci_card_event() argument
2198 struct sdhci_host *host = mmc_priv(mmc); in sdhci_card_event()
2213 mmc_hostname(host->mmc)); in sdhci_card_event()
2215 mmc_hostname(host->mmc)); in sdhci_card_event()
2305 mmc_request_done(host->mmc, mrq); in sdhci_tasklet_finish()
2320 "interrupt.\n", mmc_hostname(host->mmc)); in sdhci_timeout_timer()
2367 mmc_hostname(host->mmc), (unsigned)intmask); in sdhci_cmd_irq()
2419 const char *name = mmc_hostname(host->mmc); in sdhci_adma_show_error()
2493 mmc_hostname(host->mmc), (unsigned)intmask); in sdhci_data_irq()
2508 pr_err("%s: ADMA error\n", mmc_hostname(host->mmc)); in sdhci_data_irq()
2543 mmc_hostname(host->mmc), dmastart, in sdhci_data_irq()
2590 mmc_hostname(host->mmc), intmask); in sdhci_irq()
2631 mmc_hostname(host->mmc)); in sdhci_irq()
2659 mmc_hostname(host->mmc), unexpected); in sdhci_irq()
2678 sdhci_card_event(host->mmc); in sdhci_thread_irq()
2679 mmc_detect_change(host->mmc, msecs_to_jiffies(200)); in sdhci_thread_irq()
2683 sdio_run_irqs(host->mmc); in sdhci_thread_irq()
2737 if (!device_may_wakeup(mmc_dev(host->mmc))) { in sdhci_suspend_host()
2760 if (!device_may_wakeup(mmc_dev(host->mmc))) { in sdhci_resume_host()
2763 mmc_hostname(host->mmc), host); in sdhci_resume_host()
2771 if ((host->mmc->pm_flags & MMC_PM_KEEP_POWER) && in sdhci_resume_host()
2777 sdhci_do_set_ios(host, &host->mmc->ios); in sdhci_resume_host()
2779 sdhci_init(host, (host->mmc->pm_flags & MMC_PM_KEEP_POWER)); in sdhci_resume_host()
2796 return pm_runtime_get_sync(host->mmc->parent); in sdhci_runtime_pm_get()
2801 pm_runtime_mark_last_busy(host->mmc->parent); in sdhci_runtime_pm_put()
2802 return pm_runtime_put_autosuspend(host->mmc->parent); in sdhci_runtime_pm_put()
2810 pm_runtime_get_noresume(host->mmc->parent); in sdhci_runtime_pm_bus_on()
2818 pm_runtime_put_noidle(host->mmc->parent); in sdhci_runtime_pm_bus_off()
2862 sdhci_do_start_signal_voltage_switch(host, &host->mmc->ios); in sdhci_runtime_resume_host()
2863 sdhci_do_set_ios(host, &host->mmc->ios); in sdhci_runtime_resume_host()
2904 struct mmc_host *mmc; in sdhci_alloc_host() local
2909 mmc = mmc_alloc_host(sizeof(struct sdhci_host) + priv_size, dev); in sdhci_alloc_host()
2910 if (!mmc) in sdhci_alloc_host()
2913 host = mmc_priv(mmc); in sdhci_alloc_host()
2914 host->mmc = mmc; in sdhci_alloc_host()
2923 struct mmc_host *mmc; in sdhci_add_host() local
2934 mmc = host->mmc; in sdhci_add_host()
2950 "You may experience problems.\n", mmc_hostname(mmc), in sdhci_add_host()
2999 mmc_hostname(mmc)); in sdhci_add_host()
3034 host->adma_table = dma_alloc_coherent(mmc_dev(mmc), in sdhci_add_host()
3041 dma_free_coherent(mmc_dev(mmc), in sdhci_add_host()
3047 mmc_hostname(mmc)); in sdhci_add_host()
3053 mmc_hostname(mmc)); in sdhci_add_host()
3055 dma_free_coherent(mmc_dev(mmc), host->adma_table_sz, in sdhci_add_host()
3070 mmc_dev(mmc)->dma_mask = &host->dma_mask; in sdhci_add_host()
3085 "frequency.\n", mmc_hostname(mmc)); in sdhci_add_host()
3110 mmc->ops = &sdhci_ops; in sdhci_add_host()
3111 mmc->f_max = host->max_clk; in sdhci_add_host()
3113 mmc->f_min = host->ops->get_min_clock(host); in sdhci_add_host()
3116 mmc->f_min = (host->max_clk * host->clk_mul) / 1024; in sdhci_add_host()
3117 mmc->f_max = host->max_clk * host->clk_mul; in sdhci_add_host()
3119 mmc->f_min = host->max_clk / SDHCI_MAX_DIV_SPEC_300; in sdhci_add_host()
3121 mmc->f_min = host->max_clk / SDHCI_MAX_DIV_SPEC_200; in sdhci_add_host()
3132 mmc_hostname(mmc)); in sdhci_add_host()
3143 mmc->max_busy_timeout = host->ops->get_max_timeout_count ? in sdhci_add_host()
3145 mmc->max_busy_timeout /= host->timeout_clk; in sdhci_add_host()
3148 mmc->caps |= MMC_CAP_SDIO_IRQ | MMC_CAP_ERASE | MMC_CAP_CMD23; in sdhci_add_host()
3149 mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD; in sdhci_add_host()
3160 DBG("%s: Auto-CMD23 available\n", mmc_hostname(mmc)); in sdhci_add_host()
3162 DBG("%s: Auto-CMD23 unavailable\n", mmc_hostname(mmc)); in sdhci_add_host()
3173 mmc->caps |= MMC_CAP_4_BIT_DATA; in sdhci_add_host()
3176 mmc->caps &= ~MMC_CAP_CMD23; in sdhci_add_host()
3179 mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED; in sdhci_add_host()
3182 !(mmc->caps & MMC_CAP_NONREMOVABLE)) in sdhci_add_host()
3183 mmc->caps |= MMC_CAP_NEEDS_POLL; in sdhci_add_host()
3186 if (mmc_regulator_get_supply(mmc) == -EPROBE_DEFER) in sdhci_add_host()
3190 if (!IS_ERR(mmc->supply.vqmmc)) { in sdhci_add_host()
3191 ret = regulator_enable(mmc->supply.vqmmc); in sdhci_add_host()
3192 if (!regulator_is_supported_voltage(mmc->supply.vqmmc, 1700000, in sdhci_add_host()
3199 mmc_hostname(mmc), ret); in sdhci_add_host()
3200 mmc->supply.vqmmc = ERR_PTR(-EINVAL); in sdhci_add_host()
3211 mmc->caps |= MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25; in sdhci_add_host()
3215 mmc->caps |= MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_SDR50; in sdhci_add_host()
3220 mmc->caps2 |= MMC_CAP2_HS200; in sdhci_add_host()
3222 mmc->caps |= MMC_CAP_UHS_SDR50; in sdhci_add_host()
3226 mmc->caps2 |= MMC_CAP2_HS400; in sdhci_add_host()
3228 if ((mmc->caps2 & MMC_CAP2_HSX00_1_2V) && in sdhci_add_host()
3229 (IS_ERR(mmc->supply.vqmmc) || in sdhci_add_host()
3230 !regulator_is_supported_voltage(mmc->supply.vqmmc, 1100000, in sdhci_add_host()
3232 mmc->caps2 &= ~MMC_CAP2_HSX00_1_2V; in sdhci_add_host()
3236 mmc->caps |= MMC_CAP_UHS_DDR50; in sdhci_add_host()
3243 if (mmc->caps2 & MMC_CAP2_HS200) in sdhci_add_host()
3248 mmc->caps |= MMC_CAP_DRIVER_TYPE_A; in sdhci_add_host()
3250 mmc->caps |= MMC_CAP_DRIVER_TYPE_C; in sdhci_add_host()
3252 mmc->caps |= MMC_CAP_DRIVER_TYPE_D; in sdhci_add_host()
3279 if (!max_current_caps && !IS_ERR(mmc->supply.vmmc)) { in sdhci_add_host()
3280 int curr = regulator_get_current_limit(mmc->supply.vmmc); in sdhci_add_host()
3298 mmc->max_current_330 = ((max_current_caps & in sdhci_add_host()
3306 mmc->max_current_300 = ((max_current_caps & in sdhci_add_host()
3314 mmc->max_current_180 = ((max_current_caps & in sdhci_add_host()
3325 if (mmc->ocr_avail) in sdhci_add_host()
3326 ocr_avail = mmc->ocr_avail; in sdhci_add_host()
3328 mmc->ocr_avail = ocr_avail; in sdhci_add_host()
3329 mmc->ocr_avail_sdio = ocr_avail; in sdhci_add_host()
3331 mmc->ocr_avail_sdio &= host->ocr_avail_sdio; in sdhci_add_host()
3332 mmc->ocr_avail_sd = ocr_avail; in sdhci_add_host()
3334 mmc->ocr_avail_sd &= host->ocr_avail_sd; in sdhci_add_host()
3336 mmc->ocr_avail_sd &= ~MMC_VDD_165_195; in sdhci_add_host()
3337 mmc->ocr_avail_mmc = ocr_avail; in sdhci_add_host()
3339 mmc->ocr_avail_mmc &= host->ocr_avail_mmc; in sdhci_add_host()
3341 if (mmc->ocr_avail == 0) { in sdhci_add_host()
3343 "support voltages.\n", mmc_hostname(mmc)); in sdhci_add_host()
3354 mmc->max_segs = SDHCI_MAX_SEGS; in sdhci_add_host()
3356 mmc->max_segs = 1; in sdhci_add_host()
3358 mmc->max_segs = SDHCI_MAX_SEGS; in sdhci_add_host()
3365 mmc->max_req_size = 524288; in sdhci_add_host()
3374 mmc->max_seg_size = 65535; in sdhci_add_host()
3376 mmc->max_seg_size = 65536; in sdhci_add_host()
3378 mmc->max_seg_size = mmc->max_req_size; in sdhci_add_host()
3386 mmc->max_blk_size = 2; in sdhci_add_host()
3388 mmc->max_blk_size = (caps[0] & SDHCI_MAX_BLOCK_MASK) >> in sdhci_add_host()
3390 if (mmc->max_blk_size >= 3) { in sdhci_add_host()
3392 mmc_hostname(mmc)); in sdhci_add_host()
3393 mmc->max_blk_size = 0; in sdhci_add_host()
3397 mmc->max_blk_size = 512 << mmc->max_blk_size; in sdhci_add_host()
3402 mmc->max_blk_count = (host->quirks & SDHCI_QUIRK_NO_MULTIBLOCK) ? 1 : 65535; in sdhci_add_host()
3424 IRQF_SHARED, mmc_hostname(mmc), host); in sdhci_add_host()
3427 mmc_hostname(mmc), host->irq, ret); in sdhci_add_host()
3437 "%s::", mmc_hostname(mmc)); in sdhci_add_host()
3440 host->led.default_trigger = mmc_hostname(mmc); in sdhci_add_host()
3443 ret = led_classdev_register(mmc_dev(mmc), &host->led); in sdhci_add_host()
3446 mmc_hostname(mmc), ret); in sdhci_add_host()
3453 mmc_add_host(mmc); in sdhci_add_host()
3456 mmc_hostname(mmc), host->hw_name, dev_name(mmc_dev(mmc)), in sdhci_add_host()
3482 struct mmc_host *mmc = host->mmc; in sdhci_remove_host() local
3492 " transfer!\n", mmc_hostname(mmc)); in sdhci_remove_host()
3503 mmc_remove_host(mmc); in sdhci_remove_host()
3520 if (!IS_ERR(mmc->supply.vqmmc)) in sdhci_remove_host()
3521 regulator_disable(mmc->supply.vqmmc); in sdhci_remove_host()
3524 dma_free_coherent(mmc_dev(mmc), host->adma_table_sz, in sdhci_remove_host()
3536 mmc_free_host(host->mmc); in sdhci_free_host()