From: Mythri P K <mythr...@ti.com>

Configure the IP to support the limited range and full range quantization
mode. If the full range is configured HDMI transmitter will expand the range
of pixel data from 16-235 to full 8 bit 0-235.

Signed-off-by: Mythri P K <mythr...@ti.com>
---
 drivers/video/omap2/dss/ti_hdmi.h         |    7 +++++
 drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c |   40 +++++++++++++++++++++++++++++
 2 files changed, 47 insertions(+), 0 deletions(-)

diff --git a/drivers/video/omap2/dss/ti_hdmi.h 
b/drivers/video/omap2/dss/ti_hdmi.h
index 835cfb1..1b485ee 100644
--- a/drivers/video/omap2/dss/ti_hdmi.h
+++ b/drivers/video/omap2/dss/ti_hdmi.h
@@ -42,6 +42,11 @@ enum hdmi_clk_refsel {
        HDMI_REFSEL_SYSCLK = 3
 };
 
+enum hdmi_range {
+       HDMI_LIMITED_RANGE = 0,
+       HDMI_FULL_RANGE = 1,
+};
+
 /* HDMI timing structure */
 struct hdmi_video_timings {
        u16 x_res;
@@ -159,6 +164,7 @@ struct hdmi_ip_data {
        struct hdmi_config cfg;
        struct hdmi_pll_info pll_data;
        struct hdmi_core_infoframe_avi avi_cfg;
+       enum hdmi_range range;
 };
 int ti_hdmi_4xxx_phy_enable(struct hdmi_ip_data *ip_data);
 void ti_hdmi_4xxx_phy_disable(struct hdmi_ip_data *ip_data);
@@ -172,5 +178,6 @@ void ti_hdmi_4xxx_wp_dump(struct hdmi_ip_data *ip_data, 
struct seq_file *s);
 void ti_hdmi_4xxx_pll_dump(struct hdmi_ip_data *ip_data, struct seq_file *s);
 void ti_hdmi_4xxx_core_dump(struct hdmi_ip_data *ip_data, struct seq_file *s);
 void ti_hdmi_4xxx_phy_dump(struct hdmi_ip_data *ip_data, struct seq_file *s);
+int ti_hdmi_4xxx_configure_range(struct hdmi_ip_data *ip_data);
 
 #endif
diff --git a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c 
b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
index b66d82e..a98ce8a 100644
--- a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
+++ b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
@@ -610,6 +610,46 @@ static void hdmi_core_aux_infoframe_avi_config(struct 
hdmi_ip_data *ip_data)
        hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_CHSUM, checksum);
 }
 
+int ti_hdmi_4xxx_configure_range(struct hdmi_ip_data *ip_data)
+{
+       int var;
+
+       switch (ip_data->range) {
+       /*
+        * Setting the AVI infroframe to respective limited range
+        * 0 if limited range 1 if full range
+        */
+       case HDMI_LIMITED_RANGE:
+               ip_data->avi_cfg.db3_q_range = HDMI_INFOFRAME_AVI_DB3Q_LR;
+               hdmi_core_aux_infoframe_avi_config(ip_data);
+               var = hdmi_read_reg(hdmi_core_sys_base(ip_data),
+                                               HDMI_CORE_SYS_VID_ACEN);
+               var = FLD_MOD(var, 1, 1, 1);
+               hdmi_write_reg(hdmi_core_sys_base(ip_data),
+                                               HDMI_CORE_SYS_VID_ACEN, var);
+               break;
+       case HDMI_FULL_RANGE:
+       default:
+               /* HDMI 1.3 section 6.6 YCBCR components shall
+                * always be Limited Range
+                */
+               if (ip_data->avi_cfg.db1_format ==
+                                       HDMI_INFOFRAME_AVI_DB1Y_YUV422) {
+                       pr_err("Only limited range is supported for YUV");
+                       return -EINVAL;
+               }
+               ip_data->avi_cfg.db3_q_range = HDMI_INFOFRAME_AVI_DB3Q_FR;
+               hdmi_core_aux_infoframe_avi_config(ip_data);
+                       var = hdmi_read_reg(hdmi_core_sys_base(ip_data),
+                                               HDMI_CORE_SYS_VID_MODE);
+                       var = FLD_MOD(var, 1, 4, 4);
+                       hdmi_write_reg(hdmi_core_sys_base(ip_data),
+                                               HDMI_CORE_SYS_VID_MODE, var);
+               break;
+       }
+       return 0;
+}
+
 static void hdmi_core_av_packet_config(struct hdmi_ip_data *ip_data,
                struct hdmi_core_packet_enable_repeat repeat_cfg)
 {
-- 
1.7.5.4

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to