mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
sdhci-of: avoid writing reserved bits into host control register
SDHCI core tries to write HISPD bit into the host control register, but the eSDHC controllers don't have that bit, and that causes all sorts of misbehaviour when using 4-bit mode capable SD cards. Signed-off-by: Anton Vorontsov <[email protected]> Cc: Pierre Ossman <[email protected]> Cc: Kumar Gala <[email protected]> Cc: David Vrabel <[email protected]> Cc: Ben Dooks <[email protected]> Cc: Sascha Hauer <[email protected]> Cc: <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
1e5df7525d
commit
c085926985
1 changed files with 6 additions and 0 deletions
|
|
@ -48,6 +48,8 @@ struct sdhci_of_host {
|
|||
#define ESDHC_CLOCK_HCKEN 0x00000002
|
||||
#define ESDHC_CLOCK_IPGEN 0x00000001
|
||||
|
||||
#define ESDHC_HOST_CONTROL_RES 0x05
|
||||
|
||||
static u32 esdhc_readl(struct sdhci_host *host, int reg)
|
||||
{
|
||||
return in_be32(host->ioaddr + reg);
|
||||
|
|
@ -109,6 +111,10 @@ static void esdhc_writeb(struct sdhci_host *host, u8 val, int reg)
|
|||
int base = reg & ~0x3;
|
||||
int shift = (reg & 0x3) * 8;
|
||||
|
||||
/* Prevent SDHCI core from writing reserved bits (e.g. HISPD). */
|
||||
if (reg == SDHCI_HOST_CONTROL)
|
||||
val &= ~ESDHC_HOST_CONTROL_RES;
|
||||
|
||||
clrsetbits_be32(host->ioaddr + base , 0xff << shift, val << shift);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue