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