Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5a1f21b1e546fafe840944f02949c1a8a8725132
Commit:     5a1f21b1e546fafe840944f02949c1a8a8725132
Parent:     8d33b05581d1bc66e2356957bb2739e177a9cc36
Author:     Bridge Wu <[EMAIL PROTECTED]>
AuthorDate: Fri Dec 21 19:27:08 2007 +0800
Committer:  Russell King <[EMAIL PROTECTED]>
CommitDate: Sat Jan 26 15:07:53 2008 +0000

    [ARM] pxa: mmc: add 3rd host controller support for pxa310
    
    This patch is to add the third mmc controller support _only_
    for pxa310.
    
    On zylonite, the third controller support one slot.
    
    Signed-off-by: Bridge Wu <[EMAIL PROTECTED]>
    Signed-off-by: Russell King <[EMAIL PROTECTED]>
---
 arch/arm/mach-pxa/devices.c         |   39 +++++++++++++++++++++++++++++++++++
 arch/arm/mach-pxa/devices.h         |    1 +
 arch/arm/mach-pxa/pxa3xx.c          |    1 +
 arch/arm/mach-pxa/zylonite.c        |    4 ++-
 arch/arm/mach-pxa/zylonite_pxa300.c |   12 ++++++++++
 include/asm-arm/arch-pxa/mmc.h      |    1 +
 6 files changed, 57 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-pxa/devices.c b/arch/arm/mach-pxa/devices.c
index bc04e87..061ec92 100644
--- a/arch/arm/mach-pxa/devices.c
+++ b/arch/arm/mach-pxa/devices.c
@@ -589,4 +589,43 @@ void __init pxa3xx_set_mci2_info(struct 
pxamci_platform_data *info)
        pxa_register_device(&pxa3xx_device_mci2, info);
 }
 
+static struct resource pxa3xx_resources_mci3[] = {
+       [0] = {
+               .start  = 0x42500000,
+               .end    = 0x42500fff,
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = IRQ_MMC3,
+               .end    = IRQ_MMC3,
+               .flags  = IORESOURCE_IRQ,
+       },
+       [2] = {
+               .start  = 100,
+               .end    = 100,
+               .flags  = IORESOURCE_DMA,
+       },
+       [3] = {
+               .start  = 101,
+               .end    = 101,
+               .flags  = IORESOURCE_DMA,
+       },
+};
+
+struct platform_device pxa3xx_device_mci3 = {
+       .name           = "pxa2xx-mci",
+       .id             = 2,
+       .dev            = {
+               .dma_mask = &pxamci_dmamask,
+               .coherent_dma_mask = 0xffffffff,
+       },
+       .num_resources  = ARRAY_SIZE(pxa3xx_resources_mci3),
+       .resource       = pxa3xx_resources_mci3,
+};
+
+void __init pxa3xx_set_mci3_info(struct pxamci_platform_data *info)
+{
+       pxa_register_device(&pxa3xx_device_mci3, info);
+}
+
 #endif /* CONFIG_PXA3xx */
diff --git a/arch/arm/mach-pxa/devices.h b/arch/arm/mach-pxa/devices.h
index d78068c..96c7c89 100644
--- a/arch/arm/mach-pxa/devices.h
+++ b/arch/arm/mach-pxa/devices.h
@@ -1,5 +1,6 @@
 extern struct platform_device pxa_device_mci;
 extern struct platform_device pxa3xx_device_mci2;
+extern struct platform_device pxa3xx_device_mci3;
 extern struct platform_device pxa_device_udc;
 extern struct platform_device pxa_device_fb;
 extern struct platform_device pxa_device_ffuart;
diff --git a/arch/arm/mach-pxa/pxa3xx.c b/arch/arm/mach-pxa/pxa3xx.c
index 124ad5e..843ba9b 100644
--- a/arch/arm/mach-pxa/pxa3xx.c
+++ b/arch/arm/mach-pxa/pxa3xx.c
@@ -197,6 +197,7 @@ static struct clk pxa3xx_clks[] = {
 
        PXA3xx_CKEN("MMCCLK", MMC1, 19500000, 0, &pxa_device_mci.dev),
        PXA3xx_CKEN("MMCCLK", MMC2, 19500000, 0, &pxa3xx_device_mci2.dev),
+       PXA3xx_CKEN("MMCCLK", MMC3, 19500000, 0, &pxa3xx_device_mci3.dev),
 };
 
 void __init pxa3xx_init_irq(void)
diff --git a/arch/arm/mach-pxa/zylonite.c b/arch/arm/mach-pxa/zylonite.c
index 3398603..b49c69d 100644
--- a/arch/arm/mach-pxa/zylonite.c
+++ b/arch/arm/mach-pxa/zylonite.c
@@ -29,7 +29,7 @@
 
 #include "generic.h"
 
-#define MAX_SLOTS      2
+#define MAX_SLOTS      3
 struct platform_mmc_slot zylonite_mmc_slot[MAX_SLOTS];
 
 int gpio_backlight;
@@ -242,6 +242,8 @@ static void __init zylonite_init_mmc(void)
 {
        pxa_set_mci_info(&zylonite_mci_platform_data);
        pxa3xx_set_mci2_info(&zylonite_mci2_platform_data);
+       if (cpu_is_pxa310())
+               pxa3xx_set_mci3_info(&zylonite_mci_platform_data);
 }
 #else
 static inline void zylonite_init_mmc(void) {}
diff --git a/arch/arm/mach-pxa/zylonite_pxa300.c 
b/arch/arm/mach-pxa/zylonite_pxa300.c
index 38c1ddc..0e159a3 100644
--- a/arch/arm/mach-pxa/zylonite_pxa300.c
+++ b/arch/arm/mach-pxa/zylonite_pxa300.c
@@ -133,6 +133,14 @@ static mfp_cfg_t pxa310_mfp_cfg[] __initdata = {
        /* Ethernet */
        GPIO2_nCS3,
        GPIO102_GPIO,
+
+       /* MMC3 */
+       GPIO7_2_MMC3_DAT0,
+       GPIO8_2_MMC3_DAT1,
+       GPIO9_2_MMC3_DAT2,
+       GPIO10_2_MMC3_DAT3,
+       GPIO103_MMC3_CLK,
+       GPIO105_MMC3_CMD,
 };
 
 #define NUM_LCD_DETECT_PINS    7
@@ -205,5 +213,9 @@ void __init zylonite_pxa300_init(void)
        if (cpu_is_pxa310()) {
                pxa3xx_mfp_config(ARRAY_AND_SIZE(pxa310_mfp_cfg));
                gpio_eth_irq = mfp_to_gpio(MFP_PIN_GPIO102);
+
+               /* MMC card detect & write protect for controller 2 */
+               zylonite_mmc_slot[2].gpio_cd = EXT_GPIO(30);
+               zylonite_mmc_slot[2].gpio_wp = EXT_GPIO(31);
        }
 }
diff --git a/include/asm-arm/arch-pxa/mmc.h b/include/asm-arm/arch-pxa/mmc.h
index dd30299..6d1304c 100644
--- a/include/asm-arm/arch-pxa/mmc.h
+++ b/include/asm-arm/arch-pxa/mmc.h
@@ -18,5 +18,6 @@ struct pxamci_platform_data {
 
 extern void pxa_set_mci_info(struct pxamci_platform_data *info);
 extern void pxa3xx_set_mci2_info(struct pxamci_platform_data *info);
+extern void pxa3xx_set_mci3_info(struct pxamci_platform_data *info);
 
 #endif
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to