diff options
Diffstat (limited to 'drivers/mmc/host/bfin_sdh.c')
-rw-r--r-- | drivers/mmc/host/bfin_sdh.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/mmc/host/bfin_sdh.c b/drivers/mmc/host/bfin_sdh.c index f218a9964552..56f7b448b911 100644 --- a/drivers/mmc/host/bfin_sdh.c +++ b/drivers/mmc/host/bfin_sdh.c | |||
@@ -115,6 +115,7 @@ static int sdh_setup_data(struct sdh_host *host, struct mmc_data *data) | |||
115 | unsigned int length; | 115 | unsigned int length; |
116 | unsigned int data_ctl; | 116 | unsigned int data_ctl; |
117 | unsigned int dma_cfg; | 117 | unsigned int dma_cfg; |
118 | unsigned int cycle_ns, timeout; | ||
118 | 119 | ||
119 | dev_dbg(mmc_dev(host->mmc), "%s enter flags: 0x%x\n", __func__, data->flags); | 120 | dev_dbg(mmc_dev(host->mmc), "%s enter flags: 0x%x\n", __func__, data->flags); |
120 | host->data = data; | 121 | host->data = data; |
@@ -135,8 +136,11 @@ static int sdh_setup_data(struct sdh_host *host, struct mmc_data *data) | |||
135 | data_ctl |= ((ffs(data->blksz) - 1) << 4); | 136 | data_ctl |= ((ffs(data->blksz) - 1) << 4); |
136 | 137 | ||
137 | bfin_write_SDH_DATA_CTL(data_ctl); | 138 | bfin_write_SDH_DATA_CTL(data_ctl); |
138 | 139 | /* the time of a host clock period in ns */ | |
139 | bfin_write_SDH_DATA_TIMER(0xFFFF); | 140 | cycle_ns = 1000000000 / (get_sclk() / (2 * (host->clk_div + 1))); |
141 | timeout = data->timeout_ns / cycle_ns; | ||
142 | timeout += data->timeout_clks; | ||
143 | bfin_write_SDH_DATA_TIMER(timeout); | ||
140 | SSYNC(); | 144 | SSYNC(); |
141 | 145 | ||
142 | if (data->flags & MMC_DATA_READ) { | 146 | if (data->flags & MMC_DATA_READ) { |