diff options
| author | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2014-06-09 06:48:54 -0400 |
|---|---|---|
| committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2014-07-04 04:17:58 -0400 |
| commit | d0678c303fb70415da429ebcafebc1655c793055 (patch) | |
| tree | d867938123cf062a957920273283e99cf5163330 | |
| parent | db85ca7ca51ca886e8cd127368e09a7955bb041c (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.c | 122 |
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 | ||
| 292 | static void hdmi_core_init(struct hdmi_core_vid_config *video_cfg, | 292 | static 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 | ||
| 441 | static void hdmi_core_aux_infoframe_avi_config(struct hdmi_core_data *core) | 421 | static 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 | ||
| 461 | static void hdmi_core_csc_config(struct hdmi_core_data *core, | 474 | static 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 | |
