diff options
25 files changed, 55 insertions, 45 deletions
diff --git a/arch/arm/mach-at91/board-afeb-9260v1.c b/arch/arm/mach-at91/board-afeb-9260v1.c index 3bb40694b02d..161efbaa1029 100644 --- a/arch/arm/mach-at91/board-afeb-9260v1.c +++ b/arch/arm/mach-at91/board-afeb-9260v1.c | |||
@@ -138,6 +138,7 @@ static struct atmel_nand_data __initdata afeb9260_nand_data = { | |||
138 | .rdy_pin = AT91_PIN_PC13, | 138 | .rdy_pin = AT91_PIN_PC13, |
139 | .enable_pin = AT91_PIN_PC14, | 139 | .enable_pin = AT91_PIN_PC14, |
140 | .bus_width_16 = 0, | 140 | .bus_width_16 = 0, |
141 | .ecc_mode = NAND_ECC_SOFT, | ||
141 | .parts = afeb9260_nand_partition, | 142 | .parts = afeb9260_nand_partition, |
142 | .num_parts = ARRAY_SIZE(afeb9260_nand_partition), | 143 | .num_parts = ARRAY_SIZE(afeb9260_nand_partition), |
143 | .det_pin = -EINVAL, | 144 | .det_pin = -EINVAL, |
diff --git a/arch/arm/mach-at91/board-cam60.c b/arch/arm/mach-at91/board-cam60.c index 8510e9e54988..c6d44ee0c77e 100644 --- a/arch/arm/mach-at91/board-cam60.c +++ b/arch/arm/mach-at91/board-cam60.c | |||
@@ -140,6 +140,7 @@ static struct atmel_nand_data __initdata cam60_nand_data = { | |||
140 | .det_pin = -EINVAL, | 140 | .det_pin = -EINVAL, |
141 | .rdy_pin = AT91_PIN_PA9, | 141 | .rdy_pin = AT91_PIN_PA9, |
142 | .enable_pin = AT91_PIN_PA7, | 142 | .enable_pin = AT91_PIN_PA7, |
143 | .ecc_mode = NAND_ECC_SOFT, | ||
143 | .parts = cam60_nand_partition, | 144 | .parts = cam60_nand_partition, |
144 | .num_parts = ARRAY_SIZE(cam60_nand_partition), | 145 | .num_parts = ARRAY_SIZE(cam60_nand_partition), |
145 | }; | 146 | }; |
diff --git a/arch/arm/mach-at91/board-cpu9krea.c b/arch/arm/mach-at91/board-cpu9krea.c index 989e1c5a9ca0..5f3680e7c883 100644 --- a/arch/arm/mach-at91/board-cpu9krea.c +++ b/arch/arm/mach-at91/board-cpu9krea.c | |||
@@ -117,6 +117,7 @@ static struct atmel_nand_data __initdata cpu9krea_nand_data = { | |||
117 | .enable_pin = AT91_PIN_PC14, | 117 | .enable_pin = AT91_PIN_PC14, |
118 | .bus_width_16 = 0, | 118 | .bus_width_16 = 0, |
119 | .det_pin = -EINVAL, | 119 | .det_pin = -EINVAL, |
120 | .ecc_mode = NAND_ECC_SOFT, | ||
120 | }; | 121 | }; |
121 | 122 | ||
122 | #ifdef CONFIG_MACH_CPU9260 | 123 | #ifdef CONFIG_MACH_CPU9260 |
diff --git a/arch/arm/mach-at91/board-dt.c b/arch/arm/mach-at91/board-dt.c index 583b72472ad9..e1505fd575e9 100644 --- a/arch/arm/mach-at91/board-dt.c +++ b/arch/arm/mach-at91/board-dt.c | |||
@@ -47,6 +47,7 @@ static struct atmel_nand_data __initdata ek_nand_data = { | |||
47 | .det_pin = -EINVAL, | 47 | .det_pin = -EINVAL, |
48 | .rdy_pin = AT91_PIN_PC8, | 48 | .rdy_pin = AT91_PIN_PC8, |
49 | .enable_pin = AT91_PIN_PC14, | 49 | .enable_pin = AT91_PIN_PC14, |
50 | .ecc_mode = NAND_ECC_SOFT, | ||
50 | }; | 51 | }; |
51 | 52 | ||
52 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 53 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-kb9202.c b/arch/arm/mach-at91/board-kb9202.c index bb9914582013..59b92aab9bcf 100644 --- a/arch/arm/mach-at91/board-kb9202.c +++ b/arch/arm/mach-at91/board-kb9202.c | |||
@@ -108,6 +108,7 @@ static struct atmel_nand_data __initdata kb9202_nand_data = { | |||
108 | .det_pin = -EINVAL, | 108 | .det_pin = -EINVAL, |
109 | .rdy_pin = AT91_PIN_PC29, | 109 | .rdy_pin = AT91_PIN_PC29, |
110 | .enable_pin = AT91_PIN_PC28, | 110 | .enable_pin = AT91_PIN_PC28, |
111 | .ecc_mode = NAND_ECC_SOFT, | ||
111 | .parts = kb9202_nand_partition, | 112 | .parts = kb9202_nand_partition, |
112 | .num_parts = ARRAY_SIZE(kb9202_nand_partition), | 113 | .num_parts = ARRAY_SIZE(kb9202_nand_partition), |
113 | }; | 114 | }; |
diff --git a/arch/arm/mach-at91/board-neocore926.c b/arch/arm/mach-at91/board-neocore926.c index 3f8617c0e04e..57d5f6a4726a 100644 --- a/arch/arm/mach-at91/board-neocore926.c +++ b/arch/arm/mach-at91/board-neocore926.c | |||
@@ -190,6 +190,7 @@ static struct atmel_nand_data __initdata neocore926_nand_data = { | |||
190 | .rdy_pin = AT91_PIN_PB19, | 190 | .rdy_pin = AT91_PIN_PB19, |
191 | .rdy_pin_active_low = 1, | 191 | .rdy_pin_active_low = 1, |
192 | .enable_pin = AT91_PIN_PD15, | 192 | .enable_pin = AT91_PIN_PD15, |
193 | .ecc_mode = NAND_ECC_SOFT, | ||
193 | .parts = neocore926_nand_partition, | 194 | .parts = neocore926_nand_partition, |
194 | .num_parts = ARRAY_SIZE(neocore926_nand_partition), | 195 | .num_parts = ARRAY_SIZE(neocore926_nand_partition), |
195 | .det_pin = -EINVAL, | 196 | .det_pin = -EINVAL, |
diff --git a/arch/arm/mach-at91/board-qil-a9260.c b/arch/arm/mach-at91/board-qil-a9260.c index e029d220cb84..97907e4fb348 100644 --- a/arch/arm/mach-at91/board-qil-a9260.c +++ b/arch/arm/mach-at91/board-qil-a9260.c | |||
@@ -138,6 +138,7 @@ static struct atmel_nand_data __initdata ek_nand_data = { | |||
138 | .det_pin = -EINVAL, | 138 | .det_pin = -EINVAL, |
139 | .rdy_pin = AT91_PIN_PC13, | 139 | .rdy_pin = AT91_PIN_PC13, |
140 | .enable_pin = AT91_PIN_PC14, | 140 | .enable_pin = AT91_PIN_PC14, |
141 | .ecc_mode = NAND_ECC_SOFT, | ||
141 | .parts = ek_nand_partition, | 142 | .parts = ek_nand_partition, |
142 | .num_parts = ARRAY_SIZE(ek_nand_partition), | 143 | .num_parts = ARRAY_SIZE(ek_nand_partition), |
143 | }; | 144 | }; |
diff --git a/arch/arm/mach-at91/board-rm9200dk.c b/arch/arm/mach-at91/board-rm9200dk.c index 9083df04e7ed..d0ec16603788 100644 --- a/arch/arm/mach-at91/board-rm9200dk.c +++ b/arch/arm/mach-at91/board-rm9200dk.c | |||
@@ -150,6 +150,7 @@ static struct atmel_nand_data __initdata dk_nand_data = { | |||
150 | .det_pin = AT91_PIN_PB1, | 150 | .det_pin = AT91_PIN_PB1, |
151 | .rdy_pin = AT91_PIN_PC2, | 151 | .rdy_pin = AT91_PIN_PC2, |
152 | .enable_pin = -EINVAL, | 152 | .enable_pin = -EINVAL, |
153 | .ecc_mode = NAND_ECC_SOFT, | ||
153 | .parts = dk_nand_partition, | 154 | .parts = dk_nand_partition, |
154 | .num_parts = ARRAY_SIZE(dk_nand_partition), | 155 | .num_parts = ARRAY_SIZE(dk_nand_partition), |
155 | }; | 156 | }; |
diff --git a/arch/arm/mach-at91/board-sam9-l9260.c b/arch/arm/mach-at91/board-sam9-l9260.c index 84bce587735f..e8b116b6cba6 100644 --- a/arch/arm/mach-at91/board-sam9-l9260.c +++ b/arch/arm/mach-at91/board-sam9-l9260.c | |||
@@ -139,6 +139,7 @@ static struct atmel_nand_data __initdata ek_nand_data = { | |||
139 | .det_pin = -EINVAL, | 139 | .det_pin = -EINVAL, |
140 | .rdy_pin = AT91_PIN_PC13, | 140 | .rdy_pin = AT91_PIN_PC13, |
141 | .enable_pin = AT91_PIN_PC14, | 141 | .enable_pin = AT91_PIN_PC14, |
142 | .ecc_mode = NAND_ECC_SOFT, | ||
142 | .parts = ek_nand_partition, | 143 | .parts = ek_nand_partition, |
143 | .num_parts = ARRAY_SIZE(ek_nand_partition), | 144 | .num_parts = ARRAY_SIZE(ek_nand_partition), |
144 | }; | 145 | }; |
diff --git a/arch/arm/mach-at91/board-sam9260ek.c b/arch/arm/mach-at91/board-sam9260ek.c index be8233bcabdc..3118ab120951 100644 --- a/arch/arm/mach-at91/board-sam9260ek.c +++ b/arch/arm/mach-at91/board-sam9260ek.c | |||
@@ -181,6 +181,7 @@ static struct atmel_nand_data __initdata ek_nand_data = { | |||
181 | .det_pin = -EINVAL, | 181 | .det_pin = -EINVAL, |
182 | .rdy_pin = AT91_PIN_PC13, | 182 | .rdy_pin = AT91_PIN_PC13, |
183 | .enable_pin = AT91_PIN_PC14, | 183 | .enable_pin = AT91_PIN_PC14, |
184 | .ecc_mode = NAND_ECC_SOFT, | ||
184 | .parts = ek_nand_partition, | 185 | .parts = ek_nand_partition, |
185 | .num_parts = ARRAY_SIZE(ek_nand_partition), | 186 | .num_parts = ARRAY_SIZE(ek_nand_partition), |
186 | }; | 187 | }; |
diff --git a/arch/arm/mach-at91/board-sam9261ek.c b/arch/arm/mach-at91/board-sam9261ek.c index 40895072a1a7..60cf37b49973 100644 --- a/arch/arm/mach-at91/board-sam9261ek.c +++ b/arch/arm/mach-at91/board-sam9261ek.c | |||
@@ -187,6 +187,7 @@ static struct atmel_nand_data __initdata ek_nand_data = { | |||
187 | .det_pin = -EINVAL, | 187 | .det_pin = -EINVAL, |
188 | .rdy_pin = AT91_PIN_PC15, | 188 | .rdy_pin = AT91_PIN_PC15, |
189 | .enable_pin = AT91_PIN_PC14, | 189 | .enable_pin = AT91_PIN_PC14, |
190 | .ecc_mode = NAND_ECC_SOFT, | ||
190 | .parts = ek_nand_partition, | 191 | .parts = ek_nand_partition, |
191 | .num_parts = ARRAY_SIZE(ek_nand_partition), | 192 | .num_parts = ARRAY_SIZE(ek_nand_partition), |
192 | }; | 193 | }; |
diff --git a/arch/arm/mach-at91/board-sam9263ek.c b/arch/arm/mach-at91/board-sam9263ek.c index 29f66052fe63..aeabf850cb80 100644 --- a/arch/arm/mach-at91/board-sam9263ek.c +++ b/arch/arm/mach-at91/board-sam9263ek.c | |||
@@ -187,6 +187,7 @@ static struct atmel_nand_data __initdata ek_nand_data = { | |||
187 | .det_pin = -EINVAL, | 187 | .det_pin = -EINVAL, |
188 | .rdy_pin = AT91_PIN_PA22, | 188 | .rdy_pin = AT91_PIN_PA22, |
189 | .enable_pin = AT91_PIN_PD15, | 189 | .enable_pin = AT91_PIN_PD15, |
190 | .ecc_mode = NAND_ECC_SOFT, | ||
190 | .parts = ek_nand_partition, | 191 | .parts = ek_nand_partition, |
191 | .num_parts = ARRAY_SIZE(ek_nand_partition), | 192 | .num_parts = ARRAY_SIZE(ek_nand_partition), |
192 | }; | 193 | }; |
diff --git a/arch/arm/mach-at91/board-sam9g20ek.c b/arch/arm/mach-at91/board-sam9g20ek.c index 843d6286c6f4..419e0d5c6d50 100644 --- a/arch/arm/mach-at91/board-sam9g20ek.c +++ b/arch/arm/mach-at91/board-sam9g20ek.c | |||
@@ -166,6 +166,7 @@ static struct atmel_nand_data __initdata ek_nand_data = { | |||
166 | .rdy_pin = AT91_PIN_PC13, | 166 | .rdy_pin = AT91_PIN_PC13, |
167 | .enable_pin = AT91_PIN_PC14, | 167 | .enable_pin = AT91_PIN_PC14, |
168 | .det_pin = -EINVAL, | 168 | .det_pin = -EINVAL, |
169 | .ecc_mode = NAND_ECC_SOFT, | ||
169 | .parts = ek_nand_partition, | 170 | .parts = ek_nand_partition, |
170 | .num_parts = ARRAY_SIZE(ek_nand_partition), | 171 | .num_parts = ARRAY_SIZE(ek_nand_partition), |
171 | }; | 172 | }; |
diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c index 57497e2b8878..7b8c647db5f0 100644 --- a/arch/arm/mach-at91/board-sam9m10g45ek.c +++ b/arch/arm/mach-at91/board-sam9m10g45ek.c | |||
@@ -148,6 +148,7 @@ static struct atmel_nand_data __initdata ek_nand_data = { | |||
148 | .rdy_pin = AT91_PIN_PC8, | 148 | .rdy_pin = AT91_PIN_PC8, |
149 | .enable_pin = AT91_PIN_PC14, | 149 | .enable_pin = AT91_PIN_PC14, |
150 | .det_pin = -EINVAL, | 150 | .det_pin = -EINVAL, |
151 | .ecc_mode = NAND_ECC_SOFT, | ||
151 | .parts = ek_nand_partition, | 152 | .parts = ek_nand_partition, |
152 | .num_parts = ARRAY_SIZE(ek_nand_partition), | 153 | .num_parts = ARRAY_SIZE(ek_nand_partition), |
153 | }; | 154 | }; |
diff --git a/arch/arm/mach-at91/board-sam9rlek.c b/arch/arm/mach-at91/board-sam9rlek.c index c1366d0032bf..70a026de2b20 100644 --- a/arch/arm/mach-at91/board-sam9rlek.c +++ b/arch/arm/mach-at91/board-sam9rlek.c | |||
@@ -94,6 +94,7 @@ static struct atmel_nand_data __initdata ek_nand_data = { | |||
94 | .det_pin = -EINVAL, | 94 | .det_pin = -EINVAL, |
95 | .rdy_pin = AT91_PIN_PD17, | 95 | .rdy_pin = AT91_PIN_PD17, |
96 | .enable_pin = AT91_PIN_PB6, | 96 | .enable_pin = AT91_PIN_PB6, |
97 | .ecc_mode = NAND_ECC_SOFT, | ||
97 | .parts = ek_nand_partition, | 98 | .parts = ek_nand_partition, |
98 | .num_parts = ARRAY_SIZE(ek_nand_partition), | 99 | .num_parts = ARRAY_SIZE(ek_nand_partition), |
99 | }; | 100 | }; |
diff --git a/arch/arm/mach-at91/board-snapper9260.c b/arch/arm/mach-at91/board-snapper9260.c index 3c2e3fcc310c..ebc9d01ce742 100644 --- a/arch/arm/mach-at91/board-snapper9260.c +++ b/arch/arm/mach-at91/board-snapper9260.c | |||
@@ -110,6 +110,7 @@ static struct atmel_nand_data __initdata snapper9260_nand_data = { | |||
110 | .bus_width_16 = 0, | 110 | .bus_width_16 = 0, |
111 | .enable_pin = -EINVAL, | 111 | .enable_pin = -EINVAL, |
112 | .det_pin = -EINVAL, | 112 | .det_pin = -EINVAL, |
113 | .ecc_mode = NAND_ECC_SOFT, | ||
113 | }; | 114 | }; |
114 | 115 | ||
115 | static struct sam9_smc_config __initdata snapper9260_nand_smc_config = { | 116 | static struct sam9_smc_config __initdata snapper9260_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-stamp9g20.c b/arch/arm/mach-at91/board-stamp9g20.c index 72eb3b4d9ab6..7640049410a0 100644 --- a/arch/arm/mach-at91/board-stamp9g20.c +++ b/arch/arm/mach-at91/board-stamp9g20.c | |||
@@ -86,6 +86,7 @@ static struct atmel_nand_data __initdata nand_data = { | |||
86 | .enable_pin = AT91_PIN_PC14, | 86 | .enable_pin = AT91_PIN_PC14, |
87 | .bus_width_16 = 0, | 87 | .bus_width_16 = 0, |
88 | .det_pin = -EINVAL, | 88 | .det_pin = -EINVAL, |
89 | .ecc_mode = NAND_ECC_SOFT, | ||
89 | }; | 90 | }; |
90 | 91 | ||
91 | static struct sam9_smc_config __initdata nand_smc_config = { | 92 | static struct sam9_smc_config __initdata nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-usb-a926x.c b/arch/arm/mach-at91/board-usb-a926x.c index 26c36fc2d1e5..cc93152a4da4 100644 --- a/arch/arm/mach-at91/board-usb-a926x.c +++ b/arch/arm/mach-at91/board-usb-a926x.c | |||
@@ -198,6 +198,7 @@ static struct atmel_nand_data __initdata ek_nand_data = { | |||
198 | .det_pin = -EINVAL, | 198 | .det_pin = -EINVAL, |
199 | .rdy_pin = AT91_PIN_PA22, | 199 | .rdy_pin = AT91_PIN_PA22, |
200 | .enable_pin = AT91_PIN_PD15, | 200 | .enable_pin = AT91_PIN_PD15, |
201 | .ecc_mode = NAND_ECC_SOFT, | ||
201 | .parts = ek_nand_partition, | 202 | .parts = ek_nand_partition, |
202 | .num_parts = ARRAY_SIZE(ek_nand_partition), | 203 | .num_parts = ARRAY_SIZE(ek_nand_partition), |
203 | }; | 204 | }; |
diff --git a/arch/arm/mach-at91/board-yl-9200.c b/arch/arm/mach-at91/board-yl-9200.c index 52f460768f71..38dd279d30b2 100644 --- a/arch/arm/mach-at91/board-yl-9200.c +++ b/arch/arm/mach-at91/board-yl-9200.c | |||
@@ -182,6 +182,7 @@ static struct atmel_nand_data __initdata yl9200_nand_data = { | |||
182 | .det_pin = -EINVAL, | 182 | .det_pin = -EINVAL, |
183 | .rdy_pin = AT91_PIN_PC14, /* R/!B (Sheet10) */ | 183 | .rdy_pin = AT91_PIN_PC14, /* R/!B (Sheet10) */ |
184 | .enable_pin = AT91_PIN_PC15, /* !CE (Sheet10) */ | 184 | .enable_pin = AT91_PIN_PC15, /* !CE (Sheet10) */ |
185 | .ecc_mode = NAND_ECC_SOFT, | ||
185 | .parts = yl9200_nand_partition, | 186 | .parts = yl9200_nand_partition, |
186 | .num_parts = ARRAY_SIZE(yl9200_nand_partition), | 187 | .num_parts = ARRAY_SIZE(yl9200_nand_partition), |
187 | }; | 188 | }; |
diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h index dc8d6d4f17cf..544a5d5ce416 100644 --- a/arch/arm/mach-at91/include/mach/board.h +++ b/arch/arm/mach-at91/include/mach/board.h | |||
@@ -41,6 +41,7 @@ | |||
41 | #include <sound/atmel-ac97c.h> | 41 | #include <sound/atmel-ac97c.h> |
42 | #include <linux/serial.h> | 42 | #include <linux/serial.h> |
43 | #include <linux/platform_data/macb.h> | 43 | #include <linux/platform_data/macb.h> |
44 | #include <linux/platform_data/atmel.h> | ||
44 | 45 | ||
45 | /* USB Device */ | 46 | /* USB Device */ |
46 | struct at91_udc_data { | 47 | struct at91_udc_data { |
@@ -98,20 +99,6 @@ extern void __init at91_add_device_usbh(struct at91_usbh_data *data); | |||
98 | extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data); | 99 | extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data); |
99 | extern void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data); | 100 | extern void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data); |
100 | 101 | ||
101 | /* NAND / SmartMedia */ | ||
102 | struct atmel_nand_data { | ||
103 | int enable_pin; /* chip enable */ | ||
104 | int det_pin; /* card detect */ | ||
105 | int rdy_pin; /* ready/busy */ | ||
106 | u8 rdy_pin_active_low; /* rdy_pin value is inverted */ | ||
107 | u8 ale; /* address line number connected to ALE */ | ||
108 | u8 cle; /* address line number connected to CLE */ | ||
109 | u8 bus_width_16; /* buswidth is 16 bit */ | ||
110 | u8 correction_cap; /* PMECC correction capability */ | ||
111 | u16 sector_size; /* Sector size for PMECC */ | ||
112 | struct mtd_partition *parts; | ||
113 | unsigned int num_parts; | ||
114 | }; | ||
115 | extern void __init at91_add_device_nand(struct atmel_nand_data *data); | 102 | extern void __init at91_add_device_nand(struct atmel_nand_data *data); |
116 | 103 | ||
117 | /* I2C*/ | 104 | /* I2C*/ |
diff --git a/arch/avr32/boards/atngw100/setup.c b/arch/avr32/boards/atngw100/setup.c index 7c756fb189f7..afeae8978a8d 100644 --- a/arch/avr32/boards/atngw100/setup.c +++ b/arch/avr32/boards/atngw100/setup.c | |||
@@ -97,6 +97,7 @@ static struct atmel_nand_data atngw100mkii_nand_data __initdata = { | |||
97 | .rdy_pin = GPIO_PIN_PB(28), | 97 | .rdy_pin = GPIO_PIN_PB(28), |
98 | .enable_pin = GPIO_PIN_PE(23), | 98 | .enable_pin = GPIO_PIN_PE(23), |
99 | .bus_width_16 = true, | 99 | .bus_width_16 = true, |
100 | .ecc_mode = NAND_ECC_SOFT, | ||
100 | .parts = nand_partitions, | 101 | .parts = nand_partitions, |
101 | .num_parts = ARRAY_SIZE(nand_partitions), | 102 | .num_parts = ARRAY_SIZE(nand_partitions), |
102 | }; | 103 | }; |
diff --git a/arch/avr32/boards/atstk1000/atstk1002.c b/arch/avr32/boards/atstk1000/atstk1002.c index c56ddac85d61..dc5263321480 100644 --- a/arch/avr32/boards/atstk1000/atstk1002.c +++ b/arch/avr32/boards/atstk1000/atstk1002.c | |||
@@ -95,6 +95,7 @@ static struct atmel_nand_data atstk1006_nand_data __initdata = { | |||
95 | .ale = 22, | 95 | .ale = 22, |
96 | .rdy_pin = GPIO_PIN_PB(30), | 96 | .rdy_pin = GPIO_PIN_PB(30), |
97 | .enable_pin = GPIO_PIN_PB(29), | 97 | .enable_pin = GPIO_PIN_PB(29), |
98 | .ecc_mode = NAND_ECC_SOFT, | ||
98 | .parts = nand_partitions, | 99 | .parts = nand_partitions, |
99 | .num_parts = ARRAY_SIZE(num_partitions), | 100 | .num_parts = ARRAY_SIZE(num_partitions), |
100 | }; | 101 | }; |
diff --git a/arch/avr32/mach-at32ap/include/mach/board.h b/arch/avr32/mach-at32ap/include/mach/board.h index 67b111ce332d..71733866cb4f 100644 --- a/arch/avr32/mach-at32ap/include/mach/board.h +++ b/arch/avr32/mach-at32ap/include/mach/board.h | |||
@@ -7,6 +7,7 @@ | |||
7 | #include <linux/types.h> | 7 | #include <linux/types.h> |
8 | #include <linux/serial.h> | 8 | #include <linux/serial.h> |
9 | #include <linux/platform_data/macb.h> | 9 | #include <linux/platform_data/macb.h> |
10 | #include <linux/platform_data/atmel_nand.h> | ||
10 | 11 | ||
11 | #define GPIO_PIN_NONE (-1) | 12 | #define GPIO_PIN_NONE (-1) |
12 | 13 | ||
@@ -116,18 +117,6 @@ struct platform_device * | |||
116 | at32_add_device_cf(unsigned int id, unsigned int extint, | 117 | at32_add_device_cf(unsigned int id, unsigned int extint, |
117 | struct cf_platform_data *data); | 118 | struct cf_platform_data *data); |
118 | 119 | ||
119 | /* NAND / SmartMedia */ | ||
120 | struct atmel_nand_data { | ||
121 | int enable_pin; /* chip enable */ | ||
122 | int det_pin; /* card detect */ | ||
123 | int rdy_pin; /* ready/busy */ | ||
124 | u8 rdy_pin_active_low; /* rdy_pin value is inverted */ | ||
125 | u8 ale; /* address line number connected to ALE */ | ||
126 | u8 cle; /* address line number connected to CLE */ | ||
127 | u8 bus_width_16; /* buswidth is 16 bit */ | ||
128 | struct mtd_partition *parts; | ||
129 | unsigned int num_parts; | ||
130 | }; | ||
131 | struct platform_device * | 120 | struct platform_device * |
132 | at32_add_device_nand(unsigned int id, struct atmel_nand_data *data); | 121 | at32_add_device_nand(unsigned int id, struct atmel_nand_data *data); |
133 | 122 | ||
diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c index 35b4fb55dbd6..fb87b03f1a25 100644 --- a/drivers/mtd/nand/atmel_nand.c +++ b/drivers/mtd/nand/atmel_nand.c | |||
@@ -34,22 +34,10 @@ | |||
34 | #include <linux/dmaengine.h> | 34 | #include <linux/dmaengine.h> |
35 | #include <linux/gpio.h> | 35 | #include <linux/gpio.h> |
36 | #include <linux/io.h> | 36 | #include <linux/io.h> |
37 | #include <linux/platform_data/atmel.h> | ||
37 | 38 | ||
38 | #include <mach/board.h> | ||
39 | #include <mach/cpu.h> | 39 | #include <mach/cpu.h> |
40 | 40 | ||
41 | #ifdef CONFIG_MTD_NAND_ATMEL_ECC_HW | ||
42 | #define hard_ecc 1 | ||
43 | #else | ||
44 | #define hard_ecc 0 | ||
45 | #endif | ||
46 | |||
47 | #ifdef CONFIG_MTD_NAND_ATMEL_ECC_NONE | ||
48 | #define no_ecc 1 | ||
49 | #else | ||
50 | #define no_ecc 0 | ||
51 | #endif | ||
52 | |||
53 | static int use_dma = 1; | 41 | static int use_dma = 1; |
54 | module_param(use_dma, int, 0); | 42 | module_param(use_dma, int, 0); |
55 | 43 | ||
@@ -532,23 +520,22 @@ static int __init atmel_nand_probe(struct platform_device *pdev) | |||
532 | if (gpio_is_valid(host->board->rdy_pin)) | 520 | if (gpio_is_valid(host->board->rdy_pin)) |
533 | nand_chip->dev_ready = atmel_nand_device_ready; | 521 | nand_chip->dev_ready = atmel_nand_device_ready; |
534 | 522 | ||
523 | nand_chip->ecc.mode = host->board->ecc_mode; | ||
524 | |||
535 | regs = platform_get_resource(pdev, IORESOURCE_MEM, 1); | 525 | regs = platform_get_resource(pdev, IORESOURCE_MEM, 1); |
536 | if (!regs && hard_ecc) { | 526 | if (!regs && nand_chip->ecc.mode == NAND_ECC_HW) { |
537 | printk(KERN_ERR "atmel_nand: can't get I/O resource " | 527 | printk(KERN_ERR "atmel_nand: can't get I/O resource " |
538 | "regs\nFalling back on software ECC\n"); | 528 | "regs\nFalling back on software ECC\n"); |
529 | nand_chip->ecc.mode = NAND_ECC_SOFT; | ||
539 | } | 530 | } |
540 | 531 | ||
541 | nand_chip->ecc.mode = NAND_ECC_SOFT; /* enable ECC */ | 532 | if (nand_chip->ecc.mode == NAND_ECC_HW) { |
542 | if (no_ecc) | ||
543 | nand_chip->ecc.mode = NAND_ECC_NONE; | ||
544 | if (hard_ecc && regs) { | ||
545 | host->ecc = ioremap(regs->start, resource_size(regs)); | 533 | host->ecc = ioremap(regs->start, resource_size(regs)); |
546 | if (host->ecc == NULL) { | 534 | if (host->ecc == NULL) { |
547 | printk(KERN_ERR "atmel_nand: ioremap failed\n"); | 535 | printk(KERN_ERR "atmel_nand: ioremap failed\n"); |
548 | res = -EIO; | 536 | res = -EIO; |
549 | goto err_ecc_ioremap; | 537 | goto err_ecc_ioremap; |
550 | } | 538 | } |
551 | nand_chip->ecc.mode = NAND_ECC_HW; | ||
552 | nand_chip->ecc.calculate = atmel_nand_calculate; | 539 | nand_chip->ecc.calculate = atmel_nand_calculate; |
553 | nand_chip->ecc.correct = atmel_nand_correct; | 540 | nand_chip->ecc.correct = atmel_nand_correct; |
554 | nand_chip->ecc.hwctl = atmel_nand_hwctl; | 541 | nand_chip->ecc.hwctl = atmel_nand_hwctl; |
diff --git a/include/linux/platform_data/atmel.h b/include/linux/platform_data/atmel.h new file mode 100644 index 000000000000..7b8a445f2b41 --- /dev/null +++ b/include/linux/platform_data/atmel.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * atmel platform data | ||
3 | * | ||
4 | * GPL v2 Only | ||
5 | */ | ||
6 | |||
7 | #ifndef __ATMEL_NAND_H__ | ||
8 | #define __ATMEL_NAND_H__ | ||
9 | |||
10 | #include <linux/mtd/nand.h> | ||
11 | |||
12 | /* NAND / SmartMedia */ | ||
13 | struct atmel_nand_data { | ||
14 | int enable_pin; /* chip enable */ | ||
15 | int det_pin; /* card detect */ | ||
16 | int rdy_pin; /* ready/busy */ | ||
17 | u8 rdy_pin_active_low; /* rdy_pin value is inverted */ | ||
18 | u8 ale; /* address line number connected to ALE */ | ||
19 | u8 cle; /* address line number connected to CLE */ | ||
20 | u8 bus_width_16; /* buswidth is 16 bit */ | ||
21 | u8 ecc_mode; /* ecc mode */ | ||
22 | struct mtd_partition *parts; | ||
23 | unsigned int num_parts; | ||
24 | }; | ||
25 | |||
26 | #endif /* __ATMEL_NAND_H__ */ | ||