[PATCH] ARM: OMAP: fix erroneous mmc2 clock change on mmc3 setup

Grazvydas Ignotas notasas at gmail.com
Fri Jan 20 12:24:23 EST 2012


Hi Tony,

Would be nice to have this for -rc as this used to work several
releases back when hsmmc23_before_set_reg() was checking for a
regulator, which wasn't set for MMC3 so the function would return
early, not causing the problem it causes now.

On Sun, Dec 18, 2011 at 2:35 AM, Grazvydas Ignotas <notasas at gmail.com> wrote:
> hsmmc23_before_set_reg() can set MMCSDIO2ADPCLKISEL bit, which
> enables internal clock for MMC2. Currently this function is also called
> by code handling MMC3, and if .internal_clock is set in platform data
> (by default it currently is), it will set MMCSDIO2ADPCLKISEL for MMC2
> instead of MMC3 (MMC3 doesn't have such bit so nothing actually needs to
> be done). This breaks 2nd SD slot on pandora.
>
> Fix this by changing hsmmc23_before_set_reg() to only handle MMC2.
> Note that this removes .remux() call for MMC3, but no board currently
> needs it and it's also not called for MMC4 and MMC5.
>
> Signed-off-by: Grazvydas Ignotas <notasas at gmail.com>
> ---
> applies both on mainline and hsmmc branch.
>
>  arch/arm/mach-omap2/hsmmc.c |    7 +++----
>  1 files changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c
> index f4a1020..d90ac08 100644
> --- a/arch/arm/mach-omap2/hsmmc.c
> +++ b/arch/arm/mach-omap2/hsmmc.c
> @@ -171,7 +171,7 @@ static void omap4_hsmmc1_after_set_reg(struct device *dev, int slot,
>        }
>  }
>
> -static void hsmmc23_before_set_reg(struct device *dev, int slot,
> +static void hsmmc2_before_set_reg(struct device *dev, int slot,
>                                   int power_on, int vdd)
>  {
>        struct omap_mmc_platform_data *mmc = dev->platform_data;
> @@ -378,14 +378,13 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
>                        c->caps &= ~MMC_CAP_8_BIT_DATA;
>                        c->caps |= MMC_CAP_4_BIT_DATA;
>                }
> -               /* FALLTHROUGH */
> -       case 3:
>                if (mmc->slots[0].features & HSMMC_HAS_PBIAS) {
>                        /* off-chip level shifting, or none */
> -                       mmc->slots[0].before_set_reg = hsmmc23_before_set_reg;
> +                       mmc->slots[0].before_set_reg = hsmmc2_before_set_reg;
>                        mmc->slots[0].after_set_reg = NULL;
>                }
>                break;
> +       case 3:
>        case 4:
>        case 5:
>                mmc->slots[0].before_set_reg = NULL;
> --
> 1.7.0.4
>



-- 
Gražvydas



More information about the linux-arm-kernel mailing list