summaryrefslogtreecommitdiffstats
path: root/drivers/mmc/host/omap.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2012-09-13 17:18:38 +0200
committerIngo Molnar <mingo@kernel.org>2012-09-13 17:18:38 +0200
commit4553f0b90e1fd93b95a97918804528d4039201fc (patch)
treee17524a262d3e0708479ad35edb706c3e1af5415 /drivers/mmc/host/omap.c
parentbe267be8b191d5fac9f65a29e047470f364315eb (diff)
parent7ece55a4a3a04abe37118b1d4fb0b702eeb1de4c (diff)
Merge branch 'core/rcu' into perf/core
Steve Rostedt asked for the merge of a single commit, into both the RCU and the perf/tracing tree: | Josh made a change to the tracing code that affects both the | work Paul McKenney and I are currently doing. At the last | Kernel Summit back in August, Linus said when such a case | exists, it is best to make a separate branch based off of his | tree and place the change there. This way, the repositories | that need to share the change can both pull them in and the | SHA1 will match for both. Whichever branch is pulled in first | by Linus will also pull in the necessary change for the other | branch as well. Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/mmc/host/omap.c')
-rw-r--r--drivers/mmc/host/omap.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c
index 50e08f03aa6..a5999a74496 100644
--- a/drivers/mmc/host/omap.c
+++ b/drivers/mmc/host/omap.c
@@ -668,7 +668,7 @@ mmc_omap_clk_timer(unsigned long data)
static void
mmc_omap_xfer_data(struct mmc_omap_host *host, int write)
{
- int n;
+ int n, nwords;
if (host->buffer_bytes_left == 0) {
host->sg_idx++;
@@ -678,15 +678,23 @@ mmc_omap_xfer_data(struct mmc_omap_host *host, int write)
n = 64;
if (n > host->buffer_bytes_left)
n = host->buffer_bytes_left;
+
+ nwords = n / 2;
+ nwords += n & 1; /* handle odd number of bytes to transfer */
+
host->buffer_bytes_left -= n;
host->total_bytes_left -= n;
host->data->bytes_xfered += n;
if (write) {
- __raw_writesw(host->virt_base + OMAP_MMC_REG(host, DATA), host->buffer, n);
+ __raw_writesw(host->virt_base + OMAP_MMC_REG(host, DATA),
+ host->buffer, nwords);
} else {
- __raw_readsw(host->virt_base + OMAP_MMC_REG(host, DATA), host->buffer, n);
+ __raw_readsw(host->virt_base + OMAP_MMC_REG(host, DATA),
+ host->buffer, nwords);
}
+
+ host->buffer += nwords;
}
static inline void mmc_omap_report_irq(u16 status)