Currently there is no way to easily differentiate multiple
watchdog devices. The watchdogs are named by the order they
are probed.
1st probed watchdog: /dev/watchdog0
2nd probed watchdog: /dev/watchdog1
...

This change uses the alias of the watchdog device node for
the name of the watchdog.
aliases {
    watchdog0 = "/...../...."
    watchdog3 = "/..../....."
    watchdog2 = "/..../....."
    ...
}

This will translate to...
/dev/watchdog0
/dev/watchdog3
/dev/watchdog2

v2
Assign alias number to id in watchdog_core instead of watchdog_dev.
If failed to get id, fallback to original ida_simple_get call.

Signed-off-by: Justin Chen <[email protected]>
---
 drivers/watchdog/watchdog_core.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/watchdog/watchdog_core.c b/drivers/watchdog/watchdog_core.c
index 1a80594..873f139 100644
--- a/drivers/watchdog/watchdog_core.c
+++ b/drivers/watchdog/watchdog_core.c
@@ -139,7 +139,7 @@ EXPORT_SYMBOL_GPL(watchdog_init_timeout);
 
 static int __watchdog_register_device(struct watchdog_device *wdd)
 {
-       int ret, id, devno;
+       int ret, id = -1, devno;
 
        if (wdd == NULL || wdd->info == NULL || wdd->ops == NULL)
                return -EINVAL;
@@ -157,7 +157,18 @@ static int __watchdog_register_device(struct 
watchdog_device *wdd)
         */
 
        mutex_init(&wdd->lock);
-       id = ida_simple_get(&watchdog_ida, 0, MAX_DOGS, GFP_KERNEL);
+
+       /* Use alias for watchdog id if possible */
+       if (wdd->parent) {
+               ret = of_alias_get_id(wdd->parent->of_node, "watchdog");
+               if (ret >= 0)
+                       id = ida_simple_get(&watchdog_ida, ret,
+                                           ret + 1, GFP_KERNEL);
+       }
+
+       if (id < 0)
+               id = ida_simple_get(&watchdog_ida, 0, MAX_DOGS, GFP_KERNEL);
+
        if (id < 0)
                return id;
        wdd->id = id;
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to