HID: picolcd: fix deferred_io init/cleanup to fb ordering
authorBruno Prémont <bonbons@linux-vserver.org>
Wed, 30 Jun 2010 20:36:31 +0000 (22:36 +0200)
committerJiri Kosina <jkosina@suse.cz>
Sun, 11 Jul 2010 20:57:17 +0000 (22:57 +0200)
Adjust ordering if framebuffer (un)registration and defio init/cleanup
to match the correct order (init defio, register FB ... unregister FB,
cleanup defio)

Acked-by: Jaya Kumar <jayakumar.lkml@gmail.com>
Signed-off-by: Bruno Prémont <bonbons@linux-vserver.org>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-picolcd.c

index 7aabf65..839a5ac 100644 (file)
@@ -707,18 +707,19 @@ static int picolcd_init_framebuffer(struct picolcd_data *data)
                dev_err(dev, "failed to create sysfs attributes\n");
                goto err_cleanup;
        }
+       fb_deferred_io_init(info);
        data->fb_info    = info;
        error = register_framebuffer(info);
        if (error) {
                dev_err(dev, "failed to register framebuffer\n");
                goto err_sysfs;
        }
-       fb_deferred_io_init(info);
        /* schedule first output of framebuffer */
        schedule_delayed_work(&info->deferred_work, 0);
        return 0;
 
 err_sysfs:
+       fb_deferred_io_cleanup(info);
        device_remove_file(dev, &dev_attr_fb_update_rate);
 err_cleanup:
        data->fb_vbitmap = NULL;
@@ -747,7 +748,6 @@ static void picolcd_exit_framebuffer(struct picolcd_data *data)
        data->fb_bpp     = 0;
        data->fb_info    = NULL;
        device_remove_file(&data->hdev->dev, &dev_attr_fb_update_rate);
-       fb_deferred_io_cleanup(info);
        unregister_framebuffer(info);
        vfree(fb_bitmap);
        kfree(fb_vbitmap);