Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 60231da1 authored by David Herrmann's avatar David Herrmann Committed by Tomi Valkeinen
Browse files

fbdev: vesafb: add dev->remove() callback



If x86-sysfb platform-devices are removed from a system, we should
properly unload vesafb. Otherwise, we end up releasing the parent while
our vesa framebuffer is still running. This currently works just fine, but
will cause problems on handover to real hw. So add the ->remove() callback
and unregister vesafb.

Signed-off-by: default avatarDavid Herrmann <dh.herrmann@gmail.com>
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent 65b4021e
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -179,7 +179,6 @@ static void vesafb_destroy(struct fb_info *info)
	if (info->screen_base)
		iounmap(info->screen_base);
	release_mem_region(info->apertures->ranges[0].base, info->apertures->ranges[0].size);
	framebuffer_release(info);
}

static struct fb_ops vesafb_ops = {
@@ -297,6 +296,7 @@ static int vesafb_probe(struct platform_device *dev)
		release_mem_region(vesafb_fix.smem_start, size_total);
		return -ENOMEM;
	}
	platform_set_drvdata(dev, info);
	info->pseudo_palette = info->par;
	info->par = NULL;

@@ -499,12 +499,23 @@ static int vesafb_probe(struct platform_device *dev)
	return err;
}

static int vesafb_remove(struct platform_device *pdev)
{
	struct fb_info *info = platform_get_drvdata(pdev);

	unregister_framebuffer(info);
	framebuffer_release(info);

	return 0;
}

static struct platform_driver vesafb_driver = {
	.driver = {
		.name = "vesa-framebuffer",
		.owner = THIS_MODULE,
	},
	.probe = vesafb_probe,
	.remove = vesafb_remove,
};

module_platform_driver(vesafb_driver);