ARM: tegra12: set CPU rate to 2.2GHz for sku 0x87
[linux-3.10.git] / arch / arm / mach-tegra / board-tn8-power.c
1 /*
2  * arch/arm/mach-tegra/board-tn8-power.c
3  *
4  * Copyright (c) 2014 NVIDIA Corporation. All rights reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18  */
19
20 #include <linux/edp.h>
21 #include <linux/edpdev.h>
22 #include <mach/edp.h>
23 #include <linux/i2c.h>
24 #include <linux/platform_device.h>
25 #include <linux/resource.h>
26 #include <linux/io.h>
27 #include <linux/regulator/fixed.h>
28 #include <linux/regulator/machine.h>
29 #include <linux/irq.h>
30
31 #include <linux/gpio.h>
32 #include <linux/power/bq2419x-charger.h>
33 #include <linux/power/power_supply_extcon.h>
34 #include <linux/max17048_battery.h>
35 #include <linux/tegra-soc.h>
36 #include <linux/generic_adc_thermal.h>
37
38 #include <mach/irqs.h>
39
40 #include <asm/mach-types.h>
41 #include <linux/power/sbs-battery.h>
42
43 #include "pm.h"
44 #include "board.h"
45 #include "tegra-board-id.h"
46 #include "board-common.h"
47 #include "board-ardbeg.h"
48 #include "board-pmu-defines.h"
49 #include "devices.h"
50 #include "iomap.h"
51 #include "tegra-board-id.h"
52 #include "battery-ini-model-data.h"
53
54 #define PMC_CTRL                0x0
55 #define PMC_CTRL_INTR_LOW       (1 << 17)
56
57 struct batt_thermistor_adc_table {
58         int temp;
59         int min_volt;
60         int avg_volt;
61         int max_volt;
62 };
63
64 /* This table is only for P1761-A00 and P1761-A01*/
65 /* -40 to 125 degC */
66 static struct batt_thermistor_adc_table adc_table_default[] = {
67         {-40, 2315, 2361, 2401}, {-39, 2299, 2345, 2386},
68         {-38, 2283, 2329, 2369}, {-37, 2266, 2312, 2352},
69         {-36, 2248, 2294, 2335}, {-35, 2230, 2276, 2316},
70         {-34, 2211, 2257, 2297}, {-33, 2191, 2237, 2278},
71         {-32, 2171, 2217, 2258}, {-31, 2150, 2196, 2237},
72         {-30, 2129, 2175, 2215}, {-29, 2107, 2153, 2193},
73         {-28, 2085, 2130, 2170}, {-27, 2062, 2107, 2147},
74         {-26, 2038, 2083, 2123}, {-25, 2014, 2059, 2099},
75         {-24, 1990, 2034, 2074}, {-23, 1964, 2008, 2048},
76         {-22, 1939, 1982, 2022}, {-21, 1913, 1956, 1995},
77         {-20, 1886, 1929, 1968}, {-19, 1860, 1902, 1941},
78         {-18, 1832, 1874, 1913}, {-17, 1805, 1846, 1884},
79         {-16, 1777, 1818, 1856}, {-15, 1749, 1789, 1827},
80         {-14, 1720, 1760, 1797}, {-13, 1692, 1731, 1767},
81         {-12, 1663, 1701, 1737}, {-11, 1634, 1672, 1707},
82         {-10, 1604, 1642, 1677}, {-9, 1575, 1612, 1646},
83         {-8, 1546, 1582, 1616},  {-7, 1516, 1552, 1585},
84         {-6, 1487, 1522, 1554},  {-5, 1457, 1491, 1524},
85         {-4, 1428, 1461, 1493},  {-3, 1399, 1431, 1462},
86         {-2, 1369, 1401, 1432},  {-1, 1340, 1371, 1401},
87         {0, 1311, 1342, 1371},   {1, 1283, 1312, 1341},
88         {2, 1254, 1283, 1311},   {3, 1226, 1254, 1281},
89         {4, 1198, 1225, 1252},   {5, 1170, 1197, 1222},
90         {6, 1143, 1169, 1193},   {7, 1116, 1141, 1165},
91         {8, 1089, 1113, 1137},   {9, 1062, 1086, 1109},
92         {10, 1036, 1059, 1081},  {11, 1011, 1033, 1054},
93         {12, 986, 1007, 1028},   {13, 961, 982, 1002},
94         {14, 936, 956, 976},     {15, 912, 932, 951},
95         {16, 889, 908, 926},     {17, 866, 884, 901},
96         {18, 843, 861, 877},     {19, 821, 838, 854},
97         {20, 799, 815, 831},     {21, 778, 793, 809},
98         {22, 757, 772, 787},     {23, 737, 751, 765},
99         {24, 717, 731, 744},     {25, 697, 711, 724},
100         {26, 678, 691, 704},     {27, 659, 672, 685},
101         {28, 641, 654, 666},     {29, 623, 635, 648},
102         {30, 605, 618, 630},     {31, 588, 600, 613},
103         {32, 571, 584, 596},     {33, 555, 567, 579},
104         {34, 540, 551, 563},     {35, 524, 536, 548},
105         {36, 509, 521, 532},     {37, 495, 506, 517},
106         {38, 481, 492, 503},     {39, 467, 478, 489},
107         {40, 454, 464, 475},     {41, 441, 451, 462},
108         {42, 428, 439, 449},     {43, 416, 426, 437},
109         {44, 404, 414, 424},     {45, 392, 402, 413},
110         {46, 381, 391, 401},     {47, 370, 380, 390},
111         {48, 360, 369, 379},     {49, 349, 359, 369},
112         {50, 340, 349, 358},     {51, 330, 339, 348},
113         {52, 321, 330, 339},     {53, 311, 320, 329},
114         {54, 303, 311, 320},     {55, 294, 303, 311},
115         {56, 286, 294, 303},     {57, 278, 286, 295},
116         {58, 270, 278, 286},     {59, 262, 270, 279},
117         {60, 255, 263, 271},     {61, 248, 256, 264},
118         {62, 241, 249, 256},     {63, 234, 242, 249},
119         {64, 228, 235, 243},     {65, 222, 229, 236},
120         {66, 215, 223, 230},     {67, 210, 217, 224},
121         {68, 204, 211, 218},     {69, 198, 205, 212},
122         {70, 193, 199, 206},     {71, 188, 194, 201},
123         {72, 183, 189, 195},     {73, 178, 184, 190},
124         {74, 173, 179, 185},     {75, 168, 174, 180},
125         {76, 164, 170, 176},     {77, 159, 165, 171},
126         {78, 155, 161, 167},     {79, 151, 157, 162},
127         {80, 147, 152, 158},     {81, 143, 149, 154},
128         {82, 139, 145, 150},     {83, 136, 141, 146},
129         {84, 132, 137, 143},     {85, 129, 134, 139},
130         {86, 125, 130, 135},     {87, 122, 127, 132},
131         {88, 119, 124, 129},     {89, 116, 121, 125},
132         {90, 113, 118, 122},     {91, 110, 115, 119},
133         {92, 107, 112, 116},     {93, 105, 109, 113},
134         {94, 102, 106, 111},     {95, 100, 104, 108},
135         {96, 97, 101, 105},      {97, 95, 99, 103},
136         {98, 92, 96, 100},       {99, 90, 94, 98},
137         {100, 88, 92, 96},       {101, 86, 89, 93},
138         {102, 84, 87, 91},       {103, 82, 85, 89},
139         {104, 80, 83, 87},       {105, 78, 81, 85},
140         {106, 76, 79, 83},       {107, 74, 77, 81},
141         {108, 72, 75, 79},       {109, 70, 74, 77},
142         {110, 69, 72, 75},       {111, 67, 70, 74},
143         {112, 66, 69, 72},       {113, 64, 67, 70},
144         {114, 63, 65, 69},       {115, 61, 64, 67},
145         {116, 60, 63, 65},       {117, 58, 61, 64},
146         {118, 57, 60, 63},       {119, 56, 58, 61},
147         {120, 54, 57, 60},       {121, 53, 56, 58},
148         {122, 52, 55, 57},       {123, 51, 53, 56},
149         {124, 50, 52, 55},       {125, 49, 51, 54},
150 };
151
152 /* This table is only for P1761-A02 */
153 /* -40 to 125 degC */
154 static struct batt_thermistor_adc_table adc_table_a02[] = {
155         {-40, 3622, 3649, 3671}, {-39, 3611, 3638, 3660},
156         {-38, 3599, 3626, 3649}, {-37, 3586, 3614, 3637},
157         {-36, 3573, 3601, 3624}, {-35, 3560, 3588, 3611},
158         {-34, 3545, 3574, 3598}, {-33, 3531, 3559, 3583},
159         {-32, 3515, 3544, 3569}, {-31, 3499, 3529, 3553},
160         {-30, 3482, 3512, 3537}, {-29, 3465, 3495, 3521},
161         {-28, 3447, 3478, 3503}, {-27, 3429, 3459, 3485},
162         {-26, 3409, 3440, 3467}, {-25, 3389, 3421, 3448},
163         {-24, 3369, 3400, 3428}, {-23, 3348, 3379, 3407},
164         {-22, 3326, 3358, 3386}, {-21, 3303, 3335, 3363},
165         {-20, 3280, 3312, 3341}, {-19, 3256, 3288, 3317},
166         {-18, 3231, 3264, 3293}, {-17, 3206, 3239, 3268},
167         {-16, 3180, 3213, 3243}, {-15, 3153, 3186, 3216},
168         {-14, 3125, 3159, 3189}, {-13, 3097, 3131, 3161},
169         {-12, 3069, 3103, 3133}, {-11, 3039, 3073, 3104},
170         {-10, 3009, 3044, 3074}, {-9, 2979, 3013, 3044},
171         {-8, 2948, 2982, 3013},  {-7, 2916, 2950, 2981},
172         {-6, 2884, 2918, 2949},  {-5, 2851, 2885, 2916},
173         {-4, 2817, 2852, 2883},  {-3, 2784, 2818, 2849},
174         {-2, 2749, 2783, 2814},  {-1, 2715, 2748, 2780},
175         {0, 2679, 2713, 2744},   {1, 2644, 2677, 2708},
176         {2, 2608, 2641, 2672},   {3, 2572, 2605, 2635},
177         {4, 2535, 2568, 2598},   {5, 2498, 2531, 2561},
178         {6, 2461, 2493, 2524},   {7, 2424, 2456, 2486},
179         {8, 2387, 2418, 2448},   {9, 2349, 2380, 2409},
180         {10, 2311, 2342, 2371},  {11, 2273, 2304, 2333},
181         {12, 2236, 2266, 2294},  {13, 2198, 2227, 2255},
182         {14, 2160, 2189, 2217},  {15, 2122, 2151, 2178},
183         {16, 2084, 2113, 2139},  {17, 2047, 2074, 2101},
184         {18, 2009, 2036, 2062},  {19, 1972, 1999, 2024},
185         {20, 1935, 1961, 1986},  {21, 1898, 1923, 1948},
186         {22, 1861, 1886, 1910},  {23, 1825, 1849, 1872},
187         {24, 1789, 1812, 1835},  {25, 1753, 1776, 1798},
188         {26, 1717, 1740, 1762},  {27, 1681, 1704, 1727},
189         {28, 1645, 1669, 1691},  {29, 1610, 1634, 1657},
190         {30, 1576, 1599, 1622},  {31, 1541, 1565, 1588},
191         {32, 1508, 1531, 1554},  {33, 1474, 1498, 1521},
192         {34, 1441, 1465, 1488},  {35, 1409, 1433, 1456},
193         {36, 1377, 1401, 1424},  {37, 1346, 1370, 1393},
194         {38, 1315, 1339, 1362},  {39, 1285, 1308, 1332},
195         {40, 1255, 1278, 1302},  {41, 1225, 1249, 1272},
196         {42, 1197, 1220, 1244},  {43, 1168, 1192, 1215},
197         {44, 1141, 1164, 1187},  {45, 1114, 1137, 1160},
198         {46, 1087, 1110, 1133},  {47, 1061, 1084, 1107},
199         {48, 1035, 1058, 1081},  {49, 1010, 1033, 1056},
200         {50, 986, 1008, 1031},   {51, 962, 984, 1007},
201         {52, 938, 960, 983},     {53, 915, 937, 959},
202         {54, 893, 915, 937},     {55, 871, 893, 914},
203         {56, 849, 871, 893},     {57, 829, 850, 871},
204         {58, 808, 829, 850},     {59, 788, 809, 830},
205         {60, 769, 789, 810},     {61, 750, 770, 791},
206         {62, 731, 751, 772},     {63, 713, 733, 753},
207         {64, 695, 715, 735},     {65, 678, 697, 717},
208         {66, 661, 680, 700},     {67, 645, 664, 683},
209         {68, 629, 647, 667},     {69, 613, 632, 651},
210         {70, 598, 616, 635},     {71, 583, 601, 620},
211         {72, 569, 586, 605},     {73, 554, 572, 590},
212         {74, 541, 558, 576},     {75, 527, 545, 562},
213         {76, 514, 531, 549},     {77, 502, 518, 535},
214         {78, 489, 506, 523},     {79, 477, 494, 510},
215         {80, 466, 482, 498},     {81, 454, 470, 486},
216         {82, 443, 459, 475},     {83, 432, 447, 463},
217         {84, 422, 437, 452},     {85, 411, 426, 442},
218         {86, 401, 416, 431},     {87, 392, 406, 421},
219         {88, 382, 396, 411},     {89, 373, 387, 401},
220         {90, 364, 378, 392},     {91, 355, 369, 383},
221         {92, 347, 360, 374},     {93, 338, 351, 365},
222         {94, 330, 343, 357},     {95, 322, 335, 348},
223         {96, 315, 327, 340},     {97, 307, 320, 332},
224         {98, 300, 312, 325},     {99, 293, 305, 317},
225         {100, 286, 298, 310},    {101, 279, 291, 303},
226         {102, 273, 284, 296},    {103, 266, 278, 289},
227         {104, 260, 271, 283},    {105, 254, 265, 276},
228         {106, 248, 259, 270},    {107, 242, 253, 264},
229         {108, 237, 247, 258},    {109, 232, 242, 252},
230         {110, 226, 236, 247},    {111, 221, 231, 241},
231         {112, 216, 226, 236},    {113, 211, 221, 231},
232         {114, 206, 216, 225},    {115, 202, 211, 221},
233         {116, 197, 206, 216},    {117, 193, 202, 211},
234         {118, 188, 197, 206},    {119, 184, 193, 202},
235         {120, 180, 189, 198},    {121, 176, 185, 193},
236         {122, 172, 181, 189},    {123, 169, 177, 185},
237         {124, 165, 173, 181},    {125, 161, 169, 177}
238 };
239
240 static struct batt_thermistor_adc_table *adc_tbl;
241 static int adc_tbl_size;
242
243 static int tn8_batt_adc_to_temp(struct gadc_thermal_platform_data *pdata,
244                                 int val, int val2)
245 {
246         int temp, i, f_part = 0;
247         struct batt_thermistor_adc_table *entry = adc_tbl;
248
249         for (i = 0; i < adc_tbl_size; i++) {
250                 if (val >= entry->avg_volt)
251                         break;
252
253                 entry++;
254         }
255
256         if (i == adc_tbl_size)
257                 temp = pdata->last_index_temp * 10000;
258         else {
259                 /* Find floating part with interpolate computing */
260                 f_part = ((val - entry->min_volt) * 10)/
261                                 (entry->max_volt - entry->min_volt);
262                 temp = entry->temp;
263                 temp = (temp * 10000) + (f_part * 1000);
264         }
265
266         return temp;
267 }
268
269 static struct gadc_thermal_platform_data gadc_thermal_battery_pdata = {
270         .iio_channel_name = "battery-temp-channel",
271         .tz_name = "battery-temp",
272         .temp_offset = 0,
273         .adc_to_temp = tn8_batt_adc_to_temp,
274         .first_index_temp = -40,
275         .last_index_temp = 125,
276 };
277
278 static struct platform_device gadc_thermal_battery = {
279         .name   = "generic-adc-thermal",
280         .id     = 0,
281         .dev    = {
282                 .platform_data = &gadc_thermal_battery_pdata,
283         },
284 };
285
286 static struct power_supply_extcon_plat_data extcon_pdata = {
287         .extcon_name = "tegra-udc",
288 };
289
290 static struct platform_device power_supply_extcon_device = {
291         .name   = "power-supply-extcon",
292         .id     = -1,
293         .dev    = {
294                 .platform_data = &extcon_pdata,
295         },
296 };
297
298 int __init tn8_regulator_init(void)
299 {
300         void __iomem *pmc = IO_ADDRESS(TEGRA_PMC_BASE);
301         u32 pmc_ctrl;
302         struct board_info board_info;
303
304         tegra_get_board_info(&board_info);
305
306         /* TPS65913: Normal state of INT request line is LOW.
307          * configure the power management controller to trigger PMU
308          * interrupts when HIGH.
309          */
310         pmc_ctrl = readl(pmc + PMC_CTRL);
311         writel(pmc_ctrl | PMC_CTRL_INTR_LOW, pmc + PMC_CTRL);
312
313         if (board_info.board_id == BOARD_P1761) {
314                 platform_device_register(&gadc_thermal_battery);
315
316                 if (board_info.fab == BOARD_FAB_A02) {
317                         adc_tbl = adc_table_a02;
318                         adc_tbl_size = ARRAY_SIZE(adc_table_a02);
319                 } else {
320                         adc_tbl = adc_table_default;
321                         adc_tbl_size = ARRAY_SIZE(adc_table_default);
322                 }
323         }
324
325         platform_device_register(&power_supply_extcon_device);
326         return 0;
327 }
328
329 int __init tn8_fixed_regulator_init(void)
330 {
331         return 0;
332 }
333
334 int __init tn8_edp_init(void)
335 {
336         unsigned int regulator_mA;
337
338         regulator_mA = get_maximum_cpu_current_supported();
339         if (!regulator_mA)
340                 regulator_mA = 12000;
341
342         pr_info("%s: CPU regulator %d mA\n", __func__, regulator_mA);
343         tegra_init_cpu_edp_limits(regulator_mA);
344
345         /* gpu maximum current */
346         regulator_mA = 11200;
347         pr_info("%s: GPU regulator %d mA\n", __func__, regulator_mA);
348
349         tegra_init_gpu_edp_limits(regulator_mA);
350
351         return 0;
352 }