aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c37
1 files changed, 22 insertions, 15 deletions
diff --git a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
index b9b97f172cd..bb784d2329b 100644
--- a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
+++ b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
@@ -1068,13 +1068,9 @@ void hdmi_core_audio_config(struct hdmi_ip_data *ip_data,
1068 u32 r; 1068 u32 r;
1069 void __iomem *av_base = hdmi_av_base(ip_data); 1069 void __iomem *av_base = hdmi_av_base(ip_data);
1070 1070
1071 /* audio clock recovery parameters */ 1071 /*
1072 r = hdmi_read_reg(av_base, HDMI_CORE_AV_ACR_CTRL); 1072 * Parameters for generation of Audio Clock Recovery packets
1073 r = FLD_MOD(r, cfg->use_mclk, 2, 2); 1073 */
1074 r = FLD_MOD(r, cfg->en_acr_pkt, 1, 1);
1075 r = FLD_MOD(r, cfg->cts_mode, 0, 0);
1076 hdmi_write_reg(av_base, HDMI_CORE_AV_ACR_CTRL, r);
1077
1078 REG_FLD_MOD(av_base, HDMI_CORE_AV_N_SVAL1, cfg->n, 7, 0); 1074 REG_FLD_MOD(av_base, HDMI_CORE_AV_N_SVAL1, cfg->n, 7, 0);
1079 REG_FLD_MOD(av_base, HDMI_CORE_AV_N_SVAL2, cfg->n >> 8, 7, 0); 1075 REG_FLD_MOD(av_base, HDMI_CORE_AV_N_SVAL2, cfg->n >> 8, 7, 0);
1080 REG_FLD_MOD(av_base, HDMI_CORE_AV_N_SVAL3, cfg->n >> 16, 7, 0); 1076 REG_FLD_MOD(av_base, HDMI_CORE_AV_N_SVAL3, cfg->n >> 16, 7, 0);
@@ -1086,14 +1082,6 @@ void hdmi_core_audio_config(struct hdmi_ip_data *ip_data,
1086 REG_FLD_MOD(av_base, 1082 REG_FLD_MOD(av_base,
1087 HDMI_CORE_AV_CTS_SVAL3, cfg->cts >> 16, 7, 0); 1083 HDMI_CORE_AV_CTS_SVAL3, cfg->cts >> 16, 7, 0);
1088 } else { 1084 } else {
1089 /*
1090 * HDMI IP uses this configuration to divide the MCLK to
1091 * update CTS value.
1092 */
1093 REG_FLD_MOD(av_base,
1094 HDMI_CORE_AV_FREQ_SVAL, cfg->mclk_mode, 2, 0);
1095
1096 /* Configure clock for audio packets */
1097 REG_FLD_MOD(av_base, HDMI_CORE_AV_AUD_PAR_BUSCLK_1, 1085 REG_FLD_MOD(av_base, HDMI_CORE_AV_AUD_PAR_BUSCLK_1,
1098 cfg->aud_par_busclk, 7, 0); 1086 cfg->aud_par_busclk, 7, 0);
1099 REG_FLD_MOD(av_base, HDMI_CORE_AV_AUD_PAR_BUSCLK_2, 1087 REG_FLD_MOD(av_base, HDMI_CORE_AV_AUD_PAR_BUSCLK_2,
@@ -1102,6 +1090,25 @@ void hdmi_core_audio_config(struct hdmi_ip_data *ip_data,
1102 (cfg->aud_par_busclk >> 16), 7, 0); 1090 (cfg->aud_par_busclk >> 16), 7, 0);
1103 } 1091 }
1104 1092
1093 /* Set ACR clock divisor */
1094 REG_FLD_MOD(av_base,
1095 HDMI_CORE_AV_FREQ_SVAL, cfg->mclk_mode, 2, 0);
1096
1097 r = hdmi_read_reg(av_base, HDMI_CORE_AV_ACR_CTRL);
1098 /*
1099 * Use TMDS clock for ACR packets. For devices that use
1100 * the MCLK, this is the first part of the MCLK initialization.
1101 */
1102 r = FLD_MOD(r, 0, 2, 2);
1103
1104 r = FLD_MOD(r, cfg->en_acr_pkt, 1, 1);
1105 r = FLD_MOD(r, cfg->cts_mode, 0, 0);
1106 hdmi_write_reg(av_base, HDMI_CORE_AV_ACR_CTRL, r);
1107
1108 /* For devices using MCLK, this completes its initialization. */
1109 if (cfg->use_mclk)
1110 REG_FLD_MOD(av_base, HDMI_CORE_AV_ACR_CTRL, 1, 2, 2);
1111
1105 /* Override of SPDIF sample frequency with value in I2S_CHST4 */ 1112 /* Override of SPDIF sample frequency with value in I2S_CHST4 */
1106 REG_FLD_MOD(av_base, HDMI_CORE_AV_SPDIF_CTRL, 1113 REG_FLD_MOD(av_base, HDMI_CORE_AV_SPDIF_CTRL,
1107 cfg->fs_override, 1, 1); 1114 cfg->fs_override, 1, 1);