ARM: tegra12: set CPU rate to 2.2GHz for sku 0x87
[linux-3.10.git] / arch / arm / mach-tegra / panel-s-1080p-5.c
1 /*
2  * arch/arm/mach-tegra/panel-s-1080p-5.c
3  *
4  * Copyright (c) 2012-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 <mach/dc.h>
20 #include <linux/delay.h>
21 #include <linux/gpio.h>
22 #include <linux/tegra_pwm_bl.h>
23 #include <linux/regulator/consumer.h>
24 #include <linux/pwm_backlight.h>
25 #include <linux/mfd/max8831.h>
26 #include <linux/max8831_backlight.h>
27 #include <linux/leds.h>
28 #include <linux/ioport.h>
29 #include <linux/lm3528.h>
30 #include <linux/export.h>
31
32 #include "gpio-names.h"
33 #include "board-panel.h"
34 #include "board.h"
35
36 #define DSI_PANEL_RESET         1
37
38 #define DC_CTRL_MODE            TEGRA_DC_OUT_CONTINUOUS_MODE
39
40 static struct regulator *vdd_lcd_s_1v8;
41 static struct regulator *vdd_sys_bl_3v7;
42
43 static bool dsi_s_1080p_5_reg_requested;
44 static bool dsi_s_1080p_5_gpio_requested;
45 static bool is_bl_powered;
46
47 static struct tegra_dc_sd_settings dsi_s_1080p_5_sd_settings = {
48         .enable = 1, /* enabled by default */
49         .use_auto_pwm = false,
50         .hw_update_delay = 0,
51         .bin_width = -1,
52         .aggressiveness = 5,
53         .use_vid_luma = false,
54         .phase_in_adjustments = 0,
55         .k_limit_enable = true,
56         .k_limit = 180,
57         .sd_window_enable = false,
58         .soft_clipping_enable = true,
59         /* Low soft clipping threshold to compensate for aggressive k_limit */
60         .soft_clipping_threshold = 128,
61         .smooth_k_enable = true,
62         .smooth_k_incr = 4,
63         /* Default video coefficients */
64         .coeff = {5, 9, 2},
65         .fc = {0, 0},
66         /* Immediate backlight changes */
67         .blp = {1024, 255},
68         /* Gammas: R: 2.2 G: 2.2 B: 2.2 */
69         /* Default BL TF */
70         .bltf = {
71                         {
72                                 {57, 65, 73, 82},
73                                 {92, 103, 114, 125},
74                                 {138, 150, 164, 178},
75                                 {193, 208, 224, 241},
76                         },
77                 },
78         /* Default LUT */
79         .lut = {
80                         {
81                                 {255, 255, 255},
82                                 {199, 199, 199},
83                                 {153, 153, 153},
84                                 {116, 116, 116},
85                                 {85, 85, 85},
86                                 {59, 59, 59},
87                                 {36, 36, 36},
88                                 {17, 17, 17},
89                                 {0, 0, 0},
90                         },
91                 },
92         .sd_brightness = &sd_brightness,
93         .use_vpulse2 = true,
94 };
95
96 #ifdef CONFIG_TEGRA_DC_CMU
97 static struct tegra_dc_cmu dsi_s_1080p_5_cmu = {
98         /* lut1 maps sRGB to linear space. */
99         {
100                 0,    1,    2,    4,    5,    6,    7,    9,
101                 10,   11,   12,   14,   15,   16,   18,   20,
102                 21,   23,   25,   27,   29,   31,   33,   35,
103                 37,   40,   42,   45,   48,   50,   53,   56,
104                 59,   62,   66,   69,   72,   76,   79,   83,
105                 87,   91,   95,   99,   103,  107,  112,  116,
106                 121,  126,  131,  136,  141,  146,  151,  156,
107                 162,  168,  173,  179,  185,  191,  197,  204,
108                 210,  216,  223,  230,  237,  244,  251,  258,
109                 265,  273,  280,  288,  296,  304,  312,  320,
110                 329,  337,  346,  354,  363,  372,  381,  390,
111                 400,  409,  419,  428,  438,  448,  458,  469,
112                 479,  490,  500,  511,  522,  533,  544,  555,
113                 567,  578,  590,  602,  614,  626,  639,  651,
114                 664,  676,  689,  702,  715,  728,  742,  755,
115                 769,  783,  797,  811,  825,  840,  854,  869,
116                 884,  899,  914,  929,  945,  960,  976,  992,
117                 1008, 1024, 1041, 1057, 1074, 1091, 1108, 1125,
118                 1142, 1159, 1177, 1195, 1213, 1231, 1249, 1267,
119                 1286, 1304, 1323, 1342, 1361, 1381, 1400, 1420,
120                 1440, 1459, 1480, 1500, 1520, 1541, 1562, 1582,
121                 1603, 1625, 1646, 1668, 1689, 1711, 1733, 1755,
122                 1778, 1800, 1823, 1846, 1869, 1892, 1916, 1939,
123                 1963, 1987, 2011, 2035, 2059, 2084, 2109, 2133,
124                 2159, 2184, 2209, 2235, 2260, 2286, 2312, 2339,
125                 2365, 2392, 2419, 2446, 2473, 2500, 2527, 2555,
126                 2583, 2611, 2639, 2668, 2696, 2725, 2754, 2783,
127                 2812, 2841, 2871, 2901, 2931, 2961, 2991, 3022,
128                 3052, 3083, 3114, 3146, 3177, 3209, 3240, 3272,
129                 3304, 3337, 3369, 3402, 3435, 3468, 3501, 3535,
130                 3568, 3602, 3636, 3670, 3705, 3739, 3774, 3809,
131                 3844, 3879, 3915, 3950, 3986, 4022, 4059, 4095,
132         },
133         /* csc */
134         {
135                 0x0FE, 0x001, 0x3FF,
136                 0x3FF, 0x0E3, 0x004,
137                 0x000, 0x003, 0x0D9,
138         },
139         /* lut2 maps linear space to sRGB */
140         {
141                 0, 3, 6, 8, 11, 13, 15, 17,
142                 19, 21, 22, 24, 25, 26, 27, 28,
143                 29, 29, 30, 30, 31, 31, 31, 32,
144                 32, 32, 32, 32, 32, 32, 32, 32,
145                 32, 32, 31, 31, 32, 32, 32, 32,
146                 32, 32, 32, 33, 33, 33, 33, 34,
147                 34, 34, 35, 35, 36, 36, 36, 37,
148                 37, 38, 38, 39, 39, 40, 40, 41,
149                 41, 42, 42, 43, 43, 44, 45, 45,
150                 46, 46, 47, 47, 47, 48, 48, 49,
151                 49, 50, 50, 51, 51, 51, 52, 52,
152                 52, 53, 53, 53, 54, 54, 54, 55,
153                 55, 55, 55, 56, 56, 56, 56, 57,
154                 57, 57, 57, 58, 58, 58, 58, 58,
155                 59, 59, 59, 59, 59, 60, 60, 60,
156                 60, 60, 60, 61, 61, 61, 61, 61,
157                 61, 62, 62, 62, 62, 62, 62, 63,
158                 63, 63, 63, 63, 63, 64, 64, 64,
159                 64, 64, 65, 65, 65, 65, 65, 66,
160                 66, 66, 66, 66, 67, 67, 67, 67,
161                 68, 68, 68, 68, 68, 69, 69, 69,
162                 69, 70, 70, 70, 70, 71, 71, 71,
163                 71, 72, 72, 72, 72, 72, 73, 73,
164                 73, 73, 74, 74, 74, 74, 75, 75,
165                 75, 75, 76, 76, 76, 76, 77, 77,
166                 77, 77, 78, 78, 78, 78, 78, 79,
167                 79, 79, 79, 79, 80, 80, 80, 80,
168                 81, 81, 81, 81, 81, 82, 82, 82,
169                 82, 82, 82, 83, 83, 83, 83, 83,
170                 83, 84, 84, 84, 84, 84, 84, 85,
171                 85, 85, 85, 85, 85, 85, 86, 86,
172                 86, 86, 86, 86, 86, 87, 87, 87,
173                 87, 87, 87, 87, 87, 88, 88, 88,
174                 88, 88, 88, 88, 88, 88, 89, 89,
175                 89, 89, 89, 89, 89, 89, 89, 90,
176                 90, 90, 90, 90, 90, 90, 90, 90,
177                 90, 90, 90, 91, 91, 91, 91, 91,
178                 91, 91, 91, 91, 91, 91, 91, 92,
179                 92, 92, 92, 92, 92, 92, 92, 92,
180                 92, 92, 92, 92, 92, 93, 93, 93,
181                 93, 93, 93, 93, 93, 93, 93, 93,
182                 93, 93, 93, 93, 93, 94, 94, 94,
183                 94, 94, 94, 94, 94, 94, 94, 94,
184                 94, 94, 94, 94, 94, 94, 95, 95,
185                 95, 95, 95, 95, 95, 95, 95, 95,
186                 95, 95, 95, 95, 95, 96, 96, 96,
187                 96, 96, 96, 96, 96, 96, 96, 96,
188                 96, 96, 96, 96, 97, 97, 97, 97,
189                 97, 97, 97, 97, 97, 97, 97, 97,
190                 97, 98, 98, 98, 98, 98, 98, 98,
191                 98, 98, 98, 98, 98, 98, 99, 99,
192                 99, 99, 99, 99, 99, 99, 99, 99,
193                 99, 100, 100, 100, 100, 100, 100, 100,
194                 100, 100, 100, 100, 100, 101, 101, 101,
195                 101, 101, 101, 101, 101, 101, 101, 101,
196                 102, 102, 102, 102, 102, 102, 102, 102,
197                 102, 102, 102, 103, 103, 103, 103, 103,
198                 103, 103, 103, 103, 103, 104, 104, 104,
199                 104, 104, 104, 104, 104, 104, 104, 104,
200                 105, 105, 105, 105, 105, 105, 105, 105,
201                 105, 105, 105, 106, 106, 106, 106, 106,
202                 106, 106, 106, 106, 106, 107, 107, 107,
203                 107, 107, 107, 107, 107, 107, 107, 107,
204                 108, 108, 108, 108, 108, 108, 108, 108,
205                 109, 110, 110, 111, 112, 113, 113, 114,
206                 114, 115, 116, 116, 117, 117, 118, 119,
207                 119, 120, 120, 121, 121, 122, 122, 123,
208                 123, 123, 124, 124, 125, 125, 126, 126,
209                 127, 127, 128, 128, 129, 129, 130, 130,
210                 131, 131, 132, 132, 133, 133, 134, 134,
211                 135, 135, 136, 137, 137, 138, 138, 139,
212                 139, 140, 140, 141, 141, 142, 142, 143,
213                 143, 143, 144, 144, 145, 145, 146, 146,
214                 146, 147, 147, 148, 148, 148, 149, 149,
215                 150, 150, 150, 151, 151, 151, 152, 152,
216                 152, 153, 153, 153, 154, 154, 155, 155,
217                 155, 156, 156, 156, 157, 157, 158, 158,
218                 158, 159, 159, 160, 160, 160, 161, 161,
219                 162, 162, 163, 163, 164, 164, 164, 165,
220                 165, 166, 166, 167, 167, 168, 168, 169,
221                 169, 170, 170, 171, 171, 172, 172, 173,
222                 173, 174, 174, 175, 175, 176, 176, 176,
223                 177, 177, 178, 178, 179, 179, 180, 180,
224                 180, 181, 181, 182, 182, 182, 183, 183,
225                 184, 184, 184, 185, 185, 185, 186, 186,
226                 187, 187, 187, 188, 188, 188, 189, 189,
227                 189, 190, 190, 190, 190, 191, 191, 191,
228                 192, 192, 192, 193, 193, 193, 193, 194,
229                 194, 194, 195, 195, 195, 195, 196, 196,
230                 196, 196, 197, 197, 197, 197, 198, 198,
231                 198, 198, 199, 199, 199, 199, 199, 200,
232                 200, 200, 200, 201, 201, 201, 201, 202,
233                 202, 202, 202, 202, 203, 203, 203, 203,
234                 204, 204, 204, 204, 204, 205, 205, 205,
235                 205, 205, 206, 206, 206, 206, 207, 207,
236                 207, 207, 208, 208, 208, 208, 208, 209,
237                 209, 209, 209, 210, 210, 210, 210, 211,
238                 211, 211, 211, 212, 212, 212, 212, 213,
239                 213, 213, 213, 214, 214, 214, 214, 215,
240                 215, 215, 215, 216, 216, 216, 216, 217,
241                 217, 217, 218, 218, 218, 218, 219, 219,
242                 219, 219, 220, 220, 220, 220, 221, 221,
243                 221, 221, 222, 222, 222, 223, 223, 223,
244                 223, 224, 224, 224, 224, 225, 225, 225,
245                 225, 226, 226, 226, 227, 227, 227, 227,
246                 228, 228, 228, 228, 229, 229, 229, 229,
247                 230, 230, 230, 230, 231, 231, 231, 231,
248                 232, 232, 232, 232, 233, 233, 233, 233,
249                 234, 234, 234, 234, 235, 235, 235, 235,
250                 236, 236, 236, 236, 237, 237, 237, 237,
251                 238, 238, 238, 238, 239, 239, 239, 239,
252                 240, 240, 240, 240, 241, 241, 241, 241,
253                 241, 242, 242, 242, 242, 243, 243, 243,
254                 243, 244, 244, 244, 244, 245, 245, 245,
255                 245, 245, 246, 246, 246, 246, 247, 247,
256                 247, 247, 248, 248, 248, 248, 248, 249,
257                 249, 249, 249, 250, 250, 250, 250, 250,
258                 251, 251, 251, 251, 252, 252, 252, 252,
259                 252, 253, 253, 253, 253, 253, 254, 254,
260                 254, 254, 254, 255, 255, 255, 255, 255,
261         },
262 };
263 #endif
264
265 static tegra_dc_bl_output dsi_s_1080p_5_max8831_bl_response_curve = {
266         0, 2, 5, 7, 10, 13, 15, 18,
267         20, 23, 26, 27, 29, 30, 31, 33,
268         34, 36, 37, 39, 40, 41, 42, 44,
269         45, 46, 47, 48, 50, 51, 52, 53,
270         54, 55, 56, 57, 58, 59, 60, 61,
271         62, 63, 64, 65, 66, 67, 68, 69,
272         70, 71, 73, 74, 75, 76, 78, 79,
273         80, 82, 83, 84, 86, 86, 87, 88,
274         89, 89, 90, 91, 92, 92, 93, 94,
275         95, 96, 97, 98, 99, 100, 101, 102,
276         103, 104, 105, 106, 107, 107, 108, 109,
277         110, 111, 112, 112, 113, 114, 114, 115,
278         115, 116, 117, 117, 118, 119, 120, 121,
279         121, 122, 123, 124, 125, 126, 127, 128,
280         129, 130, 131, 132, 133, 134, 135, 136,
281         136, 138, 139, 140, 141, 142, 143, 144,
282         145, 146, 147, 148, 149, 150, 151, 152,
283         153, 154, 155, 155, 156, 157, 158, 159,
284         161, 162, 163, 164, 165, 166, 167, 167,
285         167, 167, 168, 168, 168, 168, 168, 169,
286         169, 170, 171, 172, 172, 173, 174, 175,
287         176, 177, 178, 179, 180, 181, 182, 183,
288         184, 184, 185, 186, 187, 188, 189, 190,
289         191, 192, 193, 194, 195, 195, 196, 197,
290         198, 199, 200, 201, 202, 203, 204, 205,
291         206, 206, 207, 207, 208, 208, 209, 209,
292         210, 211, 211, 212, 213, 213, 214, 215,
293         216, 216, 217, 218, 219, 220, 221, 222,
294         223, 224, 225, 226, 227, 228, 229, 230,
295         231, 232, 233, 235, 236, 237, 238, 239,
296         240, 241, 242, 243, 244, 245, 246, 247,
297         248, 249, 250, 251, 252, 253, 254, 255
298 };
299
300 static tegra_dc_bl_output dsi_s_1080p_5_lm3528_bl_response_curve = {
301         0, 26, 55, 72, 83, 93, 100, 107,
302         112, 117, 121, 125, 129, 132, 135, 138,
303         141, 143, 146, 148, 150, 152, 154, 156,
304         157, 159, 161, 162, 164, 165, 167, 168,
305         169, 171, 172, 173, 174, 175, 176, 177,
306         179, 180, 181, 182, 182, 183, 184, 185,
307         186, 187, 188, 189, 189, 190, 191, 192,
308         192, 193, 194, 195, 195, 196, 197, 197,
309         198, 199, 199, 200, 200, 201, 202, 202,
310         203, 203, 204, 205, 205, 206, 206, 207,
311         207, 208, 208, 209, 209, 210, 210, 211,
312         211, 212, 212, 212, 213, 213, 214, 214,
313         215, 215, 216, 216, 216, 217, 217, 218,
314         218, 218, 219, 219, 220, 220, 220, 221,
315         221, 221, 222, 222, 223, 223, 223, 224,
316         224, 224, 225, 225, 225, 226, 226, 226,
317         227, 227, 227, 228, 228, 228, 228, 229,
318         229, 229, 230, 230, 230, 231, 231, 231,
319         231, 232, 232, 232, 233, 233, 233, 233,
320         234, 234, 234, 234, 235, 235, 235, 236,
321         236, 236, 236, 237, 237, 237, 237, 238,
322         238, 238, 238, 239, 239, 239, 239, 240,
323         240, 240, 240, 240, 241, 241, 241, 241,
324         242, 242, 242, 242, 242, 243, 243, 243,
325         243, 244, 244, 244, 244, 244, 245, 245,
326         245, 245, 245, 246, 246, 246, 246, 246,
327         247, 247, 247, 247, 247, 248, 248, 248,
328         248, 248, 249, 249, 249, 249, 249, 250,
329         250, 250, 250, 250, 250, 251, 251, 251,
330         251, 251, 252, 252, 252, 252, 252, 252,
331         253, 253, 253, 253, 253, 253, 254, 254,
332         254, 254, 254, 254, 255, 255, 255, 255
333 };
334
335 static p_tegra_dc_bl_output dsi_s_1080p_5_bl_response_curve;
336
337 static int __maybe_unused dsi_s_1080p_5_bl_notify(struct device *unused,
338                                                         int brightness)
339 {
340         int cur_sd_brightness = atomic_read(&sd_brightness);
341
342         /* SD brightness is a percentage */
343         brightness = (brightness * cur_sd_brightness) / 255;
344
345         /* Apply any backlight response curve */
346         if (brightness > 255)
347                 pr_info("Error: Brightness > 255!\n");
348         else
349                 brightness = dsi_s_1080p_5_bl_response_curve[brightness];
350
351         return brightness;
352 }
353 static bool __maybe_unused dsi_s_1080p_5_check_bl_power(void)
354 {
355         return is_bl_powered;
356 }
357
358 /*
359         Sharp uses I2C max8831 blacklight device
360 */
361 static struct led_info dsi_s_1080p_5_max8831_leds[] = {
362         [MAX8831_ID_LED3] = {
363                 .name = "max8831:red:pluto",
364         },
365         [MAX8831_ID_LED4] = {
366                 .name = "max8831:green:pluto",
367         },
368         [MAX8831_ID_LED5] = {
369                 .name = "max8831:blue:pluto",
370         },
371 };
372
373 static struct platform_max8831_backlight_data dsi_s_1080p_5_max8831_bl_data = {
374         .id     = -1,
375         .name   = "pluto_display_bl",
376         .max_brightness = MAX8831_BL_LEDS_MAX_CURR,
377         .dft_brightness = 100,
378         .notify = dsi_s_1080p_5_bl_notify,
379         .is_powered = dsi_s_1080p_5_check_bl_power,
380 };
381
382 static struct max8831_subdev_info dsi_s_1080p_5_max8831_subdevs[] = {
383         {
384                 .id = MAX8831_ID_LED3,
385                 .name = "max8831_led_bl",
386                 .platform_data = &dsi_s_1080p_5_max8831_leds[MAX8831_ID_LED3],
387                 .pdata_size = sizeof(
388                                 dsi_s_1080p_5_max8831_leds[MAX8831_ID_LED3]),
389         }, {
390                 .id = MAX8831_ID_LED4,
391                 .name = "max8831_led_bl",
392                 .platform_data = &dsi_s_1080p_5_max8831_leds[MAX8831_ID_LED4],
393                 .pdata_size = sizeof(
394                                 dsi_s_1080p_5_max8831_leds[MAX8831_ID_LED4]),
395         }, {
396                 .id = MAX8831_ID_LED5,
397                 .name = "max8831_led_bl",
398                 .platform_data = &dsi_s_1080p_5_max8831_leds[MAX8831_ID_LED5],
399                 .pdata_size = sizeof(
400                                 dsi_s_1080p_5_max8831_leds[MAX8831_ID_LED5]),
401         }, {
402                 .id = MAX8831_BL_LEDS,
403                 .name = "max8831_display_bl",
404                 .platform_data = &dsi_s_1080p_5_max8831_bl_data,
405                 .pdata_size = sizeof(dsi_s_1080p_5_max8831_bl_data),
406         },
407 };
408
409 static struct max8831_platform_data dsi_s_1080p_5_max8831 = {
410         .num_subdevs = ARRAY_SIZE(dsi_s_1080p_5_max8831_subdevs),
411         .subdevs = dsi_s_1080p_5_max8831_subdevs,
412 };
413
414 static __maybe_unused struct i2c_board_info dsi_s_1080p_5_i2c_led_info = {
415         .type           = "max8831",
416         .addr           = 0x4d,
417         .platform_data  = &dsi_s_1080p_5_max8831,
418 };
419
420 static struct lm3528_platform_data lm3528_pdata = {
421         .dft_brightness = 200,
422         .is_powered = dsi_s_1080p_5_check_bl_power,
423         .notify = dsi_s_1080p_5_bl_notify,
424 };
425
426 static __maybe_unused struct i2c_board_info
427         lm3528_dsi_s_1080p_5_i2c_led_info = {
428         .type           = "lm3528_display_bl",
429         .addr           = 0x36,
430         .platform_data  = &lm3528_pdata,
431 };
432
433 static int __init dsi_s_1080p_5_register_bl_dev(void)
434 {
435         struct i2c_board_info *bl_info;
436         struct board_info board_info;
437         tegra_get_board_info(&board_info);
438
439         switch (board_info.board_id) {
440         case BOARD_E1670: /* Atlantis ERS */
441         case BOARD_E1671: /* Atlantis POP Socket */
442         case BOARD_E1740: /* Atlantis FFD */
443                 bl_info = &lm3528_dsi_s_1080p_5_i2c_led_info;
444                 dsi_s_1080p_5_bl_response_curve =
445                                 dsi_s_1080p_5_lm3528_bl_response_curve;
446                 break;
447         case BOARD_E1680: /* Ceres ERS */
448         case BOARD_E1681: /* Ceres DSC Socket */
449         case BOARD_E1690: /* Ceres FFD */
450                 bl_info = &dsi_s_1080p_5_i2c_led_info;
451                 dsi_s_1080p_5_bl_response_curve =
452                                 dsi_s_1080p_5_max8831_bl_response_curve;
453                 break;
454         case BOARD_E1580: /* Pluto */
455         /* fall through */
456         default:
457                 bl_info = &dsi_s_1080p_5_i2c_led_info;
458                 dsi_s_1080p_5_bl_response_curve =
459                                 dsi_s_1080p_5_max8831_bl_response_curve;
460                 break;
461         }
462
463         return i2c_register_board_info(1, bl_info, 1);
464 }
465
466 struct tegra_dc_mode dsi_s_1080p_5_modes[] = {
467         /* 1080x1920@60Hz */
468         {
469                 .pclk = 143700000,
470                 .h_ref_to_sync = 4,
471                 .v_ref_to_sync = 1,
472                 .h_sync_width = 10,
473                 .v_sync_width = 2,
474                 .h_back_porch = 50,
475                 .v_back_porch = 4,
476                 .h_active = 1080,
477                 .v_active = 1920,
478                 .h_front_porch = 100,
479                 .v_front_porch = 4,
480         },
481 };
482 static int dsi_s_1080p_5_reg_get(void)
483 {
484         int err = 0;
485
486         if (dsi_s_1080p_5_reg_requested)
487                 return 0;
488
489         vdd_lcd_s_1v8 = regulator_get(NULL, "vdd_lcd_1v8_s");
490         if (IS_ERR(vdd_lcd_s_1v8)) {
491                 pr_err("vdd_lcd_1v8_s regulator get failed\n");
492                 err = PTR_ERR(vdd_lcd_s_1v8);
493                 vdd_lcd_s_1v8 = NULL;
494                 goto fail;
495         }
496
497         vdd_sys_bl_3v7 = regulator_get(NULL, "vdd_sys_bl");
498         if (IS_ERR(vdd_sys_bl_3v7)) {
499                 pr_err("vdd_sys_bl regulator get failed\n");
500                 err = PTR_ERR(vdd_sys_bl_3v7);
501                 vdd_sys_bl_3v7 = NULL;
502                 goto fail;
503         }
504
505         dsi_s_1080p_5_reg_requested = true;
506         return 0;
507 fail:
508         return err;
509 }
510
511 static struct tegra_dsi_out dsi_s_1080p_5_pdata;
512 static int dsi_s_1080p_5_gpio_get(void)
513 {
514         int err = 0;
515
516         if (dsi_s_1080p_5_gpio_requested)
517                 return 0;
518
519         err = gpio_request(dsi_s_1080p_5_pdata.dsi_panel_rst_gpio, "panel rst");
520         if (err < 0) {
521                 pr_err("panel reset gpio request failed\n");
522                 goto fail;
523         }
524
525         err = gpio_request(dsi_s_1080p_5_pdata.dsi_panel_bl_en_gpio,
526                 "panel backlight");
527         if (err < 0) {
528                 pr_err("panel backlight gpio request failed\n");
529                 goto fail;
530         }
531
532
533
534         dsi_s_1080p_5_gpio_requested = true;
535         return 0;
536 fail:
537         return err;
538 }
539
540 static int dsi_s_1080p_5_enable(struct device *dev)
541 {
542         int err = 0;
543         err = dsi_s_1080p_5_reg_get();
544         if (err < 0) {
545                 pr_err("dsi regulator get failed\n");
546                 goto fail;
547         }
548
549         err = dsi_s_1080p_5_gpio_get();
550         if (err < 0) {
551                 pr_err("dsi gpio request failed\n");
552                 goto fail;
553         }
554         gpio_direction_output(dsi_s_1080p_5_pdata.dsi_panel_rst_gpio, 0);
555
556         if (vdd_lcd_s_1v8) {
557                 err = regulator_enable(vdd_lcd_s_1v8);
558                 if (err < 0) {
559                         pr_err("vdd_lcd_1v8_s regulator enable failed\n");
560                         goto fail;
561                 }
562         }
563         usleep_range(3000, 5000);
564
565         if (vdd_sys_bl_3v7) {
566                 err = regulator_enable(vdd_sys_bl_3v7);
567                 if (err < 0) {
568                         pr_err("vdd_sys_bl regulator enable failed\n");
569                         goto fail;
570                 }
571         }
572         gpio_direction_output(dsi_s_1080p_5_pdata.dsi_panel_bl_en_gpio, 1);
573         mdelay(50);
574
575 #if DSI_PANEL_RESET
576         gpio_set_value(dsi_s_1080p_5_pdata.dsi_panel_rst_gpio, 1);
577         msleep(20);
578 #endif
579         is_bl_powered = true;
580
581         return 0;
582 fail:
583         return err;
584 }
585
586 static u8 panel_internal[] = {0x51, 0x0f, 0xff};
587
588 static struct tegra_dsi_cmd dsi_s_1080p_5_init_cmd[] = {
589
590         DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xb0, 0x04),
591         DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_NO_OP, 0x0),
592         DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_NO_OP, 0x0),
593         DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xd6, 0x01),
594         DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_internal),
595         DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0x53, 0x04),
596         DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_SET_DISPLAY_ON, 0x0),
597         DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_EXIT_SLEEP_MODE, 0x0),
598 };
599
600 static struct tegra_dsi_cmd dsi_s_1080p_5_suspend_cmd[] = {
601         DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_SET_DISPLAY_OFF, 0x0),
602         DSI_DLY_MS(50),
603         DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_ENTER_SLEEP_MODE, 0x0),
604 };
605
606 static struct tegra_dsi_out dsi_s_1080p_5_pdata = {
607         .n_data_lanes = 4,
608
609         .refresh_rate = 60,
610         .video_data_type = TEGRA_DSI_VIDEO_TYPE_VIDEO_MODE,
611         .video_clock_mode = TEGRA_DSI_VIDEO_CLOCK_CONTINUOUS,
612         .video_burst_mode = TEGRA_DSI_VIDEO_NONE_BURST_MODE_WITH_SYNC_END,
613         .controller_vs = DSI_VS_1,
614         .pixel_format = TEGRA_DSI_PIXEL_FORMAT_24BIT_P,
615         .virtual_channel = TEGRA_DSI_VIRTUAL_CHANNEL_0,
616
617         .panel_reset = DSI_PANEL_RESET,
618         .power_saving_suspend = true,
619
620         .dsi_init_cmd = dsi_s_1080p_5_init_cmd,
621         .n_init_cmd = ARRAY_SIZE(dsi_s_1080p_5_init_cmd),
622
623         .dsi_suspend_cmd = dsi_s_1080p_5_suspend_cmd,
624         .n_suspend_cmd = ARRAY_SIZE(dsi_s_1080p_5_suspend_cmd),
625 };
626
627 static int dsi_s_1080p_5_disable(void)
628 {
629         /* delay between sleep in and reset low */
630         msleep(100);
631
632         gpio_set_value(dsi_s_1080p_5_pdata.dsi_panel_rst_gpio, 0);
633         usleep_range(3000, 5000);
634
635         gpio_set_value(dsi_s_1080p_5_pdata.dsi_panel_bl_en_gpio, 0);
636         if (vdd_sys_bl_3v7)
637                 regulator_disable(vdd_sys_bl_3v7);
638         is_bl_powered = false;
639         usleep_range(3000, 5000);
640
641         if (vdd_lcd_s_1v8)
642                 regulator_disable(vdd_lcd_s_1v8);
643
644         return 0;
645 }
646
647 static void dsi_s_1080p_5_dc_out_init(struct tegra_dc_out *dc)
648 {
649         dc->dsi = &dsi_s_1080p_5_pdata;
650         dc->parent_clk = "pll_d_out0";
651         dc->modes = dsi_s_1080p_5_modes;
652         dc->n_modes = ARRAY_SIZE(dsi_s_1080p_5_modes);
653         dc->enable = dsi_s_1080p_5_enable;
654         dc->disable = dsi_s_1080p_5_disable;
655         dc->width = 62;
656         dc->height = 110;
657         dc->flags = DC_CTRL_MODE;
658 }
659 static void dsi_s_1080p_5_fb_data_init(struct tegra_fb_data *fb)
660 {
661         fb->xres = dsi_s_1080p_5_modes[0].h_active;
662         fb->yres = dsi_s_1080p_5_modes[0].v_active;
663 }
664
665 static void dsi_s_1080p_5_sd_settings_init
666 (struct tegra_dc_sd_settings *settings)
667 {
668         struct board_info bi;
669         struct board_info board_info;
670         tegra_get_display_board_info(&bi);
671         tegra_get_board_info(&board_info);
672
673         *settings = dsi_s_1080p_5_sd_settings;
674
675         if ((bi.board_id == BOARD_E1563) || (board_info.board_id == BOARD_E1740))
676                 settings->bl_device_name = "lm3528_display_bl";
677         else
678                 settings->bl_device_name = "max8831_display_bl";
679 }
680
681 static void dsi_s_1080p_5_cmu_init(struct tegra_dc_platform_data *pdata)
682 {
683         pdata->cmu = &dsi_s_1080p_5_cmu;
684 }
685
686 struct tegra_panel __initdata dsi_s_1080p_5 = {
687         .init_sd_settings = dsi_s_1080p_5_sd_settings_init,
688         .init_dc_out = dsi_s_1080p_5_dc_out_init,
689         .init_fb_data = dsi_s_1080p_5_fb_data_init,
690         .register_bl_dev = dsi_s_1080p_5_register_bl_dev,
691         .init_cmu_data = dsi_s_1080p_5_cmu_init,
692 };
693 EXPORT_SYMBOL(dsi_s_1080p_5);