summaryrefslogtreecommitdiff
path: root/drivers/reset
diff options
context:
space:
mode:
authorShawn Guo <shawn.guo@freescale.com>2013-07-14 20:41:00 +0800
committerJason Liu <r64343@freescale.com>2013-10-30 09:53:45 +0800
commit0a2e2731631d240123519e654dc7cd1d1f332b7b (patch)
treeeb00eb8aa8c3651a09694c0f24987b0239b9ca4f /drivers/reset
parent22167e9f739df5619fe7b5968ab1f64e9d9ec2eb (diff)
ENGR00269945: reset: register gpio-reset driver in arch_initcall
It's a little bit late to register gpio-reset driver at module_init time, because gpio-reset provides reset control via gpio for other devices which are mostly probed at module_init time too. And it becomes even worse, when the gpio comes from IO expander on I2C bus, e.g. pca953x. In that case, gpio-reset needs to be ready before I2C bus driver which is generally ready at subsys_initcall time. Let's register gpio-reset driver in arch_initcall() to have it ready early enough. The defer probe mechanism is not used here, because a reset controller driver should be reasonably registered early than other devices. More importantly, defer probe doe not help in some nasty cases, e.g. the gpio-pca953x device itself needs a reset from gpio-reset driver start working. Signed-off-by: Shawn Guo <shawn.guo@freescale.com>
Diffstat (limited to 'drivers/reset')
-rw-r--r--drivers/reset/gpio-reset.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/reset/gpio-reset.c b/drivers/reset/gpio-reset.c
index 4f372f9e437b..a7f214fc5e29 100644
--- a/drivers/reset/gpio-reset.c
+++ b/drivers/reset/gpio-reset.c
@@ -168,7 +168,17 @@ static struct platform_driver gpio_reset_driver = {
},
};
-module_platform_driver(gpio_reset_driver);
+static int __init gpio_reset_init(void)
+{
+ return platform_driver_register(&gpio_reset_driver);
+}
+arch_initcall(gpio_reset_init);
+
+static void __exit gpio_reset_exit(void)
+{
+ platform_driver_unregister(&gpio_reset_driver);
+}
+module_exit(gpio_reset_exit);
MODULE_AUTHOR("Philipp Zabel <p.zabel@pengutronix.de>");
MODULE_DESCRIPTION("gpio reset controller");