Skip to content
Snippets Groups Projects
Commit 236bfecf authored by Jaehoon Chung's avatar Jaehoon Chung Committed by Andy Fleming
Browse files

mmc: add the quirk to use the sdhci for samsung-soc


To support the Samsung-SoC, added the basically functions.
Samsung-SoC didn't used the SDHCI_CTRL_HISPD.
And added set_control_reg callback for s3c64xx.

Signed-off-by: default avatarJaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
Acked-by: default avatarLei <Wen&lt;leiwen@marvell.com>
parent 3a638320
Branches
Tags
No related merge requests found
...@@ -337,6 +337,9 @@ void sdhci_set_ios(struct mmc *mmc) ...@@ -337,6 +337,9 @@ void sdhci_set_ios(struct mmc *mmc)
u32 ctrl; u32 ctrl;
struct sdhci_host *host = (struct sdhci_host *)mmc->priv; struct sdhci_host *host = (struct sdhci_host *)mmc->priv;
if (host->set_control_reg)
host->set_control_reg(host);
if (mmc->clock != host->clock) if (mmc->clock != host->clock)
sdhci_set_clock(mmc, mmc->clock); sdhci_set_clock(mmc, mmc->clock);
...@@ -360,6 +363,9 @@ void sdhci_set_ios(struct mmc *mmc) ...@@ -360,6 +363,9 @@ void sdhci_set_ios(struct mmc *mmc)
else else
ctrl &= ~SDHCI_CTRL_HISPD; ctrl &= ~SDHCI_CTRL_HISPD;
if (host->quirks & SDHCI_QUIRK_NO_HISPD_BIT)
ctrl &= ~SDHCI_CTRL_HISPD;
sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL); sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
} }
...@@ -443,9 +449,15 @@ int add_sdhci(struct sdhci_host *host, u32 max_clk, u32 min_clk) ...@@ -443,9 +449,15 @@ int add_sdhci(struct sdhci_host *host, u32 max_clk, u32 min_clk)
mmc->voltages |= MMC_VDD_29_30 | MMC_VDD_30_31; mmc->voltages |= MMC_VDD_29_30 | MMC_VDD_30_31;
if (caps & SDHCI_CAN_VDD_180) if (caps & SDHCI_CAN_VDD_180)
mmc->voltages |= MMC_VDD_165_195; mmc->voltages |= MMC_VDD_165_195;
if (host->quirks & SDHCI_QUIRK_BROKEN_VOLTAGE)
mmc->voltages |= host->voltages;
mmc->host_caps = MMC_MODE_HS | MMC_MODE_HS_52MHz | MMC_MODE_4BIT; mmc->host_caps = MMC_MODE_HS | MMC_MODE_HS_52MHz | MMC_MODE_4BIT;
if (caps & SDHCI_CAN_DO_8BIT) if (caps & SDHCI_CAN_DO_8BIT)
mmc->host_caps |= MMC_MODE_8BIT; mmc->host_caps |= MMC_MODE_8BIT;
if (host->host_caps)
mmc->host_caps |= host->host_caps;
sdhci_reset(host, SDHCI_RESET_ALL); sdhci_reset(host, SDHCI_RESET_ALL);
mmc_register(mmc); mmc_register(mmc);
......
...@@ -217,6 +217,8 @@ ...@@ -217,6 +217,8 @@
#define SDHCI_QUIRK_32BIT_DMA_ADDR (1 << 0) #define SDHCI_QUIRK_32BIT_DMA_ADDR (1 << 0)
#define SDHCI_QUIRK_REG32_RW (1 << 1) #define SDHCI_QUIRK_REG32_RW (1 << 1)
#define SDHCI_QUIRK_BROKEN_R1B (1 << 2) #define SDHCI_QUIRK_BROKEN_R1B (1 << 2)
#define SDHCI_QUIRK_NO_HISPD_BIT (1 << 3)
#define SDHCI_QUIRK_BROKEN_VOLTAGE (1 << 4)
/* to make gcc happy */ /* to make gcc happy */
struct sdhci_host; struct sdhci_host;
...@@ -241,10 +243,14 @@ struct sdhci_host { ...@@ -241,10 +243,14 @@ struct sdhci_host {
char *name; char *name;
void *ioaddr; void *ioaddr;
unsigned int quirks; unsigned int quirks;
unsigned int host_caps;
unsigned int version; unsigned int version;
unsigned int clock; unsigned int clock;
struct mmc *mmc; struct mmc *mmc;
const struct sdhci_ops *ops; const struct sdhci_ops *ops;
void (*set_control_reg)(struct sdhci_host *host);
uint voltages;
}; };
#ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment