Revert "gpio-msm: remove logging of wakeup reason"

This reverts commit 7bdc794d7819ec55a34ca4bd5969e0f4a232d67c.

Also rename:
-                       log_wakeup_reason(irq);
+                       log_base_wakeup_reason(irq);

Change-Id: I57b5540252cc7476dd6f443cb0016c86573fe883
Signed-off-by: Iliyan Malchev <malchev@google.com>
diff --git a/drivers/gpio/gpio-msm-common.c b/drivers/gpio/gpio-msm-common.c
index 09a94e5..5e5f664 100644
--- a/drivers/gpio/gpio-msm-common.c
+++ b/drivers/gpio/gpio-msm-common.c
@@ -19,6 +19,7 @@
 #include <linux/io.h>
 #include <linux/module.h>
 #include <linux/spinlock.h>
+#include <linux/syscore_ops.h>
 #include <linux/irqdomain.h>
 #include <linux/of.h>
 #include <linux/err.h>
@@ -411,6 +412,71 @@
 	.irq_disable	= msm_gpio_irq_disable,
 };
 
+#ifdef CONFIG_PM
+static int msm_gpio_suspend(void)
+{
+	unsigned long irq_flags;
+	unsigned long i;
+	int ngpio = msm_gpio.gpio_chip.ngpio;
+
+	spin_lock_irqsave(&tlmm_lock, irq_flags);
+	for_each_set_bit(i, msm_gpio.enabled_irqs, ngpio)
+		__msm_gpio_set_intr_cfg_enable(i, 0);
+
+	for_each_set_bit(i, msm_gpio.wake_irqs, ngpio)
+		__msm_gpio_set_intr_cfg_enable(i, 1);
+	mb();
+	spin_unlock_irqrestore(&tlmm_lock, irq_flags);
+	return 0;
+}
+
+void msm_gpio_show_resume_irq(void)
+{
+	unsigned long irq_flags;
+	int i, irq, intstat;
+	int ngpio = msm_gpio.gpio_chip.ngpio;
+
+	if (!msm_show_resume_irq_mask)
+		return;
+
+	spin_lock_irqsave(&tlmm_lock, irq_flags);
+	for_each_set_bit(i, msm_gpio.wake_irqs, ngpio) {
+		intstat = __msm_gpio_get_intr_status(i);
+		if (intstat) {
+			irq = msm_gpio_to_irq(&msm_gpio.gpio_chip, i);
+			log_base_wakeup_reason(irq);
+		}
+	}
+	spin_unlock_irqrestore(&tlmm_lock, irq_flags);
+}
+
+static void msm_gpio_resume(void)
+{
+	unsigned long irq_flags;
+	unsigned long i;
+	int ngpio = msm_gpio.gpio_chip.ngpio;
+
+	msm_gpio_show_resume_irq();
+
+	spin_lock_irqsave(&tlmm_lock, irq_flags);
+	for_each_set_bit(i, msm_gpio.wake_irqs, ngpio)
+		__msm_gpio_set_intr_cfg_enable(i, 0);
+
+	for_each_set_bit(i, msm_gpio.enabled_irqs, ngpio)
+		__msm_gpio_set_intr_cfg_enable(i, 1);
+	mb();
+	spin_unlock_irqrestore(&tlmm_lock, irq_flags);
+}
+#else
+#define msm_gpio_suspend NULL
+#define msm_gpio_resume NULL
+#endif
+
+static struct syscore_ops msm_gpio_syscore_ops = {
+	.suspend = msm_gpio_suspend,
+	.resume = msm_gpio_resume,
+};
+
 static void msm_tlmm_set_field(const struct tlmm_field_cfg *configs,
 			       unsigned id, unsigned width, unsigned val)
 {
@@ -567,6 +633,7 @@
 				ret);
 		return ret;
 	}
+	register_syscore_ops(&msm_gpio_syscore_ops);
 	return 0;
 }
 
@@ -581,6 +648,7 @@
 {
 	int ret;
 
+	unregister_syscore_ops(&msm_gpio_syscore_ops);
 	ret = gpiochip_remove(&msm_gpio.gpio_chip);
 	if (ret < 0)
 		return ret;