Commit 1233090cf6d8a75c8dca3b37e65a6e12f79502af
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); |