ARM: mx5: add support for the two watchdog modules
authorFabio Estevam <fabio.estevam@freescale.com>
Mon, 6 Dec 2010 18:38:32 +0000 (16:38 -0200)
committerSascha Hauer <s.hauer@pengutronix.de>
Tue, 7 Dec 2010 19:03:11 +0000 (20:03 +0100)
MX51 has two watchdog modules.

Add support for both of them.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
arch/arm/mach-mx5/devices-imx51.h
arch/arm/mach-mx5/mm.c
arch/arm/plat-mxc/devices/platform-imx2-wdt.c
arch/arm/plat-mxc/include/mach/devices-common.h
arch/arm/plat-mxc/include/mach/mx51.h

index 939d2e81370816b0fd67b13e0cfe5127c0f1cef2..6302e467000027e825ff54f3578106c7f121e713 100644 (file)
@@ -44,6 +44,6 @@ extern const struct imx_spi_imx_data imx51_ecspi_data[] __initconst;
 #define imx51_add_ecspi(id, pdata)     \
        imx_add_spi_imx(&imx51_ecspi_data[id], pdata)
 
-extern const struct imx_imx2_wdt_data imx51_imx2_wdt_data __initconst;
-#define imx51_imx2_wdt_data(pdata)     \
-       imx_add_imx2_wdt_data(&imx51_imx2_wdt_data, pdata)
+extern const struct imx_imx2_wdt_data imx51_imx2_wdt_data[] __initconst;
+#define imx51_add_imx2_wdt(id, pdata)  \
+       imx_add_imx2_wdt(&imx51_imx2_wdt_data[id])
index e57f96858f0dfb59e859ed08c860f644a3694150..457f9f95204be8de5c7f64da20bfd49c3b7c86c0 100644 (file)
@@ -49,7 +49,7 @@ void __init mx51_map_io(void)
 {
        mxc_set_cpu_type(MXC_CPU_MX51);
        mxc_iomux_v3_init(MX51_IO_ADDRESS(MX51_IOMUXC_BASE_ADDR));
-       mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG_BASE_ADDR));
+       mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR));
        iotable_init(mx51_io_desc, ARRAY_SIZE(mx51_io_desc));
 }
 
index 8dc19f69042d4250b1accbdb2ea9466aa6b1fa98..e0aec61177f4401240ded1960dd3ffb3bfec888f 100644 (file)
 #include <mach/hardware.h>
 #include <mach/devices-common.h>
 
-#define imx_imx2_wdt_data_entry_single(soc, _size)                     \
+#define imx_imx2_wdt_data_entry_single(soc, _id, _hwid, _size)         \
        {                                                               \
-               .iobase = soc ## _WDOG_BASE_ADDR,                       \
+               .id = _id,                                              \
+               .iobase = soc ## _WDOG ## _hwid ## _BASE_ADDR,          \
                .iosize = _size,                                        \
        }
+#define imx_imx2_wdt_data_entry(soc, _id, _hwid, _size)                        \
+       [_id] = imx_imx2_wdt_data_entry_single(soc, _id, _hwid, _size)
 
 #ifdef CONFIG_SOC_IMX21
 const struct imx_imx2_wdt_data imx21_imx2_wdt_data __initconst =
-       imx_imx2_wdt_data_entry_single(MX21, SZ_4K);
+       imx_imx2_wdt_data_entry_single(MX21, 0, , SZ_4K);
 #endif /* ifdef CONFIG_SOC_IMX21 */
 
 #ifdef CONFIG_SOC_IMX25
 const struct imx_imx2_wdt_data imx25_imx2_wdt_data __initconst =
-       imx_imx2_wdt_data_entry_single(MX25, SZ_16K);
+       imx_imx2_wdt_data_entry_single(MX25, 0, , SZ_16K);
 #endif /* ifdef CONFIG_SOC_IMX25 */
 
 #ifdef CONFIG_SOC_IMX27
 const struct imx_imx2_wdt_data imx27_imx2_wdt_data __initconst =
-       imx_imx2_wdt_data_entry_single(MX27, SZ_4K);
+       imx_imx2_wdt_data_entry_single(MX27, 0, , SZ_4K);
 #endif /* ifdef CONFIG_SOC_IMX27 */
 
 #ifdef CONFIG_SOC_IMX31
 const struct imx_imx2_wdt_data imx31_imx2_wdt_data __initconst =
-       imx_imx2_wdt_data_entry_single(MX31, SZ_16K);
+       imx_imx2_wdt_data_entry_single(MX31, 0, , SZ_16K);
 #endif /* ifdef CONFIG_SOC_IMX31 */
 
 #ifdef CONFIG_SOC_IMX35
 const struct imx_imx2_wdt_data imx35_imx2_wdt_data __initconst =
-       imx_imx2_wdt_data_entry_single(MX35, SZ_16K);
+       imx_imx2_wdt_data_entry_single(MX35, 0, , SZ_16K);
 #endif /* ifdef CONFIG_SOC_IMX35 */
 
 #ifdef CONFIG_SOC_IMX51
-const struct imx_imx2_wdt_data imx51_imx2_wdt_data __initconst =
-       imx_imx2_wdt_data_entry_single(MX51, SZ_16K);
+const struct imx_imx2_wdt_data imx51_imx2_wdt_data[] __initconst = {
+#define imx51_imx2_wdt_data_entry(_id, _hwid)                          \
+       imx_imx2_wdt_data_entry(MX51, _id, _hwid, SZ_16K)
+       imx51_imx2_wdt_data_entry(0, 1),
+       imx51_imx2_wdt_data_entry(1, 2),
+};
 #endif /* ifdef CONFIG_SOC_IMX51 */
 
 struct platform_device *__init imx_add_imx2_wdt(
@@ -56,6 +63,6 @@ struct platform_device *__init imx_add_imx2_wdt(
                        .flags = IORESOURCE_MEM,
                },
        };
-       return imx_add_platform_device("imx2-wdt", 0,
+       return imx_add_platform_device("imx2-wdt", data->id,
                        res, ARRAY_SIZE(res), NULL, 0);
 }
index 3640eaf88c02d95e073a578285b66e4d96fd3e3a..8658c9caa650ca12be1e182827f3fb5e0c43da19 100644 (file)
@@ -67,6 +67,7 @@ struct platform_device *__init imx_add_imx21_hcd(
                const struct mx21_usbh_platform_data *pdata);
 
 struct imx_imx2_wdt_data {
+       int id;
        resource_size_t iobase;
        resource_size_t iosize;
 };
index 8fddfef9b4e82cbc06e840f5b3a48a601ba3aab3..882f1f4e7f29df7652aa4b236e41508542e9bea2 100644 (file)
@@ -61,7 +61,7 @@
 #define MX51_GPIO3_BASE_ADDR           (MX51_AIPS1_BASE_ADDR + 0x8c000)
 #define MX51_GPIO4_BASE_ADDR           (MX51_AIPS1_BASE_ADDR + 0x90000)
 #define MX51_KPP_BASE_ADDR             (MX51_AIPS1_BASE_ADDR + 0x94000)
-#define MX51_WDOG_BASE_ADDR            (MX51_AIPS1_BASE_ADDR + 0x98000)
+#define MX51_WDOG1_BASE_ADDR           (MX51_AIPS1_BASE_ADDR + 0x98000)
 #define MX51_WDOG2_BASE_ADDR           (MX51_AIPS1_BASE_ADDR + 0x9c000)
 #define MX51_GPT1_BASE_ADDR            (MX51_AIPS1_BASE_ADDR + 0xa0000)
 #define MX51_SRTC_BASE_ADDR            (MX51_AIPS1_BASE_ADDR + 0xa4000)