mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-24 09:50:04 +00:00
[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 <bridge.wu@marvell.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
8d33b05581
commit
5a1f21b1e5
6 changed files with 57 additions and 1 deletions
|
@ -589,4 +589,43 @@ void __init pxa3xx_set_mci2_info(struct pxamci_platform_data *info)
|
||||||
pxa_register_device(&pxa3xx_device_mci2, 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 */
|
#endif /* CONFIG_PXA3xx */
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
extern struct platform_device pxa_device_mci;
|
extern struct platform_device pxa_device_mci;
|
||||||
extern struct platform_device pxa3xx_device_mci2;
|
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_udc;
|
||||||
extern struct platform_device pxa_device_fb;
|
extern struct platform_device pxa_device_fb;
|
||||||
extern struct platform_device pxa_device_ffuart;
|
extern struct platform_device pxa_device_ffuart;
|
||||||
|
|
|
@ -197,6 +197,7 @@ static struct clk pxa3xx_clks[] = {
|
||||||
|
|
||||||
PXA3xx_CKEN("MMCCLK", MMC1, 19500000, 0, &pxa_device_mci.dev),
|
PXA3xx_CKEN("MMCCLK", MMC1, 19500000, 0, &pxa_device_mci.dev),
|
||||||
PXA3xx_CKEN("MMCCLK", MMC2, 19500000, 0, &pxa3xx_device_mci2.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)
|
void __init pxa3xx_init_irq(void)
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
|
|
||||||
#define MAX_SLOTS 2
|
#define MAX_SLOTS 3
|
||||||
struct platform_mmc_slot zylonite_mmc_slot[MAX_SLOTS];
|
struct platform_mmc_slot zylonite_mmc_slot[MAX_SLOTS];
|
||||||
|
|
||||||
int gpio_backlight;
|
int gpio_backlight;
|
||||||
|
@ -242,6 +242,8 @@ static void __init zylonite_init_mmc(void)
|
||||||
{
|
{
|
||||||
pxa_set_mci_info(&zylonite_mci_platform_data);
|
pxa_set_mci_info(&zylonite_mci_platform_data);
|
||||||
pxa3xx_set_mci2_info(&zylonite_mci2_platform_data);
|
pxa3xx_set_mci2_info(&zylonite_mci2_platform_data);
|
||||||
|
if (cpu_is_pxa310())
|
||||||
|
pxa3xx_set_mci3_info(&zylonite_mci_platform_data);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline void zylonite_init_mmc(void) {}
|
static inline void zylonite_init_mmc(void) {}
|
||||||
|
|
|
@ -133,6 +133,14 @@ static mfp_cfg_t pxa310_mfp_cfg[] __initdata = {
|
||||||
/* Ethernet */
|
/* Ethernet */
|
||||||
GPIO2_nCS3,
|
GPIO2_nCS3,
|
||||||
GPIO102_GPIO,
|
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
|
#define NUM_LCD_DETECT_PINS 7
|
||||||
|
@ -205,5 +213,9 @@ void __init zylonite_pxa300_init(void)
|
||||||
if (cpu_is_pxa310()) {
|
if (cpu_is_pxa310()) {
|
||||||
pxa3xx_mfp_config(ARRAY_AND_SIZE(pxa310_mfp_cfg));
|
pxa3xx_mfp_config(ARRAY_AND_SIZE(pxa310_mfp_cfg));
|
||||||
gpio_eth_irq = mfp_to_gpio(MFP_PIN_GPIO102);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,5 +18,6 @@ struct pxamci_platform_data {
|
||||||
|
|
||||||
extern void pxa_set_mci_info(struct pxamci_platform_data *info);
|
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_mci2_info(struct pxamci_platform_data *info);
|
||||||
|
extern void pxa3xx_set_mci3_info(struct pxamci_platform_data *info);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue