Lines Matching refs:host

231 static void mmc_davinci_sg_to_buf(struct mmc_davinci_host *host)  in mmc_davinci_sg_to_buf()  argument
233 host->buffer_bytes_left = sg_dma_len(host->sg); in mmc_davinci_sg_to_buf()
234 host->buffer = sg_virt(host->sg); in mmc_davinci_sg_to_buf()
235 if (host->buffer_bytes_left > host->bytes_left) in mmc_davinci_sg_to_buf()
236 host->buffer_bytes_left = host->bytes_left; in mmc_davinci_sg_to_buf()
239 static void davinci_fifo_data_trans(struct mmc_davinci_host *host, in davinci_fifo_data_trans() argument
245 if (host->buffer_bytes_left == 0) { in davinci_fifo_data_trans()
246 host->sg = sg_next(host->data->sg); in davinci_fifo_data_trans()
247 mmc_davinci_sg_to_buf(host); in davinci_fifo_data_trans()
250 p = host->buffer; in davinci_fifo_data_trans()
251 if (n > host->buffer_bytes_left) in davinci_fifo_data_trans()
252 n = host->buffer_bytes_left; in davinci_fifo_data_trans()
253 host->buffer_bytes_left -= n; in davinci_fifo_data_trans()
254 host->bytes_left -= n; in davinci_fifo_data_trans()
260 if (host->data_dir == DAVINCI_MMC_DATADIR_WRITE) { in davinci_fifo_data_trans()
262 writel(*((u32 *)p), host->base + DAVINCI_MMCDXR); in davinci_fifo_data_trans()
266 iowrite8_rep(host->base + DAVINCI_MMCDXR, p, (n & 3)); in davinci_fifo_data_trans()
271 *((u32 *)p) = readl(host->base + DAVINCI_MMCDRR); in davinci_fifo_data_trans()
275 ioread8_rep(host->base + DAVINCI_MMCDRR, p, (n & 3)); in davinci_fifo_data_trans()
279 host->buffer = p; in davinci_fifo_data_trans()
282 static void mmc_davinci_start_command(struct mmc_davinci_host *host, in mmc_davinci_start_command() argument
288 dev_dbg(mmc_dev(host->mmc), "CMD%d, arg 0x%08x%s\n", in mmc_davinci_start_command()
308 host->cmd = cmd; in mmc_davinci_start_command()
329 dev_dbg(mmc_dev(host->mmc), "unknown resp_type %04x\n", in mmc_davinci_start_command()
338 if (host->do_dma) in mmc_davinci_start_command()
341 if (host->version == MMC_CTLR_VERSION_2 && host->data != NULL && in mmc_davinci_start_command()
342 host->data_dir == DAVINCI_MMC_DATADIR_READ) in mmc_davinci_start_command()
354 if (host->data_dir == DAVINCI_MMC_DATADIR_WRITE) in mmc_davinci_start_command()
357 if (host->bus_mode == MMC_BUSMODE_PUSHPULL) in mmc_davinci_start_command()
361 writel(0x1FFF, host->base + DAVINCI_MMCTOR); in mmc_davinci_start_command()
365 if (host->data_dir == DAVINCI_MMC_DATADIR_WRITE) { in mmc_davinci_start_command()
368 if (!host->do_dma) in mmc_davinci_start_command()
370 } else if (host->data_dir == DAVINCI_MMC_DATADIR_READ) { in mmc_davinci_start_command()
373 if (!host->do_dma) in mmc_davinci_start_command()
381 if (!host->do_dma && (host->data_dir == DAVINCI_MMC_DATADIR_WRITE)) in mmc_davinci_start_command()
382 davinci_fifo_data_trans(host, rw_threshold); in mmc_davinci_start_command()
384 writel(cmd->arg, host->base + DAVINCI_MMCARGHL); in mmc_davinci_start_command()
385 writel(cmd_reg, host->base + DAVINCI_MMCCMD); in mmc_davinci_start_command()
387 host->active_request = true; in mmc_davinci_start_command()
389 if (!host->do_dma && host->bytes_left <= poll_threshold) { in mmc_davinci_start_command()
392 while (host->active_request && count--) { in mmc_davinci_start_command()
393 mmc_davinci_irq(0, host); in mmc_davinci_start_command()
398 if (host->active_request) in mmc_davinci_start_command()
399 writel(im_val, host->base + DAVINCI_MMCIM); in mmc_davinci_start_command()
406 static void davinci_abort_dma(struct mmc_davinci_host *host) in davinci_abort_dma() argument
410 if (host->data_dir == DAVINCI_MMC_DATADIR_READ) in davinci_abort_dma()
411 sync_dev = host->dma_rx; in davinci_abort_dma()
413 sync_dev = host->dma_tx; in davinci_abort_dma()
418 static int mmc_davinci_send_dma_request(struct mmc_davinci_host *host, in mmc_davinci_send_dma_request() argument
425 if (host->data_dir == DAVINCI_MMC_DATADIR_WRITE) { in mmc_davinci_send_dma_request()
428 .dst_addr = host->mem_res->start + DAVINCI_MMCDXR, in mmc_davinci_send_dma_request()
433 chan = host->dma_tx; in mmc_davinci_send_dma_request()
434 dmaengine_slave_config(host->dma_tx, &dma_tx_conf); in mmc_davinci_send_dma_request()
436 desc = dmaengine_prep_slave_sg(host->dma_tx, in mmc_davinci_send_dma_request()
438 host->sg_len, in mmc_davinci_send_dma_request()
442 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_send_dma_request()
450 .src_addr = host->mem_res->start + DAVINCI_MMCDRR, in mmc_davinci_send_dma_request()
455 chan = host->dma_rx; in mmc_davinci_send_dma_request()
456 dmaengine_slave_config(host->dma_rx, &dma_rx_conf); in mmc_davinci_send_dma_request()
458 desc = dmaengine_prep_slave_sg(host->dma_rx, in mmc_davinci_send_dma_request()
460 host->sg_len, in mmc_davinci_send_dma_request()
464 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_send_dma_request()
478 static int mmc_davinci_start_dma_transfer(struct mmc_davinci_host *host, in mmc_davinci_start_dma_transfer() argument
485 host->sg_len = dma_map_sg(mmc_dev(host->mmc), data->sg, data->sg_len, in mmc_davinci_start_dma_transfer()
491 for (i = 0; i < host->sg_len; i++) { in mmc_davinci_start_dma_transfer()
493 dma_unmap_sg(mmc_dev(host->mmc), in mmc_davinci_start_dma_transfer()
502 host->do_dma = 1; in mmc_davinci_start_dma_transfer()
503 ret = mmc_davinci_send_dma_request(host, data); in mmc_davinci_start_dma_transfer()
509 davinci_release_dma_channels(struct mmc_davinci_host *host) in davinci_release_dma_channels() argument
511 if (!host->use_dma) in davinci_release_dma_channels()
514 dma_release_channel(host->dma_tx); in davinci_release_dma_channels()
515 dma_release_channel(host->dma_rx); in davinci_release_dma_channels()
518 static int __init davinci_acquire_dma_channels(struct mmc_davinci_host *host) in davinci_acquire_dma_channels() argument
526 host->dma_tx = in davinci_acquire_dma_channels()
528 &host->txdma, mmc_dev(host->mmc), "tx"); in davinci_acquire_dma_channels()
529 if (!host->dma_tx) { in davinci_acquire_dma_channels()
530 dev_err(mmc_dev(host->mmc), "Can't get dma_tx channel\n"); in davinci_acquire_dma_channels()
534 host->dma_rx = in davinci_acquire_dma_channels()
536 &host->rxdma, mmc_dev(host->mmc), "rx"); in davinci_acquire_dma_channels()
537 if (!host->dma_rx) { in davinci_acquire_dma_channels()
538 dev_err(mmc_dev(host->mmc), "Can't get dma_rx channel\n"); in davinci_acquire_dma_channels()
546 dma_release_channel(host->dma_tx); in davinci_acquire_dma_channels()
554 mmc_davinci_prepare_data(struct mmc_davinci_host *host, struct mmc_request *req) in mmc_davinci_prepare_data() argument
560 if (host->version == MMC_CTLR_VERSION_2) in mmc_davinci_prepare_data()
563 host->data = data; in mmc_davinci_prepare_data()
565 host->data_dir = DAVINCI_MMC_DATADIR_NONE; in mmc_davinci_prepare_data()
566 writel(0, host->base + DAVINCI_MMCBLEN); in mmc_davinci_prepare_data()
567 writel(0, host->base + DAVINCI_MMCNBLK); in mmc_davinci_prepare_data()
571 dev_dbg(mmc_dev(host->mmc), "%s %s, %d blocks of %d bytes\n", in mmc_davinci_prepare_data()
575 dev_dbg(mmc_dev(host->mmc), " DTO %d cycles + %d ns\n", in mmc_davinci_prepare_data()
578 (data->timeout_ns / host->ns_in_one_cycle); in mmc_davinci_prepare_data()
582 writel(timeout, host->base + DAVINCI_MMCTOD); in mmc_davinci_prepare_data()
583 writel(data->blocks, host->base + DAVINCI_MMCNBLK); in mmc_davinci_prepare_data()
584 writel(data->blksz, host->base + DAVINCI_MMCBLEN); in mmc_davinci_prepare_data()
589 host->data_dir = DAVINCI_MMC_DATADIR_WRITE; in mmc_davinci_prepare_data()
591 host->base + DAVINCI_MMCFIFOCTL); in mmc_davinci_prepare_data()
593 host->base + DAVINCI_MMCFIFOCTL); in mmc_davinci_prepare_data()
597 host->data_dir = DAVINCI_MMC_DATADIR_READ; in mmc_davinci_prepare_data()
599 host->base + DAVINCI_MMCFIFOCTL); in mmc_davinci_prepare_data()
601 host->base + DAVINCI_MMCFIFOCTL); in mmc_davinci_prepare_data()
605 host->buffer = NULL; in mmc_davinci_prepare_data()
606 host->bytes_left = data->blocks * data->blksz; in mmc_davinci_prepare_data()
616 if (host->use_dma && (host->bytes_left & (rw_threshold - 1)) == 0 in mmc_davinci_prepare_data()
617 && mmc_davinci_start_dma_transfer(host, data) == 0) { in mmc_davinci_prepare_data()
619 host->bytes_left = 0; in mmc_davinci_prepare_data()
622 host->sg_len = data->sg_len; in mmc_davinci_prepare_data()
623 host->sg = host->data->sg; in mmc_davinci_prepare_data()
624 mmc_davinci_sg_to_buf(host); in mmc_davinci_prepare_data()
630 struct mmc_davinci_host *host = mmc_priv(mmc); in mmc_davinci_request() local
638 mmcst1 = readl(host->base + DAVINCI_MMCST1); in mmc_davinci_request()
644 dev_err(mmc_dev(host->mmc), "still BUSY? bad ... \n"); in mmc_davinci_request()
650 host->do_dma = 0; in mmc_davinci_request()
651 mmc_davinci_prepare_data(host, req); in mmc_davinci_request()
652 mmc_davinci_start_command(host, req->cmd); in mmc_davinci_request()
655 static unsigned int calculate_freq_for_card(struct mmc_davinci_host *host, in calculate_freq_for_card() argument
660 mmc_pclk = host->mmc_input_clk; in calculate_freq_for_card()
674 host->ns_in_one_cycle = (1000000) / (((mmc_pclk in calculate_freq_for_card()
677 host->ns_in_one_cycle = (1000000) / (((mmc_pclk in calculate_freq_for_card()
687 struct mmc_davinci_host *host = mmc_priv(mmc); in calculate_clk_divider() local
701 temp = readl(host->base + DAVINCI_MMCCLK) & ~MMCCLK_CLKRT_MASK; in calculate_clk_divider()
703 writel(temp, host->base + DAVINCI_MMCCLK); in calculate_clk_divider()
706 host->ns_in_one_cycle = (1000000) / (MMCSD_INIT_CLOCK/1000); in calculate_clk_divider()
709 mmc_push_pull_freq = calculate_freq_for_card(host, ios->clock); in calculate_clk_divider()
714 temp = readl(host->base + DAVINCI_MMCCLK) & ~MMCCLK_CLKEN; in calculate_clk_divider()
715 writel(temp, host->base + DAVINCI_MMCCLK); in calculate_clk_divider()
719 temp = readl(host->base + DAVINCI_MMCCLK) & ~MMCCLK_CLKRT_MASK; in calculate_clk_divider()
721 writel(temp, host->base + DAVINCI_MMCCLK); in calculate_clk_divider()
723 writel(temp | MMCCLK_CLKEN, host->base + DAVINCI_MMCCLK); in calculate_clk_divider()
731 struct mmc_davinci_host *host = mmc_priv(mmc); in mmc_davinci_set_ios() local
735 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_set_ios()
753 dev_dbg(mmc_dev(host->mmc), "Enabling 8 bit mode\n"); in mmc_davinci_set_ios()
754 writel((readl(host->base + DAVINCI_MMCCTL) & in mmc_davinci_set_ios()
756 host->base + DAVINCI_MMCCTL); in mmc_davinci_set_ios()
759 dev_dbg(mmc_dev(host->mmc), "Enabling 4 bit mode\n"); in mmc_davinci_set_ios()
760 if (host->version == MMC_CTLR_VERSION_2) in mmc_davinci_set_ios()
761 writel((readl(host->base + DAVINCI_MMCCTL) & in mmc_davinci_set_ios()
763 host->base + DAVINCI_MMCCTL); in mmc_davinci_set_ios()
765 writel(readl(host->base + DAVINCI_MMCCTL) | in mmc_davinci_set_ios()
767 host->base + DAVINCI_MMCCTL); in mmc_davinci_set_ios()
770 dev_dbg(mmc_dev(host->mmc), "Enabling 1 bit mode\n"); in mmc_davinci_set_ios()
771 if (host->version == MMC_CTLR_VERSION_2) in mmc_davinci_set_ios()
772 writel(readl(host->base + DAVINCI_MMCCTL) & in mmc_davinci_set_ios()
774 host->base + DAVINCI_MMCCTL); in mmc_davinci_set_ios()
776 writel(readl(host->base + DAVINCI_MMCCTL) & in mmc_davinci_set_ios()
778 host->base + DAVINCI_MMCCTL); in mmc_davinci_set_ios()
784 host->bus_mode = ios->bus_mode; in mmc_davinci_set_ios()
790 writel(0, host->base + DAVINCI_MMCARGHL); in mmc_davinci_set_ios()
791 writel(MMCCMD_INITCK, host->base + DAVINCI_MMCCMD); in mmc_davinci_set_ios()
793 u32 tmp = readl(host->base + DAVINCI_MMCST0); in mmc_davinci_set_ios()
802 dev_warn(mmc_dev(host->mmc), "powerup timeout\n"); in mmc_davinci_set_ios()
809 mmc_davinci_xfer_done(struct mmc_davinci_host *host, struct mmc_data *data) in mmc_davinci_xfer_done() argument
811 host->data = NULL; in mmc_davinci_xfer_done()
813 if (host->mmc->caps & MMC_CAP_SDIO_IRQ) { in mmc_davinci_xfer_done()
819 if (host->sdio_int && !(readl(host->base + DAVINCI_SDIOST0) & in mmc_davinci_xfer_done()
821 writel(SDIOIST_IOINT, host->base + DAVINCI_SDIOIST); in mmc_davinci_xfer_done()
822 mmc_signal_sdio_irq(host->mmc); in mmc_davinci_xfer_done()
826 if (host->do_dma) { in mmc_davinci_xfer_done()
827 davinci_abort_dma(host); in mmc_davinci_xfer_done()
829 dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len, in mmc_davinci_xfer_done()
833 host->do_dma = false; in mmc_davinci_xfer_done()
835 host->data_dir = DAVINCI_MMC_DATADIR_NONE; in mmc_davinci_xfer_done()
837 if (!data->stop || (host->cmd && host->cmd->error)) { in mmc_davinci_xfer_done()
838 mmc_request_done(host->mmc, data->mrq); in mmc_davinci_xfer_done()
839 writel(0, host->base + DAVINCI_MMCIM); in mmc_davinci_xfer_done()
840 host->active_request = false; in mmc_davinci_xfer_done()
842 mmc_davinci_start_command(host, data->stop); in mmc_davinci_xfer_done()
845 static void mmc_davinci_cmd_done(struct mmc_davinci_host *host, in mmc_davinci_cmd_done() argument
848 host->cmd = NULL; in mmc_davinci_cmd_done()
853 cmd->resp[3] = readl(host->base + DAVINCI_MMCRSP01); in mmc_davinci_cmd_done()
854 cmd->resp[2] = readl(host->base + DAVINCI_MMCRSP23); in mmc_davinci_cmd_done()
855 cmd->resp[1] = readl(host->base + DAVINCI_MMCRSP45); in mmc_davinci_cmd_done()
856 cmd->resp[0] = readl(host->base + DAVINCI_MMCRSP67); in mmc_davinci_cmd_done()
859 cmd->resp[0] = readl(host->base + DAVINCI_MMCRSP67); in mmc_davinci_cmd_done()
863 if (host->data == NULL || cmd->error) { in mmc_davinci_cmd_done()
866 mmc_request_done(host->mmc, cmd->mrq); in mmc_davinci_cmd_done()
867 writel(0, host->base + DAVINCI_MMCIM); in mmc_davinci_cmd_done()
868 host->active_request = false; in mmc_davinci_cmd_done()
872 static inline void mmc_davinci_reset_ctrl(struct mmc_davinci_host *host, in mmc_davinci_reset_ctrl() argument
877 temp = readl(host->base + DAVINCI_MMCCTL); in mmc_davinci_reset_ctrl()
883 writel(temp, host->base + DAVINCI_MMCCTL); in mmc_davinci_reset_ctrl()
888 davinci_abort_data(struct mmc_davinci_host *host, struct mmc_data *data) in davinci_abort_data() argument
890 mmc_davinci_reset_ctrl(host, 1); in davinci_abort_data()
891 mmc_davinci_reset_ctrl(host, 0); in davinci_abort_data()
896 struct mmc_davinci_host *host = dev_id; in mmc_davinci_sdio_irq() local
899 status = readl(host->base + DAVINCI_SDIOIST); in mmc_davinci_sdio_irq()
901 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_sdio_irq()
903 writel(status | SDIOIST_IOINT, host->base + DAVINCI_SDIOIST); in mmc_davinci_sdio_irq()
904 mmc_signal_sdio_irq(host->mmc); in mmc_davinci_sdio_irq()
911 struct mmc_davinci_host *host = (struct mmc_davinci_host *)dev_id; in mmc_davinci_irq() local
915 struct mmc_data *data = host->data; in mmc_davinci_irq()
917 if (host->cmd == NULL && host->data == NULL) { in mmc_davinci_irq()
918 status = readl(host->base + DAVINCI_MMCST0); in mmc_davinci_irq()
919 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_irq()
922 writel(0, host->base + DAVINCI_MMCIM); in mmc_davinci_irq()
926 status = readl(host->base + DAVINCI_MMCST0); in mmc_davinci_irq()
936 if (host->bytes_left && (status & (MMCST0_DXRDY | MMCST0_DRRDY))) { in mmc_davinci_irq()
946 im_val = readl(host->base + DAVINCI_MMCIM); in mmc_davinci_irq()
947 writel(0, host->base + DAVINCI_MMCIM); in mmc_davinci_irq()
950 davinci_fifo_data_trans(host, rw_threshold); in mmc_davinci_irq()
951 status = readl(host->base + DAVINCI_MMCST0); in mmc_davinci_irq()
953 } while (host->bytes_left && in mmc_davinci_irq()
962 writel(im_val, host->base + DAVINCI_MMCIM); in mmc_davinci_irq()
968 if ((host->do_dma == 0) && (host->bytes_left > 0)) { in mmc_davinci_irq()
972 davinci_fifo_data_trans(host, host->bytes_left); in mmc_davinci_irq()
977 dev_err(mmc_dev(host->mmc), in mmc_davinci_irq()
987 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_irq()
991 davinci_abort_data(host, data); in mmc_davinci_irq()
1006 u32 temp = readb(host->base + DAVINCI_MMCDRSP); in mmc_davinci_irq()
1011 dev_dbg(mmc_dev(host->mmc), "data %s %s error\n", in mmc_davinci_irq()
1015 davinci_abort_data(host, data); in mmc_davinci_irq()
1020 if (host->cmd) { in mmc_davinci_irq()
1021 dev_dbg(mmc_dev(host->mmc), in mmc_davinci_irq()
1023 host->cmd->opcode, qstatus); in mmc_davinci_irq()
1024 host->cmd->error = -ETIMEDOUT; in mmc_davinci_irq()
1027 davinci_abort_data(host, data); in mmc_davinci_irq()
1035 dev_dbg(mmc_dev(host->mmc), "Command CRC error\n"); in mmc_davinci_irq()
1036 if (host->cmd) { in mmc_davinci_irq()
1037 host->cmd->error = -EILSEQ; in mmc_davinci_irq()
1044 end_command = (int) host->cmd; in mmc_davinci_irq()
1048 mmc_davinci_cmd_done(host, host->cmd); in mmc_davinci_irq()
1050 mmc_davinci_xfer_done(host, data); in mmc_davinci_irq()
1076 struct mmc_davinci_host *host = mmc_priv(mmc); in mmc_davinci_enable_sdio_irq() local
1079 if (!(readl(host->base + DAVINCI_SDIOST0) & SDIOST0_DAT1_HI)) { in mmc_davinci_enable_sdio_irq()
1080 writel(SDIOIST_IOINT, host->base + DAVINCI_SDIOIST); in mmc_davinci_enable_sdio_irq()
1081 mmc_signal_sdio_irq(host->mmc); in mmc_davinci_enable_sdio_irq()
1083 host->sdio_int = true; in mmc_davinci_enable_sdio_irq()
1084 writel(readl(host->base + DAVINCI_SDIOIEN) | in mmc_davinci_enable_sdio_irq()
1085 SDIOIEN_IOINTEN, host->base + DAVINCI_SDIOIEN); in mmc_davinci_enable_sdio_irq()
1088 host->sdio_int = false; in mmc_davinci_enable_sdio_irq()
1089 writel(readl(host->base + DAVINCI_SDIOIEN) & ~SDIOIEN_IOINTEN, in mmc_davinci_enable_sdio_irq()
1090 host->base + DAVINCI_SDIOIEN); in mmc_davinci_enable_sdio_irq()
1108 struct mmc_davinci_host *host; in mmc_davinci_cpufreq_transition() local
1113 host = container_of(nb, struct mmc_davinci_host, freq_transition); in mmc_davinci_cpufreq_transition()
1114 mmc = host->mmc; in mmc_davinci_cpufreq_transition()
1115 mmc_pclk = clk_get_rate(host->clk); in mmc_davinci_cpufreq_transition()
1119 host->mmc_input_clk = mmc_pclk; in mmc_davinci_cpufreq_transition()
1127 static inline int mmc_davinci_cpufreq_register(struct mmc_davinci_host *host) in mmc_davinci_cpufreq_register() argument
1129 host->freq_transition.notifier_call = mmc_davinci_cpufreq_transition; in mmc_davinci_cpufreq_register()
1131 return cpufreq_register_notifier(&host->freq_transition, in mmc_davinci_cpufreq_register()
1135 static inline void mmc_davinci_cpufreq_deregister(struct mmc_davinci_host *host) in mmc_davinci_cpufreq_deregister() argument
1137 cpufreq_unregister_notifier(&host->freq_transition, in mmc_davinci_cpufreq_deregister()
1141 static inline int mmc_davinci_cpufreq_register(struct mmc_davinci_host *host) in mmc_davinci_cpufreq_register() argument
1146 static inline void mmc_davinci_cpufreq_deregister(struct mmc_davinci_host *host) in mmc_davinci_cpufreq_deregister() argument
1150 static void __init init_mmcsd_host(struct mmc_davinci_host *host) in init_mmcsd_host() argument
1153 mmc_davinci_reset_ctrl(host, 1); in init_mmcsd_host()
1155 writel(0, host->base + DAVINCI_MMCCLK); in init_mmcsd_host()
1156 writel(MMCCLK_CLKEN, host->base + DAVINCI_MMCCLK); in init_mmcsd_host()
1158 writel(0x1FFF, host->base + DAVINCI_MMCTOR); in init_mmcsd_host()
1159 writel(0xFFFF, host->base + DAVINCI_MMCTOD); in init_mmcsd_host()
1161 mmc_davinci_reset_ctrl(host, 0); in init_mmcsd_host()
1232 struct mmc_davinci_host *host = NULL; in davinci_mmcsd_probe() local
1262 host = mmc_priv(mmc); in davinci_mmcsd_probe()
1263 host->mmc = mmc; /* Important */ in davinci_mmcsd_probe()
1269 host->rxdma = r->start; in davinci_mmcsd_probe()
1275 host->txdma = r->start; in davinci_mmcsd_probe()
1277 host->mem_res = mem; in davinci_mmcsd_probe()
1278 host->base = ioremap(mem->start, mem_size); in davinci_mmcsd_probe()
1279 if (!host->base) in davinci_mmcsd_probe()
1283 host->clk = clk_get(&pdev->dev, "MMCSDCLK"); in davinci_mmcsd_probe()
1284 if (IS_ERR(host->clk)) { in davinci_mmcsd_probe()
1285 ret = PTR_ERR(host->clk); in davinci_mmcsd_probe()
1288 clk_enable(host->clk); in davinci_mmcsd_probe()
1289 host->mmc_input_clk = clk_get_rate(host->clk); in davinci_mmcsd_probe()
1291 init_mmcsd_host(host); in davinci_mmcsd_probe()
1294 host->nr_sg = pdata->nr_sg - 1; in davinci_mmcsd_probe()
1296 if (host->nr_sg > MAX_NR_SG || !host->nr_sg) in davinci_mmcsd_probe()
1297 host->nr_sg = MAX_NR_SG; in davinci_mmcsd_probe()
1299 host->use_dma = use_dma; in davinci_mmcsd_probe()
1300 host->mmc_irq = irq; in davinci_mmcsd_probe()
1301 host->sdio_irq = platform_get_irq(pdev, 1); in davinci_mmcsd_probe()
1303 if (host->use_dma && davinci_acquire_dma_channels(host) != 0) in davinci_mmcsd_probe()
1304 host->use_dma = 0; in davinci_mmcsd_probe()
1318 host->version = id_entry->driver_data; in davinci_mmcsd_probe()
1343 dev_dbg(mmc_dev(host->mmc), "max_segs=%d\n", mmc->max_segs); in davinci_mmcsd_probe()
1344 dev_dbg(mmc_dev(host->mmc), "max_blk_size=%d\n", mmc->max_blk_size); in davinci_mmcsd_probe()
1345 dev_dbg(mmc_dev(host->mmc), "max_req_size=%d\n", mmc->max_req_size); in davinci_mmcsd_probe()
1346 dev_dbg(mmc_dev(host->mmc), "max_seg_size=%d\n", mmc->max_seg_size); in davinci_mmcsd_probe()
1348 platform_set_drvdata(pdev, host); in davinci_mmcsd_probe()
1350 ret = mmc_davinci_cpufreq_register(host); in davinci_mmcsd_probe()
1360 ret = request_irq(irq, mmc_davinci_irq, 0, mmc_hostname(mmc), host); in davinci_mmcsd_probe()
1364 if (host->sdio_irq >= 0) { in davinci_mmcsd_probe()
1365 ret = request_irq(host->sdio_irq, mmc_davinci_sdio_irq, 0, in davinci_mmcsd_probe()
1366 mmc_hostname(mmc), host); in davinci_mmcsd_probe()
1373 dev_info(mmc_dev(host->mmc), "Using %s, %d-bit mode\n", in davinci_mmcsd_probe()
1374 host->use_dma ? "DMA" : "PIO", in davinci_mmcsd_probe()
1380 mmc_davinci_cpufreq_deregister(host); in davinci_mmcsd_probe()
1382 if (host) { in davinci_mmcsd_probe()
1383 davinci_release_dma_channels(host); in davinci_mmcsd_probe()
1385 if (host->clk) { in davinci_mmcsd_probe()
1386 clk_disable(host->clk); in davinci_mmcsd_probe()
1387 clk_put(host->clk); in davinci_mmcsd_probe()
1390 if (host->base) in davinci_mmcsd_probe()
1391 iounmap(host->base); in davinci_mmcsd_probe()
1407 struct mmc_davinci_host *host = platform_get_drvdata(pdev); in davinci_mmcsd_remove() local
1409 if (host) { in davinci_mmcsd_remove()
1410 mmc_davinci_cpufreq_deregister(host); in davinci_mmcsd_remove()
1412 mmc_remove_host(host->mmc); in davinci_mmcsd_remove()
1413 free_irq(host->mmc_irq, host); in davinci_mmcsd_remove()
1414 if (host->mmc->caps & MMC_CAP_SDIO_IRQ) in davinci_mmcsd_remove()
1415 free_irq(host->sdio_irq, host); in davinci_mmcsd_remove()
1417 davinci_release_dma_channels(host); in davinci_mmcsd_remove()
1419 clk_disable(host->clk); in davinci_mmcsd_remove()
1420 clk_put(host->clk); in davinci_mmcsd_remove()
1422 iounmap(host->base); in davinci_mmcsd_remove()
1424 release_resource(host->mem_res); in davinci_mmcsd_remove()
1426 mmc_free_host(host->mmc); in davinci_mmcsd_remove()
1436 struct mmc_davinci_host *host = platform_get_drvdata(pdev); in davinci_mmcsd_suspend() local
1438 writel(0, host->base + DAVINCI_MMCIM); in davinci_mmcsd_suspend()
1439 mmc_davinci_reset_ctrl(host, 1); in davinci_mmcsd_suspend()
1440 clk_disable(host->clk); in davinci_mmcsd_suspend()
1448 struct mmc_davinci_host *host = platform_get_drvdata(pdev); in davinci_mmcsd_resume() local
1450 clk_enable(host->clk); in davinci_mmcsd_resume()
1451 mmc_davinci_reset_ctrl(host, 0); in davinci_mmcsd_resume()