diff options
author | Alexander Shiyan <shc_work@mail.ru> | 2012-11-17 08:57:17 -0500 |
---|---|---|
committer | Olof Johansson <olof@lixom.net> | 2012-11-21 12:57:43 -0500 |
commit | 90383e0ac2ae3df283f2b56997040f71f6d1df08 (patch) | |
tree | f4d74f00d18f40f120238cb7a762c676e07c6fe1 /arch/arm/mach-clps711x | |
parent | 49e67de364ea7b2dd69066c95990e686d4de6154 (diff) |
ARM: clps711x: autcpu12: Special driver for handling NAND memory is removed
This patch provide migration to using "gpio-nand" and "basic-mmio-gpio"
drivers instead of using special driver for handling NAND memory.
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
Signed-off-by: Olof Johansson <olof@lixom.net>
Diffstat (limited to 'arch/arm/mach-clps711x')
-rw-r--r-- | arch/arm/mach-clps711x/autcpu12.c | 98 | ||||
-rw-r--r-- | arch/arm/mach-clps711x/include/mach/autcpu12.h | 10 |
2 files changed, 98 insertions, 10 deletions
diff --git a/arch/arm/mach-clps711x/autcpu12.c b/arch/arm/mach-clps711x/autcpu12.c index 3de19554d800..3fbf43f72589 100644 --- a/arch/arm/mach-clps711x/autcpu12.c +++ b/arch/arm/mach-clps711x/autcpu12.c | |||
@@ -23,9 +23,13 @@ | |||
23 | #include <linux/string.h> | 23 | #include <linux/string.h> |
24 | #include <linux/mm.h> | 24 | #include <linux/mm.h> |
25 | #include <linux/io.h> | 25 | #include <linux/io.h> |
26 | #include <linux/gpio.h> | ||
26 | #include <linux/ioport.h> | 27 | #include <linux/ioport.h> |
27 | #include <linux/interrupt.h> | 28 | #include <linux/interrupt.h> |
29 | #include <linux/mtd/partitions.h> | ||
30 | #include <linux/mtd/nand-gpio.h> | ||
28 | #include <linux/platform_device.h> | 31 | #include <linux/platform_device.h> |
32 | #include <linux/basic_mmio_gpio.h> | ||
29 | 33 | ||
30 | #include <mach/hardware.h> | 34 | #include <mach/hardware.h> |
31 | #include <asm/sizes.h> | 35 | #include <asm/sizes.h> |
@@ -43,6 +47,15 @@ | |||
43 | #define AUTCPU12_CS8900_BASE (CS2_PHYS_BASE + 0x300) | 47 | #define AUTCPU12_CS8900_BASE (CS2_PHYS_BASE + 0x300) |
44 | #define AUTCPU12_CS8900_IRQ (IRQ_EINT3) | 48 | #define AUTCPU12_CS8900_IRQ (IRQ_EINT3) |
45 | 49 | ||
50 | #define AUTCPU12_SMC_BASE (CS1_PHYS_BASE + 0x06000000) | ||
51 | #define AUTCPU12_SMC_SEL_BASE (AUTCPU12_SMC_BASE + 0x10) | ||
52 | |||
53 | #define AUTCPU12_MMGPIO_BASE (CLPS711X_NR_GPIO) | ||
54 | #define AUTCPU12_SMC_NCE (AUTCPU12_MMGPIO_BASE + 0) /* Bit 0 */ | ||
55 | #define AUTCPU12_SMC_RDY CLPS711X_GPIO(1, 2) | ||
56 | #define AUTCPU12_SMC_ALE CLPS711X_GPIO(1, 3) | ||
57 | #define AUTCPU12_SMC_CLE CLPS711X_GPIO(1, 3) | ||
58 | |||
46 | static struct resource autcpu12_cs8900_resource[] __initdata = { | 59 | static struct resource autcpu12_cs8900_resource[] __initdata = { |
47 | DEFINE_RES_MEM(AUTCPU12_CS8900_BASE, SZ_1K), | 60 | DEFINE_RES_MEM(AUTCPU12_CS8900_BASE, SZ_1K), |
48 | DEFINE_RES_IRQ(AUTCPU12_CS8900_IRQ), | 61 | DEFINE_RES_IRQ(AUTCPU12_CS8900_IRQ), |
@@ -59,14 +72,98 @@ static struct platform_device autcpu12_nvram_pdev __initdata = { | |||
59 | .num_resources = ARRAY_SIZE(autcpu12_nvram_resource), | 72 | .num_resources = ARRAY_SIZE(autcpu12_nvram_resource), |
60 | }; | 73 | }; |
61 | 74 | ||
75 | static struct resource autcpu12_nand_resource[] __initdata = { | ||
76 | DEFINE_RES_MEM(AUTCPU12_SMC_BASE, SZ_16), | ||
77 | }; | ||
78 | |||
79 | static struct mtd_partition autcpu12_nand_parts[] __initdata = { | ||
80 | { | ||
81 | .name = "Flash partition 1", | ||
82 | .offset = 0, | ||
83 | .size = SZ_8M, | ||
84 | }, | ||
85 | { | ||
86 | .name = "Flash partition 2", | ||
87 | .offset = MTDPART_OFS_APPEND, | ||
88 | .size = MTDPART_SIZ_FULL, | ||
89 | }, | ||
90 | }; | ||
91 | |||
92 | static void __init autcpu12_adjust_parts(struct gpio_nand_platdata *pdata, | ||
93 | size_t sz) | ||
94 | { | ||
95 | switch (sz) { | ||
96 | case SZ_16M: | ||
97 | case SZ_32M: | ||
98 | break; | ||
99 | case SZ_64M: | ||
100 | case SZ_128M: | ||
101 | pdata->parts[0].size = SZ_16M; | ||
102 | break; | ||
103 | default: | ||
104 | pr_warn("Unsupported SmartMedia device size %u\n", sz); | ||
105 | break; | ||
106 | } | ||
107 | } | ||
108 | |||
109 | static struct gpio_nand_platdata autcpu12_nand_pdata __initdata = { | ||
110 | .gpio_rdy = AUTCPU12_SMC_RDY, | ||
111 | .gpio_nce = AUTCPU12_SMC_NCE, | ||
112 | .gpio_ale = AUTCPU12_SMC_ALE, | ||
113 | .gpio_cle = AUTCPU12_SMC_CLE, | ||
114 | .gpio_nwp = -1, | ||
115 | .chip_delay = 20, | ||
116 | .parts = autcpu12_nand_parts, | ||
117 | .num_parts = ARRAY_SIZE(autcpu12_nand_parts), | ||
118 | .adjust_parts = autcpu12_adjust_parts, | ||
119 | }; | ||
120 | |||
121 | static struct platform_device autcpu12_nand_pdev __initdata = { | ||
122 | .name = "gpio-nand", | ||
123 | .id = -1, | ||
124 | .resource = autcpu12_nand_resource, | ||
125 | .num_resources = ARRAY_SIZE(autcpu12_nand_resource), | ||
126 | .dev = { | ||
127 | .platform_data = &autcpu12_nand_pdata, | ||
128 | }, | ||
129 | }; | ||
130 | |||
131 | static struct resource autcpu12_mmgpio_resource[] __initdata = { | ||
132 | DEFINE_RES_MEM_NAMED(AUTCPU12_SMC_SEL_BASE, SZ_1, "dat"), | ||
133 | }; | ||
134 | |||
135 | static struct bgpio_pdata autcpu12_mmgpio_pdata __initdata = { | ||
136 | .base = AUTCPU12_MMGPIO_BASE, | ||
137 | .ngpio = 8, | ||
138 | }; | ||
139 | |||
140 | static struct platform_device autcpu12_mmgpio_pdev __initdata = { | ||
141 | .name = "basic-mmio-gpio", | ||
142 | .id = -1, | ||
143 | .resource = autcpu12_mmgpio_resource, | ||
144 | .num_resources = ARRAY_SIZE(autcpu12_mmgpio_resource), | ||
145 | .dev = { | ||
146 | .platform_data = &autcpu12_mmgpio_pdata, | ||
147 | }, | ||
148 | }; | ||
149 | |||
62 | static void __init autcpu12_init(void) | 150 | static void __init autcpu12_init(void) |
63 | { | 151 | { |
64 | platform_device_register_simple("video-clps711x", 0, NULL, 0); | 152 | platform_device_register_simple("video-clps711x", 0, NULL, 0); |
65 | platform_device_register_simple("cs89x0", 0, autcpu12_cs8900_resource, | 153 | platform_device_register_simple("cs89x0", 0, autcpu12_cs8900_resource, |
66 | ARRAY_SIZE(autcpu12_cs8900_resource)); | 154 | ARRAY_SIZE(autcpu12_cs8900_resource)); |
155 | platform_device_register(&autcpu12_mmgpio_pdev); | ||
67 | platform_device_register(&autcpu12_nvram_pdev); | 156 | platform_device_register(&autcpu12_nvram_pdev); |
68 | } | 157 | } |
69 | 158 | ||
159 | static void __init autcpu12_init_late(void) | ||
160 | { | ||
161 | if (IS_ENABLED(MTD_NAND_GPIO) && IS_ENABLED(GPIO_GENERIC_PLATFORM)) { | ||
162 | /* We are need both drivers to handle NAND */ | ||
163 | platform_device_register(&autcpu12_nand_pdev); | ||
164 | } | ||
165 | } | ||
166 | |||
70 | MACHINE_START(AUTCPU12, "autronix autcpu12") | 167 | MACHINE_START(AUTCPU12, "autronix autcpu12") |
71 | /* Maintainer: Thomas Gleixner */ | 168 | /* Maintainer: Thomas Gleixner */ |
72 | .atag_offset = 0x20000, | 169 | .atag_offset = 0x20000, |
@@ -75,6 +172,7 @@ MACHINE_START(AUTCPU12, "autronix autcpu12") | |||
75 | .init_irq = clps711x_init_irq, | 172 | .init_irq = clps711x_init_irq, |
76 | .timer = &clps711x_timer, | 173 | .timer = &clps711x_timer, |
77 | .init_machine = autcpu12_init, | 174 | .init_machine = autcpu12_init, |
175 | .init_late = autcpu12_init_late, | ||
78 | .handle_irq = clps711x_handle_irq, | 176 | .handle_irq = clps711x_handle_irq, |
79 | .restart = clps711x_restart, | 177 | .restart = clps711x_restart, |
80 | MACHINE_END | 178 | MACHINE_END |
diff --git a/arch/arm/mach-clps711x/include/mach/autcpu12.h b/arch/arm/mach-clps711x/include/mach/autcpu12.h index b077abd8a475..0452f5f3f034 100644 --- a/arch/arm/mach-clps711x/include/mach/autcpu12.h +++ b/arch/arm/mach-clps711x/include/mach/autcpu12.h | |||
@@ -40,8 +40,6 @@ | |||
40 | 40 | ||
41 | #define AUTCPU12_PHYS_CSAUX1 CS1_PHYS_BASE +0x04000000 /* physical */ | 41 | #define AUTCPU12_PHYS_CSAUX1 CS1_PHYS_BASE +0x04000000 /* physical */ |
42 | 42 | ||
43 | #define AUTCPU12_PHYS_SMC CS1_PHYS_BASE +0x06000000 /* physical */ | ||
44 | |||
45 | #define AUTCPU12_PHYS_CAN CS1_PHYS_BASE +0x08000000 /* physical */ | 43 | #define AUTCPU12_PHYS_CAN CS1_PHYS_BASE +0x08000000 /* physical */ |
46 | 44 | ||
47 | #define AUTCPU12_PHYS_TOUCH CS1_PHYS_BASE +0x0A000000 /* physical */ | 45 | #define AUTCPU12_PHYS_TOUCH CS1_PHYS_BASE +0x0A000000 /* physical */ |
@@ -50,14 +48,6 @@ | |||
50 | 48 | ||
51 | #define AUTCPU12_PHYS_LPT CS1_PHYS_BASE +0x0E000000 /* physical */ | 49 | #define AUTCPU12_PHYS_LPT CS1_PHYS_BASE +0x0E000000 /* physical */ |
52 | 50 | ||
53 | /* | ||
54 | * defines for smartmedia card access | ||
55 | */ | ||
56 | #define AUTCPU12_SMC_RDY (1<<2) | ||
57 | #define AUTCPU12_SMC_ALE (1<<3) | ||
58 | #define AUTCPU12_SMC_CLE (1<<4) | ||
59 | #define AUTCPU12_SMC_PORT_OFFSET PBDR | ||
60 | #define AUTCPU12_SMC_SELECT_OFFSET 0x10 | ||
61 | /* | 51 | /* |
62 | * defines for lcd contrast | 52 | * defines for lcd contrast |
63 | */ | 53 | */ |