diff options
author | Yauhen Kharuzhy <jekhor@gmail.com> | 2009-05-07 00:43:30 +0300 |
---|---|---|
committer | Andy Fleming <afleming@freescale.com> | 2009-06-02 17:20:04 -0500 |
commit | 4e3d89ba948eef801ffd46ef862cdede5b3f8320 (patch) | |
tree | 7699f14686e9e934bb2b727213730d2c7e57835b | |
parent | f33cb34b3971dabe3720d577b0e1b8601c09fe17 (diff) |
mmc: Fix decoding of SCR & function switch data on little-endian machines
SCR & switch data are read from card as big-endian words and should be
converted to CPU byte order.
Signed-off-by: Yauhen Kharuzhy <jekhor@gmail.com>
Signed-off-by: Andy Fleming <afleming@freescale.com>
-rw-r--r-- | drivers/mmc/mmc.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 64a311dcc2a..8c736ce4974 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -487,8 +487,8 @@ retry_scr: return err; } - mmc->scr[0] = scr[0]; - mmc->scr[1] = scr[1]; + mmc->scr[0] = __be32_to_cpu(scr[0]); + mmc->scr[1] = __be32_to_cpu(scr[1]); switch ((mmc->scr[0] >> 24) & 0xf) { case 0: @@ -518,7 +518,7 @@ retry_scr: return err; /* The high-speed function is busy. Try again */ - if (!switch_status[7] & SD_HIGHSPEED_BUSY) + if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY)) break; } @@ -526,7 +526,7 @@ retry_scr: mmc->card_caps |= MMC_MODE_4BIT; /* If high-speed isn't supported, we return */ - if (!(switch_status[3] & SD_HIGHSPEED_SUPPORTED)) + if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED)) return 0; err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)&switch_status); @@ -534,7 +534,7 @@ retry_scr: if (err) return err; - if ((switch_status[4] & 0x0f000000) == 0x01000000) + if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000) mmc->card_caps |= MMC_MODE_HS; return 0; |