* [PATCH] ARM: OMAP3: hsmmc: fix MMC 2 setup for AM35x
@ 2011-11-29 9:37 Igor Grinberg
2011-12-08 19:25 ` Igor Grinberg
0 siblings, 1 reply; 3+ messages in thread
From: Igor Grinberg @ 2011-11-29 9:37 UTC (permalink / raw)
To: linux-arm-kernel
AM35x MMC 2 controller has internal clock loopback setting which cannot
be utilized without this patch and thus SDIO devices connected to this
controller and depend on this setting will fail to initialize.
Signed-off-by: Igor Grinberg <grinberg@compulab.co.il>
---
arch/arm/mach-omap2/hsmmc.c | 42 ++++++++++++++++++++++++++++++------------
1 files changed, 30 insertions(+), 12 deletions(-)
diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c
index ecde558..c80859e 100644
--- a/arch/arm/mach-omap2/hsmmc.c
+++ b/arch/arm/mach-omap2/hsmmc.c
@@ -171,6 +171,17 @@ static void omap4_hsmmc1_after_set_reg(struct device *dev, int slot,
}
}
+static void hsmmc2_select_input_clk_src(struct omap_mmc_platform_data *mmc)
+{
+ u32 reg;
+
+ if (mmc->slots[0].internal_clock) {
+ reg = omap_ctrl_readl(control_devconf1_offset);
+ reg |= OMAP2_MMCSDIO2ADPCLKISEL;
+ omap_ctrl_writel(reg, control_devconf1_offset);
+ }
+}
+
static void hsmmc23_before_set_reg(struct device *dev, int slot,
int power_on, int vdd)
{
@@ -179,16 +190,19 @@ static void hsmmc23_before_set_reg(struct device *dev, int slot,
if (mmc->slots[0].remux)
mmc->slots[0].remux(dev, slot, power_on);
- if (power_on) {
- /* Only MMC2 supports a CLKIN */
- if (mmc->slots[0].internal_clock) {
- u32 reg;
+ if (power_on)
+ hsmmc2_select_input_clk_src(mmc);
+}
- reg = omap_ctrl_readl(control_devconf1_offset);
- reg |= OMAP2_MMCSDIO2ADPCLKISEL;
- omap_ctrl_writel(reg, control_devconf1_offset);
- }
- }
+static int am35x_hsmmc2_set_power(struct device *dev, int slot,
+ int power_on, int vdd)
+{
+ struct omap_mmc_platform_data *mmc = dev->platform_data;
+
+ if (power_on)
+ hsmmc2_select_input_clk_src(mmc);
+
+ return 0;
}
static int nop_mmc_set_power(struct device *dev, int slot, int power_on,
@@ -346,9 +360,7 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
else
mmc->slots[0].ocr_mask = c->ocr_mask;
- if (cpu_is_omap3517() || cpu_is_omap3505())
- mmc->slots[0].set_power = nop_mmc_set_power;
- else
+ if (!cpu_is_omap3517() && !cpu_is_omap3505())
mmc->slots[0].features |= HSMMC_HAS_PBIAS;
if (cpu_is_omap44xx() && (omap_rev() > OMAP4430_REV_ES1_0))
@@ -371,6 +383,9 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
}
}
+ if (cpu_is_omap3517() || cpu_is_omap3505())
+ mmc->slots[0].set_power = nop_mmc_set_power;
+
/* OMAP3630 HSMMC1 supports only 4-bit */
if (cpu_is_omap3630() &&
(c->caps & MMC_CAP_8_BIT_DATA)) {
@@ -380,6 +395,9 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
}
break;
case 2:
+ if (cpu_is_omap3517() || cpu_is_omap3505())
+ mmc->slots[0].set_power = am35x_hsmmc2_set_power;
+
if (c->ext_clock)
c->transceiver = 1;
if (c->transceiver && (c->caps & MMC_CAP_8_BIT_DATA)) {
--
1.7.3.4
^ permalink raw reply related [flat|nested] 3+ messages in thread* [PATCH] ARM: OMAP3: hsmmc: fix MMC 2 setup for AM35x
2011-11-29 9:37 [PATCH] ARM: OMAP3: hsmmc: fix MMC 2 setup for AM35x Igor Grinberg
@ 2011-12-08 19:25 ` Igor Grinberg
2011-12-09 0:31 ` Tony Lindgren
0 siblings, 1 reply; 3+ messages in thread
From: Igor Grinberg @ 2011-12-08 19:25 UTC (permalink / raw)
To: linux-arm-kernel
ping
Tony,
I'd like this to go into 3.3, can it?
On 11/29/11 11:37, Igor Grinberg wrote:
> AM35x MMC 2 controller has internal clock loopback setting which cannot
> be utilized without this patch and thus SDIO devices connected to this
> controller and depend on this setting will fail to initialize.
>
> Signed-off-by: Igor Grinberg <grinberg@compulab.co.il>
> ---
> arch/arm/mach-omap2/hsmmc.c | 42 ++++++++++++++++++++++++++++++------------
> 1 files changed, 30 insertions(+), 12 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c
> index ecde558..c80859e 100644
> --- a/arch/arm/mach-omap2/hsmmc.c
> +++ b/arch/arm/mach-omap2/hsmmc.c
> @@ -171,6 +171,17 @@ static void omap4_hsmmc1_after_set_reg(struct device *dev, int slot,
> }
> }
>
> +static void hsmmc2_select_input_clk_src(struct omap_mmc_platform_data *mmc)
> +{
> + u32 reg;
> +
> + if (mmc->slots[0].internal_clock) {
> + reg = omap_ctrl_readl(control_devconf1_offset);
> + reg |= OMAP2_MMCSDIO2ADPCLKISEL;
> + omap_ctrl_writel(reg, control_devconf1_offset);
> + }
> +}
> +
> static void hsmmc23_before_set_reg(struct device *dev, int slot,
> int power_on, int vdd)
> {
> @@ -179,16 +190,19 @@ static void hsmmc23_before_set_reg(struct device *dev, int slot,
> if (mmc->slots[0].remux)
> mmc->slots[0].remux(dev, slot, power_on);
>
> - if (power_on) {
> - /* Only MMC2 supports a CLKIN */
> - if (mmc->slots[0].internal_clock) {
> - u32 reg;
> + if (power_on)
> + hsmmc2_select_input_clk_src(mmc);
> +}
>
> - reg = omap_ctrl_readl(control_devconf1_offset);
> - reg |= OMAP2_MMCSDIO2ADPCLKISEL;
> - omap_ctrl_writel(reg, control_devconf1_offset);
> - }
> - }
> +static int am35x_hsmmc2_set_power(struct device *dev, int slot,
> + int power_on, int vdd)
> +{
> + struct omap_mmc_platform_data *mmc = dev->platform_data;
> +
> + if (power_on)
> + hsmmc2_select_input_clk_src(mmc);
> +
> + return 0;
> }
>
> static int nop_mmc_set_power(struct device *dev, int slot, int power_on,
> @@ -346,9 +360,7 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
> else
> mmc->slots[0].ocr_mask = c->ocr_mask;
>
> - if (cpu_is_omap3517() || cpu_is_omap3505())
> - mmc->slots[0].set_power = nop_mmc_set_power;
> - else
> + if (!cpu_is_omap3517() && !cpu_is_omap3505())
> mmc->slots[0].features |= HSMMC_HAS_PBIAS;
>
> if (cpu_is_omap44xx() && (omap_rev() > OMAP4430_REV_ES1_0))
> @@ -371,6 +383,9 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
> }
> }
>
> + if (cpu_is_omap3517() || cpu_is_omap3505())
> + mmc->slots[0].set_power = nop_mmc_set_power;
> +
> /* OMAP3630 HSMMC1 supports only 4-bit */
> if (cpu_is_omap3630() &&
> (c->caps & MMC_CAP_8_BIT_DATA)) {
> @@ -380,6 +395,9 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
> }
> break;
> case 2:
> + if (cpu_is_omap3517() || cpu_is_omap3505())
> + mmc->slots[0].set_power = am35x_hsmmc2_set_power;
> +
> if (c->ext_clock)
> c->transceiver = 1;
> if (c->transceiver && (c->caps & MMC_CAP_8_BIT_DATA)) {
--
Regards,
Igor.
^ permalink raw reply [flat|nested] 3+ messages in thread* [PATCH] ARM: OMAP3: hsmmc: fix MMC 2 setup for AM35x
2011-12-08 19:25 ` Igor Grinberg
@ 2011-12-09 0:31 ` Tony Lindgren
0 siblings, 0 replies; 3+ messages in thread
From: Tony Lindgren @ 2011-12-09 0:31 UTC (permalink / raw)
To: linux-arm-kernel
* Igor Grinberg <grinberg@compulab.co.il> [111208 10:53]:
> ping
>
> Tony,
> I'd like this to go into 3.3, can it?
>
> On 11/29/11 11:37, Igor Grinberg wrote:
> > AM35x MMC 2 controller has internal clock loopback setting which cannot
> > be utilized without this patch and thus SDIO devices connected to this
> > controller and depend on this setting will fail to initialize.
Yes seems OK for now so applying into omap driver branch.
Regards,
Tony
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2011-12-09 0:31 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-29 9:37 [PATCH] ARM: OMAP3: hsmmc: fix MMC 2 setup for AM35x Igor Grinberg
2011-12-08 19:25 ` Igor Grinberg
2011-12-09 0:31 ` Tony Lindgren
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).