166384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König/* 266384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König * Copyright (C) 2009-2010 Pengutronix 366384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de> 466384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König * 566384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König * This program is free software; you can redistribute it and/or modify it under 666384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König * the terms of the GNU General Public License version 2 as published by the 766384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König * Free Software Foundation. 866384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König */ 966384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König#include <asm/sizes.h> 1000b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König#include <mach/hardware.h> 1166384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König#include <mach/devices-common.h> 1266384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König 1300b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König#define imx_mxc_nand_data_entry_single(soc, _size) \ 1400b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König { \ 1500b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König .iobase = soc ## _NFC_BASE_ADDR, \ 1600b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König .iosize = _size, \ 1700b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König .irq = soc ## _INT_NFC \ 1800b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König } 1900b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König 2063a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer#define imx_mxc_nandv3_data_entry_single(soc, _size) \ 2163a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer { \ 2263a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer .id = -1, \ 2363a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer .iobase = soc ## _NFC_BASE_ADDR, \ 2463a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer .iosize = _size, \ 2563a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer .axibase = soc ## _NFC_AXI_BASE_ADDR, \ 2663a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer .irq = soc ## _INT_NFC \ 2763a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer } 2863a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer 2900b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König#ifdef CONFIG_SOC_IMX21 3000b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-Königconst struct imx_mxc_nand_data imx21_mxc_nand_data __initconst = 3100b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König imx_mxc_nand_data_entry_single(MX21, SZ_4K); 3200b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX21 */ 3300b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König 34972cc48207450ce6aeed416ac176fe4d0482a4a3Uwe Kleine-König#ifdef CONFIG_SOC_IMX25 3500b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-Königconst struct imx_mxc_nand_data imx25_mxc_nand_data __initconst = 3600b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König imx_mxc_nand_data_entry_single(MX25, SZ_8K); 37972cc48207450ce6aeed416ac176fe4d0482a4a3Uwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX25 */ 3800b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König 3900b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König#ifdef CONFIG_SOC_IMX27 4000b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-Königconst struct imx_mxc_nand_data imx27_mxc_nand_data __initconst = 4100b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König imx_mxc_nand_data_entry_single(MX27, SZ_4K); 4200b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX27 */ 4300b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König 44a528bc87841d958bbd394abc9266aee9cdf45cb8Uwe Kleine-König#ifdef CONFIG_SOC_IMX31 4500b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-Königconst struct imx_mxc_nand_data imx31_mxc_nand_data __initconst = 4600b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König imx_mxc_nand_data_entry_single(MX31, SZ_4K); 4700b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König#endif 4800b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König 49a528bc87841d958bbd394abc9266aee9cdf45cb8Uwe Kleine-König#ifdef CONFIG_SOC_IMX35 5000b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-Königconst struct imx_mxc_nand_data imx35_mxc_nand_data __initconst = 5100b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König imx_mxc_nand_data_entry_single(MX35, SZ_8K); 5200b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König#endif 5300b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König 54d94ed1287e11f91e4f4096838179984b0206be5eFabio Estevam#ifdef CONFIG_SOC_IMX51 5563a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauerconst struct imx_mxc_nand_data imx51_mxc_nand_data __initconst = 5663a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer imx_mxc_nandv3_data_entry_single(MX51, SZ_16K); 5763a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer#endif 5863a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer 5900b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-Königstruct platform_device *__init imx_add_mxc_nand( 6000b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König const struct imx_mxc_nand_data *data, 6100b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König const struct mxc_nand_platform_data *pdata) 6266384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König{ 6363a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer /* AXI has to come first, that's how the mxc_nand driver expect it */ 6466384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König struct resource res[] = { 6566384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König { 6663a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer .start = data->axibase, 6763a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer .end = data->axibase + SZ_16K - 1, 6863a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer .flags = IORESOURCE_MEM, 6963a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer }, { 7000b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König .start = data->iobase, 7100b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König .end = data->iobase + data->iosize - 1, 7266384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König .flags = IORESOURCE_MEM, 7366384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König }, { 7400b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König .start = data->irq, 7500b57bf9786ca701508333112c8917d1e0860129Uwe Kleine-König .end = data->irq, 7666384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König .flags = IORESOURCE_IRQ, 7766384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König }, 7866384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König }; 7963a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer return imx_add_platform_device("mxc_nand", data->id, 8063a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer res + !data->axibase, 8163a7c6d7507ed6f4ea24a8ed008efa1bb22a2a97Sascha Hauer ARRAY_SIZE(res) - !data->axibase, 8266384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König pdata, sizeof(*pdata)); 8366384eedd900f2f6bb00e4f16c2cb770d6b0066bUwe Kleine-König} 84