diff options
author | David Brownell <dbrownell@users.sourceforge.net> | 2008-10-16 01:03:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-16 14:21:40 -0400 |
commit | 2f8d11971b9f54362437ce70f4d1911f0996d542 (patch) | |
tree | 48fb0df29994e976325761bd9e07ce107a96b6d5 | |
parent | 3d599d1ca57f443e5c4ff5af1e69d90350082f77 (diff) |
gpio: i2c expanders use subsys_init
Make the I2C external GPIO expander drivers register themselves at
subsys_initcall() time when they're statically linked.
SOC-integrated GPIOs are available starting very early -- early in
arch_initcall() at latest, but often even before initcalls start to run --
so this improves consistency, so more subsystems can rely on GPIOs in
their own subsys_initcall() code.
(This isn't a theoretical problem. This is one of several patches needed
to resolve oopsing observed when statically linking kernels on a DaVinci
EVM. Its pcf857x GPIOs needed to be available well before some other
drivers initialized.)
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | drivers/gpio/max732x.c | 5 | ||||
-rw-r--r-- | drivers/gpio/pca953x.c | 5 | ||||
-rw-r--r-- | drivers/gpio/pcf857x.c | 5 |
3 files changed, 12 insertions, 3 deletions
diff --git a/drivers/gpio/max732x.c b/drivers/gpio/max732x.c index b51c8135ca28..55ae9a41897a 100644 --- a/drivers/gpio/max732x.c +++ b/drivers/gpio/max732x.c | |||
@@ -372,7 +372,10 @@ static int __init max732x_init(void) | |||
372 | { | 372 | { |
373 | return i2c_add_driver(&max732x_driver); | 373 | return i2c_add_driver(&max732x_driver); |
374 | } | 374 | } |
375 | module_init(max732x_init); | 375 | /* register after i2c postcore initcall and before |
376 | * subsys initcalls that may rely on these GPIOs | ||
377 | */ | ||
378 | subsys_initcall(max732x_init); | ||
376 | 379 | ||
377 | static void __exit max732x_exit(void) | 380 | static void __exit max732x_exit(void) |
378 | { | 381 | { |
diff --git a/drivers/gpio/pca953x.c b/drivers/gpio/pca953x.c index cc8468692ae0..9ceeb89f1325 100644 --- a/drivers/gpio/pca953x.c +++ b/drivers/gpio/pca953x.c | |||
@@ -289,7 +289,10 @@ static int __init pca953x_init(void) | |||
289 | { | 289 | { |
290 | return i2c_add_driver(&pca953x_driver); | 290 | return i2c_add_driver(&pca953x_driver); |
291 | } | 291 | } |
292 | module_init(pca953x_init); | 292 | /* register after i2c postcore initcall and before |
293 | * subsys initcalls that may rely on these GPIOs | ||
294 | */ | ||
295 | subsys_initcall(pca953x_init); | ||
293 | 296 | ||
294 | static void __exit pca953x_exit(void) | 297 | static void __exit pca953x_exit(void) |
295 | { | 298 | { |
diff --git a/drivers/gpio/pcf857x.c b/drivers/gpio/pcf857x.c index fc9c6ae739ee..4bc2070dd4a1 100644 --- a/drivers/gpio/pcf857x.c +++ b/drivers/gpio/pcf857x.c | |||
@@ -351,7 +351,10 @@ static int __init pcf857x_init(void) | |||
351 | { | 351 | { |
352 | return i2c_add_driver(&pcf857x_driver); | 352 | return i2c_add_driver(&pcf857x_driver); |
353 | } | 353 | } |
354 | module_init(pcf857x_init); | 354 | /* register after i2c postcore initcall and before |
355 | * subsys initcalls that may rely on these GPIOs | ||
356 | */ | ||
357 | subsys_initcall(pcf857x_init); | ||
355 | 358 | ||
356 | static void __exit pcf857x_exit(void) | 359 | static void __exit pcf857x_exit(void) |
357 | { | 360 | { |