Lines Matching full:mmc

3  * davinci_mmc.c - TI DaVinci MMC/SD/SDIO driver
20 #include <linux/mmc/host.h>
21 #include <linux/mmc/mmc.h>
22 #include <linux/mmc/slot-gpio.h>
24 #include <linux/platform_data/mmc-davinci.h>
169 struct mmc_host *mmc; member
195 /* Version of the MMC/SD controller */
221 dev_err(mmc_dev(host->mmc), "ran out of sglist prematurely\n"); in davinci_fifo_data_trans()
263 dev_dbg(mmc_dev(host->mmc), "CMD%d, arg 0x%08x%s\n", in mmc_davinci_start_command()
304 dev_dbg(mmc_dev(host->mmc), "unknown resp_type %04x\n", in mmc_davinci_start_command()
413 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_send_dma_request()
435 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_send_dma_request()
456 host->sg_len = dma_map_sg(mmc_dev(host->mmc), data->sg, data->sg_len, in mmc_davinci_start_dma_transfer()
462 dma_unmap_sg(mmc_dev(host->mmc), in mmc_davinci_start_dma_transfer()
486 host->dma_tx = dma_request_chan(mmc_dev(host->mmc), "tx"); in davinci_acquire_dma_channels()
488 dev_err(mmc_dev(host->mmc), "Can't get dma_tx channel\n"); in davinci_acquire_dma_channels()
492 host->dma_rx = dma_request_chan(mmc_dev(host->mmc), "rx"); in davinci_acquire_dma_channels()
494 dev_err(mmc_dev(host->mmc), "Can't get dma_rx channel\n"); in davinci_acquire_dma_channels()
523 dev_dbg(mmc_dev(host->mmc), "%s, %d blocks of %d bytes\n", in mmc_davinci_prepare_data()
526 dev_dbg(mmc_dev(host->mmc), " DTO %d cycles + %d ns\n", in mmc_davinci_prepare_data()
575 static void mmc_davinci_request(struct mmc_host *mmc, struct mmc_request *req) in mmc_davinci_request() argument
577 struct mmc_davinci_host *host = mmc_priv(mmc); in mmc_davinci_request()
591 dev_err(mmc_dev(host->mmc), "still BUSY? bad ... \n"); in mmc_davinci_request()
593 mmc_request_done(mmc, req); in mmc_davinci_request()
630 static void calculate_clk_divider(struct mmc_host *mmc, struct mmc_ios *ios) in calculate_clk_divider() argument
634 struct mmc_davinci_host *host = mmc_priv(mmc); in calculate_clk_divider()
676 static void mmc_davinci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) in mmc_davinci_set_ios() argument
678 struct mmc_davinci_host *host = mmc_priv(mmc); in mmc_davinci_set_ios()
679 struct platform_device *pdev = to_platform_device(mmc->parent); in mmc_davinci_set_ios()
682 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_set_ios()
700 dev_dbg(mmc_dev(host->mmc), "Enabling 8 bit mode\n"); in mmc_davinci_set_ios()
706 dev_dbg(mmc_dev(host->mmc), "Enabling 4 bit mode\n"); in mmc_davinci_set_ios()
717 dev_dbg(mmc_dev(host->mmc), "Enabling 1 bit mode\n"); in mmc_davinci_set_ios()
729 calculate_clk_divider(mmc, ios); in mmc_davinci_set_ios()
749 dev_warn(mmc_dev(host->mmc), "powerup timeout\n"); in mmc_davinci_set_ios()
760 if (host->mmc->caps & MMC_CAP_SDIO_IRQ) { in mmc_davinci_xfer_done()
769 mmc_signal_sdio_irq(host->mmc); in mmc_davinci_xfer_done()
776 dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len, in mmc_davinci_xfer_done()
783 mmc_request_done(host->mmc, data->mrq); in mmc_davinci_xfer_done()
811 mmc_request_done(host->mmc, cmd->mrq); in mmc_davinci_cmd_done()
848 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_sdio_irq()
851 mmc_signal_sdio_irq(host->mmc); in mmc_davinci_sdio_irq()
866 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_irq()
926 dev_err(mmc_dev(host->mmc), in mmc_davinci_irq()
936 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_irq()
960 dev_dbg(mmc_dev(host->mmc), "data %s %s error\n", in mmc_davinci_irq()
970 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_irq()
984 dev_dbg(mmc_dev(host->mmc), "Command CRC error\n"); in mmc_davinci_irq()
1003 static int mmc_davinci_get_cd(struct mmc_host *mmc) in mmc_davinci_get_cd() argument
1005 struct platform_device *pdev = to_platform_device(mmc->parent); in mmc_davinci_get_cd()
1011 return mmc_gpio_get_cd(mmc); in mmc_davinci_get_cd()
1014 static int mmc_davinci_get_ro(struct mmc_host *mmc) in mmc_davinci_get_ro() argument
1016 struct platform_device *pdev = to_platform_device(mmc->parent); in mmc_davinci_get_ro()
1022 return mmc_gpio_get_ro(mmc); in mmc_davinci_get_ro()
1025 static void mmc_davinci_enable_sdio_irq(struct mmc_host *mmc, int enable) in mmc_davinci_enable_sdio_irq() argument
1027 struct mmc_davinci_host *host = mmc_priv(mmc); in mmc_davinci_enable_sdio_irq()
1032 mmc_signal_sdio_irq(host->mmc); in mmc_davinci_enable_sdio_irq()
1061 struct mmc_host *mmc; in mmc_davinci_cpufreq_transition() local
1065 mmc = host->mmc; in mmc_davinci_cpufreq_transition()
1069 spin_lock_irqsave(&mmc->lock, flags); in mmc_davinci_cpufreq_transition()
1071 calculate_clk_divider(mmc, &mmc->ios); in mmc_davinci_cpufreq_transition()
1072 spin_unlock_irqrestore(&mmc->lock, flags); in mmc_davinci_cpufreq_transition()
1117 .name = "dm6441-mmc",
1120 .name = "da830-mmc",
1129 .compatible = "ti,dm6441-mmc",
1133 .compatible = "ti,da830-mmc",
1140 static int mmc_davinci_parse_pdata(struct mmc_host *mmc) in mmc_davinci_parse_pdata() argument
1142 struct platform_device *pdev = to_platform_device(mmc->parent); in mmc_davinci_parse_pdata()
1150 host = mmc_priv(mmc); in mmc_davinci_parse_pdata()
1158 mmc->caps |= MMC_CAP_4_BIT_DATA; in mmc_davinci_parse_pdata()
1161 mmc->caps |= (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA); in mmc_davinci_parse_pdata()
1163 mmc->f_min = 312500; in mmc_davinci_parse_pdata()
1164 mmc->f_max = 25000000; in mmc_davinci_parse_pdata()
1166 mmc->f_max = pdata->max_freq; in mmc_davinci_parse_pdata()
1168 mmc->caps |= pdata->caps; in mmc_davinci_parse_pdata()
1171 ret = mmc_gpiod_request_cd(mmc, "cd", 0, false, 0); in mmc_davinci_parse_pdata()
1175 mmc->caps |= MMC_CAP_NEEDS_POLL; in mmc_davinci_parse_pdata()
1177 ret = mmc_gpiod_request_ro(mmc, "wp", 0, 0); in mmc_davinci_parse_pdata()
1187 struct mmc_host *mmc = NULL; in davinci_mmcsd_probe() local
1206 mmc = mmc_alloc_host(sizeof(struct mmc_davinci_host), &pdev->dev); in davinci_mmcsd_probe()
1207 if (!mmc) in davinci_mmcsd_probe()
1210 host = mmc_priv(mmc); in davinci_mmcsd_probe()
1211 host->mmc = mmc; /* Important */ in davinci_mmcsd_probe()
1233 ret = mmc_of_parse(mmc); in davinci_mmcsd_probe()
1240 ret = mmc_davinci_parse_pdata(mmc); in davinci_mmcsd_probe()
1264 mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY; in davinci_mmcsd_probe()
1270 mmc->ops = &mmc_davinci_ops; in davinci_mmcsd_probe()
1271 mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; in davinci_mmcsd_probe()
1277 mmc->max_segs = MAX_NR_SG; in davinci_mmcsd_probe()
1280 mmc->max_seg_size = MAX_CCNT * rw_threshold; in davinci_mmcsd_probe()
1282 /* MMC/SD controller limits for multiblock requests */ in davinci_mmcsd_probe()
1283 mmc->max_blk_size = 4095; /* BLEN is 12 bits */ in davinci_mmcsd_probe()
1284 mmc->max_blk_count = 65535; /* NBLK is 16 bits */ in davinci_mmcsd_probe()
1285 mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count; in davinci_mmcsd_probe()
1287 dev_dbg(mmc_dev(host->mmc), "max_segs=%d\n", mmc->max_segs); in davinci_mmcsd_probe()
1288 dev_dbg(mmc_dev(host->mmc), "max_blk_size=%d\n", mmc->max_blk_size); in davinci_mmcsd_probe()
1289 dev_dbg(mmc_dev(host->mmc), "max_req_size=%d\n", mmc->max_req_size); in davinci_mmcsd_probe()
1290 dev_dbg(mmc_dev(host->mmc), "max_seg_size=%d\n", mmc->max_seg_size); in davinci_mmcsd_probe()
1300 ret = mmc_add_host(mmc); in davinci_mmcsd_probe()
1305 mmc_hostname(mmc), host); in davinci_mmcsd_probe()
1312 mmc_hostname(mmc), host); in davinci_mmcsd_probe()
1314 mmc->caps |= MMC_CAP_SDIO_IRQ; in davinci_mmcsd_probe()
1317 rename_region(mem, mmc_hostname(mmc)); in davinci_mmcsd_probe()
1319 if (mmc->caps & MMC_CAP_8_BIT_DATA) in davinci_mmcsd_probe()
1321 else if (mmc->caps & MMC_CAP_4_BIT_DATA) in davinci_mmcsd_probe()
1325 dev_info(mmc_dev(host->mmc), "Using %s, %d-bit mode\n", 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");