public inbox for linux-i2c@vger.kernel.org
 help / color / mirror / Atom feed
From: David Brownell <david-b@pacbell.net>
To: Jean Delvare <khali@linux-fr.org>
Cc: lkml <linux-kernel@vger.kernel.org>, i2c@lm-sensors.org
Subject: [patch 2.6.27-rc7] gpio: i2c expanders use subsys_init
Date: Wed, 24 Sep 2008 10:40:43 -0700	[thread overview]
Message-ID: <200809241040.43943.david-b@pacbell.net> (raw)

From: David Brownell <dbrownell@users.sourceforge.net>

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.)

This depends on a patch moving I2C's driver model init earlier
in the boot sequence; otherwise this change would cause oopsing.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
---
For the 2.6.28-rc0 merge window.  Jean, can you include this
in your I2C tree, so it only merges after the I2C init patch
on which it depends?  We want "git bisect" to work.  ;)

 drivers/gpio/max732x.c |    5 ++++-
 drivers/gpio/pca953x.c |    5 ++++-
 drivers/gpio/pcf857x.c |    5 ++++-
 3 files changed, 12 insertions(+), 3 deletions(-)

--- a/drivers/gpio/max732x.c
+++ b/drivers/gpio/max732x.c
@@ -372,7 +372,10 @@ static int __init max732x_init(void)
 {
 	return i2c_add_driver(&max732x_driver);
 }
-module_init(max732x_init);
+/* register after i2c postcore initcall and before
+ * subsys initcalls that may rely on these GPIOs
+ */
+subsys_initcall(max732x_init);
 
 static void __exit max732x_exit(void)
 {
--- a/drivers/gpio/pca953x.c
+++ b/drivers/gpio/pca953x.c
@@ -289,7 +289,10 @@ static int __init pca953x_init(void)
 {
 	return i2c_add_driver(&pca953x_driver);
 }
-module_init(pca953x_init);
+/* register after i2c postcore initcall and before
+ * subsys initcalls that may rely on these GPIOs
+ */
+subsys_initcall(pca953x_init);
 
 static void __exit pca953x_exit(void)
 {
--- a/drivers/gpio/pcf857x.c
+++ b/drivers/gpio/pcf857x.c
@@ -351,7 +351,10 @@ static int __init pcf857x_init(void)
 {
 	return i2c_add_driver(&pcf857x_driver);
 }
-module_init(pcf857x_init);
+/* register after i2c postcore initcall and before
+ * subsys initcalls that may rely on these GPIOs
+ */
+subsys_initcall(pcf857x_init);
 
 static void __exit pcf857x_exit(void)
 {

                 reply	other threads:[~2008-09-24 17:40 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200809241040.43943.david-b@pacbell.net \
    --to=david-b@pacbell.net \
    --cc=i2c@lm-sensors.org \
    --cc=khali@linux-fr.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox