Lines Matching full:mmc

3  * Loongson-2K MMC/SDIO controller driver
17 #include <linux/mmc/core.h>
18 #include <linux/mmc/host.h>
19 #include <linux/mmc/mmc.h>
20 #include <linux/mmc/sd.h>
21 #include <linux/mmc/sdio.h>
22 #include <linux/mmc/slot-gpio.h>
325 static void loongson2_mmc_send_request(struct mmc_host *mmc) in loongson2_mmc_send_request() argument
328 struct loongson2_mmc_host *host = mmc_priv(mmc); in loongson2_mmc_send_request()
337 mmc_request_done(mmc, mrq); in loongson2_mmc_send_request()
349 mmc_request_done(mmc, mrq); in loongson2_mmc_send_request()
356 struct mmc_host *mmc = mmc_from_priv(host); in loongson2_mmc_irq_worker() local
361 dma_unmap_sg(mmc_dev(mmc), cmd->data->sg, cmd->data->sg_len, in loongson2_mmc_irq_worker()
383 loongson2_mmc_send_request(mmc); in loongson2_mmc_irq_worker()
402 mmc_request_done(mmc, mrq); in loongson2_mmc_irq_worker()
409 struct mmc_host *mmc = mmc_from_priv(host); in loongson2_mmc_irq() local
422 sdio_signal_irq(mmc); in loongson2_mmc_irq()
536 static void loongson2_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) in loongson2_mmc_set_ios() argument
538 struct loongson2_mmc_host *host = mmc_priv(mmc); in loongson2_mmc_set_ios()
542 if (!IS_ERR(mmc->supply.vmmc)) { in loongson2_mmc_set_ios()
543 ret = mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, ios->vdd); in loongson2_mmc_set_ios()
557 if (!IS_ERR(mmc->supply.vmmc)) in loongson2_mmc_set_ios()
558 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0); in loongson2_mmc_set_ios()
567 static void loongson2_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq) in loongson2_mmc_request() argument
569 struct loongson2_mmc_host *host = mmc_priv(mmc); in loongson2_mmc_request()
573 loongson2_mmc_send_request(mmc); in loongson2_mmc_request()
576 static void loongson2_mmc_enable_sdio_irq(struct mmc_host *mmc, int enable) in loongson2_mmc_enable_sdio_irq() argument
578 struct loongson2_mmc_host *host = mmc_priv(mmc); in loongson2_mmc_enable_sdio_irq()
583 static void loongson2_mmc_ack_sdio_irq(struct mmc_host *mmc) in loongson2_mmc_ack_sdio_irq() argument
585 loongson2_mmc_enable_sdio_irq(mmc, 1); in loongson2_mmc_ack_sdio_irq()
643 struct mmc_host *mmc = mmc_from_priv(host); in loongson2_mmc_prepare_external_dma() local
648 ret = dma_map_sg(mmc_dev(mmc), data->sg, data->sg_len, in loongson2_mmc_prepare_external_dma()
672 dma_unmap_sg(mmc_dev(mmc), data->sg, data->sg_len, mmc_get_dma_dir(data)); in loongson2_mmc_prepare_external_dma()
792 struct mmc_host *mmc = mmc_from_priv(host); in loongson2_mmc_prepare_internal_dma() local
799 ret = dma_map_sg(mmc_dev(mmc), data->sg, data->sg_len, in loongson2_mmc_prepare_internal_dma()
904 IRQF_ONESHOT, "loongson2-mmc", host); in loongson2_mmc_resource_request()
919 struct mmc_host *mmc; in loongson2_mmc_probe() local
922 mmc = devm_mmc_alloc_host(dev, sizeof(*host)); in loongson2_mmc_probe()
923 if (!mmc) in loongson2_mmc_probe()
926 platform_set_drvdata(pdev, mmc); in loongson2_mmc_probe()
928 host = mmc_priv(mmc); in loongson2_mmc_probe()
940 mmc->ops = &loongson2_mmc_ops; in loongson2_mmc_probe()
941 mmc->f_min = DIV_ROUND_UP(host->current_clk, 256); in loongson2_mmc_probe()
942 mmc->f_max = host->current_clk; in loongson2_mmc_probe()
943 mmc->max_blk_count = 4095; in loongson2_mmc_probe()
944 mmc->max_blk_size = 4095; in loongson2_mmc_probe()
945 mmc->max_req_size = mmc->max_blk_count * mmc->max_blk_size; in loongson2_mmc_probe()
946 mmc->max_segs = 1; in loongson2_mmc_probe()
947 mmc->max_seg_size = mmc->max_req_size; in loongson2_mmc_probe()
950 if (mmc->caps & MMC_CAP_SDIO_IRQ) in loongson2_mmc_probe()
951 mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD; in loongson2_mmc_probe()
953 ret = mmc_regulator_get_supply(mmc); in loongson2_mmc_probe()
954 if (ret || mmc->ocr_avail == 0) { in loongson2_mmc_probe()
956 mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; in loongson2_mmc_probe()
959 ret = mmc_of_parse(mmc); in loongson2_mmc_probe()
965 ret = mmc_add_host(mmc); in loongson2_mmc_probe()
967 dev_err(dev, "Failed to add mmc host\n"); in loongson2_mmc_probe()
980 struct mmc_host *mmc = platform_get_drvdata(pdev); in loongson2_mmc_remove() local
981 struct loongson2_mmc_host *host = mmc_priv(mmc); in loongson2_mmc_remove()
983 mmc_remove_host(mmc); in loongson2_mmc_remove()
988 { .compatible = "loongson,ls2k0500-mmc", .data = &ls2k0500_mmc_pdata },
989 { .compatible = "loongson,ls2k1000-mmc", .data = &ls2k1000_mmc_pdata },
990 { .compatible = "loongson,ls2k2000-mmc", .data = &ls2k2000_mmc_pdata },
997 struct mmc_host *mmc = dev_get_drvdata(dev); in loongson2_mmc_suspend() local
998 struct loongson2_mmc_host *host = mmc_priv(mmc); in loongson2_mmc_suspend()
1007 struct mmc_host *mmc = dev_get_drvdata(dev); in loongson2_mmc_resume() local
1008 struct loongson2_mmc_host *host = mmc_priv(mmc); in loongson2_mmc_resume()
1017 .name = "loongson2-mmc",