On Wed, 2012-01-04 at 17:23 +0530, mythripk@xxxxxx wrote: > From: Mythri P K <mythripk@xxxxxx> > > 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 <mythripk@xxxxxx> > --- > 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: I don't think you should have HDMI_FULL_RANGE and default at the same case. If the range is not limited or full, the value is illegal and you should give an error. Tomi
Attachment:
signature.asc
Description: This is a digitally signed message part