Commit c2e13037 authored by Uwe Kleine-König's avatar Uwe Kleine-König Committed by Greg Kroah-Hartman

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: default avatarUwe 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: default avatarRalf Baechle <ralf@linux-mips.org>
Acked-by: default avatarArnaud Patard <arnaud.patard@rtp-net.org>
Acked-by: default avatarJames Simmons <jsimmons@infradead.org>
Acked-by: default avatarPeter Jones <pjones@redhat.com>
Acked-by: default avatarJaya Kumar <jayakumar.lkml@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 1b07193b
...@@ -1221,7 +1221,7 @@ free_unused_pages(unsigned int virtual_start, unsigned int virtual_end) ...@@ -1221,7 +1221,7 @@ free_unused_pages(unsigned int virtual_start, unsigned int virtual_end)
printk("acornfb: freed %dK memory\n", mb_freed); printk("acornfb: freed %dK memory\n", mb_freed);
} }
static int __init acornfb_probe(struct platform_device *dev) static int __devinit acornfb_probe(struct platform_device *dev)
{ {
unsigned long size; unsigned long size;
u_int h_sync, v_sync; u_int h_sync, v_sync;
......
...@@ -504,7 +504,7 @@ static struct fb_ops arcfb_ops = { ...@@ -504,7 +504,7 @@ static struct fb_ops arcfb_ops = {
.fb_ioctl = arcfb_ioctl, .fb_ioctl = arcfb_ioctl,
}; };
static int __init arcfb_probe(struct platform_device *dev) static int __devinit arcfb_probe(struct platform_device *dev)
{ {
struct fb_info *info; struct fb_info *info;
int retval = -ENOMEM; int retval = -ENOMEM;
......
...@@ -287,7 +287,7 @@ static struct fb_ops cobalt_lcd_fbops = { ...@@ -287,7 +287,7 @@ static struct fb_ops cobalt_lcd_fbops = {
.fb_cursor = cobalt_lcdfb_cursor, .fb_cursor = cobalt_lcdfb_cursor,
}; };
static int __init cobalt_lcdfb_probe(struct platform_device *dev) static int __devinit cobalt_lcdfb_probe(struct platform_device *dev)
{ {
struct fb_info *info; struct fb_info *info;
struct resource *res; struct resource *res;
......
...@@ -210,7 +210,7 @@ static int __init efifb_setup(char *options) ...@@ -210,7 +210,7 @@ static int __init efifb_setup(char *options)
return 0; return 0;
} }
static int __init efifb_probe(struct platform_device *dev) static int __devinit efifb_probe(struct platform_device *dev)
{ {
struct fb_info *info; struct fb_info *info;
int err; int err;
......
...@@ -602,7 +602,7 @@ static int epson1355fb_remove(struct platform_device *dev) ...@@ -602,7 +602,7 @@ static int epson1355fb_remove(struct platform_device *dev)
return 0; return 0;
} }
int __init epson1355fb_probe(struct platform_device *dev) int __devinit epson1355fb_probe(struct platform_device *dev)
{ {
struct epson1355_par *default_par; struct epson1355_par *default_par;
struct fb_info *info; struct fb_info *info;
......
...@@ -1128,7 +1128,7 @@ static int __init gbefb_setup(char *options) ...@@ -1128,7 +1128,7 @@ static int __init gbefb_setup(char *options)
return 0; return 0;
} }
static int __init gbefb_probe(struct platform_device *p_dev) static int __devinit gbefb_probe(struct platform_device *p_dev)
{ {
int i, ret = 0; int i, ret = 0;
struct fb_info *info; struct fb_info *info;
......
...@@ -551,7 +551,7 @@ static struct fb_ops hgafb_ops = { ...@@ -551,7 +551,7 @@ static struct fb_ops hgafb_ops = {
* Initialization * Initialization
*/ */
static int __init hgafb_probe(struct platform_device *pdev) static int __devinit hgafb_probe(struct platform_device *pdev)
{ {
struct fb_info *info; struct fb_info *info;
......
...@@ -325,7 +325,7 @@ static struct fb_ops hitfb_ops = { ...@@ -325,7 +325,7 @@ static struct fb_ops hitfb_ops = {
.fb_imageblit = cfb_imageblit, .fb_imageblit = cfb_imageblit,
}; };
static int __init hitfb_probe(struct platform_device *dev) static int __devinit hitfb_probe(struct platform_device *dev)
{ {
unsigned short lcdclor, ldr3, ldvndr; unsigned short lcdclor, ldr3, ldvndr;
struct fb_info *info; struct fb_info *info;
......
...@@ -85,7 +85,7 @@ static struct fb_ops q40fb_ops = { ...@@ -85,7 +85,7 @@ static struct fb_ops q40fb_ops = {
.fb_imageblit = cfb_imageblit, .fb_imageblit = cfb_imageblit,
}; };
static int __init q40fb_probe(struct platform_device *dev) static int __devinit q40fb_probe(struct platform_device *dev)
{ {
struct fb_info *info; struct fb_info *info;
......
...@@ -1004,12 +1004,12 @@ dealloc_fb: ...@@ -1004,12 +1004,12 @@ dealloc_fb:
return ret; return ret;
} }
static int __init s3c2410fb_probe(struct platform_device *pdev) static int __devinit s3c2410fb_probe(struct platform_device *pdev)
{ {
return s3c24xxfb_probe(pdev, DRV_S3C2410); return s3c24xxfb_probe(pdev, DRV_S3C2410);
} }
static int __init s3c2412fb_probe(struct platform_device *pdev) static int __devinit s3c2412fb_probe(struct platform_device *pdev)
{ {
return s3c24xxfb_probe(pdev, DRV_S3C2412); return s3c24xxfb_probe(pdev, DRV_S3C2412);
} }
......
...@@ -1435,7 +1435,7 @@ static struct sa1100fb_info * __init sa1100fb_init_fbinfo(struct device *dev) ...@@ -1435,7 +1435,7 @@ static struct sa1100fb_info * __init sa1100fb_init_fbinfo(struct device *dev)
return fbi; return fbi;
} }
static int __init sa1100fb_probe(struct platform_device *pdev) static int __devinit sa1100fb_probe(struct platform_device *pdev)
{ {
struct sa1100fb_info *fbi; struct sa1100fb_info *fbi;
int ret, irq; int ret, irq;
......
...@@ -745,7 +745,7 @@ int __init sgivwfb_setup(char *options) ...@@ -745,7 +745,7 @@ int __init sgivwfb_setup(char *options)
/* /*
* Initialisation * Initialisation
*/ */
static int __init sgivwfb_probe(struct platform_device *dev) static int __devinit sgivwfb_probe(struct platform_device *dev)
{ {
struct sgivw_par *par; struct sgivw_par *par;
struct fb_info *info; struct fb_info *info;
......
...@@ -943,7 +943,7 @@ static const struct dev_pm_ops sh_mobile_lcdc_dev_pm_ops = { ...@@ -943,7 +943,7 @@ static const struct dev_pm_ops sh_mobile_lcdc_dev_pm_ops = {
static int sh_mobile_lcdc_remove(struct platform_device *pdev); static int sh_mobile_lcdc_remove(struct platform_device *pdev);
static int __init sh_mobile_lcdc_probe(struct platform_device *pdev) static int __devinit sh_mobile_lcdc_probe(struct platform_device *pdev)
{ {
struct fb_info *info; struct fb_info *info;
struct sh_mobile_lcdc_priv *priv; struct sh_mobile_lcdc_priv *priv;
......
...@@ -226,7 +226,7 @@ static int __init vesafb_setup(char *options) ...@@ -226,7 +226,7 @@ static int __init vesafb_setup(char *options)
return 0; return 0;
} }
static int __init vesafb_probe(struct platform_device *dev) static int __devinit vesafb_probe(struct platform_device *dev)
{ {
struct fb_info *info; struct fb_info *info;
int i, err; int i, err;
......
...@@ -479,7 +479,7 @@ static int __init vfb_setup(char *options) ...@@ -479,7 +479,7 @@ static int __init vfb_setup(char *options)
* Initialisation * Initialisation
*/ */
static int __init vfb_probe(struct platform_device *dev) static int __devinit vfb_probe(struct platform_device *dev)
{ {
struct fb_info *info; struct fb_info *info;
int retval = -ENOMEM; int retval = -ENOMEM;
......
...@@ -1293,7 +1293,7 @@ static int vga16fb_setup(char *options) ...@@ -1293,7 +1293,7 @@ static int vga16fb_setup(char *options)
} }
#endif #endif
static int __init vga16fb_probe(struct platform_device *dev) static int __devinit vga16fb_probe(struct platform_device *dev)
{ {
struct fb_info *info; struct fb_info *info;
struct vga16fb_par *par; struct vga16fb_par *par;
......
...@@ -628,7 +628,7 @@ static int w100fb_resume(struct platform_device *dev) ...@@ -628,7 +628,7 @@ static int w100fb_resume(struct platform_device *dev)
#endif #endif
int __init w100fb_probe(struct platform_device *pdev) int __devinit w100fb_probe(struct platform_device *pdev)
{ {
int err = -EIO; int err = -EIO;
struct w100fb_mach_info *inf; struct w100fb_mach_info *inf;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment