[PATCH] mach-mmp: Support for SD/MMC clock adjustment in brownston=

Philip Rakity prakity at marvell.com
Mon Dec 20 17:42:22 EST 2010


e

Set timing for brownstone for SD/MMC cards to enable detection
timing adjustments are needed when speed > 25MHz
remove limitation on maximum speed of 25MHz

Signed-off-by: Philip Rakity <prakity at marvell.com>
---
 arch/arm/mach-mmp/brownstone.c |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-mmp/brownstone.c b/arch/arm/mach-mmp/brownstone.=
c
index 36d5b82..55e891a 100644
--- a/arch/arm/mach-mmp/brownstone.c
+++ b/arch/arm/mach-mmp/brownstone.c
@@ -178,14 +178,22 @@ static struct i2c_board_info brownstone_twsi1_info[] =
=3D {
 };
=20
 static struct sdhci_pxa_platdata mmp2_sdh_platdata_mmc0 =3D {
-	.max_speed	=3D 25000000,
+	.adjust_clocks	=3D 1,
+	.clk_select	=3D 1,
+	.clk_delay	=3D 31,
 };
=20
 static struct sdhci_pxa_platdata mmp2_sdh_platdata_mmc1 =3D {
+	.adjust_clocks	=3D 1,
+	.clk_select	=3D 1,
+	.clk_delay	=3D 15,
 	.flags		=3D PXA_FLAG_CARD_PERMANENT,
 };
=20
 static struct sdhci_pxa_platdata mmp2_sdh_platdata_mmc2 =3D {
+	.adjust_clocks	=3D 1,
+	.clk_select	=3D 1,
+	.clk_delay	=3D 31,
 	.flags		=3D PXA_FLAG_CARD_PERMANENT |
 				PXA_FLAG_SD_8_BIT_CAPABLE_SLOT,
 };
--=20
1.7.0.4



On Apr 27, 2011, at 8:02 AM, Philip Rakity wrote:

>=20
>=20
>=20
>=20
> Begin forwarded message:
>=20
>> From: Philip Rakity <prakity at marvell.com>
>> Date: April 22, 2011 1:18:33 PM PDT
>> To: "linux-mmc at vger.kernel.org" <linux-mmc at vger.kernel.org>
>> Cc: Zhangfei Gao <zgao6 at marvell.com>
>> Subject: [PATCH] sdhci: sdhci-pxa.c: Add post reset processing for chip =
specific registers=20
>>=20
>>=20
>> RESET_ALL resets chips private registers.
>> Reset to values specified in board file.
>>=20
>> depends on board specific mach-mmp/plat-pxa sdhci.h definitions
>>=20
>> Signed-off-by: Philip Rakity <prakity at marvell.com>
>> ---
>> drivers/mmc/host/sdhci-pxa.c |   42 ++++++++++++++++++++++++++++++++++++=
++++++
>> 1 files changed, 42 insertions(+), 0 deletions(-)
>>=20
>> diff --git a/drivers/mmc/host/sdhci-pxa.c b/drivers/mmc/host/sdhci-pxa.c
>> index c8abf0f..1dc0988 100644
>> --- a/drivers/mmc/host/sdhci-pxa.c
>> +++ b/drivers/mmc/host/sdhci-pxa.c
>> @@ -29,6 +29,13 @@
>>=20
>> #define DRIVER_NAME	"sdhci-pxa"
>>=20
>> +#define SD_CLOCK_AND_BURST_SIZE_SETUP   0x10A
>> +#define SDCLK_DELAY_MASK     0x1F
>> +#define SDCLK_SEL_MASK       0x1
>> +#define SDCLK_DELAY_SHIFT    9
>> +#define SDCLK_SEL_SHIFT      8
>> +
>> +
>> struct sdhci_pxa {
>> 	struct sdhci_host		*host;
>> 	struct sdhci_pxa_platdata	*pdata;
>> @@ -53,7 +60,42 @@ static void enable_clock(struct sdhci_host *host)
>> 	}
>> }
>>=20
>> +static void set_clock_and_burst_size(struct sdhci_host *host)
>> +{
>> +	u16 tmp;
>> +	struct sdhci_pxa *pxa =3D sdhci_priv(host);
>> +
>> +	pr_debug("%s:%s: adjust =3D %d\n",
>> +		__func__, mmc_hostname(host->mmc), pxa->pdata->adjust_clocks);
>> +
>> +	if (pxa->pdata->adjust_clocks) {
>> +		tmp =3D readw(host->ioaddr + SD_CLOCK_AND_BURST_SIZE_SETUP);
>> +		pr_debug("%s:%s: (B) SD_CLOCK_AND_BURST =3D %04X, "
>> +			"delay =3D %d, sel =3D %d\n",
>> +			__func__, mmc_hostname(host->mmc), tmp,
>> +			pxa->pdata->clk_delay, pxa->pdata->clk_select);
>> +		tmp &=3D ~(SDCLK_DELAY_MASK << SDCLK_DELAY_SHIFT);
>> +		tmp &=3D ~(SDCLK_SEL_MASK << SDCLK_SEL_SHIFT);
>> +		tmp |=3D (pxa->pdata->clk_delay & SDCLK_DELAY_MASK) <<
>> +			SDCLK_DELAY_SHIFT;
>> +		tmp |=3D (pxa->pdata->clk_select & SDCLK_SEL_MASK) <<
>> +			SDCLK_SEL_SHIFT;
>> +		writew(tmp, host->ioaddr + SD_CLOCK_AND_BURST_SIZE_SETUP);
>> +		pr_debug("%s:%s: (A) SD_CLOCK_AND_BURST_SIZE_SETUP =3D %04X\n",
>> +			__func__, mmc_hostname(host->mmc), tmp);
>> +	}
>> +}
>> +
>> +static void platform_reset_exit(struct sdhci_host *host, u8 mask)
>> +{
>> +	if (mask =3D=3D SDHCI_RESET_ALL) {
>> +		/* reset private registers */
>> +		set_clock_and_burst_size(host);
>> +	}
>> +}
>> +
>> static struct sdhci_ops sdhci_pxa_ops =3D {
>> +	.platform_reset_exit =3D platform_reset_exit,
>> };
>>=20
>> /***********************************************************************=
******\
>> --=20
>> 1.7.0.4
>>=20
>>=20
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
>> the body of a message to majordomo at vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>=20
>=20
> On Apr 27, 2011, at 2:33 AM, Russell King - ARM Linux wrote:
>=20
>> On Fri, Apr 22, 2011 at 01:13:28PM -0700, Philip Rakity wrote:
>>> The PXA168, PXA910, and MMP2 SoC have the ability to adjust the SD/MMC
>>> clock.  This feature is useful and required depending on the board
>>> design.  Add infrastructure to support SD clock tuning.
>>=20
>> It just adds fields to a structure which remain unused.  On its own this
>> patch is useless, and I don't see a patch which makes use of these new
>> fields in any way.  Did you forget to copy it to the linux-arm-kernel
>> list?
>=20




More information about the linux-arm-kernel mailing list