aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2014-06-09 06:48:54 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2014-07-04 04:17:58 -0400
commitd0678c303fb70415da429ebcafebc1655c793055 (patch)
treed867938123cf062a957920273283e99cf5163330
parentdb85ca7ca51ca886e8cd127368e09a7955bb041c (diff)
OMAPDSS: HDMI5: use common AVI infoframe support
Instead of using OMAP specific AVI infoframe structs, use the common one from include/linux/hdmi.h. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
-rw-r--r--drivers/video/fbdev/omap2/dss/hdmi5_core.c122
1 files changed, 65 insertions, 57 deletions
diff --git a/drivers/video/fbdev/omap2/dss/hdmi5_core.c b/drivers/video/fbdev/omap2/dss/hdmi5_core.c
index 7528c7a42aa5..d46cb13b06bf 100644
--- a/drivers/video/fbdev/omap2/dss/hdmi5_core.c
+++ b/drivers/video/fbdev/omap2/dss/hdmi5_core.c
@@ -290,7 +290,6 @@ void hdmi5_core_dump(struct hdmi_core_data *core, struct seq_file *s)
290} 290}
291 291
292static void hdmi_core_init(struct hdmi_core_vid_config *video_cfg, 292static void hdmi_core_init(struct hdmi_core_vid_config *video_cfg,
293 struct hdmi_core_infoframe_avi *avi_cfg,
294 struct hdmi_config *cfg) 293 struct hdmi_config *cfg)
295{ 294{
296 DSSDBG("hdmi_core_init\n"); 295 DSSDBG("hdmi_core_init\n");
@@ -314,25 +313,6 @@ static void hdmi_core_init(struct hdmi_core_vid_config *video_cfg,
314 cfg->timings.vfp + cfg->timings.vbp; 313 cfg->timings.vfp + cfg->timings.vbp;
315 video_cfg->v_fc_config.cm.mode = cfg->cm.mode; 314 video_cfg->v_fc_config.cm.mode = cfg->cm.mode;
316 video_cfg->v_fc_config.timings.interlace = cfg->timings.interlace; 315 video_cfg->v_fc_config.timings.interlace = cfg->timings.interlace;
317
318 /* info frame */
319 avi_cfg->db1_format = 0;
320 avi_cfg->db1_active_info = 0;
321 avi_cfg->db1_bar_info_dv = 0;
322 avi_cfg->db1_scan_info = 0;
323 avi_cfg->db2_colorimetry = 0;
324 avi_cfg->db2_aspect_ratio = 0;
325 avi_cfg->db2_active_fmt_ar = 0;
326 avi_cfg->db3_itc = 0;
327 avi_cfg->db3_ec = 0;
328 avi_cfg->db3_q_range = 0;
329 avi_cfg->db3_nup_scaling = 0;
330 avi_cfg->db4_videocode = 0;
331 avi_cfg->db5_pixel_repeat = 0;
332 avi_cfg->db6_7_line_eoftop = 0;
333 avi_cfg->db8_9_line_sofbottom = 0;
334 avi_cfg->db10_11_pixel_eofleft = 0;
335 avi_cfg->db12_13_pixel_sofright = 0;
336} 316}
337 317
338/* DSS_HDMI_CORE_VIDEO_CONFIG */ 318/* DSS_HDMI_CORE_VIDEO_CONFIG */
@@ -440,22 +420,55 @@ static void hdmi_core_config_video_sampler(struct hdmi_core_data *core)
440 420
441static void hdmi_core_aux_infoframe_avi_config(struct hdmi_core_data *core) 421static void hdmi_core_aux_infoframe_avi_config(struct hdmi_core_data *core)
442{ 422{
423 struct hdmi_avi_infoframe *frame = &core->avi_infoframe;
443 void __iomem *base = core->base; 424 void __iomem *base = core->base;
444 struct hdmi_core_infoframe_avi avi = core->avi_cfg; 425 u8 data[HDMI_INFOFRAME_SIZE(AVI)];
445 426 u8 *ptr;
446 REG_FLD_MOD(base, HDMI_CORE_FC_AVICONF0, avi.db1_format, 1, 0); 427 unsigned y, a, b, s;
447 REG_FLD_MOD(base, HDMI_CORE_FC_AVICONF0, avi.db1_active_info, 6, 6); 428 unsigned c, m, r;
448 REG_FLD_MOD(base, HDMI_CORE_FC_AVICONF0, avi.db1_bar_info_dv, 3, 2); 429 unsigned itc, ec, q, sc;
449 REG_FLD_MOD(base, HDMI_CORE_FC_AVICONF0, avi.db1_scan_info, 5, 4); 430 unsigned vic;
450 REG_FLD_MOD(base, HDMI_CORE_FC_AVICONF1, avi.db2_colorimetry, 7, 6); 431 unsigned yq, cn, pr;
451 REG_FLD_MOD(base, HDMI_CORE_FC_AVICONF1, avi.db2_aspect_ratio, 5, 4); 432
452 REG_FLD_MOD(base, HDMI_CORE_FC_AVICONF1, avi.db2_active_fmt_ar, 3, 0); 433 hdmi_avi_infoframe_pack(frame, data, sizeof(data));
453 REG_FLD_MOD(base, HDMI_CORE_FC_AVICONF2, avi.db3_itc, 7, 7); 434
454 REG_FLD_MOD(base, HDMI_CORE_FC_AVICONF2, avi.db3_ec, 6, 4); 435 ptr = data + HDMI_INFOFRAME_HEADER_SIZE;
455 REG_FLD_MOD(base, HDMI_CORE_FC_AVICONF2, avi.db3_q_range, 3, 2); 436
456 REG_FLD_MOD(base, HDMI_CORE_FC_AVICONF2, avi.db3_nup_scaling, 1, 0); 437 y = (ptr[0] >> 5) & 0x3;
457 REG_FLD_MOD(base, HDMI_CORE_FC_AVIVID, avi.db4_videocode, 6, 0); 438 a = (ptr[0] >> 4) & 0x1;
458 REG_FLD_MOD(base, HDMI_CORE_FC_PRCONF, avi.db5_pixel_repeat, 3, 0); 439 b = (ptr[0] >> 2) & 0x3;
440 s = (ptr[0] >> 0) & 0x3;
441
442 c = (ptr[1] >> 6) & 0x3;
443 m = (ptr[1] >> 4) & 0x3;
444 r = (ptr[1] >> 0) & 0x3;
445
446 itc = (ptr[2] >> 7) & 0x1;
447 ec = (ptr[2] >> 4) & 0x7;
448 q = (ptr[2] >> 2) & 0x3;
449 sc = (ptr[2] >> 0) & 0x3;
450
451 vic = ptr[3];
452
453 yq = (ptr[4] >> 6) & 0x3;
454 cn = (ptr[4] >> 4) & 0x3;
455 pr = (ptr[4] >> 0) & 0xf;
456
457 hdmi_write_reg(base, HDMI_CORE_FC_AVICONF0,
458 (a << 6) | (s << 4) | (b << 2) | (y << 0));
459
460 hdmi_write_reg(base, HDMI_CORE_FC_AVICONF1,
461 (c << 6) | (m << 4) | (r << 0));
462
463 hdmi_write_reg(base, HDMI_CORE_FC_AVICONF2,
464 (itc << 7) | (ec << 4) | (q << 2) | (sc << 0));
465
466 hdmi_write_reg(base, HDMI_CORE_FC_AVIVID, vic);
467
468 hdmi_write_reg(base, HDMI_CORE_FC_AVICONF3,
469 (yq << 2) | (cn << 0));
470
471 REG_FLD_MOD(base, HDMI_CORE_FC_PRCONF, pr, 3, 0);
459} 472}
460 473
461static void hdmi_core_csc_config(struct hdmi_core_data *core, 474static void hdmi_core_csc_config(struct hdmi_core_data *core,
@@ -497,7 +510,7 @@ static void hdmi_core_configure_range(struct hdmi_core_data *core)
497 510
498 /* support limited range with 24 bit color depth for now */ 511 /* support limited range with 24 bit color depth for now */
499 csc_coeff = csc_table_deepcolor[0]; 512 csc_coeff = csc_table_deepcolor[0];
500 core->avi_cfg.db3_q_range = HDMI_INFOFRAME_AVI_DB3Q_LR; 513 core->avi_infoframe.quantization_range = HDMI_QUANTIZATION_RANGE_LIMITED;
501 514
502 hdmi_core_csc_config(core, csc_coeff); 515 hdmi_core_csc_config(core, csc_coeff);
503 hdmi_core_aux_infoframe_avi_config(core); 516 hdmi_core_aux_infoframe_avi_config(core);
@@ -591,11 +604,11 @@ void hdmi5_configure(struct hdmi_core_data *core, struct hdmi_wp_data *wp,
591 struct omap_video_timings video_timing; 604 struct omap_video_timings video_timing;
592 struct hdmi_video_format video_format; 605 struct hdmi_video_format video_format;
593 struct hdmi_core_vid_config v_core_cfg; 606 struct hdmi_core_vid_config v_core_cfg;
594 struct hdmi_core_infoframe_avi *avi_cfg = &core->avi_cfg; 607 struct hdmi_avi_infoframe *avi_infoframe = &core->avi_infoframe;
595 608
596 hdmi_core_mask_interrupts(core); 609 hdmi_core_mask_interrupts(core);
597 610
598 hdmi_core_init(&v_core_cfg, avi_cfg, cfg); 611 hdmi_core_init(&v_core_cfg, cfg);
599 612
600 hdmi_wp_init_vid_fmt_timings(&video_format, &video_timing, cfg); 613 hdmi_wp_init_vid_fmt_timings(&video_format, &video_timing, cfg);
601 614
@@ -624,25 +637,20 @@ void hdmi5_configure(struct hdmi_core_data *core, struct hdmi_wp_data *wp,
624 /* 637 /*
625 * configure packet info frame video see doc CEA861-D page 65 638 * configure packet info frame video see doc CEA861-D page 65
626 */ 639 */
627 avi_cfg->db1_format = HDMI_INFOFRAME_AVI_DB1Y_RGB; 640 hdmi_avi_infoframe_init(avi_infoframe);
628 avi_cfg->db1_active_info = 641 avi_infoframe->colorspace = HDMI_COLORSPACE_RGB;
629 HDMI_INFOFRAME_AVI_DB1A_ACTIVE_FORMAT_OFF; 642 avi_infoframe->scan_mode = HDMI_SCAN_MODE_NONE;
630 avi_cfg->db1_bar_info_dv = HDMI_INFOFRAME_AVI_DB1B_NO; 643 avi_infoframe->colorimetry = HDMI_COLORIMETRY_NONE;
631 avi_cfg->db1_scan_info = HDMI_INFOFRAME_AVI_DB1S_0; 644 avi_infoframe->picture_aspect = HDMI_PICTURE_ASPECT_NONE;
632 avi_cfg->db2_colorimetry = HDMI_INFOFRAME_AVI_DB2C_NO; 645 avi_infoframe->active_aspect = HDMI_ACTIVE_ASPECT_PICTURE;
633 avi_cfg->db2_aspect_ratio = HDMI_INFOFRAME_AVI_DB2M_NO; 646 avi_infoframe->itc = 0;
634 avi_cfg->db2_active_fmt_ar = HDMI_INFOFRAME_AVI_DB2R_SAME; 647 avi_infoframe->extended_colorimetry = HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
635 avi_cfg->db3_itc = HDMI_INFOFRAME_AVI_DB3ITC_NO; 648 avi_infoframe->quantization_range = HDMI_QUANTIZATION_RANGE_DEFAULT;
636 avi_cfg->db3_ec = HDMI_INFOFRAME_AVI_DB3EC_XVYUV601; 649 avi_infoframe->nups = HDMI_NUPS_UNKNOWN;
637 avi_cfg->db3_q_range = HDMI_INFOFRAME_AVI_DB3Q_DEFAULT; 650 avi_infoframe->video_code = cfg->cm.code;
638 avi_cfg->db3_nup_scaling = HDMI_INFOFRAME_AVI_DB3SC_NO; 651 avi_infoframe->ycc_quantization_range = HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
639 avi_cfg->db4_videocode = cfg->cm.code; 652 avi_infoframe->content_type = HDMI_CONTENT_TYPE_NONE;
640 avi_cfg->db5_pixel_repeat = HDMI_INFOFRAME_AVI_DB5PR_NO; 653 avi_infoframe->pixel_repeat = 0;
641 avi_cfg->db6_7_line_eoftop = 0;
642 avi_cfg->db8_9_line_sofbottom = 0;
643 avi_cfg->db10_11_pixel_eofleft = 0;
644 avi_cfg->db12_13_pixel_sofright = 0;
645
646 hdmi_core_aux_infoframe_avi_config(core); 654 hdmi_core_aux_infoframe_avi_config(core);
647 655
648 hdmi_core_enable_video_path(core); 656