summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-prima2/rstc.c
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2014-03-11 10:53:31 +0100
committerArnd Bergmann <arnd@arndb.de>2014-03-17 19:46:12 +0100
commit48352e5286b455eaffed19a89d3a07e609bfa6d2 (patch)
tree6ecfe9fe2764b36cba4a915f21db330be49f9aec /arch/arm/mach-prima2/rstc.c
parentMerge tag 'at91-cleanup' of git://github.com/at91linux/linux-at91 into next/c... (diff)
downloadlinux-48352e5286b455eaffed19a89d3a07e609bfa6d2.tar.xz
linux-48352e5286b455eaffed19a89d3a07e609bfa6d2.zip
ARM: prima2: build reset code standalone
The prima2 platform code currently depends on the rstc implementation and that in turn depends on the reset controller framework. This removes the platform dependency by letting the driver access arm_pm_restart directly to turn the driver into a standalone entity, and also removes the dependency on the reset controller framework by using "if (IS_ENABLED(CONFIG_RESET_CONTROLLER))". This will cause all code that is used for the reset controller to be dropped by the compiler if the framework is disabled. Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/arm/mach-prima2/rstc.c')
-rw-r--r--arch/arm/mach-prima2/rstc.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/arch/arm/mach-prima2/rstc.c b/arch/arm/mach-prima2/rstc.c
index a59976743332..4887a2a4c698 100644
--- a/arch/arm/mach-prima2/rstc.c
+++ b/arch/arm/mach-prima2/rstc.c
@@ -17,9 +17,11 @@
#include <linux/reboot.h>
#include <linux/reset-controller.h>
+#include <asm/system_misc.h>
+
#define SIRFSOC_RSTBIT_NUM 64
-void __iomem *sirfsoc_rstc_base;
+static void __iomem *sirfsoc_rstc_base;
static DEFINE_MUTEX(rstc_lock);
static int sirfsoc_reset_module(struct reset_controller_dev *rcdev,
@@ -71,6 +73,13 @@ static struct reset_controller_dev sirfsoc_reset_controller = {
.nr_resets = SIRFSOC_RSTBIT_NUM,
};
+#define SIRFSOC_SYS_RST_BIT BIT(31)
+
+static void sirfsoc_restart(enum reboot_mode mode, const char *cmd)
+{
+ writel(SIRFSOC_SYS_RST_BIT, sirfsoc_rstc_base);
+}
+
static int sirfsoc_rstc_probe(struct platform_device *pdev)
{
struct device_node *np = pdev->dev.of_node;
@@ -81,8 +90,10 @@ static int sirfsoc_rstc_probe(struct platform_device *pdev)
}
sirfsoc_reset_controller.of_node = np;
+ arm_pm_restart = sirfsoc_restart;
- reset_controller_register(&sirfsoc_reset_controller);
+ if (IS_ENABLED(CONFIG_RESET_CONTROLLER))
+ reset_controller_register(&sirfsoc_reset_controller);
return 0;
}
@@ -107,10 +118,3 @@ static int __init sirfsoc_rstc_init(void)
return platform_driver_register(&sirfsoc_rstc_driver);
}
subsys_initcall(sirfsoc_rstc_init);
-
-#define SIRFSOC_SYS_RST_BIT BIT(31)
-
-void sirfsoc_restart(enum reboot_mode mode, const char *cmd)
-{
- writel(SIRFSOC_SYS_RST_BIT, sirfsoc_rstc_base);
-}