71885b650a
The i.MX v3 nand controller (i.MX5) needs two memory resources. Traditionally we have the AXI resource first. For sorting in this driver into the devicetree it feels much more natural to have the IP resource first. This patch swaps the ordering of these two resources. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Acked-by: Shawn Guo <shawn.guo@linaro.org> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
83 lines
2.3 KiB
C
83 lines
2.3 KiB
C
/*
|
|
* Copyright (C) 2009-2010 Pengutronix
|
|
* Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it under
|
|
* the terms of the GNU General Public License version 2 as published by the
|
|
* Free Software Foundation.
|
|
*/
|
|
#include <asm/sizes.h>
|
|
#include <mach/hardware.h>
|
|
#include <mach/devices-common.h>
|
|
|
|
#define imx_mxc_nand_data_entry_single(soc, _size) \
|
|
{ \
|
|
.iobase = soc ## _NFC_BASE_ADDR, \
|
|
.iosize = _size, \
|
|
.irq = soc ## _INT_NFC \
|
|
}
|
|
|
|
#define imx_mxc_nandv3_data_entry_single(soc, _size) \
|
|
{ \
|
|
.id = -1, \
|
|
.iobase = soc ## _NFC_BASE_ADDR, \
|
|
.iosize = _size, \
|
|
.axibase = soc ## _NFC_AXI_BASE_ADDR, \
|
|
.irq = soc ## _INT_NFC \
|
|
}
|
|
|
|
#ifdef CONFIG_SOC_IMX21
|
|
const struct imx_mxc_nand_data imx21_mxc_nand_data __initconst =
|
|
imx_mxc_nand_data_entry_single(MX21, SZ_4K);
|
|
#endif /* ifdef CONFIG_SOC_IMX21 */
|
|
|
|
#ifdef CONFIG_SOC_IMX25
|
|
const struct imx_mxc_nand_data imx25_mxc_nand_data __initconst =
|
|
imx_mxc_nand_data_entry_single(MX25, SZ_8K);
|
|
#endif /* ifdef CONFIG_SOC_IMX25 */
|
|
|
|
#ifdef CONFIG_SOC_IMX27
|
|
const struct imx_mxc_nand_data imx27_mxc_nand_data __initconst =
|
|
imx_mxc_nand_data_entry_single(MX27, SZ_4K);
|
|
#endif /* ifdef CONFIG_SOC_IMX27 */
|
|
|
|
#ifdef CONFIG_SOC_IMX31
|
|
const struct imx_mxc_nand_data imx31_mxc_nand_data __initconst =
|
|
imx_mxc_nand_data_entry_single(MX31, SZ_4K);
|
|
#endif
|
|
|
|
#ifdef CONFIG_SOC_IMX35
|
|
const struct imx_mxc_nand_data imx35_mxc_nand_data __initconst =
|
|
imx_mxc_nand_data_entry_single(MX35, SZ_8K);
|
|
#endif
|
|
|
|
#ifdef CONFIG_SOC_IMX51
|
|
const struct imx_mxc_nand_data imx51_mxc_nand_data __initconst =
|
|
imx_mxc_nandv3_data_entry_single(MX51, SZ_16K);
|
|
#endif
|
|
|
|
struct platform_device *__init imx_add_mxc_nand(
|
|
const struct imx_mxc_nand_data *data,
|
|
const struct mxc_nand_platform_data *pdata)
|
|
{
|
|
/* AXI has to come first, that's how the mxc_nand driver expect it */
|
|
struct resource res[] = {
|
|
{
|
|
.start = data->iobase,
|
|
.end = data->iobase + data->iosize - 1,
|
|
.flags = IORESOURCE_MEM,
|
|
}, {
|
|
.start = data->irq,
|
|
.end = data->irq,
|
|
.flags = IORESOURCE_IRQ,
|
|
}, {
|
|
.start = data->axibase,
|
|
.end = data->axibase + SZ_16K - 1,
|
|
.flags = IORESOURCE_MEM,
|
|
},
|
|
};
|
|
return imx_add_platform_device("mxc_nand", data->id,
|
|
res, ARRAY_SIZE(res) - !data->axibase,
|
|
pdata, sizeof(*pdata));
|
|
}
|