]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
hid: hid-picolcd: Fix initialization order
authorThomas Zimmermann <tzimmermann@suse.de>
Tue, 5 Mar 2024 16:22:36 +0000 (17:22 +0100)
committerLee Jones <lee@kernel.org>
Thu, 28 Mar 2024 10:08:57 +0000 (10:08 +0000)
For drivers that support backlight, LCD and fbdev devices, fbdev has
to be initialized last. See documentation for struct fbinfo.bl_dev.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Cc: Bruno Prémont <bonbons@linux-vserver.org>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Link: https://lore.kernel.org/r/20240305162425.23845-4-tzimmermann@suse.de
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/hid/hid-picolcd_core.c

index bbda231a7ce3030055082806996667fb4864c3e8..5ddebe25eb91f31597a9bc713819964d94765a2c 100644 (file)
@@ -474,11 +474,6 @@ static int picolcd_probe_lcd(struct hid_device *hdev, struct picolcd_data *data)
        if (error)
                goto err;
 
-       /* Set up the framebuffer device */
-       error = picolcd_init_framebuffer(data);
-       if (error)
-               goto err;
-
        /* Setup lcd class device */
        error = picolcd_init_lcd(data, picolcd_out_report(REPORT_CONTRAST, hdev));
        if (error)
@@ -489,6 +484,11 @@ static int picolcd_probe_lcd(struct hid_device *hdev, struct picolcd_data *data)
        if (error)
                goto err;
 
+       /* Set up the framebuffer device */
+       error = picolcd_init_framebuffer(data);
+       if (error)
+               goto err;
+
        /* Setup the LED class devices */
        error = picolcd_init_leds(data, picolcd_out_report(REPORT_LED_STATE, hdev));
        if (error)
@@ -502,9 +502,9 @@ static int picolcd_probe_lcd(struct hid_device *hdev, struct picolcd_data *data)
        return 0;
 err:
        picolcd_exit_leds(data);
+       picolcd_exit_framebuffer(data);
        picolcd_exit_backlight(data);
        picolcd_exit_lcd(data);
-       picolcd_exit_framebuffer(data);
        picolcd_exit_cir(data);
        picolcd_exit_keys(data);
        return error;
@@ -623,9 +623,9 @@ static void picolcd_remove(struct hid_device *hdev)
        /* Cleanup LED */
        picolcd_exit_leds(data);
        /* Clean up the framebuffer */
+       picolcd_exit_framebuffer(data);
        picolcd_exit_backlight(data);
        picolcd_exit_lcd(data);
-       picolcd_exit_framebuffer(data);
        /* Cleanup input */
        picolcd_exit_cir(data);
        picolcd_exit_keys(data);