watchdog: Handle multiple wm831x watchdogs being registered
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Tue, 31 May 2011 13:46:55 +0000 (14:46 +0100)
committerWim Van Sebroeck <wim@iguana.be>
Tue, 28 Jun 2011 07:42:16 +0000 (07:42 +0000)
Due to the whole single instance based watchdog API we use static data
for the wm831x watchdog which means that if the system tries to register
a second one we end up trying to register the same miscdevice again,
corrupting the miscdevice list. Work around this by checking for duplicate
registrations until we get a watchdog core.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
drivers/watchdog/wm831x_wdt.c

index 8c4b2d5bb7da542a364d77ac7deb9e8c5a07f1c0..871caea4e1c62d7a868cfb24593d1de7c1f244c2 100644 (file)
@@ -320,6 +320,11 @@ static int __devinit wm831x_wdt_probe(struct platform_device *pdev)
        struct wm831x_watchdog_pdata *pdata;
        int reg, ret;
 
+       if (wm831x) {
+               dev_err(&pdev->dev, "wm831x watchdog already registered\n");
+               return -EBUSY;
+       }
+
        wm831x = dev_get_drvdata(pdev->dev.parent);
 
        ret = wm831x_reg_read(wm831x, WM831X_WATCHDOG);