|
@@ -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);
|