Lines Matching refs:mmc

154 	struct	mmc_host	*mmc;  member
229 static void meson_mmc_get_transfer_mode(struct mmc_host *mmc, in meson_mmc_get_transfer_mode() argument
232 struct meson_host *host = mmc_priv(mmc); in meson_mmc_get_transfer_mode()
257 dev_warn_once(mmc_dev(mmc), in meson_mmc_get_transfer_mode()
268 dev_warn_once(mmc_dev(mmc), in meson_mmc_get_transfer_mode()
289 static void meson_mmc_pre_req(struct mmc_host *mmc, struct mmc_request *mrq) in meson_mmc_pre_req() argument
296 meson_mmc_get_transfer_mode(mmc, mrq); in meson_mmc_pre_req()
302 data->sg_count = dma_map_sg(mmc_dev(mmc), data->sg, data->sg_len, in meson_mmc_pre_req()
305 dev_err(mmc_dev(mmc), "dma_map_sg failed"); in meson_mmc_pre_req()
308 static void meson_mmc_post_req(struct mmc_host *mmc, struct mmc_request *mrq, in meson_mmc_post_req() argument
314 dma_unmap_sg(mmc_dev(mmc), data->sg, data->sg_len, in meson_mmc_post_req()
357 struct mmc_host *mmc = host->mmc; in meson_mmc_clk_set() local
368 mmc->actual_clock = 0; in meson_mmc_clk_set()
397 mmc->actual_clock = clk_get_rate(host->mmc_clk); in meson_mmc_clk_set()
402 mmc->actual_clock >>= 1; in meson_mmc_clk_set()
405 dev_dbg(host->dev, "clk rate: %u Hz\n", mmc->actual_clock); in meson_mmc_clk_set()
406 if (rate != mmc->actual_clock) in meson_mmc_clk_set()
437 if (host->mmc->caps & MMC_CAP_SDIO_IRQ) in meson_mmc_clk_init()
500 host->mmc->f_min = clk_round_rate(host->mmc_clk, 400000); in meson_mmc_clk_init()
501 ret = clk_set_rate(host->mmc_clk, host->mmc->f_min); in meson_mmc_clk_init()
527 static int meson_mmc_resampling_tuning(struct mmc_host *mmc, u32 opcode) in meson_mmc_resampling_tuning() argument
529 struct meson_host *host = mmc_priv(mmc); in meson_mmc_resampling_tuning()
541 if (mmc_doing_retune(mmc)) in meson_mmc_resampling_tuning()
551 ret = mmc_send_tuning(mmc, opcode, NULL); in meson_mmc_resampling_tuning()
553 dev_dbg(mmc_dev(mmc), "resampling delay: %u\n", in meson_mmc_resampling_tuning()
595 static void meson_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) in meson_mmc_set_ios() argument
597 struct meson_host *host = mmc_priv(mmc); in meson_mmc_set_ios()
607 if (!IS_ERR(mmc->supply.vmmc)) in meson_mmc_set_ios()
608 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0); in meson_mmc_set_ios()
610 if (!IS_ERR(mmc->supply.vqmmc) && host->vqmmc_enabled) { in meson_mmc_set_ios()
611 regulator_disable(mmc->supply.vqmmc); in meson_mmc_set_ios()
618 if (!IS_ERR(mmc->supply.vmmc)) in meson_mmc_set_ios()
619 mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, ios->vdd); in meson_mmc_set_ios()
624 if (!IS_ERR(mmc->supply.vqmmc) && !host->vqmmc_enabled) { in meson_mmc_set_ios()
625 int ret = regulator_enable(mmc->supply.vqmmc); in meson_mmc_set_ios()
667 static void meson_mmc_request_done(struct mmc_host *mmc, in meson_mmc_request_done() argument
670 struct meson_host *host = mmc_priv(mmc); in meson_mmc_request_done()
674 meson_mmc_post_req(mmc, mrq, 0); in meson_mmc_request_done()
675 mmc_request_done(host->mmc, mrq); in meson_mmc_request_done()
678 static void meson_mmc_set_blksz(struct mmc_host *mmc, unsigned int blksz) in meson_mmc_set_blksz() argument
680 struct meson_host *host = mmc_priv(mmc); in meson_mmc_set_blksz()
720 static void meson_mmc_desc_chain_transfer(struct mmc_host *mmc, u32 cmd_cfg) in meson_mmc_desc_chain_transfer() argument
722 struct meson_host *host = mmc_priv(mmc); in meson_mmc_desc_chain_transfer()
734 meson_mmc_set_blksz(mmc, data->blksz); in meson_mmc_desc_chain_transfer()
805 static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd) in meson_mmc_start_cmd() argument
807 struct meson_host *host = mmc_priv(mmc); in meson_mmc_start_cmd()
831 meson_mmc_desc_chain_transfer(mmc, cmd_cfg); in meson_mmc_start_cmd()
839 meson_mmc_set_blksz(mmc, data->blksz); in meson_mmc_start_cmd()
871 static int meson_mmc_validate_dram_access(struct mmc_host *mmc, struct mmc_data *data) in meson_mmc_validate_dram_access() argument
880 dev_err(mmc_dev(mmc), "unaligned sg offset %u len %u\n", in meson_mmc_validate_dram_access()
889 static void meson_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq) in meson_mmc_request() argument
891 struct meson_host *host = mmc_priv(mmc); in meson_mmc_request()
901 mrq->cmd->error = meson_mmc_validate_dram_access(mmc, mrq->data); in meson_mmc_request()
903 mmc_request_done(mmc, mrq); in meson_mmc_request()
909 meson_mmc_get_transfer_mode(mmc, mrq); in meson_mmc_request()
915 meson_mmc_pre_req(mmc, mrq); in meson_mmc_request()
920 meson_mmc_start_cmd(mmc, mrq->sbc ?: mrq->cmd); in meson_mmc_request()
923 static void meson_mmc_read_resp(struct mmc_host *mmc, struct mmc_command *cmd) in meson_mmc_read_resp() argument
925 struct meson_host *host = mmc_priv(mmc); in meson_mmc_read_resp()
937 static void __meson_mmc_enable_sdio_irq(struct mmc_host *mmc, int enable) in __meson_mmc_enable_sdio_irq() argument
939 struct meson_host *host = mmc_priv(mmc); in __meson_mmc_enable_sdio_irq()
954 if (host->mmc->caps & MMC_CAP_SDIO_IRQ) in meson_mmc_irq()
976 __meson_mmc_enable_sdio_irq(host->mmc, 0); in meson_mmc_irq()
977 sdio_signal_irq(host->mmc); in meson_mmc_irq()
1002 meson_mmc_read_resp(host->mmc, cmd); in meson_mmc_irq()
1026 meson_mmc_request_done(host->mmc, cmd->mrq); in meson_mmc_irq()
1060 meson_mmc_request_done(host->mmc, cmd->mrq); in meson_mmc_irq_thread()
1078 meson_mmc_start_cmd(host->mmc, next_cmd); in meson_mmc_irq_thread()
1080 meson_mmc_request_done(host->mmc, cmd->mrq); in meson_mmc_irq_thread()
1100 static int meson_mmc_card_busy(struct mmc_host *mmc) in meson_mmc_card_busy() argument
1102 struct meson_host *host = mmc_priv(mmc); in meson_mmc_card_busy()
1111 static int meson_mmc_voltage_switch(struct mmc_host *mmc, struct mmc_ios *ios) in meson_mmc_voltage_switch() argument
1116 if (!IS_ERR(mmc->supply.vqmmc)) { in meson_mmc_voltage_switch()
1124 ret = mmc_regulator_set_vqmmc(mmc, ios); in meson_mmc_voltage_switch()
1135 static void meson_mmc_enable_sdio_irq(struct mmc_host *mmc, int enable) in meson_mmc_enable_sdio_irq() argument
1137 struct meson_host *host = mmc_priv(mmc); in meson_mmc_enable_sdio_irq()
1141 __meson_mmc_enable_sdio_irq(mmc, enable); in meson_mmc_enable_sdio_irq()
1145 static void meson_mmc_ack_sdio_irq(struct mmc_host *mmc) in meson_mmc_ack_sdio_irq() argument
1147 meson_mmc_enable_sdio_irq(mmc, 1); in meson_mmc_ack_sdio_irq()
1167 struct mmc_host *mmc; in meson_mmc_probe() local
1171 mmc = devm_mmc_alloc_host(&pdev->dev, sizeof(struct meson_host)); in meson_mmc_probe()
1172 if (!mmc) in meson_mmc_probe()
1174 host = mmc_priv(mmc); in meson_mmc_probe()
1175 host->mmc = mmc; in meson_mmc_probe()
1185 ret = mmc_regulator_get_supply(mmc); in meson_mmc_probe()
1189 ret = mmc_of_parse(mmc); in meson_mmc_probe()
1193 mmc->caps |= MMC_CAP_CMD23; in meson_mmc_probe()
1195 if (mmc->caps & MMC_CAP_SDIO_IRQ) in meson_mmc_probe()
1196 mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD; in meson_mmc_probe()
1215 mmc_gpio_set_cd_irq(mmc, cd_irq); in meson_mmc_probe()
1258 mmc->max_segs = 1; in meson_mmc_probe()
1260 mmc->max_blk_count = SD_EMMC_SRAM_DATA_BUF_LEN / in meson_mmc_probe()
1261 mmc->max_blk_size; in meson_mmc_probe()
1263 mmc->max_blk_count = CMD_CFG_LENGTH_MASK; in meson_mmc_probe()
1264 mmc->max_segs = SD_EMMC_DESC_BUF_LEN / in meson_mmc_probe()
1267 mmc->max_req_size = mmc->max_blk_count * mmc->max_blk_size; in meson_mmc_probe()
1268 mmc->max_seg_size = mmc->max_req_size; in meson_mmc_probe()
1275 mmc->caps2 &= ~MMC_CAP2_HS400; in meson_mmc_probe()
1289 host->bounce_buf_size = mmc->max_req_size; in meson_mmc_probe()
1308 mmc->ops = &meson_mmc_ops; in meson_mmc_probe()
1309 ret = mmc_add_host(mmc); in meson_mmc_probe()
1326 mmc_remove_host(host->mmc); in meson_mmc_remove()