diff options
author | Ricardo Neri <ricardo.neri@ti.com> | 2012-01-31 14:36:06 -0500 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2012-02-21 02:40:15 -0500 |
commit | d8989d96eb35335e4e464369da7bdb28e8c84a9f (patch) | |
tree | 2f10cc942ab4260f96ac71325ce6cf9b38e93700 | |
parent | 709881942d2af6944a59d1b90e73ba8f4d76bd82 (diff) |
OMAPDSS: HDMI: Implement initialization of MCLK
When the MCLK is used to drive the Audio Clock Regeneration packets,
the initialization procedure is to set ACR_CTRL[2] to 0 and then
back again to 1. Also, devices that do not support the MCLK, use
the TMDS clock directly by leaving ACR_CTRL[2] set to 0.
The MLCK clock divisor, mclk_mode, is configured only if MLCK
is used. Such configuration is no longer related to the CTS mode
as in some silicon revisions CTS SW-mode is used along with the MCLK.
Signed-off-by: Ricardo Neri <ricardo.neri@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
-rw-r--r-- | drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c | 37 |
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 b9b97f172cde..bb784d2329b6 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); |