]>
Commit | Line | Data |
---|---|---|
e75787d9 LW |
1 | #include <common.h> |
2 | #include <malloc.h> | |
3 | #include <sdhci.h> | |
4 | ||
02d3ad3e LW |
5 | #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS |
6 | static struct sdhci_ops mv_ops; | |
7 | ||
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) | |
13 | { | |
14 | struct mmc *mmc = host->mmc; | |
15 | u32 ata = (u32)host->ioaddr + SD_CE_ATA_2; | |
16 | ||
17 | if (!IS_SD(mmc) && reg == SDHCI_HOST_CONTROL) { | |
18 | if (mmc->bus_width == 8) | |
19 | writew(readw(ata) | (MMC_CARD | MMC_WIDTH), ata); | |
20 | else | |
21 | writew(readw(ata) & ~(MMC_CARD | MMC_WIDTH), ata); | |
22 | } | |
23 | ||
24 | writeb(val, host->ioaddr + reg); | |
25 | } | |
26 | ||
27 | #else | |
28 | #define mv_sdhci_writeb NULL | |
29 | #endif /* CONFIG_SHEEVA_88SV331xV5 */ | |
30 | #endif /* CONFIG_MMC_SDHCI_IO_ACCESSORS */ | |
31 | ||
e75787d9 LW |
32 | static char *MVSDH_NAME = "mv_sdh"; |
33 | int mv_sdh_init(u32 regbase, u32 max_clk, u32 min_clk, u32 quirks) | |
34 | { | |
35 | struct sdhci_host *host = NULL; | |
36 | host = (struct sdhci_host *)malloc(sizeof(struct sdhci_host)); | |
37 | if (!host) { | |
38 | printf("sdh_host malloc fail!\n"); | |
39 | return 1; | |
40 | } | |
41 | ||
42 | host->name = MVSDH_NAME; | |
43 | host->ioaddr = (void *)regbase; | |
44 | host->quirks = quirks; | |
02d3ad3e LW |
45 | #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS |
46 | memset(&mv_ops, 0, sizeof(struct sdhci_ops)); | |
47 | if (mv_sdhci_writeb != NULL) | |
48 | mv_ops.write_b = mv_sdhci_writeb; | |
49 | host->ops = &mv_ops; | |
50 | #endif | |
5af9a569 AB |
51 | if (quirks & SDHCI_QUIRK_REG32_RW) |
52 | host->version = sdhci_readl(host, SDHCI_HOST_VERSION - 2) >> 16; | |
53 | else | |
54 | host->version = sdhci_readw(host, SDHCI_HOST_VERSION); | |
e75787d9 LW |
55 | add_sdhci(host, max_clk, min_clk); |
56 | return 0; | |
57 | } |