Lines Matching refs:mmc

223 static int mmci_card_busy(struct mmc_host *mmc)  in mmci_card_busy()  argument
225 struct mmci_host *host = mmc_priv(mmc); in mmci_card_busy()
229 pm_runtime_get_sync(mmc_dev(mmc)); in mmci_card_busy()
236 pm_runtime_mark_last_busy(mmc_dev(mmc)); in mmci_card_busy()
237 pm_runtime_put_autosuspend(mmc_dev(mmc)); in mmci_card_busy()
252 dev_err(mmc_dev(host->mmc), in mmci_validate_data()
359 host->mmc->actual_clock = host->cclk; in mmci_set_clkreg()
361 if (host->mmc->ios.bus_width == MMC_BUS_WIDTH_4) in mmci_set_clkreg()
363 if (host->mmc->ios.bus_width == MMC_BUS_WIDTH_8) in mmci_set_clkreg()
366 if (host->mmc->ios.timing == MMC_TIMING_UHS_DDR50 || in mmci_set_clkreg()
367 host->mmc->ios.timing == MMC_TIMING_MMC_DDR52) in mmci_set_clkreg()
383 mmc_request_done(host->mmc, mrq); in mmci_request_end()
385 pm_runtime_mark_last_busy(mmc_dev(host->mmc)); in mmci_request_end()
386 pm_runtime_put_autosuspend(mmc_dev(host->mmc)); in mmci_request_end()
435 host->dma_rx_channel = dma_request_slave_channel(mmc_dev(host->mmc), "rx"); in mmci_dma_setup()
436 host->dma_tx_channel = dma_request_slave_channel(mmc_dev(host->mmc), "tx"); in mmci_dma_setup()
459 dev_info(mmc_dev(host->mmc), "DMA channels RX %s, TX %s\n", in mmci_dma_setup()
470 if (max_seg_size < host->mmc->max_seg_size) in mmci_dma_setup()
471 host->mmc->max_seg_size = max_seg_size; in mmci_dma_setup()
477 if (max_seg_size < host->mmc->max_seg_size) in mmci_dma_setup()
478 host->mmc->max_seg_size = max_seg_size; in mmci_dma_setup()
482 if (dml_hw_init(host, host->mmc->parent->of_node)) in mmci_dma_setup()
501 dev_err(mmc_dev(host->mmc), "error during DMA transfer!\n"); in mmci_dma_data_error()
557 dev_err(mmc_dev(host->mmc), "buggy DMA detected. Taking evasive action.\n"); in mmci_dma_finalize()
658 dev_vdbg(mmc_dev(host->mmc), in mmci_dma_start_data()
695 static void mmci_pre_request(struct mmc_host *mmc, struct mmc_request *mrq, in mmci_pre_request() argument
698 struct mmci_host *host = mmc_priv(mmc); in mmci_pre_request()
714 static void mmci_post_request(struct mmc_host *mmc, struct mmc_request *mrq, in mmci_post_request() argument
717 struct mmci_host *host = mmc_priv(mmc); in mmci_post_request()
790 dev_dbg(mmc_dev(host->mmc), "blksz %04x blks %04x flags %08x\n", in mmci_start_data()
819 if (host->mmc->card && mmc_card_sdio(host->mmc->card)) { in mmci_start_data()
840 if (host->mmc->ios.timing == MMC_TIMING_UHS_DDR50 || in mmci_start_data()
841 host->mmc->ios.timing == MMC_TIMING_MMC_DDR52) in mmci_start_data()
882 dev_dbg(mmc_dev(host->mmc), "op %02x arg %08x flags %08x\n", in mmci_start_command()
937 dev_dbg(mmc_dev(host->mmc), "MCI ERROR IRQ, status 0x%08x at 0x%08x\n", in mmci_data_irq()
960 dev_err(mmc_dev(host->mmc), "stray MCI_DATABLOCKEND interrupt\n"); in mmci_data_irq()
1163 dev_dbg(mmc_dev(host->mmc), "irq1 (pio) %08x\n", status); in mmci_pio_irq()
1258 dev_dbg(mmc_dev(host->mmc), "irq0 (data+cmd) %08x\n", status); in mmci_irq()
1280 static void mmci_request(struct mmc_host *mmc, struct mmc_request *mrq) in mmci_request() argument
1282 struct mmci_host *host = mmc_priv(mmc); in mmci_request()
1289 mmc_request_done(mmc, mrq); in mmci_request()
1293 pm_runtime_get_sync(mmc_dev(mmc)); in mmci_request()
1313 static void mmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) in mmci_set_ios() argument
1315 struct mmci_host *host = mmc_priv(mmc); in mmci_set_ios()
1321 pm_runtime_get_sync(mmc_dev(mmc)); in mmci_set_ios()
1324 host->plat->ios_handler(mmc_dev(mmc), ios)) in mmci_set_ios()
1325 dev_err(mmc_dev(mmc), "platform ios_handler failed\n"); in mmci_set_ios()
1329 if (!IS_ERR(mmc->supply.vmmc)) in mmci_set_ios()
1330 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0); in mmci_set_ios()
1332 if (!IS_ERR(mmc->supply.vqmmc) && host->vqmmc_enabled) { in mmci_set_ios()
1333 regulator_disable(mmc->supply.vqmmc); in mmci_set_ios()
1339 if (!IS_ERR(mmc->supply.vmmc)) in mmci_set_ios()
1340 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, ios->vdd); in mmci_set_ios()
1351 if (!IS_ERR(mmc->supply.vqmmc) && !host->vqmmc_enabled) { in mmci_set_ios()
1352 ret = regulator_enable(mmc->supply.vqmmc); in mmci_set_ios()
1354 dev_err(mmc_dev(mmc), in mmci_set_ios()
1403 dev_err(mmc_dev(host->mmc), in mmci_set_ios()
1418 pm_runtime_mark_last_busy(mmc_dev(mmc)); in mmci_set_ios()
1419 pm_runtime_put_autosuspend(mmc_dev(mmc)); in mmci_set_ios()
1422 static int mmci_get_cd(struct mmc_host *mmc) in mmci_get_cd() argument
1424 struct mmci_host *host = mmc_priv(mmc); in mmci_get_cd()
1426 unsigned int status = mmc_gpio_get_cd(mmc); in mmci_get_cd()
1432 status = plat->status(mmc_dev(host->mmc)); in mmci_get_cd()
1437 static int mmci_sig_volt_switch(struct mmc_host *mmc, struct mmc_ios *ios) in mmci_sig_volt_switch() argument
1441 if (!IS_ERR(mmc->supply.vqmmc)) { in mmci_sig_volt_switch()
1443 pm_runtime_get_sync(mmc_dev(mmc)); in mmci_sig_volt_switch()
1447 ret = regulator_set_voltage(mmc->supply.vqmmc, in mmci_sig_volt_switch()
1451 ret = regulator_set_voltage(mmc->supply.vqmmc, in mmci_sig_volt_switch()
1455 ret = regulator_set_voltage(mmc->supply.vqmmc, in mmci_sig_volt_switch()
1461 dev_warn(mmc_dev(mmc), "Voltage switch failed\n"); in mmci_sig_volt_switch()
1463 pm_runtime_mark_last_busy(mmc_dev(mmc)); in mmci_sig_volt_switch()
1464 pm_runtime_put_autosuspend(mmc_dev(mmc)); in mmci_sig_volt_switch()
1480 static int mmci_of_parse(struct device_node *np, struct mmc_host *mmc) in mmci_of_parse() argument
1482 struct mmci_host *host = mmc_priv(mmc); in mmci_of_parse()
1483 int ret = mmc_of_parse(mmc); in mmci_of_parse()
1502 mmc->caps |= MMC_CAP_MMC_HIGHSPEED; in mmci_of_parse()
1504 mmc->caps |= MMC_CAP_SD_HIGHSPEED; in mmci_of_parse()
1516 struct mmc_host *mmc; in mmci_probe() local
1531 mmc = mmc_alloc_host(sizeof(struct mmci_host), &dev->dev); in mmci_probe()
1532 if (!mmc) in mmci_probe()
1535 ret = mmci_of_parse(np, mmc); in mmci_probe()
1539 host = mmc_priv(mmc); in mmci_probe()
1540 host->mmc = mmc; in mmci_probe()
1544 dev_dbg(mmc_dev(mmc), "designer ID = 0x%02x\n", host->hw_designer); in mmci_probe()
1545 dev_dbg(mmc_dev(mmc), "revision = 0x%01x\n", host->hw_revision); in mmci_probe()
1575 dev_dbg(mmc_dev(mmc), "eventual mclk rate: %u Hz\n", in mmci_probe()
1593 mmc->f_min = DIV_ROUND_UP(host->mclk, 257); in mmci_probe()
1595 mmc->f_min = clk_round_rate(host->clk, 100000); in mmci_probe()
1597 mmc->f_min = DIV_ROUND_UP(host->mclk, 512); in mmci_probe()
1604 if (mmc->f_max) in mmci_probe()
1605 mmc->f_max = variant->explicit_mclk_control ? in mmci_probe()
1606 min(variant->f_max, mmc->f_max) : in mmci_probe()
1607 min(host->mclk, mmc->f_max); in mmci_probe()
1609 mmc->f_max = variant->explicit_mclk_control ? in mmci_probe()
1613 dev_dbg(mmc_dev(mmc), "clocking block at %u Hz\n", mmc->f_max); in mmci_probe()
1616 ret = mmc_regulator_get_supply(mmc); in mmci_probe()
1620 if (!mmc->ocr_avail) in mmci_probe()
1621 mmc->ocr_avail = plat->ocr_mask; in mmci_probe()
1623 dev_warn(mmc_dev(mmc), "Platform OCR mask is ignored\n"); in mmci_probe()
1628 mmc->caps2 |= MMC_CAP2_CD_ACTIVE_HIGH; in mmci_probe()
1629 mmc->caps2 |= MMC_CAP2_RO_ACTIVE_HIGH; in mmci_probe()
1633 mmc->caps |= MMC_CAP_CMD23; in mmci_probe()
1638 mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY; in mmci_probe()
1639 mmc->max_busy_timeout = 0; in mmci_probe()
1642 mmc->ops = &mmci_ops; in mmci_probe()
1645 mmc->pm_caps |= MMC_PM_KEEP_POWER; in mmci_probe()
1650 mmc->max_segs = NR_SG; in mmci_probe()
1657 mmc->max_req_size = (1 << variant->datalength_bits) - 1; in mmci_probe()
1663 mmc->max_seg_size = mmc->max_req_size; in mmci_probe()
1668 mmc->max_blk_size = 1 << 11; in mmci_probe()
1674 mmc->max_blk_count = mmc->max_req_size >> 11; in mmci_probe()
1690 ret = mmc_gpiod_request_cd(mmc, "cd", 0, false, 0, NULL); in mmci_probe()
1695 ret = mmc_gpio_request_cd(mmc, plat->gpio_cd, 0); in mmci_probe()
1701 ret = mmc_gpiod_request_ro(mmc, "wp", 0, false, 0, NULL); in mmci_probe()
1706 ret = mmc_gpio_request_ro(mmc, plat->gpio_wp); in mmci_probe()
1729 amba_set_drvdata(dev, mmc); in mmci_probe()
1732 mmc_hostname(mmc), amba_part(dev), amba_manf(dev), in mmci_probe()
1741 mmc_add_host(mmc); in mmci_probe()
1749 mmc_free_host(mmc); in mmci_probe()
1755 struct mmc_host *mmc = amba_get_drvdata(dev); in mmci_remove() local
1757 if (mmc) { in mmci_remove()
1758 struct mmci_host *host = mmc_priv(mmc); in mmci_remove()
1766 mmc_remove_host(mmc); in mmci_remove()
1776 mmc_free_host(mmc); in mmci_remove()
1820 struct mmc_host *mmc = amba_get_drvdata(adev); in mmci_runtime_suspend() local
1822 if (mmc) { in mmci_runtime_suspend()
1823 struct mmci_host *host = mmc_priv(mmc); in mmci_runtime_suspend()
1835 struct mmc_host *mmc = amba_get_drvdata(adev); in mmci_runtime_resume() local
1837 if (mmc) { in mmci_runtime_resume()
1838 struct mmci_host *host = mmc_priv(mmc); in mmci_runtime_resume()