aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/pxamci.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mmc/pxamci.c')
-rw-r--r--drivers/mmc/pxamci.c17
1 files changed, 5 insertions, 12 deletions
diff --git a/drivers/mmc/pxamci.c b/drivers/mmc/pxamci.c
index eb42cb349420..b49368fd96b8 100644
--- a/drivers/mmc/pxamci.c
+++ b/drivers/mmc/pxamci.c
@@ -119,7 +119,7 @@ static void pxamci_setup_data(struct pxamci_host *host, struct mmc_data *data)
119 nob = 0xffff; 119 nob = 0xffff;
120 120
121 writel(nob, host->base + MMC_NOB); 121 writel(nob, host->base + MMC_NOB);
122 writel(1 << data->blksz_bits, host->base + MMC_BLKLEN); 122 writel(data->blksz, host->base + MMC_BLKLEN);
123 123
124 clks = (unsigned long long)data->timeout_ns * CLOCKRATE; 124 clks = (unsigned long long)data->timeout_ns * CLOCKRATE;
125 do_div(clks, 1000000000UL); 125 do_div(clks, 1000000000UL);
@@ -198,7 +198,6 @@ static void pxamci_start_cmd(struct pxamci_host *host, struct mmc_command *cmd,
198 198
199static void pxamci_finish_request(struct pxamci_host *host, struct mmc_request *mrq) 199static void pxamci_finish_request(struct pxamci_host *host, struct mmc_request *mrq)
200{ 200{
201 pr_debug("PXAMCI: request done\n");
202 host->mrq = NULL; 201 host->mrq = NULL;
203 host->cmd = NULL; 202 host->cmd = NULL;
204 host->data = NULL; 203 host->data = NULL;
@@ -284,14 +283,14 @@ static int pxamci_data_done(struct pxamci_host *host, unsigned int stat)
284 * data blocks as being in error. 283 * data blocks as being in error.
285 */ 284 */
286 if (data->error == MMC_ERR_NONE) 285 if (data->error == MMC_ERR_NONE)
287 data->bytes_xfered = data->blocks << data->blksz_bits; 286 data->bytes_xfered = data->blocks * data->blksz;
288 else 287 else
289 data->bytes_xfered = 0; 288 data->bytes_xfered = 0;
290 289
291 pxamci_disable_irq(host, DATA_TRAN_DONE); 290 pxamci_disable_irq(host, DATA_TRAN_DONE);
292 291
293 host->data = NULL; 292 host->data = NULL;
294 if (host->mrq->stop && data->error == MMC_ERR_NONE) { 293 if (host->mrq->stop) {
295 pxamci_stop_clock(host); 294 pxamci_stop_clock(host);
296 pxamci_start_cmd(host, host->mrq->stop, 0); 295 pxamci_start_cmd(host, host->mrq->stop, 0);
297 } else { 296 } else {
@@ -309,12 +308,10 @@ static irqreturn_t pxamci_irq(int irq, void *devid, struct pt_regs *regs)
309 308
310 ireg = readl(host->base + MMC_I_REG); 309 ireg = readl(host->base + MMC_I_REG);
311 310
312 pr_debug("PXAMCI: irq %08x\n", ireg);
313
314 if (ireg) { 311 if (ireg) {
315 unsigned stat = readl(host->base + MMC_STAT); 312 unsigned stat = readl(host->base + MMC_STAT);
316 313
317 pr_debug("PXAMCI: stat %08x\n", stat); 314 pr_debug("PXAMCI: irq %08x stat %08x\n", ireg, stat);
318 315
319 if (ireg & END_CMD_RES) 316 if (ireg & END_CMD_RES)
320 handled |= pxamci_cmd_done(host, stat); 317 handled |= pxamci_cmd_done(host, stat);
@@ -368,10 +365,6 @@ static void pxamci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
368{ 365{
369 struct pxamci_host *host = mmc_priv(mmc); 366 struct pxamci_host *host = mmc_priv(mmc);
370 367
371 pr_debug("pxamci_set_ios: clock %u power %u vdd %u.%02u\n",
372 ios->clock, ios->power_mode, ios->vdd / 100,
373 ios->vdd % 100);
374
375 if (ios->clock) { 368 if (ios->clock) {
376 unsigned int clk = CLOCKRATE / ios->clock; 369 unsigned int clk = CLOCKRATE / ios->clock;
377 if (CLOCKRATE / clk > ios->clock) 370 if (CLOCKRATE / clk > ios->clock)
@@ -397,7 +390,7 @@ static void pxamci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
397 host->cmdat |= CMDAT_INIT; 390 host->cmdat |= CMDAT_INIT;
398 } 391 }
399 392
400 pr_debug("pxamci_set_ios: clkrt = %x cmdat = %x\n", 393 pr_debug("PXAMCI: clkrt = %x cmdat = %x\n",
401 host->clkrt, host->cmdat); 394 host->clkrt, host->cmdat);
402} 395}
403 396