ARM: mx25: dynamically allocate imxdi_rtc devices
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Thu, 11 Nov 2010 10:57:21 +0000 (11:57 +0100)
committerUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Wed, 17 Nov 2010 09:01:40 +0000 (10:01 +0100)
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
arch/arm/mach-mx25/Kconfig
arch/arm/mach-mx25/devices-imx25.h
arch/arm/mach-mx25/devices.c
arch/arm/mach-mx25/devices.h
arch/arm/mach-mx25/mach-cpuimx25.c
arch/arm/mach-mx25/mach-mx25_3ds.c
arch/arm/plat-mxc/devices/Kconfig
arch/arm/plat-mxc/devices/Makefile
arch/arm/plat-mxc/devices/platform-imxdi_rtc.c [new file with mode: 0644]
arch/arm/plat-mxc/include/mach/devices-common.h

index e9d445649d4d5d2b9c68f471f103d26174bac2a2..baa75fecf2ffbde5b9b27e697879358ce4db77a8 100644 (file)
@@ -5,6 +5,7 @@ comment "MX25 platforms:"
 config MACH_MX25_3DS
        bool "Support MX25PDK (3DS) Platform"
        select IMX_HAVE_PLATFORM_ESDHC
+       select IMX_HAVE_PLATFORM_IMXDI_RTC
        select IMX_HAVE_PLATFORM_IMX_KEYPAD
        select IMX_HAVE_PLATFORM_IMX_UART
        select IMX_HAVE_PLATFORM_MXC_EHCI
@@ -15,6 +16,7 @@ config MACH_EUKREA_CPUIMX25
        select IMX_HAVE_PLATFORM_ESDHC
        select IMX_HAVE_PLATFORM_FLEXCAN
        select IMX_HAVE_PLATFORM_FSL_USB2_UDC
+       select IMX_HAVE_PLATFORM_IMXDI_RTC
        select IMX_HAVE_PLATFORM_IMX_I2C
        select IMX_HAVE_PLATFORM_IMX_UART
        select IMX_HAVE_PLATFORM_MXC_EHCI
index a35123fef39ff48dc357b92a593782a6338e696e..a4980ecd3941dfa4a43d46773f4766581fbd761a 100644 (file)
@@ -23,6 +23,10 @@ extern const struct imx_fsl_usb2_udc_data imx25_fsl_usb2_udc_data __initconst;
 #define imx25_add_fsl_usb2_udc(pdata)  \
        imx_add_fsl_usb2_udc(&imx25_fsl_usb2_udc_data, pdata)
 
+extern struct imx_imxdi_rtc_data imx25_imxdi_rtc_data __initconst;
+#define imx25_add_imxdi_rtc(pdata)     \
+       imx_add_imxdi_rtc(&imx25_imxdi_rtc_data)
+
 extern const struct imx_imx_i2c_data imx25_imx_i2c_data[] __initconst;
 #define imx25_add_imx_i2c(id, pdata)   \
        imx_add_imx_i2c(&imx25_imx_i2c_data[id], pdata)
index 052adbbb3de638d266c7a53ad142412cd1827fa3..12743969222d53063a16c682c7ee6cecf96d4672 100644 (file)
 #include <mach/mx25.h>
 #include <mach/irqs.h>
 
-static struct resource mx25_rtc_resources[] = {
-       {
-               .start  = MX25_DRYICE_BASE_ADDR,
-               .end    = MX25_DRYICE_BASE_ADDR + 0x40,
-               .flags  = IORESOURCE_MEM,
-       },
-       {
-               .start  = MX25_INT_DRYICE,
-               .flags  = IORESOURCE_IRQ
-       },
-};
-
-struct platform_device mx25_rtc_device = {
-       .name   = "imxdi_rtc",
-       .id     = 0,
-       .num_resources  = ARRAY_SIZE(mx25_rtc_resources),
-       .resource       = mx25_rtc_resources,
-};
-
 static struct resource mx25_fb_resources[] = {
        {
                .start  = MX25_LCDC_BASE_ADDR,
index dd1fdeddb83b00f2d0467991a1100b39eb5830d5..f37f9a2d8ee0379e626ec090148ad9a0da5b0d26 100644 (file)
@@ -1,4 +1,3 @@
-extern struct platform_device mx25_rtc_device;
 extern struct platform_device mx25_fb_device;
 extern struct platform_device mxc_wdt;
 extern struct platform_device mx25_csi_device;
index 2094bddb3e47681740bff4d27b279a9b13b43134..d1a04bafb432830bff27441a2decb734acfd48bd 100644 (file)
@@ -124,7 +124,7 @@ static void __init eukrea_cpuimx25_init(void)
 
        imx25_add_imx_uart0(&uart_pdata);
        imx25_add_mxc_nand(&eukrea_cpuimx25_nand_board_info);
-       mxc_register_device(&mx25_rtc_device, NULL);
+       imx25_add_imxdi_rtc(NULL);
        imx25_add_fec(&mx25_fec_pdata);
 
        i2c_register_board_info(0, eukrea_cpuimx25_i2c_devices,
index 1d07cfbd8ff602fd1e86e1d4c32404bc270b5791..0566d3cb10cd5fc295c430bb0027fbce82d2a57b 100644 (file)
@@ -194,7 +194,7 @@ static void __init mx25pdk_init(void)
        imx25_add_imx_uart0(&uart_pdata);
        imx25_add_mxc_ehci_hs(NULL);
        imx25_add_mxc_nand(&mx25pdk_nand_board_info);
-       mxc_register_device(&mx25_rtc_device, NULL);
+       imx25_add_imxdi_rtc(NULL);
        mxc_register_device(&mx25_fb_device, &mx25pdk_fb_pdata);
        mxc_register_device(&mxc_wdt, NULL);
 
index a0be2df71a08b706efa55814df6726de03b0be92..81d7a54569207c72f2feed1960f2dc0913ce5aae 100644 (file)
@@ -22,6 +22,9 @@ config IMX_HAVE_PLATFORM_IMX21_HCD
 config IMX_HAVE_PLATFORM_IMX2_WDT
        bool
 
+config IMX_HAVE_PLATFORM_IMXDI_RTC
+       bool
+
 config IMX_HAVE_PLATFORM_IMX_FB
        bool
 
index 14b228e9d58a6e0d03a60bd1e904ebaa2ad1f6b3..f1c3767d29d1fcb1ad93a9788b56739c4659bfb5 100644 (file)
@@ -5,6 +5,7 @@ obj-$(CONFIG_IMX_HAVE_PLATFORM_FSL_USB2_UDC) += platform-fsl-usb2-udc.o
 obj-$(CONFIG_IMX_HAVE_PLATFORM_GPIO_KEYS) += platform-gpio_keys.o
 obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX21_HCD) += platform-imx21-hcd.o
 obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX2_WDT) += platform-imx2-wdt.o
+obj-$(CONFIG_IMX_HAVE_PLATFORM_IMXDI_RTC) += platform-imxdi_rtc.o
 obj-y += platform-imx-dma.o
 obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_FB) += platform-imx-fb.o
 obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_I2C) += platform-imx-i2c.o
diff --git a/arch/arm/plat-mxc/devices/platform-imxdi_rtc.c b/arch/arm/plat-mxc/devices/platform-imxdi_rtc.c
new file mode 100644 (file)
index 0000000..387f650
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * 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 <asm/sizes.h>
+#include <mach/hardware.h>
+#include <mach/devices-common.h>
+
+#define imx_imxdi_rtc_data_entry_single(soc)                           \
+       {                                                               \
+               .iobase = soc ## _DRYICE_BASE_ADDR,                     \
+               .irq = soc ## _INT_DRYICE,                              \
+       }
+
+#ifdef CONFIG_ARCH_MX25
+const struct imx_imxdi_rtc_data imx25_imxdi_rtc_data __initconst =
+       imx_imxdi_rtc_data_entry_single(MX25);
+#endif /* ifdef CONFIG_ARCH_MX25 */
+
+struct platform_device *__init imx_add_imxdi_rtc(
+               const struct imx_imxdi_rtc_data *data)
+{
+       struct resource res[] = {
+               {
+                       .start = data->iobase,
+                       .end = data->iobase + SZ_16K,
+                       .flags = IORESOURCE_MEM,
+               }, {
+                       .start = data->irq,
+                       .end = data->irq,
+                       .flags = IORESOURCE_IRQ,
+               },
+       };
+
+       return imx_add_platform_device("imxdi_rtc", 0,
+                       res, ARRAY_SIZE(res), NULL, 0);
+}
index 8482613e97278c992fa08ce2c659ea8a670175e9..4d4b28b5495549b57a8b78095ecf4f5900c98402 100644 (file)
@@ -72,6 +72,13 @@ struct imx_imx2_wdt_data {
 struct platform_device *__init imx_add_imx2_wdt(
                const struct imx_imx2_wdt_data *data);
 
+struct imx_imxdi_rtc_data {
+       resource_size_t iobase;
+       resource_size_t irq;
+};
+struct platform_device *__init imx_add_imxdi_rtc(
+               const struct imx_imxdi_rtc_data *data);
+
 #include <mach/imxfb.h>
 struct imx_imx_fb_data {
        resource_size_t iobase;