Commit c2e13037e6794bd0d9de3f9ecabf5615f15c160b

Authored by Uwe Kleine-König
Committed by Greg Kroah-Hartman
1 parent 1b07193b34

platform-drivers: move probe to .devinit.text in drivers/video

A pointer to a probe callback is passed to the core via
platform_driver_register and so the function must not disappear when the
.init sections are discarded.  Otherwise (if also having HOTPLUG=y)
unbinding and binding a device to the driver via sysfs will result in an
oops as does a device being registered late.

An alternative to this patch is using platform_driver_probe instead of
platform_driver_register plus removing the pointer to the probe function
from the struct platform_driver.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Cc: Adrian Bunk <bunk@stusta.de>
Cc: Alberto Mardegan <mardy@users.sourceforge.net>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andriy Skulysh <askulysh@gmail.com>
Cc: Antonino Daplas <adaplas@gmail.com>
Cc: Anton Vorontsov <avorontsov@ru.mvista.com>
Cc: Ben Dooks <ben-linux@fluff.org>
Cc: Chandramouli Narayanan <mouli@linux.intel.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Frans Pop <elendil@planet.nl>
Cc: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
Cc: Greg Kroah-Hartman <gregkh@suse.de>
Cc: Helge Deller <deller@gmx.de>
Cc: Huang Ying <ying.huang@intel.com>
Cc: Ian Molton <spyro@f2s.com>
Cc: Joshua Kinard <kumba@gentoo.org>
Cc: Kaj-Michael Lang <milang@tal.org>
Cc: Krzysztof Helt <krzysztof.h1@poczta.fm>
Cc: linux-fbdev-devel@lists.sourceforge.net
Cc: Maciej W. Rozycki <macro@linux-mips.org>
Cc: Magnus Damm <damm@igel.co.jp>
Cc: Martin Michlmayr <tbm@cyrius.com>
Cc: Matthias Kaehlcke <matthias@kaehlcke.net>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Pavel Machek <pavel@suse.cz>
Cc: Philipp Zabel <philipp.zabel@gmail.com>
Cc: Richard Purdie <rpurdie@rpsys.net>
Cc: Roel Kluin <roel.kluin@gmail.com>
Cc: Roland Stigge <stigge@antcom.de>
Cc: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Cc: Vincent Sanders <vince@simtec.co.uk>
Cc: Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
Acked-by: Ralf Baechle <ralf@linux-mips.org>
Acked-by: Arnaud Patard <arnaud.patard@rtp-net.org>
Acked-by: James Simmons <jsimmons@infradead.org>
Acked-by: Peter Jones <pjones@redhat.com>
Acked-by: Jaya Kumar <jayakumar.lkml@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

Showing 17 changed files with 18 additions and 18 deletions Side-by-side Diff

drivers/video/acornfb.c
... ... @@ -1221,7 +1221,7 @@
1221 1221 printk("acornfb: freed %dK memory\n", mb_freed);
1222 1222 }
1223 1223  
1224   -static int __init acornfb_probe(struct platform_device *dev)
  1224 +static int __devinit acornfb_probe(struct platform_device *dev)
1225 1225 {
1226 1226 unsigned long size;
1227 1227 u_int h_sync, v_sync;
drivers/video/arcfb.c
... ... @@ -504,7 +504,7 @@
504 504 .fb_ioctl = arcfb_ioctl,
505 505 };
506 506  
507   -static int __init arcfb_probe(struct platform_device *dev)
  507 +static int __devinit arcfb_probe(struct platform_device *dev)
508 508 {
509 509 struct fb_info *info;
510 510 int retval = -ENOMEM;
drivers/video/cobalt_lcdfb.c
... ... @@ -287,7 +287,7 @@
287 287 .fb_cursor = cobalt_lcdfb_cursor,
288 288 };
289 289  
290   -static int __init cobalt_lcdfb_probe(struct platform_device *dev)
  290 +static int __devinit cobalt_lcdfb_probe(struct platform_device *dev)
291 291 {
292 292 struct fb_info *info;
293 293 struct resource *res;
drivers/video/efifb.c
... ... @@ -210,7 +210,7 @@
210 210 return 0;
211 211 }
212 212  
213   -static int __init efifb_probe(struct platform_device *dev)
  213 +static int __devinit efifb_probe(struct platform_device *dev)
214 214 {
215 215 struct fb_info *info;
216 216 int err;
drivers/video/epson1355fb.c
... ... @@ -602,7 +602,7 @@
602 602 return 0;
603 603 }
604 604  
605   -int __init epson1355fb_probe(struct platform_device *dev)
  605 +int __devinit epson1355fb_probe(struct platform_device *dev)
606 606 {
607 607 struct epson1355_par *default_par;
608 608 struct fb_info *info;
drivers/video/gbefb.c
... ... @@ -1128,7 +1128,7 @@
1128 1128 return 0;
1129 1129 }
1130 1130  
1131   -static int __init gbefb_probe(struct platform_device *p_dev)
  1131 +static int __devinit gbefb_probe(struct platform_device *p_dev)
1132 1132 {
1133 1133 int i, ret = 0;
1134 1134 struct fb_info *info;
drivers/video/hgafb.c
... ... @@ -551,7 +551,7 @@
551 551 * Initialization
552 552 */
553 553  
554   -static int __init hgafb_probe(struct platform_device *pdev)
  554 +static int __devinit hgafb_probe(struct platform_device *pdev)
555 555 {
556 556 struct fb_info *info;
557 557  
drivers/video/hitfb.c
... ... @@ -325,7 +325,7 @@
325 325 .fb_imageblit = cfb_imageblit,
326 326 };
327 327  
328   -static int __init hitfb_probe(struct platform_device *dev)
  328 +static int __devinit hitfb_probe(struct platform_device *dev)
329 329 {
330 330 unsigned short lcdclor, ldr3, ldvndr;
331 331 struct fb_info *info;
drivers/video/q40fb.c
... ... @@ -85,7 +85,7 @@
85 85 .fb_imageblit = cfb_imageblit,
86 86 };
87 87  
88   -static int __init q40fb_probe(struct platform_device *dev)
  88 +static int __devinit q40fb_probe(struct platform_device *dev)
89 89 {
90 90 struct fb_info *info;
91 91  
drivers/video/s3c2410fb.c
... ... @@ -1004,12 +1004,12 @@
1004 1004 return ret;
1005 1005 }
1006 1006  
1007   -static int __init s3c2410fb_probe(struct platform_device *pdev)
  1007 +static int __devinit s3c2410fb_probe(struct platform_device *pdev)
1008 1008 {
1009 1009 return s3c24xxfb_probe(pdev, DRV_S3C2410);
1010 1010 }
1011 1011  
1012   -static int __init s3c2412fb_probe(struct platform_device *pdev)
  1012 +static int __devinit s3c2412fb_probe(struct platform_device *pdev)
1013 1013 {
1014 1014 return s3c24xxfb_probe(pdev, DRV_S3C2412);
1015 1015 }
drivers/video/sa1100fb.c
... ... @@ -1435,7 +1435,7 @@
1435 1435 return fbi;
1436 1436 }
1437 1437  
1438   -static int __init sa1100fb_probe(struct platform_device *pdev)
  1438 +static int __devinit sa1100fb_probe(struct platform_device *pdev)
1439 1439 {
1440 1440 struct sa1100fb_info *fbi;
1441 1441 int ret, irq;
drivers/video/sgivwfb.c
... ... @@ -745,7 +745,7 @@
745 745 /*
746 746 * Initialisation
747 747 */
748   -static int __init sgivwfb_probe(struct platform_device *dev)
  748 +static int __devinit sgivwfb_probe(struct platform_device *dev)
749 749 {
750 750 struct sgivw_par *par;
751 751 struct fb_info *info;
drivers/video/sh_mobile_lcdcfb.c
... ... @@ -943,7 +943,7 @@
943 943  
944 944 static int sh_mobile_lcdc_remove(struct platform_device *pdev);
945 945  
946   -static int __init sh_mobile_lcdc_probe(struct platform_device *pdev)
  946 +static int __devinit sh_mobile_lcdc_probe(struct platform_device *pdev)
947 947 {
948 948 struct fb_info *info;
949 949 struct sh_mobile_lcdc_priv *priv;
drivers/video/vesafb.c
... ... @@ -226,7 +226,7 @@
226 226 return 0;
227 227 }
228 228  
229   -static int __init vesafb_probe(struct platform_device *dev)
  229 +static int __devinit vesafb_probe(struct platform_device *dev)
230 230 {
231 231 struct fb_info *info;
232 232 int i, err;
... ... @@ -479,7 +479,7 @@
479 479 * Initialisation
480 480 */
481 481  
482   -static int __init vfb_probe(struct platform_device *dev)
  482 +static int __devinit vfb_probe(struct platform_device *dev)
483 483 {
484 484 struct fb_info *info;
485 485 int retval = -ENOMEM;
drivers/video/vga16fb.c
... ... @@ -1293,7 +1293,7 @@
1293 1293 }
1294 1294 #endif
1295 1295  
1296   -static int __init vga16fb_probe(struct platform_device *dev)
  1296 +static int __devinit vga16fb_probe(struct platform_device *dev)
1297 1297 {
1298 1298 struct fb_info *info;
1299 1299 struct vga16fb_par *par;
drivers/video/w100fb.c
... ... @@ -628,7 +628,7 @@
628 628 #endif
629 629  
630 630  
631   -int __init w100fb_probe(struct platform_device *pdev)
  631 +int __devinit w100fb_probe(struct platform_device *pdev)
632 632 {
633 633 int err = -EIO;
634 634 struct w100fb_mach_info *inf;