diff options
author | Sebastian Rasmussen <sebastian.rasmussen@stericsson.com> | 2011-01-14 19:08:24 +0100 |
---|---|---|
committer | Robert Marklund <robert.marklund@stericsson.com> | 2011-05-04 18:04:51 +0200 |
commit | c96e0abb0e303b701df8c6c34739b168ee823170 (patch) | |
tree | 29e991950dc3d8a96436e8383fa4428f02c3f99f /drivers/mmc | |
parent | 74c31ebb4fe47f90cd2a23d15b12c4f606dc8884 (diff) |
MMCI: Put power register deviations in variant data.
Use variant data to store hardware controller deviations concerning
power registers to improve readability of the code.
ST-Ericsson ID: ER282562
ST-Ericsson FOSS-OUT ID: Trivial
Change-Id: I6285df49bc4dceb443df5af618ee980b0e62f59f
Signed-off-by: Sebastian Rasmussen <sebastian.rasmussen@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/12543
Reviewed-by: QATOOLS
Reviewed-by: Linus WALLEIJ <linus.walleij@stericsson.com>
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/host/mmci.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index bb507b8ce0c..a5849bc3a80 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c @@ -51,6 +51,7 @@ static unsigned int fmax = 515633; * is asserted (likewise for RX) * @sdio: variant supports SDIO * @st_clkdiv: true if using a ST-specific clock divider algorithm + * @pwrreg_powerup: power up value for MMCIPOWER register */ struct variant_data { unsigned int clkreg; @@ -60,12 +61,14 @@ struct variant_data { unsigned int fifohalfsize; bool sdio; bool st_clkdiv; + unsigned int pwrreg_powerup; }; static struct variant_data variant_arm = { .fifosize = 16 * 4, .fifohalfsize = 8 * 4, .datalength_bits = 16, + .pwrreg_powerup = MCI_PWR_UP, }; static struct variant_data variant_u300 = { @@ -74,6 +77,7 @@ static struct variant_data variant_u300 = { .clkreg_enable = MCI_ST_U300_HWFCEN, .datalength_bits = 16, .sdio = true, + .pwrreg_powerup = MCI_PWR_ON, }; static struct variant_data variant_ux500 = { @@ -84,6 +88,7 @@ static struct variant_data variant_ux500 = { .datalength_bits = 24, .sdio = true, .st_clkdiv = true, + .pwrreg_powerup = MCI_PWR_ON, }; /* @@ -860,6 +865,7 @@ static void mmci_request(struct mmc_host *mmc, struct mmc_request *mrq) static void mmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) { struct mmci_host *host = mmc_priv(mmc); + struct variant_data *variant = host->variant; u32 pwr = 0; unsigned long flags; int ret; @@ -886,11 +892,15 @@ static void mmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) if (host->plat->vdd_handler) pwr |= host->plat->vdd_handler(mmc_dev(mmc), ios->vdd, ios->power_mode); - /* The ST version does not have this, fall through to POWER_ON */ - if (host->hw_designer != AMBA_VENDOR_ST) { - pwr |= MCI_PWR_UP; - break; - } + + /* + * The ST Micro variant doesn't have the PL180s MCI_PWR_UP + * and instead uses MCI_PWR_ON so apply whatever value is + * configured in the variant data. + */ + pwr |= variant->pwrreg_powerup; + + break; case MMC_POWER_ON: pwr |= MCI_PWR_ON; break; |