From ef71465d70b4ad7be3a591a2cf68b2c5b2f31565 Mon Sep 17 00:00:00 2001 From: Andy Lutomirski Date: Thu, 26 May 2011 10:13:34 -0400 Subject: [PATCH] --- yaml --- r: 253135 b: refs/heads/master c: bb8b26627267a82c49f47fc52a0785f079a7b063 h: refs/heads/master i: 253133: 1942019ba6d181f850860515233d4f43378ee33f 253131: fff6c54921a70fa62517d78a28356ab6164986fd 253127: f5dbb6e315c564ef6bbb065ada6d4aa0599a83ed 253119: 7234cf9cd348f314957c743dd7fcf1def7c56f1a v: v3 --- [refs] | 2 +- trunk/drivers/video/efifb.c | 21 ++++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 121d87c00ae2..9d873ec43706 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: da0241f12bf785f74e57ad6d67abdf269216f76b +refs/heads/master: bb8b26627267a82c49f47fc52a0785f079a7b063 diff --git a/trunk/drivers/video/efifb.c b/trunk/drivers/video/efifb.c index 8cb31e106b9e..69c49dfce9cf 100644 --- a/trunk/drivers/video/efifb.c +++ b/trunk/drivers/video/efifb.c @@ -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);