aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn Guo <shawn.guo@linaro.org>2012-09-15 01:34:09 -0400
committerShawn Guo <shawn.guo@linaro.org>2012-10-14 22:03:15 -0400
commit4d62435f0601ecec379fdc48749a10353fee8217 (patch)
treeae6b8397b554700283b86150dd852763d39bbe5d
parent5bdfba29f18f0a36df8e28328315213ea47eb529 (diff)
mtd: mxc_nand: remove cpu_is_xxx by using platform_device_id
It changes the driver to use platform_device_id rather than cpu_is_xxx to determine the controller type, and updates the platform code accordingly. As the result, mach/hardware.h inclusion gets removed from the driver. Signed-off-by: Shawn Guo <shawn.guo@linaro.org> Acked-by: Sascha Hauer <s.hauer@pengutronix.de> Acked-by: Arnd Bergmann <arnd@arndb.de> Cc: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> Cc: linux-mtd@lists.infradead.org
-rw-r--r--arch/arm/mach-imx/clk-imx21.c2
-rw-r--r--arch/arm/mach-imx/clk-imx25.c2
-rw-r--r--arch/arm/mach-imx/clk-imx27.c2
-rw-r--r--arch/arm/mach-imx/clk-imx31.c2
-rw-r--r--arch/arm/mach-imx/clk-imx35.c2
-rw-r--r--arch/arm/mach-imx/clk-imx51-imx53.c2
-rw-r--r--arch/arm/mach-imx/devices/devices-common.h1
-rw-r--r--arch/arm/mach-imx/devices/platform-mxc_nand.c20
-rw-r--r--arch/arm/mach-imx/imx27-dt.c2
-rw-r--r--drivers/mtd/nand/mxc_nand.c96
10 files changed, 79 insertions, 52 deletions
diff --git a/arch/arm/mach-imx/clk-imx21.c b/arch/arm/mach-imx/clk-imx21.c
index 09fc31c58474..96a4788032d1 100644
--- a/arch/arm/mach-imx/clk-imx21.c
+++ b/arch/arm/mach-imx/clk-imx21.c
@@ -162,7 +162,7 @@ int __init mx21_clocks_init(unsigned long lref, unsigned long href)
162 clk_register_clkdev(clk[lcdc_hclk_gate], "ahb", "imx-fb.0"); 162 clk_register_clkdev(clk[lcdc_hclk_gate], "ahb", "imx-fb.0");
163 clk_register_clkdev(clk[usb_gate], "per", "imx21-hcd.0"); 163 clk_register_clkdev(clk[usb_gate], "per", "imx21-hcd.0");
164 clk_register_clkdev(clk[usb_hclk_gate], "ahb", "imx21-hcd.0"); 164 clk_register_clkdev(clk[usb_hclk_gate], "ahb", "imx21-hcd.0");
165 clk_register_clkdev(clk[nfc_gate], NULL, "mxc_nand.0"); 165 clk_register_clkdev(clk[nfc_gate], NULL, "imx21-nand.0");
166 clk_register_clkdev(clk[dma_hclk_gate], "ahb", "imx-dma"); 166 clk_register_clkdev(clk[dma_hclk_gate], "ahb", "imx-dma");
167 clk_register_clkdev(clk[dma_gate], "ipg", "imx-dma"); 167 clk_register_clkdev(clk[dma_gate], "ipg", "imx-dma");
168 clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0"); 168 clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0");
diff --git a/arch/arm/mach-imx/clk-imx25.c b/arch/arm/mach-imx/clk-imx25.c
index f1d75e72e002..f0f82f204de7 100644
--- a/arch/arm/mach-imx/clk-imx25.c
+++ b/arch/arm/mach-imx/clk-imx25.c
@@ -198,7 +198,7 @@ int __init mx25_clocks_init(void)
198 clk_register_clkdev(clk[ipg], "ipg", "fsl-usb2-udc"); 198 clk_register_clkdev(clk[ipg], "ipg", "fsl-usb2-udc");
199 clk_register_clkdev(clk[usbotg_ahb], "ahb", "fsl-usb2-udc"); 199 clk_register_clkdev(clk[usbotg_ahb], "ahb", "fsl-usb2-udc");
200 clk_register_clkdev(clk[usb_div], "per", "fsl-usb2-udc"); 200 clk_register_clkdev(clk[usb_div], "per", "fsl-usb2-udc");
201 clk_register_clkdev(clk[nfc_ipg_per], NULL, "mxc_nand.0"); 201 clk_register_clkdev(clk[nfc_ipg_per], NULL, "imx25-nand.0");
202 /* i.mx25 has the i.mx35 type cspi */ 202 /* i.mx25 has the i.mx35 type cspi */
203 clk_register_clkdev(clk[cspi1_ipg], NULL, "imx35-cspi.0"); 203 clk_register_clkdev(clk[cspi1_ipg], NULL, "imx35-cspi.0");
204 clk_register_clkdev(clk[cspi2_ipg], NULL, "imx35-cspi.1"); 204 clk_register_clkdev(clk[cspi2_ipg], NULL, "imx35-cspi.1");
diff --git a/arch/arm/mach-imx/clk-imx27.c b/arch/arm/mach-imx/clk-imx27.c
index c2f111f42ddb..100e38c48f9f 100644
--- a/arch/arm/mach-imx/clk-imx27.c
+++ b/arch/arm/mach-imx/clk-imx27.c
@@ -239,7 +239,7 @@ int __init mx27_clocks_init(unsigned long fref)
239 clk_register_clkdev(clk[usb_ahb_gate], "ahb", "mxc-ehci.2"); 239 clk_register_clkdev(clk[usb_ahb_gate], "ahb", "mxc-ehci.2");
240 clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "imx-ssi.0"); 240 clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "imx-ssi.0");
241 clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1"); 241 clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1");
242 clk_register_clkdev(clk[nfc_baud_gate], NULL, "mxc_nand.0"); 242 clk_register_clkdev(clk[nfc_baud_gate], NULL, "imx27-nand.0");
243 clk_register_clkdev(clk[vpu_baud_gate], "per", "coda-imx27.0"); 243 clk_register_clkdev(clk[vpu_baud_gate], "per", "coda-imx27.0");
244 clk_register_clkdev(clk[vpu_ahb_gate], "ahb", "coda-imx27.0"); 244 clk_register_clkdev(clk[vpu_ahb_gate], "ahb", "coda-imx27.0");
245 clk_register_clkdev(clk[dma_ahb_gate], "ahb", "imx-dma"); 245 clk_register_clkdev(clk[dma_ahb_gate], "ahb", "imx-dma");
diff --git a/arch/arm/mach-imx/clk-imx31.c b/arch/arm/mach-imx/clk-imx31.c
index 76e6462cf9ae..729d1a9dbf6a 100644
--- a/arch/arm/mach-imx/clk-imx31.c
+++ b/arch/arm/mach-imx/clk-imx31.c
@@ -127,7 +127,7 @@ int __init mx31_clocks_init(unsigned long fref)
127 clk_register_clkdev(clk[rtc_gate], NULL, "mxc_rtc"); 127 clk_register_clkdev(clk[rtc_gate], NULL, "mxc_rtc");
128 clk_register_clkdev(clk[epit1_gate], "epit", NULL); 128 clk_register_clkdev(clk[epit1_gate], "epit", NULL);
129 clk_register_clkdev(clk[epit2_gate], "epit", NULL); 129 clk_register_clkdev(clk[epit2_gate], "epit", NULL);
130 clk_register_clkdev(clk[nfc], NULL, "mxc_nand.0"); 130 clk_register_clkdev(clk[nfc], NULL, "imx27-nand.0");
131 clk_register_clkdev(clk[ipu_gate], NULL, "ipu-core"); 131 clk_register_clkdev(clk[ipu_gate], NULL, "ipu-core");
132 clk_register_clkdev(clk[ipu_gate], NULL, "mx3_sdc_fb"); 132 clk_register_clkdev(clk[ipu_gate], NULL, "mx3_sdc_fb");
133 clk_register_clkdev(clk[kpp_gate], NULL, "imx-keypad"); 133 clk_register_clkdev(clk[kpp_gate], NULL, "imx-keypad");
diff --git a/arch/arm/mach-imx/clk-imx35.c b/arch/arm/mach-imx/clk-imx35.c
index ee2581254fbc..fec48e656efa 100644
--- a/arch/arm/mach-imx/clk-imx35.c
+++ b/arch/arm/mach-imx/clk-imx35.c
@@ -256,7 +256,7 @@ int __init mx35_clocks_init()
256 clk_register_clkdev(clk[ipg], "ipg", "fsl-usb2-udc"); 256 clk_register_clkdev(clk[ipg], "ipg", "fsl-usb2-udc");
257 clk_register_clkdev(clk[usbotg_gate], "ahb", "fsl-usb2-udc"); 257 clk_register_clkdev(clk[usbotg_gate], "ahb", "fsl-usb2-udc");
258 clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0"); 258 clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0");
259 clk_register_clkdev(clk[nfc_div], NULL, "mxc_nand.0"); 259 clk_register_clkdev(clk[nfc_div], NULL, "imx25-nand.0");
260 clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0"); 260 clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0");
261 261
262 clk_prepare_enable(clk[spba_gate]); 262 clk_prepare_enable(clk[spba_gate]);
diff --git a/arch/arm/mach-imx/clk-imx51-imx53.c b/arch/arm/mach-imx/clk-imx51-imx53.c
index 2449d8ff4a18..4836b4d39a07 100644
--- a/arch/arm/mach-imx/clk-imx51-imx53.c
+++ b/arch/arm/mach-imx/clk-imx51-imx53.c
@@ -272,7 +272,7 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil,
272 clk_register_clkdev(clk[usboh3_per_gate], "per", "fsl-usb2-udc"); 272 clk_register_clkdev(clk[usboh3_per_gate], "per", "fsl-usb2-udc");
273 clk_register_clkdev(clk[usboh3_gate], "ipg", "fsl-usb2-udc"); 273 clk_register_clkdev(clk[usboh3_gate], "ipg", "fsl-usb2-udc");
274 clk_register_clkdev(clk[usboh3_gate], "ahb", "fsl-usb2-udc"); 274 clk_register_clkdev(clk[usboh3_gate], "ahb", "fsl-usb2-udc");
275 clk_register_clkdev(clk[nfc_gate], NULL, "mxc_nand"); 275 clk_register_clkdev(clk[nfc_gate], NULL, "imx51-nand");
276 clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "imx-ssi.0"); 276 clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "imx-ssi.0");
277 clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1"); 277 clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1");
278 clk_register_clkdev(clk[ssi3_ipg_gate], NULL, "imx-ssi.2"); 278 clk_register_clkdev(clk[ssi3_ipg_gate], NULL, "imx-ssi.2");
diff --git a/arch/arm/mach-imx/devices/devices-common.h b/arch/arm/mach-imx/devices/devices-common.h
index 86bf34cd4865..30a842ffc553 100644
--- a/arch/arm/mach-imx/devices/devices-common.h
+++ b/arch/arm/mach-imx/devices/devices-common.h
@@ -257,6 +257,7 @@ struct platform_device *__init imx_add_mxc_mmc(
257 257
258#include <linux/platform_data/mtd-mxc_nand.h> 258#include <linux/platform_data/mtd-mxc_nand.h>
259struct imx_mxc_nand_data { 259struct imx_mxc_nand_data {
260 const char *devid;
260 /* 261 /*
261 * id is traditionally 0, but -1 is more appropriate. We use -1 for new 262 * id is traditionally 0, but -1 is more appropriate. We use -1 for new
262 * machines but don't change existing devices as the nand device usually 263 * machines but don't change existing devices as the nand device usually
diff --git a/arch/arm/mach-imx/devices/platform-mxc_nand.c b/arch/arm/mach-imx/devices/platform-mxc_nand.c
index 54b1d02cc27b..24aaad1a58c9 100644
--- a/arch/arm/mach-imx/devices/platform-mxc_nand.c
+++ b/arch/arm/mach-imx/devices/platform-mxc_nand.c
@@ -10,15 +10,17 @@
10#include <mach/hardware.h> 10#include <mach/hardware.h>
11#include "devices-common.h" 11#include "devices-common.h"
12 12
13#define imx_mxc_nand_data_entry_single(soc, _size) \ 13#define imx_mxc_nand_data_entry_single(soc, _devid, _size) \
14 { \ 14 { \
15 .devid = _devid, \
15 .iobase = soc ## _NFC_BASE_ADDR, \ 16 .iobase = soc ## _NFC_BASE_ADDR, \
16 .iosize = _size, \ 17 .iosize = _size, \
17 .irq = soc ## _INT_NFC \ 18 .irq = soc ## _INT_NFC \
18 } 19 }
19 20
20#define imx_mxc_nandv3_data_entry_single(soc, _size) \ 21#define imx_mxc_nandv3_data_entry_single(soc, _devid, _size) \
21 { \ 22 { \
23 .devid = _devid, \
22 .id = -1, \ 24 .id = -1, \
23 .iobase = soc ## _NFC_BASE_ADDR, \ 25 .iobase = soc ## _NFC_BASE_ADDR, \
24 .iosize = _size, \ 26 .iosize = _size, \
@@ -28,32 +30,32 @@
28 30
29#ifdef CONFIG_SOC_IMX21 31#ifdef CONFIG_SOC_IMX21
30const struct imx_mxc_nand_data imx21_mxc_nand_data __initconst = 32const struct imx_mxc_nand_data imx21_mxc_nand_data __initconst =
31 imx_mxc_nand_data_entry_single(MX21, SZ_4K); 33 imx_mxc_nand_data_entry_single(MX21, "imx21-nand", SZ_4K);
32#endif /* ifdef CONFIG_SOC_IMX21 */ 34#endif /* ifdef CONFIG_SOC_IMX21 */
33 35
34#ifdef CONFIG_SOC_IMX25 36#ifdef CONFIG_SOC_IMX25
35const struct imx_mxc_nand_data imx25_mxc_nand_data __initconst = 37const struct imx_mxc_nand_data imx25_mxc_nand_data __initconst =
36 imx_mxc_nand_data_entry_single(MX25, SZ_8K); 38 imx_mxc_nand_data_entry_single(MX25, "imx25-nand", SZ_8K);
37#endif /* ifdef CONFIG_SOC_IMX25 */ 39#endif /* ifdef CONFIG_SOC_IMX25 */
38 40
39#ifdef CONFIG_SOC_IMX27 41#ifdef CONFIG_SOC_IMX27
40const struct imx_mxc_nand_data imx27_mxc_nand_data __initconst = 42const struct imx_mxc_nand_data imx27_mxc_nand_data __initconst =
41 imx_mxc_nand_data_entry_single(MX27, SZ_4K); 43 imx_mxc_nand_data_entry_single(MX27, "imx27-nand", SZ_4K);
42#endif /* ifdef CONFIG_SOC_IMX27 */ 44#endif /* ifdef CONFIG_SOC_IMX27 */
43 45
44#ifdef CONFIG_SOC_IMX31 46#ifdef CONFIG_SOC_IMX31
45const struct imx_mxc_nand_data imx31_mxc_nand_data __initconst = 47const struct imx_mxc_nand_data imx31_mxc_nand_data __initconst =
46 imx_mxc_nand_data_entry_single(MX31, SZ_4K); 48 imx_mxc_nand_data_entry_single(MX31, "imx27-nand", SZ_4K);
47#endif 49#endif
48 50
49#ifdef CONFIG_SOC_IMX35 51#ifdef CONFIG_SOC_IMX35
50const struct imx_mxc_nand_data imx35_mxc_nand_data __initconst = 52const struct imx_mxc_nand_data imx35_mxc_nand_data __initconst =
51 imx_mxc_nand_data_entry_single(MX35, SZ_8K); 53 imx_mxc_nand_data_entry_single(MX35, "imx25-nand", SZ_8K);
52#endif 54#endif
53 55
54#ifdef CONFIG_SOC_IMX51 56#ifdef CONFIG_SOC_IMX51
55const struct imx_mxc_nand_data imx51_mxc_nand_data __initconst = 57const struct imx_mxc_nand_data imx51_mxc_nand_data __initconst =
56 imx_mxc_nandv3_data_entry_single(MX51, SZ_16K); 58 imx_mxc_nandv3_data_entry_single(MX51, "imx51-nand", SZ_16K);
57#endif 59#endif
58 60
59struct platform_device *__init imx_add_mxc_nand( 61struct platform_device *__init imx_add_mxc_nand(
@@ -76,7 +78,7 @@ struct platform_device *__init imx_add_mxc_nand(
76 .flags = IORESOURCE_MEM, 78 .flags = IORESOURCE_MEM,
77 }, 79 },
78 }; 80 };
79 return imx_add_platform_device("mxc_nand", data->id, 81 return imx_add_platform_device(data->devid, data->id,
80 res, ARRAY_SIZE(res) - !data->axibase, 82 res, ARRAY_SIZE(res) - !data->axibase,
81 pdata, sizeof(*pdata)); 83 pdata, sizeof(*pdata));
82} 84}
diff --git a/arch/arm/mach-imx/imx27-dt.c b/arch/arm/mach-imx/imx27-dt.c
index 43fbf8640109..a6c288e180ce 100644
--- a/arch/arm/mach-imx/imx27-dt.c
+++ b/arch/arm/mach-imx/imx27-dt.c
@@ -29,7 +29,7 @@ static const struct of_dev_auxdata imx27_auxdata_lookup[] __initconst = {
29 OF_DEV_AUXDATA("fsl,imx27-cspi", MX27_CSPI2_BASE_ADDR, "imx27-cspi.1", NULL), 29 OF_DEV_AUXDATA("fsl,imx27-cspi", MX27_CSPI2_BASE_ADDR, "imx27-cspi.1", NULL),
30 OF_DEV_AUXDATA("fsl,imx27-cspi", MX27_CSPI3_BASE_ADDR, "imx27-cspi.2", NULL), 30 OF_DEV_AUXDATA("fsl,imx27-cspi", MX27_CSPI3_BASE_ADDR, "imx27-cspi.2", NULL),
31 OF_DEV_AUXDATA("fsl,imx27-wdt", MX27_WDOG_BASE_ADDR, "imx2-wdt.0", NULL), 31 OF_DEV_AUXDATA("fsl,imx27-wdt", MX27_WDOG_BASE_ADDR, "imx2-wdt.0", NULL),
32 OF_DEV_AUXDATA("fsl,imx27-nand", MX27_NFC_BASE_ADDR, "mxc_nand.0", NULL), 32 OF_DEV_AUXDATA("fsl,imx27-nand", MX27_NFC_BASE_ADDR, "imx27-nand.0", NULL),
33 { /* sentinel */ } 33 { /* sentinel */ }
34}; 34};
35 35
diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c
index 72e31d86030d..022dcdc256fb 100644
--- a/drivers/mtd/nand/mxc_nand.c
+++ b/drivers/mtd/nand/mxc_nand.c
@@ -37,15 +37,9 @@
37 37
38#include <asm/mach/flash.h> 38#include <asm/mach/flash.h>
39#include <linux/platform_data/mtd-mxc_nand.h> 39#include <linux/platform_data/mtd-mxc_nand.h>
40#include <mach/hardware.h>
41 40
42#define DRIVER_NAME "mxc_nand" 41#define DRIVER_NAME "mxc_nand"
43 42
44#define nfc_is_v21() (cpu_is_mx25() || cpu_is_mx35())
45#define nfc_is_v1() (cpu_is_mx31() || cpu_is_mx27() || cpu_is_mx21())
46#define nfc_is_v3_2a() cpu_is_mx51()
47#define nfc_is_v3_2b() cpu_is_mx53()
48
49/* Addresses for NFC registers */ 43/* Addresses for NFC registers */
50#define NFC_V1_V2_BUF_SIZE (host->regs + 0x00) 44#define NFC_V1_V2_BUF_SIZE (host->regs + 0x00)
51#define NFC_V1_V2_BUF_ADDR (host->regs + 0x04) 45#define NFC_V1_V2_BUF_ADDR (host->regs + 0x04)
@@ -1283,6 +1277,53 @@ static const struct mxc_nand_devtype_data imx53_nand_devtype_data = {
1283 .ppb_shift = 8, 1277 .ppb_shift = 8,
1284}; 1278};
1285 1279
1280static inline int is_imx21_nfc(struct mxc_nand_host *host)
1281{
1282 return host->devtype_data == &imx21_nand_devtype_data;
1283}
1284
1285static inline int is_imx27_nfc(struct mxc_nand_host *host)
1286{
1287 return host->devtype_data == &imx27_nand_devtype_data;
1288}
1289
1290static inline int is_imx25_nfc(struct mxc_nand_host *host)
1291{
1292 return host->devtype_data == &imx25_nand_devtype_data;
1293}
1294
1295static inline int is_imx51_nfc(struct mxc_nand_host *host)
1296{
1297 return host->devtype_data == &imx51_nand_devtype_data;
1298}
1299
1300static inline int is_imx53_nfc(struct mxc_nand_host *host)
1301{
1302 return host->devtype_data == &imx53_nand_devtype_data;
1303}
1304
1305static struct platform_device_id mxcnd_devtype[] = {
1306 {
1307 .name = "imx21-nand",
1308 .driver_data = (kernel_ulong_t) &imx21_nand_devtype_data,
1309 }, {
1310 .name = "imx27-nand",
1311 .driver_data = (kernel_ulong_t) &imx27_nand_devtype_data,
1312 }, {
1313 .name = "imx25-nand",
1314 .driver_data = (kernel_ulong_t) &imx25_nand_devtype_data,
1315 }, {
1316 .name = "imx51-nand",
1317 .driver_data = (kernel_ulong_t) &imx51_nand_devtype_data,
1318 }, {
1319 .name = "imx53-nand",
1320 .driver_data = (kernel_ulong_t) &imx53_nand_devtype_data,
1321 }, {
1322 /* sentinel */
1323 }
1324};
1325MODULE_DEVICE_TABLE(platform, mxcnd_devtype);
1326
1286#ifdef CONFIG_OF_MTD 1327#ifdef CONFIG_OF_MTD
1287static const struct of_device_id mxcnd_dt_ids[] = { 1328static const struct of_device_id mxcnd_dt_ids[] = {
1288 { 1329 {
@@ -1337,32 +1378,6 @@ static int __init mxcnd_probe_dt(struct mxc_nand_host *host)
1337} 1378}
1338#endif 1379#endif
1339 1380
1340static int __init mxcnd_probe_pdata(struct mxc_nand_host *host)
1341{
1342 struct mxc_nand_platform_data *pdata = host->dev->platform_data;
1343
1344 if (!pdata)
1345 return -ENODEV;
1346
1347 host->pdata = *pdata;
1348
1349 if (nfc_is_v1()) {
1350 if (cpu_is_mx21())
1351 host->devtype_data = &imx21_nand_devtype_data;
1352 else
1353 host->devtype_data = &imx27_nand_devtype_data;
1354 } else if (nfc_is_v21()) {
1355 host->devtype_data = &imx25_nand_devtype_data;
1356 } else if (nfc_is_v3_2a()) {
1357 host->devtype_data = &imx51_nand_devtype_data;
1358 } else if (nfc_is_v3_2b()) {
1359 host->devtype_data = &imx53_nand_devtype_data;
1360 } else
1361 BUG();
1362
1363 return 0;
1364}
1365
1366static int __devinit mxcnd_probe(struct platform_device *pdev) 1381static int __devinit mxcnd_probe(struct platform_device *pdev)
1367{ 1382{
1368 struct nand_chip *this; 1383 struct nand_chip *this;
@@ -1404,8 +1419,16 @@ static int __devinit mxcnd_probe(struct platform_device *pdev)
1404 return PTR_ERR(host->clk); 1419 return PTR_ERR(host->clk);
1405 1420
1406 err = mxcnd_probe_dt(host); 1421 err = mxcnd_probe_dt(host);
1407 if (err > 0) 1422 if (err > 0) {
1408 err = mxcnd_probe_pdata(host); 1423 struct mxc_nand_platform_data *pdata = pdev->dev.platform_data;
1424 if (pdata) {
1425 host->pdata = *pdata;
1426 host->devtype_data = (struct mxc_nand_devtype_data *)
1427 pdev->id_entry->driver_data;
1428 } else {
1429 err = -ENODEV;
1430 }
1431 }
1409 if (err < 0) 1432 if (err < 0)
1410 return err; 1433 return err;
1411 1434
@@ -1494,7 +1517,7 @@ static int __devinit mxcnd_probe(struct platform_device *pdev)
1494 } 1517 }
1495 1518
1496 /* first scan to find the device and get the page size */ 1519 /* first scan to find the device and get the page size */
1497 if (nand_scan_ident(mtd, nfc_is_v21() ? 4 : 1, NULL)) { 1520 if (nand_scan_ident(mtd, is_imx25_nfc(host) ? 4 : 1, NULL)) {
1498 err = -ENXIO; 1521 err = -ENXIO;
1499 goto escan; 1522 goto escan;
1500 } 1523 }
@@ -1508,7 +1531,7 @@ static int __devinit mxcnd_probe(struct platform_device *pdev)
1508 this->ecc.layout = host->devtype_data->ecclayout_4k; 1531 this->ecc.layout = host->devtype_data->ecclayout_4k;
1509 1532
1510 if (this->ecc.mode == NAND_ECC_HW) { 1533 if (this->ecc.mode == NAND_ECC_HW) {
1511 if (nfc_is_v1()) 1534 if (is_imx21_nfc(host) || is_imx27_nfc(host))
1512 this->ecc.strength = 1; 1535 this->ecc.strength = 1;
1513 else 1536 else
1514 this->ecc.strength = (host->eccsize == 4) ? 4 : 8; 1537 this->ecc.strength = (host->eccsize == 4) ? 4 : 8;
@@ -1555,6 +1578,7 @@ static struct platform_driver mxcnd_driver = {
1555 .owner = THIS_MODULE, 1578 .owner = THIS_MODULE,
1556 .of_match_table = of_match_ptr(mxcnd_dt_ids), 1579 .of_match_table = of_match_ptr(mxcnd_dt_ids),
1557 }, 1580 },
1581 .id_table = mxcnd_devtype,
1558 .probe = mxcnd_probe, 1582 .probe = mxcnd_probe,
1559 .remove = __devexit_p(mxcnd_remove), 1583 .remove = __devexit_p(mxcnd_remove),
1560}; 1584};