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>
This commit is contained in:
Yauhen Kharuzhy 2009-05-07 00:43:30 +03:00 committed by Andy Fleming
parent f33cb34b39
commit 4e3d89ba94

View file

@ -487,8 +487,8 @@ retry_scr:
return err; return err;
} }
mmc->scr[0] = scr[0]; mmc->scr[0] = __be32_to_cpu(scr[0]);
mmc->scr[1] = scr[1]; mmc->scr[1] = __be32_to_cpu(scr[1]);
switch ((mmc->scr[0] >> 24) & 0xf) { switch ((mmc->scr[0] >> 24) & 0xf) {
case 0: case 0:
@ -518,7 +518,7 @@ retry_scr:
return err; return err;
/* The high-speed function is busy. Try again */ /* 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; break;
} }
@ -526,7 +526,7 @@ retry_scr:
mmc->card_caps |= MMC_MODE_4BIT; mmc->card_caps |= MMC_MODE_4BIT;
/* If high-speed isn't supported, we return */ /* 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; return 0;
err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)&switch_status); err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)&switch_status);
@ -534,7 +534,7 @@ retry_scr:
if (err) if (err)
return err; return err;
if ((switch_status[4] & 0x0f000000) == 0x01000000) if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000)
mmc->card_caps |= MMC_MODE_HS; mmc->card_caps |= MMC_MODE_HS;
return 0; return 0;