b602fe0dab1a9185ae9515867089f6c53d5a3ef0
[linux-3.10.git] / arch / arm / mach-tegra / panel-j-1440-810-5-8.c
1 /*
2  * arch/arm/mach-tegra/panel-j-1440-810-5-8.c
3  *
4  * Copyright (c) 2013, 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 as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
14  * more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program; if not, write to the Free Software Foundation, Inc.,
18  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19  */
20 #include <linux/ioport.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
27 #include <mach/dc.h>
28 #include <asm/mach-types.h>
29
30 #include "devices.h"
31 #include "board-panel.h"
32
33 #include "gpio-names.h"
34 #define DSI_PANEL_EN_GPIO       TEGRA_GPIO_PQ2
35
36 #define DSI_PANEL_RESET         1
37
38 #define DC_CTRL_MODE    TEGRA_DC_OUT_CONTINUOUS_MODE
39
40 static struct tegra_dsi_out dsi_j_1440_810_5_8_pdata;
41
42 static bool reg_requested;
43 static bool gpio_requested;
44 static struct platform_device *disp_device;
45
46 static struct regulator *vdd_lcd_s_1v8;
47 static struct regulator *vdd_lcd_bl;
48 static struct regulator *vdd_lcd_bl_en;
49 static struct regulator *avdd_lcd_3v0_2v8;
50
51 #ifdef CONFIG_TEGRA_DC_CMU
52 static struct tegra_dc_cmu dsi_j_1440_810_5_8_cmu = {
53         /* lut1 maps sRGB to linear space. */
54         {
55                 0,    1,    2,    4,    5,    6,    7,    9,
56                 10,   11,   12,   14,   15,   16,   18,   20,
57                 21,   23,   25,   27,   29,   31,   33,   35,
58                 37,   40,   42,   45,   48,   50,   53,   56,
59                 59,   62,   66,   69,   72,   76,   79,   83,
60                 87,   91,   95,   99,   103,  107,  112,  116,
61                 121,  126,  131,  136,  141,  146,  151,  156,
62                 162,  168,  173,  179,  185,  191,  197,  204,
63                 210,  216,  223,  230,  237,  244,  251,  258,
64                 265,  273,  280,  288,  296,  304,  312,  320,
65                 329,  337,  346,  354,  363,  372,  381,  390,
66                 400,  409,  419,  428,  438,  448,  458,  469,
67                 479,  490,  500,  511,  522,  533,  544,  555,
68                 567,  578,  590,  602,  614,  626,  639,  651,
69                 664,  676,  689,  702,  715,  728,  742,  755,
70                 769,  783,  797,  811,  825,  840,  854,  869,
71                 884,  899,  914,  929,  945,  960,  976,  992,
72                 1008, 1024, 1041, 1057, 1074, 1091, 1108, 1125,
73                 1142, 1159, 1177, 1195, 1213, 1231, 1249, 1267,
74                 1286, 1304, 1323, 1342, 1361, 1381, 1400, 1420,
75                 1440, 1459, 1480, 1500, 1520, 1541, 1562, 1582,
76                 1603, 1625, 1646, 1668, 1689, 1711, 1733, 1755,
77                 1778, 1800, 1823, 1846, 1869, 1892, 1916, 1939,
78                 1963, 1987, 2011, 2035, 2059, 2084, 2109, 2133,
79                 2159, 2184, 2209, 2235, 2260, 2286, 2312, 2339,
80                 2365, 2392, 2419, 2446, 2473, 2500, 2527, 2555,
81                 2583, 2611, 2639, 2668, 2696, 2725, 2754, 2783,
82                 2812, 2841, 2871, 2901, 2931, 2961, 2991, 3022,
83                 3052, 3083, 3114, 3146, 3177, 3209, 3240, 3272,
84                 3304, 3337, 3369, 3402, 3435, 3468, 3501, 3535,
85                 3568, 3602, 3636, 3670, 3705, 3739, 3774, 3809,
86                 3844, 3879, 3915, 3950, 3986, 4022, 4059, 4095,
87         },
88         /* csc */
89         {
90                 0x100, 0x0,   0x0,
91                 0x0,   0x100, 0x0,
92                 0x0,   0x0,   0x100,
93         },
94         /* lut2 maps linear space to sRGB*/
95         {
96                 0, 0, 1, 2, 3, 3, 4, 5,
97                 6, 6, 7, 8, 8, 9, 10, 10,
98                 11, 12, 12, 13, 13, 14, 14, 15,
99                 16, 16, 17, 17, 18, 18, 19, 19,
100                 19, 20, 20, 21, 21, 22, 22, 22,
101                 23, 23, 24, 24, 24, 25, 25, 25,
102                 26, 26, 27, 27, 27, 28, 28, 28,
103                 28, 29, 29, 29, 30, 30, 30, 31,
104                 31, 31, 31, 32, 32, 32, 33, 33,
105                 33, 33, 34, 34, 34, 35, 35, 35,
106                 35, 36, 36, 36, 36, 37, 37, 37,
107                 38, 38, 38, 38, 39, 39, 39, 39,
108                 40, 40, 40, 40, 40, 41, 41, 41,
109                 41, 42, 42, 42, 42, 43, 43, 43,
110                 43, 43, 44, 44, 44, 44, 45, 45,
111                 45, 45, 45, 46, 46, 46, 46, 46,
112                 47, 47, 47, 47, 47, 48, 48, 48,
113                 48, 48, 49, 49, 49, 49, 49, 49,
114                 50, 50, 50, 50, 50, 50, 51, 51,
115                 51, 51, 51, 51, 52, 52, 52, 52,
116                 52, 52, 53, 53, 53, 53, 53, 53,
117                 54, 54, 54, 54, 54, 54, 54, 55,
118                 55, 55, 55, 55, 55, 55, 55, 56,
119                 56, 56, 56, 56, 56, 56, 57, 57,
120                 57, 57, 57, 57, 57, 57, 58, 58,
121                 58, 58, 58, 58, 58, 58, 58, 59,
122                 59, 59, 59, 59, 59, 59, 59, 59,
123                 60, 60, 60, 60, 60, 60, 60, 60,
124                 60, 61, 61, 61, 61, 61, 61, 61,
125                 61, 61, 61, 62, 62, 62, 62, 62,
126                 62, 62, 62, 62, 62, 63, 63, 63,
127                 63, 63, 63, 63, 63, 63, 63, 63,
128                 64, 64, 64, 64, 64, 64, 64, 64,
129                 64, 64, 64, 65, 65, 65, 65, 65,
130                 65, 65, 65, 65, 65, 65, 66, 66,
131                 66, 66, 66, 66, 66, 66, 66, 66,
132                 66, 66, 67, 67, 67, 67, 67, 67,
133                 67, 67, 67, 67, 67, 67, 68, 68,
134                 68, 68, 68, 68, 68, 68, 68, 68,
135                 68, 68, 69, 69, 69, 69, 69, 69,
136                 69, 69, 69, 69, 69, 69, 70, 70,
137                 70, 70, 70, 70, 70, 70, 70, 70,
138                 70, 70, 70, 71, 71, 71, 71, 71,
139                 71, 71, 71, 71, 71, 71, 71, 71,
140                 72, 72, 72, 72, 72, 72, 72, 72,
141                 72, 72, 72, 72, 72, 73, 73, 73,
142                 73, 73, 73, 73, 73, 73, 73, 73,
143                 73, 73, 73, 74, 74, 74, 74, 74,
144                 74, 74, 74, 74, 74, 74, 74, 74,
145                 75, 75, 75, 75, 75, 75, 75, 75,
146                 75, 75, 75, 75, 75, 75, 76, 76,
147                 76, 76, 76, 76, 76, 76, 76, 76,
148                 76, 76, 76, 76, 77, 77, 77, 77,
149                 77, 77, 77, 77, 77, 77, 77, 77,
150                 77, 77, 78, 78, 78, 78, 78, 78,
151                 78, 78, 78, 78, 78, 78, 78, 78,
152                 79, 79, 79, 79, 79, 79, 79, 79,
153                 79, 79, 79, 79, 79, 79, 80, 80,
154                 80, 80, 80, 80, 80, 80, 80, 80,
155                 80, 80, 80, 80, 81, 81, 81, 81,
156                 81, 81, 81, 81, 81, 81, 81, 81,
157                 81, 81, 82, 82, 82, 82, 82, 82,
158                 82, 82, 82, 82, 82, 82, 82, 82,
159                 83, 83, 83, 83, 83, 83, 83, 83,
160                 84, 84, 85, 85, 86, 86, 87, 88,
161                 88, 89, 89, 90, 90, 91, 92, 92,
162                 93, 93, 94, 94, 95, 95, 96, 96,
163                 97, 97, 98, 98, 99, 99, 100, 100,
164                 101, 101, 102, 102, 103, 103, 104, 104,
165                 105, 105, 106, 106, 107, 107, 107, 108,
166                 108, 109, 109, 110, 110, 111, 111, 111,
167                 112, 112, 113, 113, 114, 114, 114, 115,
168                 115, 116, 116, 117, 117, 117, 118, 118,
169                 119, 119, 119, 120, 120, 121, 121, 121,
170                 122, 122, 123, 123, 123, 124, 124, 125,
171                 125, 126, 126, 126, 127, 127, 128, 128,
172                 128, 129, 129, 129, 130, 130, 131, 131,
173                 131, 132, 132, 133, 133, 133, 134, 134,
174                 135, 135, 135, 136, 136, 137, 137, 137,
175                 138, 138, 138, 139, 139, 140, 140, 140,
176                 141, 141, 142, 142, 142, 143, 143, 143,
177                 144, 144, 145, 145, 145, 146, 146, 146,
178                 147, 147, 147, 148, 148, 149, 149, 149,
179                 150, 150, 150, 151, 151, 151, 152, 152,
180                 153, 153, 153, 154, 154, 154, 155, 155,
181                 156, 156, 156, 157, 157, 157, 158, 158,
182                 159, 159, 159, 160, 160, 160, 161, 161,
183                 162, 162, 162, 163, 163, 164, 164, 164,
184                 165, 165, 166, 166, 166, 167, 167, 168,
185                 168, 168, 169, 169, 170, 170, 170, 171,
186                 171, 172, 172, 172, 173, 173, 173, 174,
187                 174, 175, 175, 175, 176, 176, 176, 177,
188                 177, 177, 178, 178, 178, 179, 179, 179,
189                 180, 180, 180, 180, 181, 181, 181, 182,
190                 182, 182, 182, 183, 183, 183, 184, 184,
191                 184, 184, 185, 185, 185, 185, 186, 186,
192                 186, 186, 187, 187, 187, 187, 188, 188,
193                 188, 188, 189, 189, 189, 190, 190, 190,
194                 190, 191, 191, 191, 191, 192, 192, 192,
195                 193, 193, 193, 193, 194, 194, 194, 195,
196                 195, 195, 195, 196, 196, 196, 197, 197,
197                 197, 198, 198, 198, 198, 199, 199, 199,
198                 200, 200, 200, 201, 201, 201, 202, 202,
199                 202, 203, 203, 204, 204, 204, 205, 205,
200                 205, 206, 206, 206, 207, 207, 208, 208,
201                 208, 209, 209, 209, 210, 210, 211, 211,
202                 211, 212, 212, 213, 213, 213, 214, 214,
203                 215, 215, 215, 216, 216, 217, 217, 217,
204                 218, 218, 218, 219, 219, 220, 220, 220,
205                 221, 221, 221, 222, 222, 222, 223, 223,
206                 223, 224, 224, 224, 225, 225, 225, 225,
207                 226, 226, 226, 226, 227, 227, 227, 227,
208                 228, 228, 228, 228, 229, 229, 229, 229,
209                 229, 230, 230, 230, 230, 231, 231, 231,
210                 231, 232, 232, 232, 233, 233, 233, 233,
211                 234, 234, 234, 235, 235, 235, 236, 236,
212                 236, 237, 237, 238, 238, 239, 239, 239,
213                 240, 240, 241, 241, 242, 242, 243, 244,
214                 244, 245, 245, 246, 247, 247, 248, 249,
215                 250, 250, 251, 252, 253, 254, 254, 255,
216         },
217 };
218 #endif
219
220 static int dsi_j_1440_810_5_8_bl_notify(struct device *unused, int brightness)
221 {
222         int cur_sd_brightness = atomic_read(&sd_brightness);
223
224         /* SD brightness is a percentage */
225         brightness = (brightness * cur_sd_brightness) / 255;
226
227         /* Apply any backlight response curve */
228         if (brightness > 255)
229                 pr_info("Error: Brightness > 255!\n");
230
231         return brightness;
232 }
233
234 static int dsi_j_1440_810_5_8_check_fb(struct device *dev, struct fb_info *info)
235 {
236         return info->device == &disp_device->dev;
237 }
238
239 static struct platform_pwm_backlight_data dsi_j_1440_810_5_8_bl_data = {
240         .pwm_id         = 1,
241         .max_brightness = 255,
242         .dft_brightness = 77,
243         .pwm_period_ns  = 40000,
244         .notify         = dsi_j_1440_810_5_8_bl_notify,
245         /* Only toggle backlight on fb blank notifications for disp1 */
246         .check_fb       = dsi_j_1440_810_5_8_check_fb,
247 };
248
249 static struct platform_device __maybe_unused dsi_j_1440_810_5_8_bl_device = {
250         .name   = "pwm-backlight",
251         .id     = -1,
252         .dev    = {
253                 .platform_data = &dsi_j_1440_810_5_8_bl_data,
254         },
255 };
256
257 static struct platform_device __maybe_unused *loki_bl_device[] __initdata = {
258         &tegra_pwfm_device,
259         &dsi_j_1440_810_5_8_bl_device,
260 };
261
262 static struct tegra_dc_mode dsi_j_1440_810_5_8_modes[] = {
263         {
264                 .pclk = 82833000,
265                 .h_ref_to_sync = 1,
266                 .v_ref_to_sync = 1,
267                 .h_sync_width = 48,
268                 .v_sync_width = 4,
269                 .h_back_porch = 48,
270                 .v_back_porch = 8,
271                 .h_active = 1440,
272                 .v_active = 810,
273                 .h_front_porch = 128,
274                 .v_front_porch = 8,
275         },
276 };
277
278 static int dsi_j_1440_810_5_8_reg_get(struct device *dev)
279 {
280         int err = 0;
281
282         if (reg_requested)
283                 return 0;
284
285         avdd_lcd_3v0_2v8 = regulator_get(dev, "avdd_lcd");
286         if (IS_ERR(avdd_lcd_3v0_2v8)) {
287                 pr_err("avdd_lcd regulator get failed\n");
288                 err = PTR_ERR(avdd_lcd_3v0_2v8);
289                 avdd_lcd_3v0_2v8 = NULL;
290                 goto fail;
291         }
292         vdd_lcd_s_1v8 = regulator_get(dev, "dvdd_lcd");
293         if (IS_ERR(vdd_lcd_s_1v8)) {
294                 pr_err("vdd_lcd_1v8_s regulator get failed\n");
295                 err = PTR_ERR(vdd_lcd_s_1v8);
296                 vdd_lcd_s_1v8 = NULL;
297                 goto fail;
298         }
299
300         if (machine_is_dalmore()) {
301                 vdd_lcd_bl = regulator_get(dev, "vdd_lcd_bl");
302                 if (IS_ERR(vdd_lcd_bl)) {
303                         pr_err("vdd_lcd_bl regulator get failed\n");
304                         err = PTR_ERR(vdd_lcd_bl);
305                         vdd_lcd_bl = NULL;
306                         goto fail;
307                 }
308         }
309
310         vdd_lcd_bl_en = regulator_get(dev, "vdd_lcd_bl_en");
311         if (IS_ERR(vdd_lcd_bl_en)) {
312                 pr_err("vdd_lcd_bl_en regulator get failed\n");
313                 err = PTR_ERR(vdd_lcd_bl_en);
314                 vdd_lcd_bl_en = NULL;
315                 goto fail;
316         }
317         reg_requested = true;
318         return 0;
319 fail:
320         return err;
321 }
322
323 static int dsi_j_1440_810_5_8_gpio_get(void)
324 {
325         int err = 0;
326
327         if (gpio_requested)
328                 return 0;
329
330         err = gpio_request(dsi_j_1440_810_5_8_pdata.dsi_panel_rst_gpio,
331                 "panel rst");
332         if (err < 0) {
333                 pr_err("panel reset gpio request failed\n");
334                 goto fail;
335         }
336
337         err = gpio_request(DSI_PANEL_EN_GPIO, "panel en");
338         if (err < 0) {
339                 pr_err("panel en gpio request failed\n");
340                 goto fail;
341         }
342
343         gpio_requested = true;
344         return 0;
345 fail:
346         return err;
347 }
348
349 static struct tegra_dsi_cmd dsi_j_1440_810_5_8_init_cmd[] = {
350         /* panel exit_sleep_mode sequence */
351         DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_EXIT_SLEEP_MODE, 0x0),
352         DSI_SEND_FRAME(5),
353         DSI_DLY_MS(20),
354
355         /* panel set_display_on sequence */
356         DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_SET_DISPLAY_ON, 0x0),
357         DSI_DLY_MS(20),
358 };
359
360 static struct tegra_dsi_cmd dsi_j_1440_810_5_8_suspend_cmd[] = {
361         /* panel set_display_off sequence */
362         DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_SET_DISPLAY_OFF, 0x0),
363
364         /* panel enter_sleep_mode sequence*/
365         DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_ENTER_SLEEP_MODE, 0x0),
366         DSI_DLY_MS(60),
367 };
368
369 static int dsi_j_1440_810_5_8_enable(struct device *dev)
370 {
371         return 0;
372 }
373
374 static int dsi_j_1440_810_5_8_postpoweron(struct device *dev)
375 {
376         int err = 0;
377
378         err = dsi_j_1440_810_5_8_reg_get(dev);
379         if (err < 0) {
380                 pr_err("dsi regulator get failed\n");
381                 goto fail;
382         }
383         err = dsi_j_1440_810_5_8_gpio_get();
384         if (err < 0) {
385                 pr_err("dsi gpio request failed\n");
386                 goto fail;
387         }
388         gpio_direction_output(dsi_j_1440_810_5_8_pdata.dsi_panel_rst_gpio, 0);
389         gpio_direction_output(DSI_PANEL_EN_GPIO, 0);
390
391         if (vdd_lcd_s_1v8) {
392                 err = regulator_enable(vdd_lcd_s_1v8);
393                 if (err < 0) {
394                         pr_err("vdd_lcd_1v8_s regulator enable failed\n");
395                         goto fail;
396                 }
397         }
398         usleep_range(3000, 5000);
399
400         if (avdd_lcd_3v0_2v8) {
401                 err = regulator_enable(avdd_lcd_3v0_2v8);
402                 if (err < 0) {
403                         pr_err("avdd_lcd_3v0_2v8 regulator enable failed\n");
404                         goto fail;
405                 }
406                 regulator_set_voltage(avdd_lcd_3v0_2v8, 3000000, 3000000);
407         }
408         usleep_range(3000, 5000);
409
410         if (vdd_lcd_bl) {
411                 err = regulator_enable(vdd_lcd_bl);
412                 if (err < 0) {
413                         pr_err("vdd_lcd_bl regulator enable failed\n");
414                         goto fail;
415                 }
416         }
417
418         if (vdd_lcd_bl_en) {
419                 err = regulator_enable(vdd_lcd_bl_en);
420                 if (err < 0) {
421                         pr_err("vdd_lcd_bl_en regulator enable failed\n");
422                         goto fail;
423                 }
424         }
425         usleep_range(3000, 5000);
426
427         gpio_set_value(dsi_j_1440_810_5_8_pdata.dsi_panel_rst_gpio, 1);
428         msleep(20);
429         gpio_set_value(DSI_PANEL_EN_GPIO, 1);
430         msleep(20);
431
432         return 0;
433 fail:
434         return err;
435 }
436
437 static struct tegra_dsi_out dsi_j_1440_810_5_8_pdata = {
438         .n_data_lanes = 4,
439         .controller_vs = DSI_VS_1,
440         .pixel_format = TEGRA_DSI_PIXEL_FORMAT_24BIT_P,
441         .refresh_rate = 60,
442         .virtual_channel = TEGRA_DSI_VIRTUAL_CHANNEL_0,
443
444         .panel_reset = DSI_PANEL_RESET,
445         .power_saving_suspend = true,
446         .video_data_type = TEGRA_DSI_VIDEO_TYPE_VIDEO_MODE,
447         .video_clock_mode = TEGRA_DSI_VIDEO_CLOCK_CONTINUOUS,
448         .video_burst_mode = TEGRA_DSI_VIDEO_NONE_BURST_MODE_WITH_SYNC_END,
449         .dsi_init_cmd = dsi_j_1440_810_5_8_init_cmd,
450         .n_init_cmd = ARRAY_SIZE(dsi_j_1440_810_5_8_init_cmd),
451         .dsi_suspend_cmd = dsi_j_1440_810_5_8_suspend_cmd,
452         .n_suspend_cmd = ARRAY_SIZE(dsi_j_1440_810_5_8_suspend_cmd),
453 };
454
455 static int dsi_j_1440_810_5_8_disable(void)
456 {
457         if (vdd_lcd_bl)
458                 regulator_disable(vdd_lcd_bl);
459
460         if (vdd_lcd_bl_en)
461                 regulator_disable(vdd_lcd_bl_en);
462
463         if (vdd_lcd_s_1v8)
464                 regulator_disable(vdd_lcd_s_1v8);
465
466         if (avdd_lcd_3v0_2v8)
467                 regulator_disable(avdd_lcd_3v0_2v8);
468
469         return 0;
470 }
471
472 static int dsi_j_1440_810_5_8_postsuspend(void)
473 {
474         /* TODO */
475         return 0;
476 }
477
478 static int dsi_j_1440_810_5_8_register_bl_dev(void)
479 {
480         int err = 0;
481
482         err = platform_device_register(&tegra_pwfm_device);
483         if (err) {
484                 pr_err("disp1 pwm device registration failed");
485                 return err;
486         }
487
488         err = platform_device_register(&dsi_j_1440_810_5_8_bl_device);
489         if (err) {
490                 pr_err("disp1 bl device registration failed");
491                 return err;
492         }
493
494         err = gpio_request(dsi_j_1440_810_5_8_pdata.dsi_panel_bl_pwm_gpio,
495                 "panel pwm");
496         if (err < 0) {
497                 pr_err("panel backlight pwm gpio request failed\n");
498                 return err;
499         }
500         gpio_free(dsi_j_1440_810_5_8_pdata.dsi_panel_bl_pwm_gpio);
501         return err;
502 }
503
504 static void dsi_j_1440_810_5_8_set_disp_device
505         (struct platform_device *loki_display_device)
506 {
507         disp_device = loki_display_device;
508 }
509
510 static void dsi_j_1440_810_5_8_dc_out_init(struct tegra_dc_out *dc)
511 {
512         dc->dsi = &dsi_j_1440_810_5_8_pdata;
513         dc->modes = dsi_j_1440_810_5_8_modes;
514         dc->n_modes = ARRAY_SIZE(dsi_j_1440_810_5_8_modes);
515         dc->enable = dsi_j_1440_810_5_8_enable;
516         dc->disable = dsi_j_1440_810_5_8_disable;
517         dc->postsuspend = dsi_j_1440_810_5_8_postsuspend;
518         dc->postpoweron = dsi_j_1440_810_5_8_postpoweron;
519         dc->width = 130;
520         dc->height = 74;
521         dc->flags = DC_CTRL_MODE;
522 }
523
524 static void dsi_j_1440_810_5_8_fb_data_init(struct tegra_fb_data *fb)
525 {
526         fb->xres = dsi_j_1440_810_5_8_modes[0].h_active;
527         fb->yres = dsi_j_1440_810_5_8_modes[0].v_active;
528 }
529
530 static void dsi_j_1440_810_5_8_sd_settings_init
531         (struct tegra_dc_sd_settings *settings)
532 {
533         settings->bl_device_name = "pwm-backlight";
534 }
535
536 #ifdef CONFIG_TEGRA_DC_CMU
537 static void dsi_j_1440_810_5_8_cmu_init(struct tegra_dc_platform_data *pdata)
538 {
539         pdata->cmu = &dsi_j_1440_810_5_8_cmu;
540 }
541 #endif
542
543 struct tegra_panel __initdata dsi_j_1440_810_5_8 = {
544         .init_sd_settings = dsi_j_1440_810_5_8_sd_settings_init,
545         .init_dc_out = dsi_j_1440_810_5_8_dc_out_init,
546         .init_fb_data = dsi_j_1440_810_5_8_fb_data_init,
547         .set_disp_device = dsi_j_1440_810_5_8_set_disp_device,
548         .register_bl_dev = dsi_j_1440_810_5_8_register_bl_dev,
549 #ifdef CONFIG_TEGRA_DC_CMU
550         .init_cmu_data = dsi_j_1440_810_5_8_cmu_init,
551 #endif
552 };
553 EXPORT_SYMBOL(dsi_j_1440_810_5_8);