summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorMisael Lopez Cruz <misael.lopez@ti.com>2010-08-06 03:15:19 -0500
committerBryan Wu <bryan.wu@canonical.com>2010-08-26 21:45:33 +0800
commit68643efca8811121dffb724c1785f0ff3bf397a8 (patch)
treee5e34dcb6ade70a0624773512efd0c61b7512be7 /arch
parentd7913579c973e49759f276f23b68efcaadadfbbd (diff)
OMAP: HDMI: Fix audio settings for OMAP4 ES2.0
For OMAP4 ES2.0, CTS is calculated using following formula: CTS = pixel_clock * deep_color_factor The CTS mode should be set to software in order to use calculated CTS value and Audio Input Data Rate Adjustment should be set to 0. Change-Id: Ib0d852f96c36f0f4df874e28cdd1d32624e4642a Signed-off-by: Misael Lopez Cruz <misael.lopez@ti.com> Signed-off-by: Jorge Eduardo Candelaria <jorge.candelaria@ti.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/plat-omap/hdmi_lib.c40
1 files changed, 32 insertions, 8 deletions
diff --git a/arch/arm/plat-omap/hdmi_lib.c b/arch/arm/plat-omap/hdmi_lib.c
index 27405ea9a3c6..eddcae8ca0c6 100644
--- a/arch/arm/plat-omap/hdmi_lib.c
+++ b/arch/arm/plat-omap/hdmi_lib.c
@@ -1154,7 +1154,7 @@ static int hdmi_w1_audio_config(void)
int hdmi_lib_enable(struct hdmi_config *cfg)
{
- u32 r;
+ u32 r, deep_color;
u32 av_name = HDMI_CORE_AV;
@@ -1213,9 +1213,8 @@ int hdmi_lib_enable(struct hdmi_config *cfg)
val &= 0x0FFFFFFF;
val |= ((0x1f) << 27); /* wakeup */
hdmi_write_reg(HDMI_WP, HDMI_WP_VIDEO_SIZE, val);
-
- hdmi_w1_audio_config();
#endif
+ hdmi_w1_audio_config();
/****************************** CORE *******************************/
/************* configure core video part ********************************/
@@ -1232,7 +1231,29 @@ int hdmi_lib_enable(struct hdmi_config *cfg)
audio_cfg.fs = 0x02;
audio_cfg.if_fs = 0x00;
audio_cfg.n = 6144;
- audio_cfg.cts = 74250;
+
+ r = hdmi_read_reg(HDMI_WP, HDMI_WP_VIDEO_CFG);
+ switch(r & 0x03) {
+ case 1:
+ deep_color = 100;
+ break;
+ case 2:
+ deep_color = 125;
+ break;
+ case 3:
+ deep_color = 150;
+ break;
+ case 4:
+ printk(KERN_ERR "Invalid deep color configuration, "
+ "using no deep-color\n");
+ deep_color = 100;
+ break;
+ }
+
+ if (omap_rev() == OMAP4430_REV_ES1_0)
+ audio_cfg.cts = cfg->pixel_clock;
+ else
+ audio_cfg.cts = (cfg->pixel_clock * deep_color) / 100;
/* audio channel */
audio_cfg.if_sample_size = 0x0;
@@ -1240,13 +1261,16 @@ int hdmi_lib_enable(struct hdmi_config *cfg)
audio_cfg.if_channel_number = 2;
audio_cfg.if_audio_channel_location = 0x00;
- /* TODO: Is this configuration correct? */
- audio_cfg.aud_par_busclk = (((128 * 31) - 1) << 8);
- audio_cfg.cts_mode = 0;
+ if (omap_rev() == OMAP4430_REV_ES1_0) {
+ audio_cfg.aud_par_busclk = (((128 * 31) - 1) << 8);
+ audio_cfg.cts_mode = CTS_MODE_HW;
+ } else {
+ audio_cfg.aud_par_busclk = 0;
+ audio_cfg.cts_mode = CTS_MODE_SW;
+ }
r = hdmi_core_video_config(&v_core_cfg);
- /* hnagalla */
hdmi_core_audio_config(av_name, &audio_cfg);
hdmi_core_audio_mode_enable(av_name);