5 #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
6 static struct sdhci_ops mv_ops
;
8 #if defined(CONFIG_SHEEVA_88SV331xV5)
9 #define SD_CE_ATA_2 0xEA
10 #define MMC_CARD 0x1000
11 #define MMC_WIDTH 0x0100
12 static inline void mv_sdhci_writeb(struct sdhci_host
*host
, u8 val
, int reg
)
14 struct mmc
*mmc
= host
->mmc
;
15 u32 ata
= (u32
)host
->ioaddr
+ SD_CE_ATA_2
;
17 if (!IS_SD(mmc
) && reg
== SDHCI_HOST_CONTROL
) {
18 if (mmc
->bus_width
== 8)
19 writew(readw(ata
) | (MMC_CARD
| MMC_WIDTH
), ata
);
21 writew(readw(ata
) & ~(MMC_CARD
| MMC_WIDTH
), ata
);
24 writeb(val
, host
->ioaddr
+ reg
);
28 #define mv_sdhci_writeb NULL
29 #endif /* CONFIG_SHEEVA_88SV331xV5 */
30 #endif /* CONFIG_MMC_SDHCI_IO_ACCESSORS */
32 static char *MVSDH_NAME
= "mv_sdh";
33 int mv_sdh_init(u32 regbase
, u32 max_clk
, u32 min_clk
, u32 quirks
)
35 struct sdhci_host
*host
= NULL
;
36 host
= (struct sdhci_host
*)malloc(sizeof(struct sdhci_host
));
38 printf("sdh_host malloc fail!\n");
42 host
->name
= MVSDH_NAME
;
43 host
->ioaddr
= (void *)regbase
;
44 host
->quirks
= quirks
;
45 #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
46 memset(&mv_ops
, 0, sizeof(struct sdhci_ops
));
47 mv_ops
.write_b
= mv_sdhci_writeb
;
50 if (quirks
& SDHCI_QUIRK_REG32_RW
)
51 host
->version
= sdhci_readl(host
, SDHCI_HOST_VERSION
- 2) >> 16;
53 host
->version
= sdhci_readw(host
, SDHCI_HOST_VERSION
);
54 return add_sdhci(host
, max_clk
, min_clk
);