From 3037631abf8d65d84a466b74a461af66d635cff9 Mon Sep 17 00:00:00 2001 From: Rabin Vincent Date: Wed, 21 Jul 2010 12:53:57 +0100 Subject: [PATCH] --- yaml --- r: 201495 b: refs/heads/master c: bb8f563c848faa113059973f68c24a3bb6a9585e h: refs/heads/master i: 201493: a6e17fa6d51c000de52ea842facaf945a6e5c9eb 201491: 9c64dab15907fe156dcf01e5c1d5d125acd58037 201487: 27b2dbb0f4c226a01795ecd79ece59b3618a88a6 v: v3 --- [refs] | 2 +- trunk/drivers/mmc/host/mmci.c | 13 +++---------- trunk/include/linux/amba/mmci.h | 10 ++++++---- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/[refs] b/[refs] index dde56318513d..90f73f1a66aa 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f5e2574e734650bbeb801a31cc99e628f9a027af +refs/heads/master: bb8f563c848faa113059973f68c24a3bb6a9585e diff --git a/trunk/drivers/mmc/host/mmci.c b/trunk/drivers/mmc/host/mmci.c index 3eaa0e9373cd..7ae3eeeefc29 100644 --- a/trunk/drivers/mmc/host/mmci.c +++ b/trunk/drivers/mmc/host/mmci.c @@ -493,16 +493,9 @@ static void mmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) /* This implicitly enables the regulator */ mmc_regulator_set_ocr(host->vcc, ios->vdd); #endif - /* - * The translate_vdd function is not used if you have - * an external regulator, or your design is really weird. - * Using it would mean sending in power control BOTH using - * a regulator AND the 4 MMCIPWR bits. If we don't have - * a regulator, we might have some other platform specific - * power control behind this translate function. - */ - if (!host->vcc && host->plat->translate_vdd) - pwr |= host->plat->translate_vdd(mmc_dev(mmc), ios->vdd); + 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; diff --git a/trunk/include/linux/amba/mmci.h b/trunk/include/linux/amba/mmci.h index 7e466fe72025..ca84ce70d5d5 100644 --- a/trunk/include/linux/amba/mmci.h +++ b/trunk/include/linux/amba/mmci.h @@ -15,9 +15,10 @@ * @ocr_mask: available voltages on the 4 pins from the block, this * is ignored if a regulator is used, see the MMC_VDD_* masks in * mmc/host.h - * @translate_vdd: a callback function to translate a MMC_VDD_* - * mask into a value to be binary or:ed and written into the - * MMCIPWR register of the block + * @vdd_handler: a callback function to translate a MMC_VDD_* + * mask into a value to be binary (or set some other custom bits + * in MMCIPWR) or:ed and written into the MMCIPWR register of the + * block. May also control external power based on the power_mode. * @status: if no GPIO read function was given to the block in * gpio_wp (below) this function will be called to determine * whether a card is present in the MMC slot or not @@ -29,7 +30,8 @@ struct mmci_platform_data { unsigned int f_max; unsigned int ocr_mask; - u32 (*translate_vdd)(struct device *, unsigned int); + u32 (*vdd_handler)(struct device *, unsigned int vdd, + unsigned char power_mode); unsigned int (*status)(struct device *); int gpio_wp; int gpio_cd;