summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2014-02-18 16:34:17 +0530
committerLaxman Dewangan <ldewangan@nvidia.com>2014-02-18 08:06:18 -0800
commite27e80b722f198f855672c6cc9027d3d2582a942 (patch)
treef03f8ef1f0381abf904142232d94e652ba88de1f
parentf2c4d4a28b06c968e993bf4c6073d655614d7456 (diff)
ARM: tegra: initialise wakeup table before interrupt controller
Initailise all tegra wakeup tables before initialising the interrupt controller so that irq client can enable the wakeup properly. bug 1461622 Change-Id: I06d824cf2261f41c72338426c6bda450649aa78e Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-on: http://git-master/r/368773 Reviewed-by: Prashant Gaikwad <pgaikwad@nvidia.com> Tested-by: Prashant Gaikwad <pgaikwad@nvidia.com>
-rw-r--r--arch/arm/mach-tegra/wakeups-t11x.c6
-rw-r--r--arch/arm/mach-tegra/wakeups-t12x.c6
-rw-r--r--arch/arm/mach-tegra/wakeups-t14x.c6
-rw-r--r--arch/arm/mach-tegra/wakeups-t2.c6
-rw-r--r--arch/arm/mach-tegra/wakeups-t3.c6
-rw-r--r--drivers/irqchip/irq-tegra.c3
-rw-r--r--include/linux/irqchip/tegra.h8
7 files changed, 36 insertions, 5 deletions
diff --git a/arch/arm/mach-tegra/wakeups-t11x.c b/arch/arm/mach-tegra/wakeups-t11x.c
index 6e3be663f58a..de81a32ee234 100644
--- a/arch/arm/mach-tegra/wakeups-t11x.c
+++ b/arch/arm/mach-tegra/wakeups-t11x.c
@@ -225,4 +225,8 @@ static int __init tegra11x_wakeup_table_init(void)
tegra_wake_table_len = ARRAY_SIZE(tegra_gpio_wakes);
return 0;
}
-postcore_initcall(tegra11x_wakeup_table_init);
+
+int __init tegra_wakeup_table_init(void)
+{
+ return tegra11x_wakeup_table_init();
+}
diff --git a/arch/arm/mach-tegra/wakeups-t12x.c b/arch/arm/mach-tegra/wakeups-t12x.c
index 804fd66e67c6..d7eb090633e6 100644
--- a/arch/arm/mach-tegra/wakeups-t12x.c
+++ b/arch/arm/mach-tegra/wakeups-t12x.c
@@ -159,4 +159,8 @@ static int __init tegra12x_wakeup_table_init(void)
tegra_wake_table_len = ARRAY_SIZE(tegra_gpio_wakes);
return 0;
}
-postcore_initcall(tegra12x_wakeup_table_init);
+
+int __init tegra_wakeup_table_init(void)
+{
+ return tegra12x_wakeup_table_init();
+}
diff --git a/arch/arm/mach-tegra/wakeups-t14x.c b/arch/arm/mach-tegra/wakeups-t14x.c
index 99b4dc79877e..d8124ba736ab 100644
--- a/arch/arm/mach-tegra/wakeups-t14x.c
+++ b/arch/arm/mach-tegra/wakeups-t14x.c
@@ -168,4 +168,8 @@ static int __init tegra14x_wakeup_table_init(void)
tegra_wake_table_len = ARRAY_SIZE(tegra_gpio_wakes);
return 0;
}
-postcore_initcall(tegra14x_wakeup_table_init);
+
+int __init tegra_wakeup_table_init(void)
+{
+ return tegra14x_wakeup_table_init();
+}
diff --git a/arch/arm/mach-tegra/wakeups-t2.c b/arch/arm/mach-tegra/wakeups-t2.c
index 2c7b5fb0bf33..ba0b646854fd 100644
--- a/arch/arm/mach-tegra/wakeups-t2.c
+++ b/arch/arm/mach-tegra/wakeups-t2.c
@@ -105,4 +105,8 @@ static int __init tegra2_wakeup_table_init(void)
tegra_wake_table_len = ARRAY_SIZE(tegra_gpio_wakes);
return 0;
}
-postcore_initcall(tegra2_wakeup_table_init);
+
+int __init tegra_wakeup_table_init(void)
+{
+ return tegra2_wakeup_table_init();
+}
diff --git a/arch/arm/mach-tegra/wakeups-t3.c b/arch/arm/mach-tegra/wakeups-t3.c
index 4f012cf50bd4..1aea292b2d64 100644
--- a/arch/arm/mach-tegra/wakeups-t3.c
+++ b/arch/arm/mach-tegra/wakeups-t3.c
@@ -124,4 +124,8 @@ static int __init tegra3_wakeup_table_init(void)
tegra_wake_table_len = ARRAY_SIZE(tegra_gpio_wakes);
return 0;
}
-postcore_initcall(tegra3_wakeup_table_init);
+
+int __init tegra_wakeup_table_init(void)
+{
+ return tegra3_wakeup_table_init();
+}
diff --git a/drivers/irqchip/irq-tegra.c b/drivers/irqchip/irq-tegra.c
index ad640c9c4f9a..7fde2967f9d8 100644
--- a/drivers/irqchip/irq-tegra.c
+++ b/drivers/irqchip/irq-tegra.c
@@ -462,6 +462,9 @@ static int __init tegra_gic_of_init(struct device_node *node,
of_find_compatible_node(NULL, NULL, "arm,cortex-a15-gic");
struct device_node *tegra_gic_np =
of_find_compatible_node(NULL, NULL, "nvidia,tegra-gic");
+
+ tegra_wakeup_table_init();
+
gic_dist_base = of_iomap(arm_gic_np, 0);
gic_cpu_base = of_iomap(arm_gic_np, 1);
gic_version = (readl(gic_dist_base + 0xFE8) & 0xF0) >> 4;
diff --git a/include/linux/irqchip/tegra.h b/include/linux/irqchip/tegra.h
index 8b37cdfff380..7c537b08f0ff 100644
--- a/include/linux/irqchip/tegra.h
+++ b/include/linux/irqchip/tegra.h
@@ -49,6 +49,7 @@ extern int *tegra_irq_wake_table;
extern int tegra_wake_table_len;
#if defined(CONFIG_PM_SLEEP)
+int tegra_wakeup_table_init(void);
u64 tegra_read_pmc_wake_status(void);
int tegra_pm_irq_set_wake(int wake, int enable);
int tegra_pm_irq_set_wake_type(int wake, int flow_type);
@@ -61,6 +62,13 @@ int tegra_wake_to_irq(int wake);
int tegra_set_wake_source(int wake, int wake_int);
int tegra_disable_wake_source(int wake);
#else
+static inline int tegra_wakeup_table_init(void)
+{
+ tegra_gpio_wake_table = NULL;
+ tegra_irq_wake_table = NULL;
+ tegra_wake_table_len = 0;
+ return 0;
+}
static inline int tegra_set_wake_gpio(unsigned int wake, int gpio)
{
return 0;