1b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König/*
2b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König * Copyright (C) 2010 Pengutronix
3b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
4b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König *
5b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König * This program is free software; you can redistribute it and/or modify it under
6b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König * the terms of the GNU General Public License version 2 as published by the
7b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König * Free Software Foundation.
8b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König */
9b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König#include <mach/hardware.h>
10b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König#include <mach/devices-common.h>
11b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König
12b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König#define imx_mx2_camera_data_entry_single(soc)				\
13b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König	{								\
14b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König		.iobasecsi = soc ## _CSI_BASE_ADDR,			\
15bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-König		.iosizecsi = SZ_4K,					\
16bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-König		.irqcsi = soc ## _INT_CSI,				\
17bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-König	}
18bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-König#define imx_mx2_camera_data_entry_single_emma(soc)			\
19bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-König	{								\
20bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-König		.iobasecsi = soc ## _CSI_BASE_ADDR,			\
21b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König		.iosizecsi = SZ_32,					\
22b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König		.irqcsi = soc ## _INT_CSI,				\
23b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König		.iobaseemmaprp = soc ## _EMMAPRP_BASE_ADDR,		\
24b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König		.iosizeemmaprp = SZ_32,					\
25b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König		.irqemmaprp = soc ## _INT_EMMAPRP,			\
26b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König	}
27b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König
28bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-König#ifdef CONFIG_SOC_IMX25
29bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-Königconst struct imx_mx2_camera_data imx25_mx2_camera_data __initconst =
30bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-König	imx_mx2_camera_data_entry_single(MX25);
31bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX25 */
32bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-König
33b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König#ifdef CONFIG_SOC_IMX27
34b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-Königconst struct imx_mx2_camera_data imx27_mx2_camera_data __initconst =
35bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-König	imx_mx2_camera_data_entry_single_emma(MX27);
36b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX27 */
37b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König
38b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-Königstruct platform_device *__init imx_add_mx2_camera(
39b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König		const struct imx_mx2_camera_data *data,
40b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König		const struct mx2_camera_platform_data *pdata)
41b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König{
42b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König	struct resource res[] = {
43b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König		{
44b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König			.start = data->iobasecsi,
45b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König			.end = data->iobasecsi + data->iosizecsi - 1,
46b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König			.flags = IORESOURCE_MEM,
47b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König		}, {
48b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König			.start = data->irqcsi,
49b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König			.end = data->irqcsi,
50b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König			.flags = IORESOURCE_IRQ,
51b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König		}, {
52bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-König			.start = data->iobaseemmaprp,
53bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-König			.end = data->iobaseemmaprp + data->iosizeemmaprp - 1,
54bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-König			.flags = IORESOURCE_MEM,
55bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-König		}, {
56b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König			.start = data->irqemmaprp,
57b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König			.end = data->irqemmaprp,
58b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König			.flags = IORESOURCE_IRQ,
59b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König		},
60b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König	};
61b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König	return imx_add_platform_device_dmamask("mx2-camera", 0,
62bb4c853ff18fe3b0e2aec45053c318479e0c55e3Uwe Kleine-König			res, data->iobaseemmaprp ? 4 : 2,
63b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König			pdata, sizeof(*pdata), DMA_BIT_MASK(32));
64b2997cb12b302ee6d233808e32214d00afdcf128Uwe Kleine-König}
6552f1a845e25dc0c6435153aca1a170e20b282429Javier Martin
6652f1a845e25dc0c6435153aca1a170e20b282429Javier Martinstruct platform_device *__init imx_add_mx2_emmaprp(
6752f1a845e25dc0c6435153aca1a170e20b282429Javier Martin		const struct imx_mx2_camera_data *data)
6852f1a845e25dc0c6435153aca1a170e20b282429Javier Martin{
6952f1a845e25dc0c6435153aca1a170e20b282429Javier Martin	struct resource res[] = {
7052f1a845e25dc0c6435153aca1a170e20b282429Javier Martin		{
7152f1a845e25dc0c6435153aca1a170e20b282429Javier Martin			.start = data->iobaseemmaprp,
7252f1a845e25dc0c6435153aca1a170e20b282429Javier Martin			.end = data->iobaseemmaprp + data->iosizeemmaprp - 1,
7352f1a845e25dc0c6435153aca1a170e20b282429Javier Martin			.flags = IORESOURCE_MEM,
7452f1a845e25dc0c6435153aca1a170e20b282429Javier Martin		}, {
7552f1a845e25dc0c6435153aca1a170e20b282429Javier Martin			.start = data->irqemmaprp,
7652f1a845e25dc0c6435153aca1a170e20b282429Javier Martin			.end = data->irqemmaprp,
7752f1a845e25dc0c6435153aca1a170e20b282429Javier Martin			.flags = IORESOURCE_IRQ,
7852f1a845e25dc0c6435153aca1a170e20b282429Javier Martin		},
7952f1a845e25dc0c6435153aca1a170e20b282429Javier Martin	};
8052f1a845e25dc0c6435153aca1a170e20b282429Javier Martin	return imx_add_platform_device_dmamask("m2m-emmaprp", 0,
8152f1a845e25dc0c6435153aca1a170e20b282429Javier Martin			res, 2, NULL, 0, DMA_BIT_MASK(32));
8252f1a845e25dc0c6435153aca1a170e20b282429Javier Martin}
83