platform-drivers: move probe to .devinit.text in arch/arm
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: Andrew Morton <akpm@linux-foundation.org> Cc: Ben Dooks <ben-linux@fluff.org> Cc: Dmitry Baryshkov <dbaryshkov@gmail.com> Cc: Eric Miao <eric.miao@marvell.com> Cc: Liam Girdwood <liam.girdwood@wolfsonmicro.com> Cc: Paul Sokolovsky <pmiscml@gmail.com> Cc: Richard Purdie <rpurdie@rpsys.net> Cc: Russell King <rmk+kernel@arm.linux.org.uk> Acked-by: Arnaud Patard <arnaud.patard@rtp-net.org> Acked-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> Acked-by: Kristoffer Ericson <kristoffer.ericson@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Родитель
831fad2f75
Коммит
91a99dfc6b
|
@ -204,7 +204,7 @@ void __init corgi_ssp_set_machinfo(struct corgissp_machinfo *machinfo)
|
||||||
ssp_machinfo = machinfo;
|
ssp_machinfo = machinfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init corgi_ssp_probe(struct platform_device *dev)
|
static int __devinit corgi_ssp_probe(struct platform_device *dev)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
|
|
@ -900,7 +900,7 @@ static struct platform_suspend_ops sharpsl_pm_ops = {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int __init sharpsl_pm_probe(struct platform_device *pdev)
|
static int __devinit sharpsl_pm_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ static const struct rfkill_ops h1940bt_rfkill_ops = {
|
||||||
.set_block = h1940bt_set_block,
|
.set_block = h1940bt_set_block,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init h1940bt_probe(struct platform_device *pdev)
|
static int __devinit h1940bt_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct rfkill *rfk;
|
struct rfkill *rfk;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
|
@ -130,7 +130,7 @@ void jornada_ssp_end(void)
|
||||||
};
|
};
|
||||||
EXPORT_SYMBOL(jornada_ssp_end);
|
EXPORT_SYMBOL(jornada_ssp_end);
|
||||||
|
|
||||||
static int __init jornada_ssp_probe(struct platform_device *dev)
|
static int __devinit jornada_ssp_probe(struct platform_device *dev)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче