Revert "Merge commit 'main-jb-2012.08.03-B4' into t114-0806"
[linux-2.6.git] / arch / arm / mach-tegra / include / mach / dc.h
1 /*
2  * arch/arm/mach-tegra/include/mach/dc.h
3  *
4  * Copyright (C) 2010 Google, Inc.
5  *
6  * Author:
7  *      Erik Gilling <konkers@google.com>
8  *
9  * Copyright (C) 2010-2011 NVIDIA Corporation
10  *
11  * This software is licensed under the terms of the GNU General Public
12  * License version 2, as published by the Free Software Foundation, and
13  * may be copied, distributed, and modified under those terms.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  */
21
22 #ifndef __MACH_TEGRA_DC_H
23 #define __MACH_TEGRA_DC_H
24
25 #include <linux/pm.h>
26 #include <linux/types.h>
27 #include <drm/drm_fixed.h>
28
29 #define TEGRA_MAX_DC            2
30 #define DC_N_WINDOWS            3
31 #define DEFAULT_FPGA_FREQ_KHZ   160000
32
33
34 /* DSI pixel data format */
35 enum {
36         TEGRA_DSI_PIXEL_FORMAT_16BIT_P,
37         TEGRA_DSI_PIXEL_FORMAT_18BIT_P,
38         TEGRA_DSI_PIXEL_FORMAT_18BIT_NP,
39         TEGRA_DSI_PIXEL_FORMAT_24BIT_P,
40 };
41
42 /* DSI virtual channel number */
43 enum {
44         TEGRA_DSI_VIRTUAL_CHANNEL_0,
45         TEGRA_DSI_VIRTUAL_CHANNEL_1,
46         TEGRA_DSI_VIRTUAL_CHANNEL_2,
47         TEGRA_DSI_VIRTUAL_CHANNEL_3,
48 };
49
50 /* DSI transmit method for video data */
51 enum {
52         TEGRA_DSI_VIDEO_TYPE_VIDEO_MODE,
53         TEGRA_DSI_VIDEO_TYPE_COMMAND_MODE,
54 };
55
56 /* DSI HS clock mode */
57 enum {
58         TEGRA_DSI_VIDEO_CLOCK_CONTINUOUS,
59         TEGRA_DSI_VIDEO_CLOCK_TX_ONLY,
60 };
61
62 /* DSI burst mode setting in video mode. Each mode is assigned with a
63  * fixed value. The rationale behind this is to avoid change of these
64  * values, since the calculation of dsi clock depends on them. */
65 enum {
66         TEGRA_DSI_VIDEO_NONE_BURST_MODE = 0,
67         TEGRA_DSI_VIDEO_NONE_BURST_MODE_WITH_SYNC_END = 1,
68         TEGRA_DSI_VIDEO_BURST_MODE_LOWEST_SPEED = 2,
69         TEGRA_DSI_VIDEO_BURST_MODE_LOW_SPEED = 3,
70         TEGRA_DSI_VIDEO_BURST_MODE_MEDIUM_SPEED = 4,
71         TEGRA_DSI_VIDEO_BURST_MODE_FAST_SPEED = 5,
72         TEGRA_DSI_VIDEO_BURST_MODE_FASTEST_SPEED = 6,
73 };
74
75 enum {
76         TEGRA_DSI_GANGED_SYMMETRIC_LEFT_RIGHT = 1,
77         TEGRA_DSI_GANGED_SYMMETRIC_EVEN_ODD = 2,
78 };
79
80 enum {
81         TEGRA_DSI_PACKET_CMD,
82         TEGRA_DSI_DELAY_MS,
83 };
84
85 struct tegra_dsi_cmd {
86         u8      cmd_type;
87         u8      data_id;
88         union {
89                 u16 data_len;
90                 u16 delay_ms;
91                 struct {
92                         u8 data0;
93                         u8 data1;
94                 } sp;
95         } sp_len_dly;
96         u8      *pdata;
97 };
98
99 #define DSI_CMD_SHORT(di, p0, p1)       { \
100                                         .cmd_type = TEGRA_DSI_PACKET_CMD, \
101                                         .data_id = di, \
102                                         .sp_len_dly.sp.data0 = p0, \
103                                         .sp_len_dly.sp.data1 = p1, \
104                                         }
105 #define DSI_DLY_MS(ms)  { \
106                         .cmd_type = TEGRA_DSI_DELAY_MS, \
107                         .sp_len_dly.delay_ms = ms, \
108                         }
109
110 #define DSI_CMD_LONG(di, ptr)   { \
111                                 .cmd_type = TEGRA_DSI_PACKET_CMD, \
112                                 .data_id = di, \
113                                 .sp_len_dly.data_len = ARRAY_SIZE(ptr), \
114                                 .pdata = ptr, \
115                                 }
116
117 struct dsi_phy_timing_ns {
118         u16             t_hsdexit_ns;
119         u16             t_hstrail_ns;
120         u16             t_datzero_ns;
121         u16             t_hsprepare_ns;
122
123         u16             t_clktrail_ns;
124         u16             t_clkpost_ns;
125         u16             t_clkzero_ns;
126         u16             t_tlpx_ns;
127
128         u16             t_clkprepare_ns;
129         u16             t_clkpre_ns;
130         u16             t_wakeup_ns;
131
132         u16             t_taget_ns;
133         u16             t_tasure_ns;
134         u16             t_tago_ns;
135 };
136
137 enum {
138         DSI_VS_0 = 0x0,
139         DSI_VS_1 = 0x1,
140 };
141
142 enum {
143         DSI_INSTANCE_0,
144         DSI_INSTANCE_1,
145 };
146
147 /* Aggressiveness level of DSI suspend. The higher, the more aggressive. */
148 #define DSI_NO_SUSPEND                  0
149 #define DSI_HOST_SUSPEND_LV0            1
150 #define DSI_HOST_SUSPEND_LV1            2
151 #define DSI_HOST_SUSPEND_LV2            3
152 #define DSI_SUSPEND_FULL                4
153
154 struct tegra_dsi_out {
155         u8              n_data_lanes;                   /* required */
156         u8              pixel_format;                   /* required */
157         u8              refresh_rate;                   /* required */
158         u8              rated_refresh_rate;
159         u8              panel_reset;                    /* required */
160         u8              virtual_channel;                /* required */
161         u8              dsi_instance;
162         u8              chip_id;
163         u8              chip_rev;
164         u8              controller_vs;
165
166         bool            panel_has_frame_buffer; /* required*/
167         bool            panel_send_dc_frames;
168
169         struct tegra_dsi_cmd    *dsi_init_cmd;          /* required */
170         u16             n_init_cmd;                     /* required */
171
172         struct tegra_dsi_cmd    *dsi_early_suspend_cmd;
173         u16             n_early_suspend_cmd;
174
175         struct tegra_dsi_cmd    *dsi_late_resume_cmd;
176         u16             n_late_resume_cmd;
177
178         struct tegra_dsi_cmd    *dsi_suspend_cmd;       /* required */
179         u16             n_suspend_cmd;                  /* required */
180
181         u8              video_data_type;                /* required */
182         u8              video_clock_mode;
183         u8              video_burst_mode;
184         u8              ganged_type;
185
186         u8              suspend_aggr;
187
188         u16             panel_buffer_size_byte;
189         u16             panel_reset_timeout_msec;
190
191         bool            hs_cmd_mode_supported;
192         bool            hs_cmd_mode_on_blank_supported;
193         bool            enable_hs_clock_on_lp_cmd_mode;
194         bool            no_pkt_seq_eot; /* 1st generation panel may not
195                                          * support eot. Don't set it for
196                                          * most panels. */
197         bool            te_polarity_low;
198         bool            power_saving_suspend;
199         bool            dsi2lvds_bridge_enable;
200
201         u32             max_panel_freq_khz;
202         u32             lp_cmd_mode_freq_khz;
203         u32             lp_read_cmd_mode_freq_khz;
204         u32             hs_clk_in_lp_cmd_mode_freq_khz;
205         u32             burst_mode_freq_khz;
206         u32             fpga_freq_khz;
207
208         struct dsi_phy_timing_ns phy_timing;
209 };
210
211 enum {
212         TEGRA_DC_STEREO_MODE_2D,
213         TEGRA_DC_STEREO_MODE_3D
214 };
215
216 enum {
217         TEGRA_DC_STEREO_LANDSCAPE,
218         TEGRA_DC_STEREO_PORTRAIT
219 };
220
221 struct tegra_stereo_out {
222         int  mode_2d_3d;
223         int  orientation;
224
225         void (*set_mode)(int mode);
226         void (*set_orientation)(int orientation);
227 };
228
229 struct tegra_dc_mode {
230         int     pclk;
231         int     rated_pclk;
232         int     h_ref_to_sync;
233         int     v_ref_to_sync;
234         int     h_sync_width;
235         int     v_sync_width;
236         int     h_back_porch;
237         int     v_back_porch;
238         int     h_active;
239         int     v_active;
240         int     h_front_porch;
241         int     v_front_porch;
242         int     stereo_mode;
243         u32     flags;
244 };
245
246 #define TEGRA_DC_MODE_FLAG_NEG_V_SYNC   (1 << 0)
247 #define TEGRA_DC_MODE_FLAG_NEG_H_SYNC   (1 << 1)
248
249 enum {
250         TEGRA_DC_OUT_RGB,
251         TEGRA_DC_OUT_HDMI,
252         TEGRA_DC_OUT_DSI,
253 };
254
255 struct tegra_dc_out_pin {
256         int     name;
257         int     pol;
258 };
259
260 enum {
261         TEGRA_DC_OUT_PIN_DATA_ENABLE,
262         TEGRA_DC_OUT_PIN_H_SYNC,
263         TEGRA_DC_OUT_PIN_V_SYNC,
264         TEGRA_DC_OUT_PIN_PIXEL_CLOCK,
265 };
266
267 enum {
268         TEGRA_DC_OUT_PIN_POL_LOW,
269         TEGRA_DC_OUT_PIN_POL_HIGH,
270 };
271
272 enum {
273         TEGRA_DC_DISABLE_DITHER = 1,
274         TEGRA_DC_ORDERED_DITHER,
275         TEGRA_DC_ERRDIFF_DITHER,
276 };
277
278 typedef u8 tegra_dc_bl_output[256];
279 typedef u8 *p_tegra_dc_bl_output;
280
281 struct tegra_dc_sd_blp {
282         u16 time_constant;
283         u8 step;
284 };
285
286 struct tegra_dc_sd_fc {
287         u8 time_limit;
288         u8 threshold;
289 };
290
291 struct tegra_dc_sd_rgb {
292         u8 r;
293         u8 g;
294         u8 b;
295 };
296
297 struct tegra_dc_sd_agg_priorities {
298         u8 pri_lvl;
299         u8 agg[4];
300 };
301
302 struct tegra_dc_sd_window {
303         u16 h_position;
304         u16 v_position;
305         u16 h_size;
306         u16 v_size;
307 };
308
309 struct tegra_dc_sd_settings {
310         unsigned enable;
311         bool use_auto_pwm;
312         u8 hw_update_delay;
313         u8 aggressiveness;
314         short bin_width;
315         u8 phase_in_settings;
316         u8 phase_in_adjustments;
317         u8 cmd;
318         u8 final_agg;
319         u16 cur_agg_step;
320         u16 phase_settings_step;
321         u16 phase_adj_step;
322         u16 num_phase_in_steps;
323
324         struct tegra_dc_sd_agg_priorities agg_priorities;
325
326         bool use_vid_luma;
327         struct tegra_dc_sd_rgb coeff;
328
329         bool k_limit_enable;
330         u16 k_limit;
331
332         bool sd_window_enable;
333         struct tegra_dc_sd_window sd_window;
334
335         bool soft_clipping_enable;
336         u8 soft_clipping_threshold;
337
338         bool smooth_k_enable;
339         u16 smooth_k_incr;
340
341         bool sd_proc_control;
342
343         struct tegra_dc_sd_fc fc;
344         struct tegra_dc_sd_blp blp;
345         u8 bltf[4][4][4];
346         struct tegra_dc_sd_rgb lut[4][9];
347
348         atomic_t *sd_brightness;
349         struct platform_device *bl_device;
350 };
351
352 enum {
353         NO_CMD = 0x0,
354         ENABLE = 0x1,
355         DISABLE = 0x2,
356         PHASE_IN = 0x4,
357         AGG_CHG = 0x8,
358 };
359
360 enum {
361         TEGRA_PIN_OUT_CONFIG_SEL_LHP0_LD21,
362         TEGRA_PIN_OUT_CONFIG_SEL_LHP1_LD18,
363         TEGRA_PIN_OUT_CONFIG_SEL_LHP2_LD19,
364         TEGRA_PIN_OUT_CONFIG_SEL_LVP0_LVP0_Out,
365         TEGRA_PIN_OUT_CONFIG_SEL_LVP1_LD20,
366
367         TEGRA_PIN_OUT_CONFIG_SEL_LM1_M1,
368         TEGRA_PIN_OUT_CONFIG_SEL_LM1_LD21,
369         TEGRA_PIN_OUT_CONFIG_SEL_LM1_PM1,
370
371         TEGRA_PIN_OUT_CONFIG_SEL_LDI_LD22,
372         TEGRA_PIN_OUT_CONFIG_SEL_LPP_LD23,
373         TEGRA_PIN_OUT_CONFIG_SEL_LDC_SDC,
374         TEGRA_PIN_OUT_CONFIG_SEL_LSPI_DE,
375 };
376
377 struct tegra_dc_out {
378         int                             type;
379         unsigned                        flags;
380
381         /* size in mm */
382         unsigned                        h_size;
383         unsigned                        v_size;
384
385         int                             dcc_bus;
386         int                             hotplug_gpio;
387         const char                      *parent_clk;
388         const char                      *parent_clk_backup;
389
390         unsigned                        max_pixclock;
391         unsigned                        order;
392         unsigned                        align;
393         unsigned                        depth;
394         unsigned                        dither;
395
396         struct tegra_dc_mode            *modes;
397         int                             n_modes;
398
399         struct tegra_dsi_out            *dsi;
400         struct tegra_stereo_out         *stereo;
401
402         unsigned                        height; /* mm */
403         unsigned                        width; /* mm */
404
405         struct tegra_dc_out_pin         *out_pins;
406         unsigned                        n_out_pins;
407
408         struct tegra_dc_sd_settings     *sd_settings;
409
410         u8                      *out_sel_configs;
411         unsigned                n_out_sel_configs;
412
413         int     (*enable)(void);
414         int     (*postpoweron)(void);
415         int     (*prepoweroff)(void);
416         int     (*disable)(void);
417
418         int     (*hotplug_init)(void);
419         int     (*postsuspend)(void);
420 };
421
422 /* bits for tegra_dc_out.flags */
423 #define TEGRA_DC_OUT_HOTPLUG_HIGH               (0 << 1)
424 #define TEGRA_DC_OUT_HOTPLUG_LOW                (1 << 1)
425 #define TEGRA_DC_OUT_HOTPLUG_MASK               (1 << 1)
426 #define TEGRA_DC_OUT_NVHDCP_POLICY_ALWAYS_ON    (0 << 2)
427 #define TEGRA_DC_OUT_NVHDCP_POLICY_ON_DEMAND    (1 << 2)
428 #define TEGRA_DC_OUT_NVHDCP_POLICY_MASK         (1 << 2)
429 #define TEGRA_DC_OUT_CONTINUOUS_MODE            (0 << 3)
430 #define TEGRA_DC_OUT_ONE_SHOT_MODE              (1 << 3)
431 #define TEGRA_DC_OUT_N_SHOT_MODE                (1 << 4)
432 #define TEGRA_DC_OUT_ONE_SHOT_LP_MODE           (1 << 5)
433 #define TEGRA_DC_OUT_CMU_DISABLE                (0 << 5)
434 #define TEGRA_DC_OUT_CMU_ENABLE                 (1 << 5)
435
436 #define TEGRA_DC_ALIGN_MSB              0
437 #define TEGRA_DC_ALIGN_LSB              1
438
439 #define TEGRA_DC_ORDER_RED_BLUE         0
440 #define TEGRA_DC_ORDER_BLUE_RED         1
441
442 #define V_BLANK_FLIP            0
443 #define V_BLANK_NVSD            1
444
445 struct tegra_dc;
446 struct nvmap_handle_ref;
447
448 struct tegra_dc_csc {
449         unsigned short yof;
450         unsigned short kyrgb;
451         unsigned short kur;
452         unsigned short kvr;
453         unsigned short kug;
454         unsigned short kvg;
455         unsigned short kub;
456         unsigned short kvb;
457 };
458
459 /* palette lookup table */
460 struct tegra_dc_lut {
461         u8 r[256];
462         u8 g[256];
463         u8 b[256];
464 };
465
466 struct tegra_dc_cmu_csc {
467         u16 krr;
468         u16 kgr;
469         u16 kbr;
470         u16 krg;
471         u16 kgg;
472         u16 kbg;
473         u16 krb;
474         u16 kgb;
475         u16 kbb;
476 };
477
478 struct tegra_dc_cmu {
479         u16 lut1[256];
480         struct tegra_dc_cmu_csc csc;
481         u8 lut2[960];
482 };
483
484 struct tegra_dc_win {
485         u8                      idx;
486         u8                      fmt;
487         u8                      ppflags; /* see TEGRA_WIN_PPFLAG* */
488         u32                     flags;
489
490         void                    *virt_addr;
491         dma_addr_t              phys_addr;
492         dma_addr_t              phys_addr_u;
493         dma_addr_t              phys_addr_v;
494         unsigned                stride;
495         unsigned                stride_uv;
496         fixed20_12              x;
497         fixed20_12              y;
498         fixed20_12              w;
499         fixed20_12              h;
500         unsigned                out_x;
501         unsigned                out_y;
502         unsigned                out_w;
503         unsigned                out_h;
504         unsigned                z;
505         u8                      global_alpha;
506
507         struct tegra_dc_csc     csc;
508
509         int                     dirty;
510         int                     underflows;
511         struct tegra_dc         *dc;
512
513         struct nvmap_handle_ref *cur_handle;
514         unsigned                bandwidth;
515         unsigned                new_bandwidth;
516         struct tegra_dc_lut     lut;
517 };
518
519 #define TEGRA_WIN_PPFLAG_CP_ENABLE      (1 << 0) /* enable RGB color lut */
520 #define TEGRA_WIN_PPFLAG_CP_FBOVERRIDE  (1 << 1) /* override fbdev color lut */
521
522 #define TEGRA_WIN_FLAG_ENABLED          (1 << 0)
523 #define TEGRA_WIN_FLAG_BLEND_PREMULT    (1 << 1)
524 #define TEGRA_WIN_FLAG_BLEND_COVERAGE   (1 << 2)
525 #define TEGRA_WIN_FLAG_INVERT_H         (1 << 3)
526 #define TEGRA_WIN_FLAG_INVERT_V         (1 << 4)
527 #define TEGRA_WIN_FLAG_TILED            (1 << 5)
528 #define TEGRA_WIN_FLAG_H_FILTER         (1 << 6)
529 #define TEGRA_WIN_FLAG_V_FILTER         (1 << 7)
530
531
532 #define TEGRA_WIN_BLEND_FLAGS_MASK \
533         (TEGRA_WIN_FLAG_BLEND_PREMULT | TEGRA_WIN_FLAG_BLEND_COVERAGE)
534
535 /* Note: These are the actual values written to the DC_WIN_COLOR_DEPTH register
536  * and may change in new tegra architectures.
537  */
538 #define TEGRA_WIN_FMT_P1                0
539 #define TEGRA_WIN_FMT_P2                1
540 #define TEGRA_WIN_FMT_P4                2
541 #define TEGRA_WIN_FMT_P8                3
542 #define TEGRA_WIN_FMT_B4G4R4A4          4
543 #define TEGRA_WIN_FMT_B5G5R5A           5
544 #define TEGRA_WIN_FMT_B5G6R5            6
545 #define TEGRA_WIN_FMT_AB5G5R5           7
546 #define TEGRA_WIN_FMT_B8G8R8A8          12
547 #define TEGRA_WIN_FMT_R8G8B8A8          13
548 #define TEGRA_WIN_FMT_B6x2G6x2R6x2A8    14
549 #define TEGRA_WIN_FMT_R6x2G6x2B6x2A8    15
550 #define TEGRA_WIN_FMT_YCbCr422          16
551 #define TEGRA_WIN_FMT_YUV422            17
552 #define TEGRA_WIN_FMT_YCbCr420P         18
553 #define TEGRA_WIN_FMT_YUV420P           19
554 #define TEGRA_WIN_FMT_YCbCr422P         20
555 #define TEGRA_WIN_FMT_YUV422P           21
556 #define TEGRA_WIN_FMT_YCbCr422R         22
557 #define TEGRA_WIN_FMT_YUV422R           23
558 #define TEGRA_WIN_FMT_YCbCr422RA        24
559 #define TEGRA_WIN_FMT_YUV422RA          25
560
561 struct tegra_fb_data {
562         int             win;
563
564         int             xres;
565         int             yres;
566         int             bits_per_pixel; /* -1 means autodetect */
567
568         unsigned long   flags;
569 };
570
571 #define TEGRA_FB_FLIP_ON_PROBE          (1 << 0)
572
573 struct tegra_dc_platform_data {
574         unsigned long           flags;
575         unsigned long           emc_clk_rate;
576         struct tegra_dc_out     *default_out;
577         struct tegra_fb_data    *fb;
578 };
579
580 #define TEGRA_DC_FLAG_ENABLED           (1 << 0)
581
582 int tegra_dc_get_stride(struct tegra_dc *dc, unsigned win);
583 struct tegra_dc *tegra_dc_get_dc(unsigned idx);
584 struct tegra_dc_win *tegra_dc_get_window(struct tegra_dc *dc, unsigned win);
585 bool tegra_dc_get_connected(struct tegra_dc *);
586 bool tegra_dc_hpd(struct tegra_dc *dc);
587
588
589 void tegra_dc_blank(struct tegra_dc *dc);
590
591 void tegra_dc_enable(struct tegra_dc *dc);
592 void tegra_dc_disable(struct tegra_dc *dc);
593
594 u32 tegra_dc_get_syncpt_id(const struct tegra_dc *dc, int i);
595 u32 tegra_dc_incr_syncpt_max(struct tegra_dc *dc, int i);
596 void tegra_dc_incr_syncpt_min(struct tegra_dc *dc, int i, u32 val);
597
598 /* tegra_dc_update_windows and tegra_dc_sync_windows do not support windows
599  * with differenct dcs in one call
600  */
601 int tegra_dc_update_windows(struct tegra_dc_win *windows[], int n);
602 int tegra_dc_sync_windows(struct tegra_dc_win *windows[], int n);
603
604 int tegra_dc_set_mode(struct tegra_dc *dc, const struct tegra_dc_mode *mode);
605 struct fb_videomode;
606 int tegra_dc_set_fb_mode(struct tegra_dc *dc, const struct fb_videomode *fbmode,
607         bool stereo_mode);
608
609 unsigned tegra_dc_get_out_height(const struct tegra_dc *dc);
610 unsigned tegra_dc_get_out_width(const struct tegra_dc *dc);
611 unsigned tegra_dc_get_out_max_pixclock(const struct tegra_dc *dc);
612
613 /* PM0 and PM1 signal control */
614 #define TEGRA_PWM_PM0 0
615 #define TEGRA_PWM_PM1 1
616
617 struct tegra_dc_pwm_params {
618         int which_pwm;
619         int gpio_conf_to_sfio;
620         unsigned int period;
621         unsigned int clk_div;
622         unsigned int clk_select;
623         unsigned int duty_cycle;
624 };
625
626 void tegra_dc_config_pwm(struct tegra_dc *dc, struct tegra_dc_pwm_params *cfg);
627
628 int tegra_dsi_send_panel_short_cmd(struct tegra_dc *dc, u8 *pdata, u8 data_len);
629
630 int tegra_dc_update_csc(struct tegra_dc *dc, int win_index);
631
632 int tegra_dc_update_lut(struct tegra_dc *dc, int win_index, int fboveride);
633
634 /*
635  * In order to get a dc's current EDID, first call tegra_dc_get_edid() from an
636  * interruptible context.  The returned value (if non-NULL) points to a
637  * snapshot of the current state; after copying data from it, call
638  * tegra_dc_put_edid() on that pointer.  Do not dereference anything through
639  * that pointer after calling tegra_dc_put_edid().
640  */
641 struct tegra_dc_edid {
642         size_t          len;
643         u8              buf[0];
644 };
645 struct tegra_dc_edid *tegra_dc_get_edid(struct tegra_dc *dc);
646 void tegra_dc_put_edid(struct tegra_dc_edid *edid);
647
648 #endif