c62084a
From: Josh Boyer <jwboyer@fedoraproject.org>
c62084a
Date: Wed, 8 Oct 2014 19:10:10 -0400
c62084a
Subject: [PATCH] Revert "pinctrl: qcom: use restart_notifier mechanism for
c62084a
 ps_hold"
c62084a
c62084a
This reverts commit cf1fc187628913070c3e418ce0e205732435aa2f.
c62084a
---
c62084a
 drivers/pinctrl/qcom/pinctrl-msm.c | 31 +++++++++++++------------------
c62084a
 1 file changed, 13 insertions(+), 18 deletions(-)
c62084a
c62084a
diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
35ac9a8
index e730935fa457..c57ca10bed20 100644
c62084a
--- a/drivers/pinctrl/qcom/pinctrl-msm.c
c62084a
+++ b/drivers/pinctrl/qcom/pinctrl-msm.c
c62084a
@@ -27,7 +27,8 @@
c62084a
 #include <linux/gpio.h>
c62084a
 #include <linux/interrupt.h>
c62084a
 #include <linux/spinlock.h>
c62084a
-#include <linux/reboot.h>
c62084a
+
c62084a
+#include <asm/system_misc.h>
c62084a
 
c62084a
 #include "../core.h"
c62084a
 #include "../pinconf.h"
c62084a
@@ -42,7 +43,6 @@
c62084a
  * @dev:            device handle.
c62084a
  * @pctrl:          pinctrl handle.
c62084a
  * @chip:           gpiochip handle.
c62084a
- * @restart_nb:     restart notifier block.
c62084a
  * @irq:            parent irq for the TLMM irq_chip.
c62084a
  * @lock:           Spinlock to protect register resources as well
c62084a
  *                  as msm_pinctrl data structures.
c62084a
@@ -56,7 +56,6 @@ struct msm_pinctrl {
c62084a
 	struct device *dev;
c62084a
 	struct pinctrl_dev *pctrl;
c62084a
 	struct gpio_chip chip;
c62084a
-	struct notifier_block restart_nb;
c62084a
 	int irq;
c62084a
 
c62084a
 	spinlock_t lock;
c62084a
@@ -853,14 +852,13 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
c62084a
 	return 0;
c62084a
 }
c62084a
 
c62084a
-static int msm_ps_hold_restart(struct notifier_block *nb, unsigned long action,
c62084a
-			       void *data)
c62084a
-{
c62084a
-	struct msm_pinctrl *pctrl = container_of(nb, struct msm_pinctrl, restart_nb);
c62084a
+#ifdef CONFIG_ARM
c62084a
+static void __iomem *msm_ps_hold;
c62084a
 
c62084a
-	writel(0, pctrl->regs + PS_HOLD_OFFSET);
c62084a
-	mdelay(1000);
c62084a
-	return NOTIFY_DONE;
c62084a
+static void msm_reset(enum reboot_mode reboot_mode, const char *cmd)
c62084a
+{
c62084a
+	writel(0, msm_ps_hold);
c62084a
+	mdelay(10000);
c62084a
 }
c62084a
 
c62084a
 static void msm_pinctrl_setup_pm_reset(struct msm_pinctrl *pctrl)
c62084a
@@ -870,14 +868,13 @@ static void msm_pinctrl_setup_pm_reset(struct msm_pinctrl *pctrl)
c62084a
 
c62084a
 	for (; i <= pctrl->soc->nfunctions; i++)
c62084a
 		if (!strcmp(func[i].name, "ps_hold")) {
c62084a
-			pctrl->restart_nb.notifier_call = msm_ps_hold_restart;
c62084a
-			pctrl->restart_nb.priority = 128;
c62084a
-			if (register_restart_handler(&pctrl->restart_nb))
c62084a
-				dev_err(pctrl->dev,
c62084a
-					"failed to setup restart handler.\n");
c62084a
-			break;
c62084a
+			msm_ps_hold = pctrl->regs + PS_HOLD_OFFSET;
c62084a
+			arm_pm_restart = msm_reset;
c62084a
 		}
c62084a
 }
c62084a
+#else
c62084a
+static void msm_pinctrl_setup_pm_reset(const struct msm_pinctrl *pctrl) {}
c62084a
+#endif
c62084a
 
c62084a
 int msm_pinctrl_probe(struct platform_device *pdev,
c62084a
 		      const struct msm_pinctrl_soc_data *soc_data)
35ac9a8
@@ -940,8 +937,6 @@ int msm_pinctrl_remove(struct platform_device *pdev)
35ac9a8
 	gpiochip_remove(&pctrl->chip);
c62084a
 	pinctrl_unregister(pctrl->pctrl);
c62084a
 
c62084a
-	unregister_restart_handler(&pctrl->restart_nb);
c62084a
-
c62084a
 	return 0;
c62084a
 }
c62084a
 EXPORT_SYMBOL(msm_pinctrl_remove);
c62084a
-- 
c62084a
1.9.3
c62084a