[PATCH v3] arm: mach-mmp: brownstone.c support multiple sd slots

Philip Rakity prakity at marvell.com
Tue Jul 5 16:20:37 EDT 2011


Subject: [PATCH V3] arm: mach-mmp: brownstone.c support multiple sd slots

V3
==
Change since V2 -- delete mmc3 since it was committed
to linux next.

enable mmc1 used for wifi (8688) and marked PERMANENT.
Wifi requires enabling of power on the device by
toggling the gpio lines for power and reset.  Enable eMMC first to work
around problem in booting order due to workqueue bug.

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

diff --git a/arch/arm/mach-mmp/brownstone.c b/arch/arm/mach-mmp/brownstone.c
index c79162a..940982c 100644
--- a/arch/arm/mach-mmp/brownstone.c
+++ b/arch/arm/mach-mmp/brownstone.c
@@ -19,6 +19,7 @@
 #include <linux/regulator/max8649.h>
 #include <linux/regulator/fixed.h>
 #include <linux/mfd/max8925.h>
+#include <linux/delay.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -180,6 +181,11 @@ static struct sdhci_pxa_platdata mmp2_sdh_platdata_mmc0 = {
 	.clk_delay_cycles = 0x1f,
 };
 
+static struct sdhci_pxa_platdata mmp2_sdh_platdata_mmc1 = {
+	.clk_delay_cycles = 0x1f,
+	.flags		= PXA_FLAG_CARD_PERMANENT,
+};
+
 static struct sdhci_pxa_platdata mmp2_sdh_platdata_mmc2 = {
 	.clk_delay_cycles = 0x1f,
 	.flags = PXA_FLAG_CARD_PERMANENT
@@ -187,6 +193,38 @@ static struct sdhci_pxa_platdata mmp2_sdh_platdata_mmc2 = {
 };
 
 
+static void __init mmc_sdio_wifi(void)
+{
+	int poweron;
+	int reset;
+
+	poweron = mfp_to_gpio(GPIO57_GPIO);
+	reset = mfp_to_gpio(GPIO58_GPIO);
+
+	if (gpio_request(reset, "sd8xxx reset")) {
+		printk(KERN_INFO "gpio %d request failed\n", reset);
+		return;
+	}
+
+	if (gpio_request(poweron, "sd8xxx PDn")) {
+		gpio_free(reset);
+		printk(KERN_INFO "gpio %d request failed\n", poweron);
+		return;
+	}
+
+	gpio_direction_output(poweron, 0);
+	msleep(1);
+	gpio_direction_output(poweron, 1);
+	msleep(1);
+	gpio_direction_output(reset, 0);
+	msleep(1);
+	gpio_direction_output(reset, 1);
+	gpio_free(reset);
+	gpio_free(poweron);
+
+	mmp2_add_sdhost(1, &mmp2_sdh_platdata_mmc1); /* Wifi */
+}
+
 static void __init brownstone_init(void)
 {
 	mfp_config(ARRAY_AND_SIZE(brownstone_pin_config));
@@ -195,8 +233,9 @@ static void __init brownstone_init(void)
 	mmp2_add_uart(1);
 	mmp2_add_uart(3);
 	mmp2_add_twsi(1, NULL, ARRAY_AND_SIZE(brownstone_twsi1_info));
-	mmp2_add_sdhost(0, &mmp2_sdh_platdata_mmc0); /* SD/MMC */
 	mmp2_add_sdhost(2, &mmp2_sdh_platdata_mmc2); /* eMMC */
+	mmp2_add_sdhost(0, &mmp2_sdh_platdata_mmc0); /* SD/MMC */
+	mmc_sdio_wifi();
 
 	/* enable 5v regulator */
 	platform_device_register(&brownstone_v_5vp_device);
-- 
1.7.0.4


On Jul 5, 2011, at 12:20 AM, Eric Miao wrote:

> On Tue, Jul 5, 2011 at 3:05 PM, zhangfei gao <zhangfei.gao at gmail.com> wrote:
>> On Tue, Jul 5, 2011 at 2:52 PM, Eric Miao <eric.y.miao at gmail.com> wrote:
>>> On Fri, Apr 29, 2011 at 4:45 AM, Philip Rakity <prakity at marvell.com> wrote:
>>>> 
>>>> Support multiple sd/eMMC interfaces. enable mmc1, 2, and 3.
>>>> mmc2 is used eMMC and slot is marked PERMANENT and 8 bit device.
>>>> mmc1 is used for Wifi and slot is marked PERMANENT
>>>> 
>>>> Note: eMMC (mmc2) is set to initialize first to workaround a problem
>>>> where booting in logical order requires mmc create work queue
>>>> to be multi-threaded otherwise boot process hangs.  BUG report
>>>> send to linux-mmc and linux-kernel mailing list.
>>>> 
>>>> Wifi (mmc1) requires we enable power on the device by toggling
>>>> the gpio lines for power and reset.
>>>> 
>>>> Signed-off-by: Philip Rakity <prakity at marvell.com>
>>> 
>>> Applied. Though the email client was fiddling the spaces/CR-LF a bit.
>>> 
>>>> ---
>>>>  arch/arm/mach-mmp/brownstone.c |   52 +++++++++++++++++++++++++++++++++++++++-
>>>>  1 files changed, 51 insertions(+), 1 deletions(-)
>>>> 
>> 
>> Hi, Eric
>> 
>> arch/arm/mach-mmp/brownstone.c has already been modified from
>> mmc-next, here will have conflict.
>> Sorry for inconvenience.
> 
> 'K, I'll drop it then.
> 
>> 
>> Thanks
>> 




More information about the linux-arm-kernel mailing list