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

From: [email-masked] (Tony Lindgren)
Date: Thu, 26 Jan 2012 15:19:22 -0800

* Grazvydas Ignotas <[email-masked]> [111217 16:03]:
> 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 <[email-masked]>
> ---
> 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;

This hunk above changing the function name seems to be a typo?

Regards,

Tony

> @@ -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
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html