Lines Matching full:mmc
3 * davinci_mmc.c - TI DaVinci MMC/SD/SDIO driver
16 #include <linux/mmc/host.h>
22 #include <linux/mmc/mmc.h>
24 #include <linux/mmc/slot-gpio.h>
27 #include <linux/platform_data/mmc-davinci.h>
170 struct mmc_host *mmc; member
202 /* Version of the MMC/SD controller */
273 dev_dbg(mmc_dev(host->mmc), "CMD%d, arg 0x%08x%s\n", in mmc_davinci_start_command()
314 dev_dbg(mmc_dev(host->mmc), "unknown resp_type %04x\n", in mmc_davinci_start_command()
423 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_send_dma_request()
445 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_send_dma_request()
466 host->sg_len = dma_map_sg(mmc_dev(host->mmc), data->sg, data->sg_len, in mmc_davinci_start_dma_transfer()
472 dma_unmap_sg(mmc_dev(host->mmc), in mmc_davinci_start_dma_transfer()
496 host->dma_tx = dma_request_chan(mmc_dev(host->mmc), "tx"); in davinci_acquire_dma_channels()
498 dev_err(mmc_dev(host->mmc), "Can't get dma_tx channel\n"); in davinci_acquire_dma_channels()
502 host->dma_rx = dma_request_chan(mmc_dev(host->mmc), "rx"); in davinci_acquire_dma_channels()
504 dev_err(mmc_dev(host->mmc), "Can't get dma_rx channel\n"); in davinci_acquire_dma_channels()
532 dev_dbg(mmc_dev(host->mmc), "%s, %d blocks of %d bytes\n", in mmc_davinci_prepare_data()
535 dev_dbg(mmc_dev(host->mmc), " DTO %d cycles + %d ns\n", in mmc_davinci_prepare_data()
584 static void mmc_davinci_request(struct mmc_host *mmc, struct mmc_request *req) in mmc_davinci_request() argument
586 struct mmc_davinci_host *host = mmc_priv(mmc); in mmc_davinci_request()
600 dev_err(mmc_dev(host->mmc), "still BUSY? bad ... \n"); in mmc_davinci_request()
602 mmc_request_done(mmc, req); in mmc_davinci_request()
639 static void calculate_clk_divider(struct mmc_host *mmc, struct mmc_ios *ios) in calculate_clk_divider() argument
643 struct mmc_davinci_host *host = mmc_priv(mmc); in calculate_clk_divider()
685 static void mmc_davinci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) in mmc_davinci_set_ios() argument
687 struct mmc_davinci_host *host = mmc_priv(mmc); in mmc_davinci_set_ios()
688 struct platform_device *pdev = to_platform_device(mmc->parent); in mmc_davinci_set_ios()
691 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_set_ios()
709 dev_dbg(mmc_dev(host->mmc), "Enabling 8 bit mode\n"); in mmc_davinci_set_ios()
715 dev_dbg(mmc_dev(host->mmc), "Enabling 4 bit mode\n"); in mmc_davinci_set_ios()
726 dev_dbg(mmc_dev(host->mmc), "Enabling 1 bit mode\n"); in mmc_davinci_set_ios()
738 calculate_clk_divider(mmc, ios); in mmc_davinci_set_ios()
758 dev_warn(mmc_dev(host->mmc), "powerup timeout\n"); in mmc_davinci_set_ios()
769 if (host->mmc->caps & MMC_CAP_SDIO_IRQ) { in mmc_davinci_xfer_done()
778 mmc_signal_sdio_irq(host->mmc); in mmc_davinci_xfer_done()
785 dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len, in mmc_davinci_xfer_done()
792 mmc_request_done(host->mmc, data->mrq); in mmc_davinci_xfer_done()
820 mmc_request_done(host->mmc, cmd->mrq); in mmc_davinci_cmd_done()
855 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_sdio_irq()
858 mmc_signal_sdio_irq(host->mmc); in mmc_davinci_sdio_irq()
873 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_irq()
931 dev_err(mmc_dev(host->mmc), in mmc_davinci_irq()
941 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_irq()
965 dev_dbg(mmc_dev(host->mmc), "data %s %s error\n", in mmc_davinci_irq()
975 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_irq()
989 dev_dbg(mmc_dev(host->mmc), "Command CRC error\n"); in mmc_davinci_irq()
1008 static int mmc_davinci_get_cd(struct mmc_host *mmc) in mmc_davinci_get_cd() argument
1010 struct platform_device *pdev = to_platform_device(mmc->parent); in mmc_davinci_get_cd()
1016 return mmc_gpio_get_cd(mmc); in mmc_davinci_get_cd()
1019 static int mmc_davinci_get_ro(struct mmc_host *mmc) in mmc_davinci_get_ro() argument
1021 struct platform_device *pdev = to_platform_device(mmc->parent); in mmc_davinci_get_ro()
1027 return mmc_gpio_get_ro(mmc); in mmc_davinci_get_ro()
1030 static void mmc_davinci_enable_sdio_irq(struct mmc_host *mmc, int enable) in mmc_davinci_enable_sdio_irq() argument
1032 struct mmc_davinci_host *host = mmc_priv(mmc); in mmc_davinci_enable_sdio_irq()
1037 mmc_signal_sdio_irq(host->mmc); in mmc_davinci_enable_sdio_irq()
1066 struct mmc_host *mmc; in mmc_davinci_cpufreq_transition() local
1070 mmc = host->mmc; in mmc_davinci_cpufreq_transition()
1074 spin_lock_irqsave(&mmc->lock, flags); in mmc_davinci_cpufreq_transition()
1076 calculate_clk_divider(mmc, &mmc->ios); in mmc_davinci_cpufreq_transition()
1077 spin_unlock_irqrestore(&mmc->lock, flags); in mmc_davinci_cpufreq_transition()
1122 .name = "dm6441-mmc",
1125 .name = "da830-mmc",
1134 .compatible = "ti,dm6441-mmc",
1138 .compatible = "ti,da830-mmc",
1145 static int mmc_davinci_parse_pdata(struct mmc_host *mmc) in mmc_davinci_parse_pdata() argument
1147 struct platform_device *pdev = to_platform_device(mmc->parent); in mmc_davinci_parse_pdata()
1155 host = mmc_priv(mmc); in mmc_davinci_parse_pdata()
1163 mmc->caps |= MMC_CAP_4_BIT_DATA; in mmc_davinci_parse_pdata()
1166 mmc->caps |= (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA); in mmc_davinci_parse_pdata()
1168 mmc->f_min = 312500; in mmc_davinci_parse_pdata()
1169 mmc->f_max = 25000000; in mmc_davinci_parse_pdata()
1171 mmc->f_max = pdata->max_freq; in mmc_davinci_parse_pdata()
1173 mmc->caps |= pdata->caps; in mmc_davinci_parse_pdata()
1176 ret = mmc_gpiod_request_cd(mmc, "cd", 0, false, 0); in mmc_davinci_parse_pdata()
1180 mmc->caps |= MMC_CAP_NEEDS_POLL; in mmc_davinci_parse_pdata()
1182 ret = mmc_gpiod_request_ro(mmc, "wp", 0, 0); in mmc_davinci_parse_pdata()
1192 struct mmc_host *mmc = NULL; in davinci_mmcsd_probe() local
1211 mmc = mmc_alloc_host(sizeof(struct mmc_davinci_host), &pdev->dev); in davinci_mmcsd_probe()
1212 if (!mmc) in davinci_mmcsd_probe()
1215 host = mmc_priv(mmc); in davinci_mmcsd_probe()
1216 host->mmc = mmc; /* Important */ in davinci_mmcsd_probe()
1238 ret = mmc_of_parse(mmc); in davinci_mmcsd_probe()
1245 ret = mmc_davinci_parse_pdata(mmc); in davinci_mmcsd_probe()
1269 mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY; in davinci_mmcsd_probe()
1275 mmc->ops = &mmc_davinci_ops; in davinci_mmcsd_probe()
1276 mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; in davinci_mmcsd_probe()
1282 mmc->max_segs = MAX_NR_SG; in davinci_mmcsd_probe()
1285 mmc->max_seg_size = MAX_CCNT * rw_threshold; in davinci_mmcsd_probe()
1287 /* MMC/SD controller limits for multiblock requests */ in davinci_mmcsd_probe()
1288 mmc->max_blk_size = 4095; /* BLEN is 12 bits */ in davinci_mmcsd_probe()
1289 mmc->max_blk_count = 65535; /* NBLK is 16 bits */ in davinci_mmcsd_probe()
1290 mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count; in davinci_mmcsd_probe()
1292 dev_dbg(mmc_dev(host->mmc), "max_segs=%d\n", mmc->max_segs); in davinci_mmcsd_probe()
1293 dev_dbg(mmc_dev(host->mmc), "max_blk_size=%d\n", mmc->max_blk_size); in davinci_mmcsd_probe()
1294 dev_dbg(mmc_dev(host->mmc), "max_req_size=%d\n", mmc->max_req_size); in davinci_mmcsd_probe()
1295 dev_dbg(mmc_dev(host->mmc), "max_seg_size=%d\n", mmc->max_seg_size); in davinci_mmcsd_probe()
1305 ret = mmc_add_host(mmc); in davinci_mmcsd_probe()
1310 mmc_hostname(mmc), host); in davinci_mmcsd_probe()
1317 mmc_hostname(mmc), host); in davinci_mmcsd_probe()
1319 mmc->caps |= MMC_CAP_SDIO_IRQ; in davinci_mmcsd_probe()
1322 rename_region(mem, mmc_hostname(mmc)); in davinci_mmcsd_probe()
1324 dev_info(mmc_dev(host->mmc), "Using %s, %d-bit mode\n", in davinci_mmcsd_probe()
1326 (mmc->caps & MMC_CAP_4_BIT_DATA) ? 4 : 1); in davinci_mmcsd_probe()
1331 mmc_remove_host(mmc); in davinci_mmcsd_probe()
1342 mmc_free_host(mmc); in davinci_mmcsd_probe()
1351 mmc_remove_host(host->mmc); in davinci_mmcsd_remove()
1355 mmc_free_host(host->mmc); in davinci_mmcsd_remove()
1410 MODULE_DESCRIPTION("MMC/SD driver for Davinci MMC controller");