Commit 1233090cf6d8a75c8dca3b37e65a6e12f79502af

Authored by Sekhar Nori
1 parent f26a9968e2

ARM: davinci: da8xx: fix multiple watchdog device registration

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>

Showing 6 changed files with 32 additions and 19 deletions Side-by-side Diff

arch/arm/mach-davinci/davinci.h
... ... @@ -79,6 +79,8 @@
79 79 #define DM646X_ASYNC_EMIF_CONTROL_BASE 0x20008000
80 80 #define DM646X_ASYNC_EMIF_CS2_SPACE_BASE 0x42000000
81 81  
  82 +int davinci_init_wdt(void);
  83 +
82 84 /* DM355 function declarations */
83 85 void dm355_init(void);
84 86 void dm355_init_spi0(unsigned chipselect_mask,
arch/arm/mach-davinci/devices.c
... ... @@ -313,9 +313,9 @@
313 313 davinci_watchdog_reset(&davinci_wdt_device);
314 314 }
315 315  
316   -static void davinci_init_wdt(void)
  316 +int davinci_init_wdt(void)
317 317 {
318   - platform_device_register(&davinci_wdt_device);
  318 + return platform_device_register(&davinci_wdt_device);
319 319 }
320 320  
321 321 static struct platform_device davinci_gpio_device = {
... ... @@ -347,17 +347,4 @@
347 347 .top_irq = IRQ_TINT1_TINT34,
348 348 },
349 349 };
350   -
351   -/*-------------------------------------------------------------------------*/
352   -
353   -static int __init davinci_init_devices(void)
354   -{
355   - /* please keep these calls, and their implementations above,
356   - * in alphabetical order so they're easier to sort through.
357   - */
358   - davinci_init_wdt();
359   -
360   - return 0;
361   -}
362   -arch_initcall(davinci_init_devices);
arch/arm/mach-davinci/dm355.c
... ... @@ -1076,13 +1076,19 @@
1076 1076  
1077 1077 static int __init dm355_init_devices(void)
1078 1078 {
  1079 + int ret = 0;
  1080 +
1079 1081 if (!cpu_is_davinci_dm355())
1080 1082 return 0;
1081 1083  
1082 1084 davinci_cfg_reg(DM355_INT_EDMA_CC);
1083 1085 platform_device_register(&dm355_edma_device);
1084 1086  
1085   - return 0;
  1087 + ret = davinci_init_wdt();
  1088 + if (ret)
  1089 + pr_warn("%s: watchdog init failed: %d\n", __func__, ret);
  1090 +
  1091 + return ret;
1086 1092 }
1087 1093 postcore_initcall(dm355_init_devices);
arch/arm/mach-davinci/dm365.c
... ... @@ -1436,6 +1436,8 @@
1436 1436  
1437 1437 static int __init dm365_init_devices(void)
1438 1438 {
  1439 + int ret = 0;
  1440 +
1439 1441 if (!cpu_is_davinci_dm365())
1440 1442 return 0;
1441 1443  
... ... @@ -1445,7 +1447,11 @@
1445 1447 platform_device_register(&dm365_mdio_device);
1446 1448 platform_device_register(&dm365_emac_device);
1447 1449  
1448   - return 0;
  1450 + ret = davinci_init_wdt();
  1451 + if (ret)
  1452 + pr_warn("%s: watchdog init failed: %d\n", __func__, ret);
  1453 +
  1454 + return ret;
1449 1455 }
1450 1456 postcore_initcall(dm365_init_devices);
arch/arm/mach-davinci/dm644x.c
... ... @@ -964,6 +964,8 @@
964 964  
965 965 static int __init dm644x_init_devices(void)
966 966 {
  967 + int ret = 0;
  968 +
967 969 if (!cpu_is_davinci_dm644x())
968 970 return 0;
969 971  
... ... @@ -972,7 +974,11 @@
972 974 platform_device_register(&dm644x_mdio_device);
973 975 platform_device_register(&dm644x_emac_device);
974 976  
975   - return 0;
  977 + ret = davinci_init_wdt();
  978 + if (ret)
  979 + pr_warn("%s: watchdog init failed: %d\n", __func__, ret);
  980 +
  981 + return ret;
976 982 }
977 983 postcore_initcall(dm644x_init_devices);
arch/arm/mach-davinci/dm646x.c
... ... @@ -955,13 +955,19 @@
955 955  
956 956 static int __init dm646x_init_devices(void)
957 957 {
  958 + int ret = 0;
  959 +
958 960 if (!cpu_is_davinci_dm646x())
959 961 return 0;
960 962  
961 963 platform_device_register(&dm646x_mdio_device);
962 964 platform_device_register(&dm646x_emac_device);
963 965  
964   - return 0;
  966 + ret = davinci_init_wdt();
  967 + if (ret)
  968 + pr_warn("%s: watchdog init failed: %d\n", __func__, ret);
  969 +
  970 + return ret;
965 971 }
966 972 postcore_initcall(dm646x_init_devices);