auxdisplay: panel: Switch to use module_parport_driver()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 15 Feb 2021 20:19:53 +0000 (22:19 +0200)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 15 Feb 2024 11:24:53 +0000 (13:24 +0200)
Switch to use module_parport_driver() to reduce boilerplate code.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
drivers/auxdisplay/panel.c

index e20d35bdf5fef15bf553ab748724825d9c7e1fd9..049ff443e790d61a60ae6bb9dd670d24b7b4f6c1 100644 (file)
@@ -1519,106 +1519,9 @@ static void keypad_init(void)
 
 static void panel_attach(struct parport *port)
 {
+       int selected_keypad_type = NOT_SET;
        struct pardev_cb panel_cb;
 
-       if (port->number != parport)
-               return;
-
-       if (pprt) {
-               pr_err("%s: port->number=%d parport=%d, already registered!\n",
-                      __func__, port->number, parport);
-               return;
-       }
-
-       memset(&panel_cb, 0, sizeof(panel_cb));
-       panel_cb.private = &pprt;
-       /* panel_cb.flags = 0 should be PARPORT_DEV_EXCL? */
-
-       pprt = parport_register_dev_model(port, "panel", &panel_cb, 0);
-       if (!pprt) {
-               pr_err("%s: port->number=%d parport=%d, parport_register_device() failed\n",
-                      __func__, port->number, parport);
-               return;
-       }
-
-       if (parport_claim(pprt)) {
-               pr_err("could not claim access to parport%d. Aborting.\n",
-                      parport);
-               goto err_unreg_device;
-       }
-
-       /* must init LCD first, just in case an IRQ from the keypad is
-        * generated at keypad init
-        */
-       if (lcd.enabled) {
-               lcd_init();
-               if (!lcd.charlcd || charlcd_register(lcd.charlcd))
-                       goto err_unreg_device;
-       }
-
-       if (keypad.enabled) {
-               keypad_init();
-               if (misc_register(&keypad_dev))
-                       goto err_lcd_unreg;
-       }
-       return;
-
-err_lcd_unreg:
-       if (scan_timer.function)
-               del_timer_sync(&scan_timer);
-       if (lcd.enabled)
-               charlcd_unregister(lcd.charlcd);
-err_unreg_device:
-       kfree(lcd.charlcd);
-       lcd.charlcd = NULL;
-       parport_unregister_device(pprt);
-       pprt = NULL;
-}
-
-static void panel_detach(struct parport *port)
-{
-       if (port->number != parport)
-               return;
-
-       if (!pprt) {
-               pr_err("%s: port->number=%d parport=%d, nothing to unregister.\n",
-                      __func__, port->number, parport);
-               return;
-       }
-       if (scan_timer.function)
-               del_timer_sync(&scan_timer);
-
-       if (keypad.enabled) {
-               misc_deregister(&keypad_dev);
-               keypad_initialized = 0;
-       }
-
-       if (lcd.enabled) {
-               charlcd_unregister(lcd.charlcd);
-               lcd.initialized = false;
-               kfree(lcd.charlcd->drvdata);
-               kfree(lcd.charlcd);
-               lcd.charlcd = NULL;
-       }
-
-       /* TODO: free all input signals */
-       parport_release(pprt);
-       parport_unregister_device(pprt);
-       pprt = NULL;
-}
-
-static struct parport_driver panel_driver = {
-       .name = "panel",
-       .match_port = panel_attach,
-       .detach = panel_detach,
-       .devmodel = true,
-};
-
-/* init function */
-static int __init panel_init_module(void)
-{
-       int selected_keypad_type = NOT_SET, err;
-
        /* take care of an eventual profile */
        switch (profile) {
        case PANEL_PROFILE_CUSTOM:
@@ -1710,29 +1613,102 @@ static int __init panel_init_module(void)
        if (!lcd.enabled && !keypad.enabled) {
                /* no device enabled, let's exit */
                pr_err("panel driver disabled.\n");
-               return -ENODEV;
+               return;
        }
 
-       err = parport_register_driver(&panel_driver);
-       if (err) {
-               pr_err("could not register with parport. Aborting.\n");
-               return err;
+       if (port->number != parport)
+               return;
+
+       if (pprt) {
+               pr_err("%s: port->number=%d parport=%d, already registered!\n",
+                      __func__, port->number, parport);
+               return;
        }
 
-       if (pprt)
-               pr_info("panel driver registered on parport%d (io=0x%lx).\n",
-                       parport, pprt->port->base);
-       else
-               pr_info("panel driver not yet registered\n");
-       return 0;
+       memset(&panel_cb, 0, sizeof(panel_cb));
+       panel_cb.private = &pprt;
+       /* panel_cb.flags = 0 should be PARPORT_DEV_EXCL? */
+
+       pprt = parport_register_dev_model(port, "panel", &panel_cb, 0);
+       if (!pprt) {
+               pr_err("%s: port->number=%d parport=%d, parport_register_device() failed\n",
+                      __func__, port->number, parport);
+               return;
+       }
+
+       if (parport_claim(pprt)) {
+               pr_err("could not claim access to parport%d. Aborting.\n",
+                      parport);
+               goto err_unreg_device;
+       }
+
+       /* must init LCD first, just in case an IRQ from the keypad is
+        * generated at keypad init
+        */
+       if (lcd.enabled) {
+               lcd_init();
+               if (!lcd.charlcd || charlcd_register(lcd.charlcd))
+                       goto err_unreg_device;
+       }
+
+       if (keypad.enabled) {
+               keypad_init();
+               if (misc_register(&keypad_dev))
+                       goto err_lcd_unreg;
+       }
+       return;
+
+err_lcd_unreg:
+       if (scan_timer.function)
+               del_timer_sync(&scan_timer);
+       if (lcd.enabled)
+               charlcd_unregister(lcd.charlcd);
+err_unreg_device:
+       kfree(lcd.charlcd);
+       lcd.charlcd = NULL;
+       parport_unregister_device(pprt);
+       pprt = NULL;
 }
 
-static void __exit panel_cleanup_module(void)
+static void panel_detach(struct parport *port)
 {
-       parport_unregister_driver(&panel_driver);
+       if (port->number != parport)
+               return;
+
+       if (!pprt) {
+               pr_err("%s: port->number=%d parport=%d, nothing to unregister.\n",
+                      __func__, port->number, parport);
+               return;
+       }
+       if (scan_timer.function)
+               del_timer_sync(&scan_timer);
+
+       if (keypad.enabled) {
+               misc_deregister(&keypad_dev);
+               keypad_initialized = 0;
+       }
+
+       if (lcd.enabled) {
+               charlcd_unregister(lcd.charlcd);
+               lcd.initialized = false;
+               kfree(lcd.charlcd->drvdata);
+               kfree(lcd.charlcd);
+               lcd.charlcd = NULL;
+       }
+
+       /* TODO: free all input signals */
+       parport_release(pprt);
+       parport_unregister_device(pprt);
+       pprt = NULL;
 }
 
-module_init(panel_init_module);
-module_exit(panel_cleanup_module);
+static struct parport_driver panel_driver = {
+       .name = "panel",
+       .match_port = panel_attach,
+       .detach = panel_detach,
+       .devmodel = true,
+};
+module_parport_driver(panel_driver);
+
 MODULE_AUTHOR("Willy Tarreau");
 MODULE_LICENSE("GPL");