ARM: davinci: da8xx: fix multiple watchdog device registration
authorSekhar Nori <nsekhar@ti.com>
Wed, 26 Feb 2014 04:59:43 +0000 (10:29 +0530)
committerSekhar Nori <nsekhar@ti.com>
Thu, 6 Mar 2014 13:38:29 +0000 (19:08 +0530)
Fix multiple watchdog device registration on da8xx devices
due to davinci_init_devices blindly registering watchdog
device.

Fix this by getting rid of the initcall and instead registering
watchdog for each soc.

Signed-off-by: Sekhar Nori <nsekhar@ti.com>
arch/arm/mach-davinci/davinci.h
arch/arm/mach-davinci/devices.c
arch/arm/mach-davinci/dm355.c
arch/arm/mach-davinci/dm365.c
arch/arm/mach-davinci/dm644x.c
arch/arm/mach-davinci/dm646x.c

index 2eebc433880223b0ed2c5fe18c56aa11807cd699..4ffc37accce074fa639c1b6821f50c8c45455b47 100644 (file)
@@ -79,6 +79,8 @@ int davinci_gpio_register(struct resource *res, int size, void *pdata);
 #define DM646X_ASYNC_EMIF_CONTROL_BASE 0x20008000
 #define DM646X_ASYNC_EMIF_CS2_SPACE_BASE 0x42000000
 
+int davinci_init_wdt(void);
+
 /* DM355 function declarations */
 void dm355_init(void);
 void dm355_init_spi0(unsigned chipselect_mask,
index 5cf9a027dcc6ae23063182c2461f1ddb66339e7b..6257aa4525688e7232c40f2cf87c0847c4ba9baf 100644 (file)
@@ -313,9 +313,9 @@ void davinci_restart(enum reboot_mode mode, const char *cmd)
        davinci_watchdog_reset(&davinci_wdt_device);
 }
 
-static void davinci_init_wdt(void)
+int davinci_init_wdt(void)
 {
-       platform_device_register(&davinci_wdt_device);
+       return platform_device_register(&davinci_wdt_device);
 }
 
 static struct platform_device davinci_gpio_device = {
@@ -348,16 +348,3 @@ struct davinci_timer_instance davinci_timer_instance[2] = {
        },
 };
 
-/*-------------------------------------------------------------------------*/
-
-static int __init davinci_init_devices(void)
-{
-       /* please keep these calls, and their implementations above,
-        * in alphabetical order so they're easier to sort through.
-        */
-       davinci_init_wdt();
-
-       return 0;
-}
-arch_initcall(davinci_init_devices);
-
index 4668c0e197670123aea18a95a61a4cc78e796884..07381d8cea6297d25f173460aa3ce849da2c4852 100644 (file)
@@ -1076,12 +1076,18 @@ int __init dm355_init_video(struct vpfe_config *vpfe_cfg,
 
 static int __init dm355_init_devices(void)
 {
+       int ret = 0;
+
        if (!cpu_is_davinci_dm355())
                return 0;
 
        davinci_cfg_reg(DM355_INT_EDMA_CC);
        platform_device_register(&dm355_edma_device);
 
-       return 0;
+       ret = davinci_init_wdt();
+       if (ret)
+               pr_warn("%s: watchdog init failed: %d\n", __func__, ret);
+
+       return ret;
 }
 postcore_initcall(dm355_init_devices);
index b44b49e2801af7b33842ed2e996cdf13fa600b63..08a61b9383337b67b801a4a706814285a936b9aa 100644 (file)
@@ -1436,6 +1436,8 @@ int __init dm365_init_video(struct vpfe_config *vpfe_cfg,
 
 static int __init dm365_init_devices(void)
 {
+       int ret = 0;
+
        if (!cpu_is_davinci_dm365())
                return 0;
 
@@ -1445,6 +1447,10 @@ static int __init dm365_init_devices(void)
        platform_device_register(&dm365_mdio_device);
        platform_device_register(&dm365_emac_device);
 
-       return 0;
+       ret = davinci_init_wdt();
+       if (ret)
+               pr_warn("%s: watchdog init failed: %d\n", __func__, ret);
+
+       return ret;
 }
 postcore_initcall(dm365_init_devices);
index 5c3e0be95ef3d283b653d5842001386527ab2979..5debffba4b24b82e70d9f4eaba8c80c1833afed6 100644 (file)
@@ -964,6 +964,8 @@ int __init dm644x_init_video(struct vpfe_config *vpfe_cfg,
 
 static int __init dm644x_init_devices(void)
 {
+       int ret = 0;
+
        if (!cpu_is_davinci_dm644x())
                return 0;
 
@@ -972,6 +974,10 @@ static int __init dm644x_init_devices(void)
        platform_device_register(&dm644x_mdio_device);
        platform_device_register(&dm644x_emac_device);
 
-       return 0;
+       ret = davinci_init_wdt();
+       if (ret)
+               pr_warn("%s: watchdog init failed: %d\n", __func__, ret);
+
+       return ret;
 }
 postcore_initcall(dm644x_init_devices);
index 81768dd47096ec0f5a476c5c90d9fcd70690521a..332d00d24dc205b1ef5a74659eee2aa6af8d96eb 100644 (file)
@@ -955,12 +955,18 @@ void __init dm646x_init(void)
 
 static int __init dm646x_init_devices(void)
 {
+       int ret = 0;
+
        if (!cpu_is_davinci_dm646x())
                return 0;
 
        platform_device_register(&dm646x_mdio_device);
        platform_device_register(&dm646x_emac_device);
 
-       return 0;
+       ret = davinci_init_wdt();
+       if (ret)
+               pr_warn("%s: watchdog init failed: %d\n", __func__, ret);
+
+       return ret;
 }
 postcore_initcall(dm646x_init_devices);