diff options
author | Laxman Dewangan <ldewangan@nvidia.com> | 2014-02-18 16:34:17 +0530 |
---|---|---|
committer | Laxman Dewangan <ldewangan@nvidia.com> | 2014-02-18 08:06:18 -0800 |
commit | e27e80b722f198f855672c6cc9027d3d2582a942 (patch) | |
tree | f03f8ef1f0381abf904142232d94e652ba88de1f | |
parent | f2c4d4a28b06c968e993bf4c6073d655614d7456 (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.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-tegra/wakeups-t12x.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-tegra/wakeups-t14x.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-tegra/wakeups-t2.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-tegra/wakeups-t3.c | 6 | ||||
-rw-r--r-- | drivers/irqchip/irq-tegra.c | 3 | ||||
-rw-r--r-- | include/linux/irqchip/tegra.h | 8 |
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; |