Staging: panel: fix oops on panel_cleanup_module
authorCostantino Leandro <lcostantino@gmail.com>
Tue, 17 Feb 2009 16:10:48 +0000 (11:10 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 27 Feb 2009 20:56:24 +0000 (12:56 -0800)
Check for null pardevice (not registered, ej: panel never attached,
inexistent parport, etc. )  before calling parport_release,
parport_unregister_device, and related funcs on module release.

Signed-off-by: Costantino Leandro <lcostantino@gmail.com>
Acked-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/panel/panel.c

index ab69c1bf36a8205fd80a2abb46cd7c16e1d9d5be..c2747bc88c6fbe42861857cca5dd6190e5559a28 100644 (file)
@@ -2164,19 +2164,20 @@ static void __exit panel_cleanup_module(void)
        if (scan_timer.function != NULL)
                del_timer(&scan_timer);
 
-       if (keypad_enabled)
-               misc_deregister(&keypad_dev);
+       if (pprt != NULL) {
+               if (keypad_enabled)
+                       misc_deregister(&keypad_dev);
+
+               if (lcd_enabled) {
+                       panel_lcd_print("\x0cLCD driver " PANEL_VERSION
+                                       "\nunloaded.\x1b[Lc\x1b[Lb\x1b[L-");
+                       misc_deregister(&lcd_dev);
+               }
 
-       if (lcd_enabled) {
-               panel_lcd_print("\x0cLCD driver " PANEL_VERSION
-                               "\nunloaded.\x1b[Lc\x1b[Lb\x1b[L-");
-               misc_deregister(&lcd_dev);
+               /* TODO: free all input signals */
+               parport_release(pprt);
+               parport_unregister_device(pprt);
        }
-
-       /* TODO: free all input signals */
-
-       parport_release(pprt);
-       parport_unregister_device(pprt);
        parport_unregister_driver(&panel_driver);
 }