efifb: Disallow manual bind and unbind

Both were buggy: bind would happily scribble over a real graphics
device and unbind wouldn't destroy the framebuffer.  Hotplugging
efifb makes no sense anyway, so just disable it.

As an added benefit, we save some runtime memory.

Signed-off-by: Andy Lutomirski <luto@mit.edu>
Signed-off-by: Peter Jones <pjones@redhat.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
Andy Lutomirski 2011-05-26 10:13:34 -04:00 committed by Paul Mundt
parent da0241f12b
commit bb8b266272

View File

@ -330,7 +330,7 @@ static int __init efifb_setup(char *options)
return 0;
}
static int __devinit efifb_probe(struct platform_device *dev)
static int __init efifb_probe(struct platform_device *dev)
{
struct fb_info *info;
int err;
@ -500,7 +500,6 @@ static int __devinit efifb_probe(struct platform_device *dev)
}
static struct platform_driver efifb_driver = {
.probe = efifb_probe,
.driver = {
.name = "efifb",
},
@ -531,13 +530,21 @@ static int __init efifb_init(void)
if (!screen_info.lfb_linelength)
return -ENODEV;
ret = platform_driver_register(&efifb_driver);
ret = platform_device_register(&efifb_device);
if (ret)
return ret;
if (!ret) {
ret = platform_device_register(&efifb_device);
if (ret)
platform_driver_unregister(&efifb_driver);
/*
* This is not just an optimization. We will interfere
* with a real driver if we get reprobed, so don't allow
* it.
*/
ret = platform_driver_probe(&efifb_driver, efifb_probe);
if (ret) {
platform_device_unregister(&efifb_driver);
return ret;
}
return ret;
}
module_init(efifb_init);