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