aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2008-10-16 01:03:13 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-10-16 14:21:40 -0400
commit2f8d11971b9f54362437ce70f4d1911f0996d542 (patch)
tree48fb0df29994e976325761bd9e07ce107a96b6d5
parent3d599d1ca57f443e5c4ff5af1e69d90350082f77 (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.c5
-rw-r--r--drivers/gpio/pca953x.c5
-rw-r--r--drivers/gpio/pcf857x.c5
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}
375module_init(max732x_init); 375/* register after i2c postcore initcall and before
376 * subsys initcalls that may rely on these GPIOs
377 */
378subsys_initcall(max732x_init);
376 379
377static void __exit max732x_exit(void) 380static 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}
292module_init(pca953x_init); 292/* register after i2c postcore initcall and before
293 * subsys initcalls that may rely on these GPIOs
294 */
295subsys_initcall(pca953x_init);
293 296
294static void __exit pca953x_exit(void) 297static 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}
354module_init(pcf857x_init); 354/* register after i2c postcore initcall and before
355 * subsys initcalls that may rely on these GPIOs
356 */
357subsys_initcall(pcf857x_init);
355 358
356static void __exit pcf857x_exit(void) 359static void __exit pcf857x_exit(void)
357{ 360{