ARM: tegra12: set CPU rate to 2.2GHz for sku 0x87
[linux-3.10.git] / arch / arm / mach-tegra / wakeups-t2.c
1 /*
2  * Copyright (c) 2011, Google, Inc.
3  *
4  * Copyright (c) 2011-2013, NVIDIA CORPORATION.  All rights reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 #include <linux/kernel.h>
20 #include <linux/gpio.h>
21 #include <linux/init.h>
22 #include <linux/io.h>
23 #include <linux/irqchip/tegra.h>
24
25 #include <mach/gpio-tegra.h>
26 #include <mach/irqs.h>
27
28 #include "gpio-names.h"
29 #include "iomap.h"
30
31 /* TODO: We could populate the other table from this one at runtime
32  * instead of always searching twice */
33 static int tegra_gpio_wakes[] = {
34         [0]  = TEGRA_GPIO_PO5,
35         [1]  = TEGRA_GPIO_PV3,
36         [2]  = TEGRA_GPIO_PL1,
37         [3]  = TEGRA_GPIO_PB6,
38         [4]  = TEGRA_GPIO_PN7,
39         [5]  = TEGRA_GPIO_PA0,
40         [6]  = TEGRA_GPIO_PU5,
41         [7]  = TEGRA_GPIO_PU6,
42         [8]  = TEGRA_GPIO_PC7,
43         [9]  = TEGRA_GPIO_PS2,
44         [10] = TEGRA_GPIO_PAA1,
45         [11] = TEGRA_GPIO_PW3,
46         [12] = TEGRA_GPIO_PW2,
47         [13] = TEGRA_GPIO_PY6,
48         [14] = TEGRA_GPIO_PV6,
49         [15] = TEGRA_GPIO_PJ7,
50         [16] = -EINVAL,
51         [17] = -EINVAL,
52         [18] = -EINVAL,
53         [19] = -EINVAL,  /* TEGRA_USB1_VBUS, */
54         [20] = -EINVAL, /* TEGRA_USB3_VBUS, */
55         [21] = -EINVAL, /* TEGRA_USB1_ID, */
56         [22] = -EINVAL, /* TEGRA_USB3_ID, */
57         [23] = TEGRA_GPIO_PI5,
58         [24] = TEGRA_GPIO_PV2,
59         [25] = TEGRA_GPIO_PS4,
60         [26] = TEGRA_GPIO_PS5,
61         [27] = TEGRA_GPIO_PS0,
62         [28] = TEGRA_GPIO_PQ6,
63         [29] = TEGRA_GPIO_PQ7,
64         [30] = TEGRA_GPIO_PN2,
65 };
66
67 static int tegra_wake_event_irq[] = {
68         [0]  = -EAGAIN, /* Search the GPIO table */
69         [1]  = -EAGAIN,
70         [2]  = -EAGAIN,
71         [3]  = -EAGAIN,
72         [4]  = -EAGAIN,
73         [5]  = -EAGAIN,
74         [6]  = -EAGAIN,
75         [7]  = -EAGAIN,
76         [8]  = -EAGAIN,
77         [9]  = -EAGAIN,
78         [10] = -EAGAIN,
79         [11] = -EAGAIN,
80         [12] = -EAGAIN,
81         [13] = -EAGAIN,
82         [14] = -EAGAIN,
83         [15] = -EAGAIN,
84         [16] = INT_RTC,
85         [17] = INT_KBC,
86         [18] = INT_EXTERNAL_PMU,
87         [19] = -EINVAL, /* TEGRA_USB1_VBUS, */
88         [20] = -EINVAL, /* TEGRA_USB3_VBUS, */
89         [21] = -EINVAL, /* TEGRA_USB1_ID, */
90         [22] = -EINVAL, /* TEGRA_USB3_ID, */
91         [23] = -EAGAIN,
92         [24] = -EAGAIN,
93         [25] = -EAGAIN,
94         [26] = -EAGAIN,
95         [27] = -EAGAIN,
96         [28] = -EAGAIN,
97         [29] = -EAGAIN,
98         [30] = -EAGAIN,
99 };
100
101 static int __init tegra2_wakeup_table_init(void)
102 {
103         tegra_gpio_wake_table = tegra_gpio_wakes;
104         tegra_irq_wake_table = tegra_wake_event_irq;
105         tegra_wake_table_len = ARRAY_SIZE(tegra_gpio_wakes);
106         return 0;
107 }
108 postcore_initcall(tegra2_wakeup_table_init);