Skip to contentSkip to conversation

ARM: OMAP: hsmmc: add max_freq field

PATCH New Daniel Mack 6 participants 11 messages Dec 14, 2011 – Mar 2, 2012

Subsystems (5)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ARM: OMAP: hsmmc: add max_freq field

External circuitry like level shifters may limit the maximum operation speed of the hsmmc controller. Add a field to struct omap2_hsmmc_info so boards can adjust the setting on demand.

---
 arch/arm/mach-omap2/hsmmc.c   |    1 +
 arch/arm/mach-omap2/hsmmc.h   |    2 ++
 drivers/mmc/host/omap_hsmmc.c |    8 ++++++--
 3 files changed, 9 insertions(+), 2 deletions(-)
arch/arm/mach-omap2/hsmmc.c +1 -0
index f4a1020..4c7bc36 100644
@@ -298,6 +298,7 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
 	mmc->slots[0].caps = c->caps;
 	mmc->slots[0].internal_clock = !c->ext_clock;
 	mmc->dma_mask = 0xffffffff;
+	mmc->max_freq = c->max_freq;
 	if (cpu_is_omap44xx())
 		mmc->reg_offset = OMAP4_MMC_REG_OFFSET;
 	else
arch/arm/mach-omap2/hsmmc.h +2 -0
index f757e78..65a8c12 100644
@@ -25,6 +25,8 @@ struct omap2_hsmmc_info {
 	char	*name;		/* or NULL for default */
 	struct device *dev;	/* returned: pointer to mmc adapter */
 	int	ocr_mask;	/* temporary HACK */
+	int	max_freq;	/* maximum clock, if constrained by external
+				 * circuitry, or 0 for default */
 	/* Remux (pad configuration) when powering on/off */
 	void (*remux)(struct device *dev, int slot, int power_on);
 	/* init some special card */
drivers/mmc/host/omap_hsmmc.c +6 -2
index 101cd31..8215ef9 100644
@@ -1927,8 +1927,12 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
 	if (mmc_slot(host).vcc_aux_disable_is_sleep)
 		mmc_slot(host).no_off = 1;
 
-	mmc->f_min	= OMAP_MMC_MIN_CLOCK;
-	mmc->f_max	= OMAP_MMC_MAX_CLOCK;
+	mmc->f_min = OMAP_MMC_MIN_CLOCK;
+
+	if (pdata->max_freq > 0)
+		mmc->f_max = pdata->max_freq;
+	else
+		mmc->f_max = OMAP_MMC_MAX_CLOCK;
 
 	spin_lock_init(&host->irq_lock);
 
Signature · 1 line
1.7.7.4
maintainer
#1 lore raw

PATCH 1/1 ARM: OMAP: hsmmc: add max_freq field

Quoted 6 lines · Daniel Mack

External circuitry like level shifters may limit the maximum operation speed of the hsmmc controller. Add a field to struct omap2_hsmmc_info so boards can adjust the setting on demand.

Quoted 53 lines
---
 arch/arm/mach-omap2/hsmmc.c   |    1 +
 arch/arm/mach-omap2/hsmmc.h   |    2 ++
 drivers/mmc/host/omap_hsmmc.c |    8 ++++++--
 3 files changed, 9 insertions(+), 2 deletions(-)
arch/arm/mach-omap2/hsmmc.c +1 -0
index f4a1020..4c7bc36 100644
@@ -298,6 +298,7 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
 	mmc->slots[0].caps = c->caps;
 	mmc->slots[0].internal_clock = !c->ext_clock;
 	mmc->dma_mask = 0xffffffff;
+	mmc->max_freq = c->max_freq;
 	if (cpu_is_omap44xx())
 		mmc->reg_offset = OMAP4_MMC_REG_OFFSET;
 	else
arch/arm/mach-omap2/hsmmc.h +2 -0
index f757e78..65a8c12 100644
@@ -25,6 +25,8 @@ struct omap2_hsmmc_info {
 	char	*name;		/* or NULL for default */
 	struct device *dev;	/* returned: pointer to mmc adapter */
 	int	ocr_mask;	/* temporary HACK */
+	int	max_freq;	/* maximum clock, if constrained by external
+				 * circuitry, or 0 for default */
 	/* Remux (pad configuration) when powering on/off */
 	void (*remux)(struct device *dev, int slot, int power_on);
 	/* init some special card */
drivers/mmc/host/omap_hsmmc.c +6 -2
index 101cd31..8215ef9 100644
@@ -1927,8 +1927,12 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
 	if (mmc_slot(host).vcc_aux_disable_is_sleep)
 		mmc_slot(host).no_off = 1;
 
-	mmc->f_min	= OMAP_MMC_MIN_CLOCK;
-	mmc->f_max	= OMAP_MMC_MAX_CLOCK;
+	mmc->f_min = OMAP_MMC_MIN_CLOCK;
+
+	if (pdata->max_freq > 0)
+		mmc->f_max = pdata->max_freq;
+	else
+		mmc->f_max = OMAP_MMC_MAX_CLOCK;
 
 	spin_lock_init(&host->irq_lock);
 
Signature · 1 line
1.7.7.4
#2 lore raw

PATCH 1/1 ARM: OMAP: hsmmc: add max_freq field

In reply to Daniel Mack
Quoted 42 lines · Daniel Mack

External circuitry like level shifters may limit the maximum operation speed of the hsmmc controller. Add a field to struct omap2_hsmmc_info so boards can adjust the setting on demand.

---

?arch/arm/mach-omap2/hsmmc.c ? | ? ?1 +
?arch/arm/mach-omap2/hsmmc.h ? | ? ?2 ++
?drivers/mmc/host/omap_hsmmc.c | ? ?8 ++++++--

?3 files changed, 9 insertions(+), 2 deletions(-)

arch/arm/mach-omap2/hsmmc.c +1 -0
index f4a1020..4c7bc36 100644
@@ -298,6 +298,7 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
 ? ? ? ?mmc->slots[0].caps = c->caps;
 ? ? ? ?mmc->slots[0].internal_clock = !c->ext_clock;
 ? ? ? ?mmc->dma_mask = 0xffffffff;
+ ? ? ? mmc->max_freq = c->max_freq;
 ? ? ? ?if (cpu_is_omap44xx())
 ? ? ? ? ? ? ? ?mmc->reg_offset = OMAP4_MMC_REG_OFFSET;

? ? ? ?else

arch/arm/mach-omap2/hsmmc.h +0 -0
index f757e78..65a8c12 100644
@@ -25,6 +25,8 @@ struct omap2_hsmmc_info {

? ? ? ?char ? ?*name; ? ? ? ? ?/* or NULL for default */
? ? ? ?struct device *dev; ? ? /* returned: pointer to mmc adapter */ ? ? ? ?int ? ? ocr_mask; ? ? ? /* temporary HACK */
+ ? ? ? int ? ? max_freq; ? ? ? /* maximum clock, if constrained by external
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?* circuitry, or 0 for default */ ? ? ? ?/* Remux (pad configuration) when powering on/off */
? ? ? ?void (*remux)(struct device *dev, int slot, int power_on); ? ? ? ?/* init some special card */

drivers/mmc/host/omap_hsmmc.c +0 -0
index 101cd31..8215ef9 100644

drivers/mmc/host/omap_hsmmc.c static int __init omap_hsmmc_probe(struct platform_device *pdev) · line 1932

Quoted 8 lines
drivers/mmc/host/omap_hsmmc.c +3 -2
@@ -1927,8 +1927,12 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
 ? ? ? ?if (mmc_slot(host).vcc_aux_disable_is_sleep)
 ? ? ? ? ? ? ? ?mmc_slot(host).no_off = 1;
 
- ? ? ? mmc->f_min ? ? ?= OMAP_MMC_MIN_CLOCK;
- ? ? ? mmc->f_max ? ? ?= OMAP_MMC_MAX_CLOCK;
+ ? ? ? mmc->f_min = OMAP_MMC_MIN_CLOCK;
+
+ ? ? ? if (pdata->max_freq > 0)

What about having check as below:
if (pdata->max_freq > 0 && pdata->max_freq < OMAP_MMC_MAX_CLOCK)

Quoted 13 lines
drivers/mmc/host/omap_hsmmc.c +3 -1
+ ? ? ? ? ? ? ? mmc->f_max = pdata->max_freq;
+ ? ? ? else
+ ? ? ? ? ? ? ? mmc->f_max = OMAP_MMC_MAX_CLOCK;
 
 ? ? ? ?spin_lock_init(&host->irq_lock);
 
--

1.7.7.4

--
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

#3 lore raw

PATCH 1/1 ARM: OMAP: hsmmc: add max_freq field

Quoted 46 lines · Kishore Kadiyala
Quoted 45 lines · Daniel Mack

External circuitry like level shifters may limit the maximum operation speed of the hsmmc controller. Add a field to struct omap2_hsmmc_info so boards can adjust the setting on demand.

---
 arch/arm/mach-omap2/hsmmc.c   |    1 +
 arch/arm/mach-omap2/hsmmc.h   |    2 ++
 drivers/mmc/host/omap_hsmmc.c |    8 ++++++--
 3 files changed, 9 insertions(+), 2 deletions(-)
arch/arm/mach-omap2/hsmmc.c +1 -0
index f4a1020..4c7bc36 100644
@@ -298,6 +298,7 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
       mmc->slots[0].caps = c->caps;
       mmc->slots[0].internal_clock = !c->ext_clock;
       mmc->dma_mask = 0xffffffff;
+       mmc->max_freq = c->max_freq;
       if (cpu_is_omap44xx())
               mmc->reg_offset = OMAP4_MMC_REG_OFFSET;
       else
arch/arm/mach-omap2/hsmmc.h +2 -0
index f757e78..65a8c12 100644
@@ -25,6 +25,8 @@ struct omap2_hsmmc_info {
       char    *name;          /* or NULL for default */
       struct device *dev;     /* returned: pointer to mmc adapter */
       int     ocr_mask;       /* temporary HACK */
+       int     max_freq;       /* maximum clock, if constrained by external
+                                * circuitry, or 0 for default */
       /* Remux (pad configuration) when powering on/off */
       void (*remux)(struct device *dev, int slot, int power_on);
       /* init some special card */
drivers/mmc/host/omap_hsmmc.c +0 -0
index 101cd31..8215ef9 100644
@@ -1927,8 +1927,12 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
       if (mmc_slot(host).vcc_aux_disable_is_sleep)
               mmc_slot(host).no_off = 1;
 
Quoted 8 lines

drivers/mmc/host/omap_hsmmc.c static int __init omap_hsmmc_probe(struct platform_device *pdev) · line 1932

Quoted 5 lines
drivers/mmc/host/omap_hsmmc.c +3 -2
-       mmc->f_min      = OMAP_MMC_MIN_CLOCK;
-       mmc->f_max      = OMAP_MMC_MAX_CLOCK;
+       mmc->f_min = OMAP_MMC_MIN_CLOCK;
+
+       if (pdata->max_freq > 0)

What about having check as below:
if (pdata->max_freq > 0 && pdata->max_freq < OMAP_MMC_MAX_CLOCK)

I can quickly do that if Tony agrees on it. Any opinions?

Thanks,
Daniel

#4 lore raw

PATCH 1/1 ARM: OMAP: hsmmc: add max_freq field

In reply to Daniel Mack

drivers/mmc/host/omap_hsmmc.c static int __init omap_hsmmc_probe(struct platform_device *pdev) · line 1930

Quoted 11 lines · Daniel Mack
drivers/mmc/host/omap_hsmmc.c +1 -2
index 101cd31..8215ef9 100644
@@ -1927,8 +1927,12 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
 ? ? ? ?if (mmc_slot(host).vcc_aux_disable_is_sleep)
 ? ? ? ? ? ? ? ?mmc_slot(host).no_off = 1;
 
- ? ? ? mmc->f_min ? ? ?= OMAP_MMC_MIN_CLOCK;
- ? ? ? mmc->f_max ? ? ?= OMAP_MMC_MAX_CLOCK;
+ ? ? ? mmc->f_min = OMAP_MMC_MIN_CLOCK;

Stray change for f_min ?

#5 lore raw

PATCH 1/1 ARM: OMAP: hsmmc: add max_freq field

Quoted 9 lines · Balaji
Quoted 8 lines · Daniel Mack
drivers/mmc/host/omap_hsmmc.c +0 -0
index 101cd31..8215ef9 100644
@@ -1927,8 +1927,12 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
       if (mmc_slot(host).vcc_aux_disable_is_sleep)
               mmc_slot(host).no_off = 1;
 
Quoted 5 lines

drivers/mmc/host/omap_hsmmc.c static int __init omap_hsmmc_probe(struct platform_device *pdev) · line 1930

Quoted 3 lines
drivers/mmc/host/omap_hsmmc.c +1 -2
-       mmc->f_min      = OMAP_MMC_MIN_CLOCK;
-       mmc->f_max      = OMAP_MMC_MAX_CLOCK;
+       mmc->f_min = OMAP_MMC_MIN_CLOCK;

Stray change for f_min ?

No, this was intended. The indentation doesn't make sense anymore when not grouped with the f_max assignment.

Other than that, what is necessary to get this picked? Tony? :)

Thanks,
Daniel

#6 lore raw

PATCH 1/1 ARM: OMAP: hsmmc: add max_freq field

ping? Could anyone care for queueing this please?

Quoted 24 lines · Daniel Mack
Quoted 9 lines · Balaji
Quoted 8 lines · Daniel Mack
drivers/mmc/host/omap_hsmmc.c +0 -0
index 101cd31..8215ef9 100644
@@ -1927,8 +1927,12 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
 ? ? ? ?if (mmc_slot(host).vcc_aux_disable_is_sleep)
 ? ? ? ? ? ? ? ?mmc_slot(host).no_off = 1;
 
Quoted 5 lines

drivers/mmc/host/omap_hsmmc.c static int __init omap_hsmmc_probe(struct platform_device *pdev) · line 1930

Quoted 3 lines
drivers/mmc/host/omap_hsmmc.c +1 -2
- ? ? ? mmc->f_min ? ? ?= OMAP_MMC_MIN_CLOCK;
- ? ? ? mmc->f_max ? ? ?= OMAP_MMC_MAX_CLOCK;
+ ? ? ? mmc->f_min = OMAP_MMC_MIN_CLOCK;

Stray change for f_min ?

No, this was intended. The indentation doesn't make sense anymore when not grouped with the f_max assignment.

Other than that, what is necessary to get this picked? Tony? :)

Thanks,
Daniel

#7 lore raw

PATCH 1/1 ARM: OMAP: hsmmc: add max_freq field

Quoted 1 line · Daniel Mack

ping? Could anyone care for queueing this please?

There is no OMAP HSMMC dedicated maintainer anymore so I guess you should ping Chris Ball <[email protected]>.

Regards,
Benoit

maintainer
#8 lore raw

PATCH 1/1 ARM: OMAP: hsmmc: add max_freq field

In reply to Daniel Mack

Hi,

Quoted 1 line · Daniel Mack

ping? Could anyone care for queueing this please?

I suggest Rajendra queue up omap_hsmmc.c patches as he's already patching it.

Regards,

Tony

Quoted 25 lines · Daniel Mack
Quoted 24 lines · Balaji
Quoted 9 lines · Daniel Mack
Quoted 8 lines
drivers/mmc/host/omap_hsmmc.c +0 -0
index 101cd31..8215ef9 100644
@@ -1927,8 +1927,12 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
 ? ? ? ?if (mmc_slot(host).vcc_aux_disable_is_sleep)
 ? ? ? ? ? ? ? ?mmc_slot(host).no_off = 1;
 
Quoted 5 lines

drivers/mmc/host/omap_hsmmc.c static int __init omap_hsmmc_probe(struct platform_device *pdev) · line 1930

Quoted 3 lines
drivers/mmc/host/omap_hsmmc.c +1 -2
- ? ? ? mmc->f_min ? ? ?= OMAP_MMC_MIN_CLOCK;
- ? ? ? mmc->f_max ? ? ?= OMAP_MMC_MAX_CLOCK;
+ ? ? ? mmc->f_min = OMAP_MMC_MIN_CLOCK;

Stray change for f_min ?

No, this was intended. The indentation doesn't make sense anymore when not grouped with the f_max assignment.

Other than that, what is necessary to get this picked? Tony? :)

Thanks,
Daniel

#9 lore raw

PATCH 1/1 ARM: OMAP: hsmmc: add max_freq field

+Chris queues all MMC patches including omap_hsmmc. Ping ?

Quoted 42 lines · Tony Lindgren

Hi,

Quoted 1 line · Daniel Mack

ping? Could anyone care for queueing this please?

I suggest Rajendra queue up omap_hsmmc.c patches as he's already patching it.

Regards,

Tony

Quoted 17 lines · Daniel Mack
Quoted 16 lines · Balaji
Quoted 14 lines · Daniel Mack

drivers/mmc/host/omap_hsmmc.c static int __init omap_hsmmc_probe(struct platform_device *pdev) · line 1930

Quoted 11 lines
drivers/mmc/host/omap_hsmmc.c +1 -2
index 101cd31..8215ef9 100644
@@ -1927,8 +1927,12 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
 ? ? ? ?if (mmc_slot(host).vcc_aux_disable_is_sleep)
 ? ? ? ? ? ? ? ?mmc_slot(host).no_off = 1;
 
- ? ? ? mmc->f_min ? ? ?= OMAP_MMC_MIN_CLOCK;
- ? ? ? mmc->f_max ? ? ?= OMAP_MMC_MAX_CLOCK;
+ ? ? ? mmc->f_min = OMAP_MMC_MIN_CLOCK;

Stray change for f_min ?

Quoted 8 lines
Quoted 8 lines

No, this was intended. The indentation doesn't make sense anymore when not grouped with the f_max assignment.

Other than that, what is necessary to get this picked? Tony? :)

Thanks,
Daniel

--
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

#10 lore raw

PATCH 1/1 ARM: OMAP: hsmmc: add max_freq field

Quoted 3 lines · Venkatraman

+Chris queues all MMC patches including omap_hsmmc. Ping ?

Just realized that it's already queued in mmc-next
http://git.kernel.org/?p=linux/kernel/git/cjb/mmc.git;a=commitdiff;h=25d6ba8171995230b3757c78c7470fa76a931b98

Quoted 44 lines · Tony Lindgren
Quoted 42 lines

Hi,

Quoted 1 line · Daniel Mack

ping? Could anyone care for queueing this please?

I suggest Rajendra queue up omap_hsmmc.c patches as he's already patching it.

Regards,

Tony

Quoted 17 lines · Daniel Mack
Quoted 16 lines · Balaji
Quoted 14 lines · Daniel Mack

drivers/mmc/host/omap_hsmmc.c static int __init omap_hsmmc_probe(struct platform_device *pdev) · line 1930

Quoted 11 lines
drivers/mmc/host/omap_hsmmc.c +1 -2
index 101cd31..8215ef9 100644
@@ -1927,8 +1927,12 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
 ? ? ? ?if (mmc_slot(host).vcc_aux_disable_is_sleep)
 ? ? ? ? ? ? ? ?mmc_slot(host).no_off = 1;
 
- ? ? ? mmc->f_min ? ? ?= OMAP_MMC_MIN_CLOCK;
- ? ? ? mmc->f_max ? ? ?= OMAP_MMC_MAX_CLOCK;
+ ? ? ? mmc->f_min = OMAP_MMC_MIN_CLOCK;

Stray change for f_min ?

Quoted 8 lines
Quoted 8 lines

No, this was intended. The indentation doesn't make sense anymore when not grouped with the f_max assignment.

Other than that, what is necessary to get this picked? Tony? :)

Thanks,
Daniel

--
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