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