Lines Matching full:mmc
4 * Portions copyright (C) 2004-2005 Pierre Ossman, W83L51xD SD/MMC driver
25 #include <linux/mmc/host.h>
26 #include <linux/mmc/mmc.h>
27 #include <linux/mmc/sdio.h>
28 #include <linux/mmc/slot-gpio.h>
34 #define DRIVER_NAME "mxs-mmc"
51 struct mmc_host *mmc; member
62 static int mxs_mmc_get_cd(struct mmc_host *mmc) in mxs_mmc_get_cd() argument
64 struct mxs_mmc_host *host = mmc_priv(mmc); in mxs_mmc_get_cd()
71 ret = mmc_gpio_get_cd(mmc); in mxs_mmc_get_cd()
75 present = mmc->caps & MMC_CAP_NEEDS_POLL || in mxs_mmc_get_cd()
79 if (mmc->caps2 & MMC_CAP2_CD_ACTIVE_HIGH) in mxs_mmc_get_cd()
147 dma_unmap_sg(mmc_dev(host->mmc), data->sg, in mxs_mmc_request_done()
166 mmc_request_done(host->mmc, mrq); in mxs_mmc_request_done()
193 mmc_signal_sdio_irq(host->mmc); in mxs_mmc_irq_handler()
225 dma_map_sg(mmc_dev(host->mmc), data->sg, in mxs_mmc_prep_dma()
242 dma_unmap_sg(mmc_dev(host->mmc), data->sg, in mxs_mmc_prep_dma()
279 dev_warn(mmc_dev(host->mmc), in mxs_mmc_bc()
324 dev_warn(mmc_dev(host->mmc), in mxs_mmc_ac()
453 dev_warn(mmc_dev(host->mmc), in mxs_mmc_adtc()
476 dev_warn(mmc_dev(host->mmc), in mxs_mmc_start_cmd()
477 "%s: unknown MMC command\n", __func__); in mxs_mmc_start_cmd()
482 static void mxs_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq) in mxs_mmc_request() argument
484 struct mxs_mmc_host *host = mmc_priv(mmc); in mxs_mmc_request()
495 static void mxs_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) in mxs_mmc_set_ios() argument
497 struct mxs_mmc_host *host = mmc_priv(mmc); in mxs_mmc_set_ios()
510 static void mxs_mmc_enable_sdio_irq(struct mmc_host *mmc, int enable) in mxs_mmc_enable_sdio_irq() argument
512 struct mxs_mmc_host *host = mmc_priv(mmc); in mxs_mmc_enable_sdio_irq()
536 mmc_signal_sdio_irq(host->mmc); in mxs_mmc_enable_sdio_irq()
550 .name = "imx23-mmc",
553 .name = "imx28-mmc",
562 { .compatible = "fsl,imx23-mmc", .data = (void *) IMX23_SSP, },
563 { .compatible = "fsl,imx28-mmc", .data = (void *) IMX28_SSP, },
579 struct mmc_host *mmc; in mxs_mmc_probe() local
588 mmc = mmc_alloc_host(sizeof(struct mxs_mmc_host), &pdev->dev); in mxs_mmc_probe()
589 if (!mmc) in mxs_mmc_probe()
592 host = mmc_priv(mmc); in mxs_mmc_probe()
603 host->mmc = mmc; in mxs_mmc_probe()
632 dev_err(&pdev->dev, "Failed to reset mmc: %d\n", ret); in mxs_mmc_probe()
638 dev_err(mmc_dev(host->mmc), in mxs_mmc_probe()
644 /* set mmc core parameters */ in mxs_mmc_probe()
645 mmc->ops = &mxs_mmc_ops; in mxs_mmc_probe()
646 mmc->caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED | in mxs_mmc_probe()
651 mmc->f_min = 400000; in mxs_mmc_probe()
652 mmc->f_max = 288000000; in mxs_mmc_probe()
654 ret = mmc_of_parse(mmc); in mxs_mmc_probe()
658 mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; in mxs_mmc_probe()
660 mmc->max_segs = 52; in mxs_mmc_probe()
661 mmc->max_blk_size = 1 << 0xf; in mxs_mmc_probe()
662 mmc->max_blk_count = (ssp_is_old(ssp)) ? 0xff : 0xffffff; in mxs_mmc_probe()
663 mmc->max_req_size = (ssp_is_old(ssp)) ? 0xffff : 0xffffffff; in mxs_mmc_probe()
664 mmc->max_seg_size = dma_get_max_seg_size(ssp->dmach->device->dev); in mxs_mmc_probe()
666 platform_set_drvdata(pdev, mmc); in mxs_mmc_probe()
675 ret = mmc_add_host(mmc); in mxs_mmc_probe()
679 dev_info(mmc_dev(host->mmc), "initialized\n"); in mxs_mmc_probe()
688 mmc_free_host(mmc); in mxs_mmc_probe()
694 struct mmc_host *mmc = platform_get_drvdata(pdev); in mxs_mmc_remove() local
695 struct mxs_mmc_host *host = mmc_priv(mmc); in mxs_mmc_remove()
698 mmc_remove_host(mmc); in mxs_mmc_remove()
705 mmc_free_host(mmc); in mxs_mmc_remove()
713 struct mmc_host *mmc = dev_get_drvdata(dev); in mxs_mmc_suspend() local
714 struct mxs_mmc_host *host = mmc_priv(mmc); in mxs_mmc_suspend()
723 struct mmc_host *mmc = dev_get_drvdata(dev); in mxs_mmc_resume() local
724 struct mxs_mmc_host *host = mmc_priv(mmc); in mxs_mmc_resume()
747 MODULE_DESCRIPTION("FREESCALE MXS MMC peripheral");