diff options
author | Eric Miao <eric.miao@marvell.com> | 2008-06-02 03:22:03 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2008-07-09 16:38:32 -0400 |
commit | 9ae819a819b4dfc60ac13dd1f1e1a7eaa3d4a6cb (patch) | |
tree | 1a10d64da2440c7a7f0f33cb4e044e056879a632 | |
parent | 7c3ada4f7cc76fa3912683da83eccf7886fca1b1 (diff) |
[ARM] pxa: add pxa3xx NAND device and clock sources
A pxa3xx_set_nand_info() is also introduced to set the PXA3xx NAND
driver specific platform_data structure pointer.
Signed-off-by: Eric Miao <eric.miao@marvell.com>
Cc: Sergey Podstavin <spodstavin@ru.mvista.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | arch/arm/mach-pxa/devices.c | 43 | ||||
-rw-r--r-- | arch/arm/mach-pxa/devices.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-pxa/pxa300.c | 5 | ||||
-rw-r--r-- | arch/arm/mach-pxa/pxa320.c | 11 | ||||
-rw-r--r-- | include/asm-arm/arch-pxa/pxa3xx_nand.h | 2 |
5 files changed, 63 insertions, 0 deletions
diff --git a/arch/arm/mach-pxa/devices.c b/arch/arm/mach-pxa/devices.c index abc161dd083a..84489dc51d81 100644 --- a/arch/arm/mach-pxa/devices.c +++ b/arch/arm/mach-pxa/devices.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <asm/arch/pxa2xx_spi.h> | 16 | #include <asm/arch/pxa2xx_spi.h> |
17 | #include <asm/arch/camera.h> | 17 | #include <asm/arch/camera.h> |
18 | #include <asm/arch/audio.h> | 18 | #include <asm/arch/audio.h> |
19 | #include <asm/arch/pxa3xx_nand.h> | ||
19 | 20 | ||
20 | #include "devices.h" | 21 | #include "devices.h" |
21 | #include "generic.h" | 22 | #include "generic.h" |
@@ -831,6 +832,48 @@ void __init pxa3xx_set_mci3_info(struct pxamci_platform_data *info) | |||
831 | pxa_register_device(&pxa3xx_device_mci3, info); | 832 | pxa_register_device(&pxa3xx_device_mci3, info); |
832 | } | 833 | } |
833 | 834 | ||
835 | static struct resource pxa3xx_resources_nand[] = { | ||
836 | [0] = { | ||
837 | .start = 0x43100000, | ||
838 | .end = 0x43100053, | ||
839 | .flags = IORESOURCE_MEM, | ||
840 | }, | ||
841 | [1] = { | ||
842 | .start = IRQ_NAND, | ||
843 | .end = IRQ_NAND, | ||
844 | .flags = IORESOURCE_IRQ, | ||
845 | }, | ||
846 | [2] = { | ||
847 | /* DRCMR for Data DMA */ | ||
848 | .start = 97, | ||
849 | .end = 97, | ||
850 | .flags = IORESOURCE_DMA, | ||
851 | }, | ||
852 | [3] = { | ||
853 | /* DRCMR for Command DMA */ | ||
854 | .start = 99, | ||
855 | .end = 99, | ||
856 | .flags = IORESOURCE_DMA, | ||
857 | }, | ||
858 | }; | ||
859 | |||
860 | static u64 pxa3xx_nand_dma_mask = DMA_BIT_MASK(32); | ||
861 | |||
862 | struct platform_device pxa3xx_device_nand = { | ||
863 | .name = "pxa3xx-nand", | ||
864 | .id = -1, | ||
865 | .dev = { | ||
866 | .dma_mask = &pxa3xx_nand_dma_mask, | ||
867 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
868 | }, | ||
869 | .num_resources = ARRAY_SIZE(pxa3xx_resources_nand), | ||
870 | .resource = pxa3xx_resources_nand, | ||
871 | }; | ||
872 | |||
873 | void __init pxa3xx_set_nand_info(struct pxa3xx_nand_platform_data *info) | ||
874 | { | ||
875 | pxa_register_device(&pxa3xx_device_nand, info); | ||
876 | } | ||
834 | #endif /* CONFIG_PXA3xx */ | 877 | #endif /* CONFIG_PXA3xx */ |
835 | 878 | ||
836 | /* pxa2xx-spi platform-device ID equals respective SSP platform-device ID + 1. | 879 | /* pxa2xx-spi platform-device ID equals respective SSP platform-device ID + 1. |
diff --git a/arch/arm/mach-pxa/devices.h b/arch/arm/mach-pxa/devices.h index b852eb18daa5..887c738f5911 100644 --- a/arch/arm/mach-pxa/devices.h +++ b/arch/arm/mach-pxa/devices.h | |||
@@ -31,4 +31,6 @@ extern struct platform_device pxa25x_device_pwm1; | |||
31 | extern struct platform_device pxa27x_device_pwm0; | 31 | extern struct platform_device pxa27x_device_pwm0; |
32 | extern struct platform_device pxa27x_device_pwm1; | 32 | extern struct platform_device pxa27x_device_pwm1; |
33 | 33 | ||
34 | extern struct platform_device pxa3xx_device_nand; | ||
35 | |||
34 | void __init pxa_register_device(struct platform_device *dev, void *data); | 36 | void __init pxa_register_device(struct platform_device *dev, void *data); |
diff --git a/arch/arm/mach-pxa/pxa300.c b/arch/arm/mach-pxa/pxa300.c index a0db6fa7c323..da92e9733886 100644 --- a/arch/arm/mach-pxa/pxa300.c +++ b/arch/arm/mach-pxa/pxa300.c | |||
@@ -85,6 +85,10 @@ static struct pxa3xx_mfp_addr_map pxa310_mfp_addr_map[] __initdata = { | |||
85 | MFP_ADDR_END, | 85 | MFP_ADDR_END, |
86 | }; | 86 | }; |
87 | 87 | ||
88 | static struct clk common_clks[] = { | ||
89 | PXA3xx_CKEN("NANDCLK", NAND, 156000000, 0, &pxa3xx_device_nand.dev), | ||
90 | }; | ||
91 | |||
88 | static struct clk pxa310_clks[] = { | 92 | static struct clk pxa310_clks[] = { |
89 | PXA3xx_CKEN("MMCCLK", MMC3, 19500000, 0, &pxa3xx_device_mci3.dev), | 93 | PXA3xx_CKEN("MMCCLK", MMC3, 19500000, 0, &pxa3xx_device_mci3.dev), |
90 | }; | 94 | }; |
@@ -94,6 +98,7 @@ static int __init pxa300_init(void) | |||
94 | if (cpu_is_pxa300() || cpu_is_pxa310()) { | 98 | if (cpu_is_pxa300() || cpu_is_pxa310()) { |
95 | pxa3xx_init_mfp(); | 99 | pxa3xx_init_mfp(); |
96 | pxa3xx_mfp_init_addr(pxa300_mfp_addr_map); | 100 | pxa3xx_mfp_init_addr(pxa300_mfp_addr_map); |
101 | clks_register(ARRAY_AND_SIZE(common_clks)); | ||
97 | } | 102 | } |
98 | 103 | ||
99 | if (cpu_is_pxa310()) { | 104 | if (cpu_is_pxa310()) { |
diff --git a/arch/arm/mach-pxa/pxa320.c b/arch/arm/mach-pxa/pxa320.c index 44ef0b95db00..c557c23a1efe 100644 --- a/arch/arm/mach-pxa/pxa320.c +++ b/arch/arm/mach-pxa/pxa320.c | |||
@@ -15,11 +15,17 @@ | |||
15 | 15 | ||
16 | #include <linux/module.h> | 16 | #include <linux/module.h> |
17 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
18 | #include <linux/platform_device.h> | ||
18 | 19 | ||
19 | #include <asm/hardware.h> | 20 | #include <asm/hardware.h> |
20 | #include <asm/arch/mfp.h> | 21 | #include <asm/arch/mfp.h> |
22 | #include <asm/arch/pxa3xx-regs.h> | ||
21 | #include <asm/arch/mfp-pxa320.h> | 23 | #include <asm/arch/mfp-pxa320.h> |
22 | 24 | ||
25 | #include "generic.h" | ||
26 | #include "devices.h" | ||
27 | #include "clock.h" | ||
28 | |||
23 | static struct pxa3xx_mfp_addr_map pxa320_mfp_addr_map[] __initdata = { | 29 | static struct pxa3xx_mfp_addr_map pxa320_mfp_addr_map[] __initdata = { |
24 | 30 | ||
25 | MFP_ADDR_X(GPIO0, GPIO4, 0x0124), | 31 | MFP_ADDR_X(GPIO0, GPIO4, 0x0124), |
@@ -74,11 +80,16 @@ static struct pxa3xx_mfp_addr_map pxa320_mfp_addr_map[] __initdata = { | |||
74 | MFP_ADDR_END, | 80 | MFP_ADDR_END, |
75 | }; | 81 | }; |
76 | 82 | ||
83 | static struct clk pxa320_clks[] = { | ||
84 | PXA3xx_CKEN("NANDCLK", NAND, 104000000, 0, &pxa3xx_device_nand.dev), | ||
85 | }; | ||
86 | |||
77 | static int __init pxa320_init(void) | 87 | static int __init pxa320_init(void) |
78 | { | 88 | { |
79 | if (cpu_is_pxa320()) { | 89 | if (cpu_is_pxa320()) { |
80 | pxa3xx_init_mfp(); | 90 | pxa3xx_init_mfp(); |
81 | pxa3xx_mfp_init_addr(pxa320_mfp_addr_map); | 91 | pxa3xx_mfp_init_addr(pxa320_mfp_addr_map); |
92 | clks_register(ARRAY_AND_SIZE(pxa320_clks)); | ||
82 | } | 93 | } |
83 | 94 | ||
84 | return 0; | 95 | return 0; |
diff --git a/include/asm-arm/arch-pxa/pxa3xx_nand.h b/include/asm-arm/arch-pxa/pxa3xx_nand.h index 81a8937486cb..eb4b190b6657 100644 --- a/include/asm-arm/arch-pxa/pxa3xx_nand.h +++ b/include/asm-arm/arch-pxa/pxa3xx_nand.h | |||
@@ -15,4 +15,6 @@ struct pxa3xx_nand_platform_data { | |||
15 | struct mtd_partition *parts; | 15 | struct mtd_partition *parts; |
16 | unsigned int nr_parts; | 16 | unsigned int nr_parts; |
17 | }; | 17 | }; |
18 | |||
19 | extern void pxa3xx_set_nand_info(struct pxa3xx_nand_platform_data *info); | ||
18 | #endif /* __ASM_ARCH_PXA3XX_NAND_H */ | 20 | #endif /* __ASM_ARCH_PXA3XX_NAND_H */ |