ARM: imx: dynamically allocate mx1-camera device
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Tue, 2 Nov 2010 10:59:08 +0000 (11:59 +0100)
committerUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Wed, 17 Nov 2010 09:01:22 +0000 (10:01 +0100)
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
arch/arm/mach-imx/devices.c
arch/arm/mach-imx/devices.h
arch/arm/plat-mxc/devices/Kconfig
arch/arm/plat-mxc/devices/Makefile
arch/arm/plat-mxc/devices/platform-mx1-camera.c [new file with mode: 0644]
arch/arm/plat-mxc/include/mach/devices-common.h
arch/arm/plat-mxc/include/mach/mx1.h

index fba628551dc9957db34292e682d651549d216da2..31c9d6c583a3d3c4d480827657dd94ea393b9b25 100644 (file)
 #include "devices.h"
 
 #if defined(CONFIG_ARCH_MX1)
-static struct resource imx1_camera_resources[] = {
-       {
-               .start  = 0x00224000,
-               .end    = 0x00224010,
-               .flags  = IORESOURCE_MEM,
-       }, {
-               .start  = MX1_CSI_INT,
-               .end    = MX1_CSI_INT,
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static u64 imx1_camera_dmamask = DMA_BIT_MASK(32);
-
-struct platform_device imx1_camera_device = {
-       .name           = "mx1-camera",
-       .id             = 0, /* This is used to put cameras on this interface */
-       .dev            = {
-               .dma_mask = &imx1_camera_dmamask,
-               .coherent_dma_mask = DMA_BIT_MASK(32),
-       },
-       .resource       = imx1_camera_resources,
-       .num_resources  = ARRAY_SIZE(imx1_camera_resources),
-};
-
 /* GPIO port description */
 static struct mxc_gpio_port imx_gpio_ports[] = {
        {
index 91906ce21c40654bb940dff4d377dfac5aeedbd6..8f14452c7d236e190ad3c0e8b9b9b4a2c0281aa9 100644 (file)
@@ -1,7 +1,3 @@
-#ifdef CONFIG_ARCH_MX1
-extern struct platform_device imx1_camera_device;
-#endif
-
 #if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27)
 extern struct platform_device mxc_wdt;
 extern struct platform_device mxc_fb_device;
index 2703f5a05ce5bd14148b673ba8c74bccc8ace49b..61a3e25cada62ddc4b27b9e035477310dc563f44 100644 (file)
@@ -25,6 +25,9 @@ config IMX_HAVE_PLATFORM_IMX_UART
 config IMX_HAVE_PLATFORM_IMX_UDC
        bool
 
+config IMX_HAVE_PLATFORM_MX1_CAMERA
+       bool
+
 config IMX_HAVE_PLATFORM_MXC_NAND
        bool
 
index 7c3eaf146f8b8dae69ac4d2f644e6a29f97e7a36..86b47f2b610efb8d42289ffbf280dcd7473077a8 100644 (file)
@@ -7,6 +7,7 @@ obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_I2C) += platform-imx-i2c.o
 obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_SSI) += platform-imx-ssi.o
 obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_UART) += platform-imx-uart.o
 obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_UDC) += platform-imx_udc.o
+obj-$(CONFIG_IMX_HAVE_PLATFORM_MX1_CAMERA) += platform-mx1-camera.o
 obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_NAND) += platform-mxc_nand.o
 obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_W1) += platform-mxc_w1.o
 obj-$(CONFIG_IMX_HAVE_PLATFORM_SPI_IMX) +=  platform-spi_imx.o
diff --git a/arch/arm/plat-mxc/devices/platform-mx1-camera.c b/arch/arm/plat-mxc/devices/platform-mx1-camera.c
new file mode 100644 (file)
index 0000000..edcc581
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 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 <mach/hardware.h>
+#include <mach/devices-common.h>
+
+#define imx_mx1_camera_data_entry_single(soc, _size)                   \
+       {                                                               \
+               .iobase = soc ## _CSI ## _BASE_ADDR,                    \
+               .iosize = _size,                                        \
+               .irq = soc ## _INT_CSI,                                 \
+       }
+
+#ifdef CONFIG_SOC_IMX1
+const struct imx_mx1_camera_data imx1_mx1_camera_data __initconst =
+       imx_mx1_camera_data_entry_single(MX1, 10);
+#endif /* ifdef CONFIG_SOC_IMX1 */
+
+struct platform_device *__init imx_add_mx1_camera(
+               const struct imx_mx1_camera_data *data,
+               const struct mx1_camera_pdata *pdata)
+{
+       struct resource res[] = {
+               {
+                       .start = data->iobase,
+                       .end = data->iobase + data->iosize - 1,
+                       .flags = IORESOURCE_MEM,
+               }, {
+                       .start = data->irq,
+                       .end = data->irq,
+                       .flags = IORESOURCE_IRQ,
+               },
+       };
+       return imx_add_platform_device_dmamask("mx1-camera", 0,
+                       res, ARRAY_SIZE(res),
+                       pdata, sizeof(*pdata), DMA_BIT_MASK(32));
+}
index a5e97b8b3b793f0f4f49612950f453f839eaa509..ab0500a7b5e73e99b410358bba6906a1a152c243 100644 (file)
@@ -108,6 +108,16 @@ struct platform_device *__init imx_add_imx_udc(
                const struct imx_imx_udc_data *data,
                const struct imxusb_platform_data *pdata);
 
+#include <mach/mx1_camera.h>
+struct imx_mx1_camera_data {
+       resource_size_t iobase;
+       resource_size_t iosize;
+       resource_size_t irq;
+};
+struct platform_device *__init imx_add_mx1_camera(
+               const struct imx_mx1_camera_data *data,
+               const struct mx1_camera_pdata *pdata);
+
 #include <mach/mxc_nand.h>
 struct imx_mxc_nand_data {
        /*
index 2cd3fcd1e0cf063de58f270a36053ff7cf5ffaa1..f1e336ebcb2e688f5a80535a29b3a8426e33ac87 100644 (file)
@@ -77,7 +77,7 @@
 
 /* fixed interrput numbers */
 #define MX1_INT_SOFTINT                0
-#define MX1_CSI_INT            6
+#define MX1_INT_CSI            6
 #define MX1_DSPA_MAC_INT       7
 #define MX1_DSPA_INT           8
 #define MX1_COMP_INT           9