OMAPDSS: HDMI: OMAP4: Expand configuration for IEC-60958 audio
Utilize a snd_aes_iec958 struct to write the parameters of the IEC-60958 channel status word into the HDMI IP registers. Hence, the user of the driver has full control of what parameters are written in the word. Also, some of the parameters of the I2S structure have been removed as they are actually IEC-60958 parameters. Signed-off-by: Ricardo Neri <ricardo.neri@ti.com>
This commit is contained in:
parent
7e151f7f6a
commit
c1164ed87e
|
@ -1112,10 +1112,25 @@ void hdmi_core_audio_config(struct hdmi_ip_data *ip_data,
|
|||
REG_FLD_MOD(av_base, HDMI_CORE_AV_SPDIF_CTRL,
|
||||
cfg->fs_override, 1, 1);
|
||||
|
||||
/* I2S parameters */
|
||||
REG_FLD_MOD(av_base, HDMI_CORE_AV_I2S_CHST4,
|
||||
cfg->freq_sample, 3, 0);
|
||||
/*
|
||||
* Set IEC-60958-3 channel status word. It is passed to the IP
|
||||
* just as it is received. The user of the driver is responsible
|
||||
* for its contents.
|
||||
*/
|
||||
hdmi_write_reg(av_base, HDMI_CORE_AV_I2S_CHST0,
|
||||
cfg->iec60958_cfg->status[0]);
|
||||
hdmi_write_reg(av_base, HDMI_CORE_AV_I2S_CHST1,
|
||||
cfg->iec60958_cfg->status[1]);
|
||||
hdmi_write_reg(av_base, HDMI_CORE_AV_I2S_CHST2,
|
||||
cfg->iec60958_cfg->status[2]);
|
||||
/* yes, this is correct: status[3] goes to CHST4 register */
|
||||
hdmi_write_reg(av_base, HDMI_CORE_AV_I2S_CHST4,
|
||||
cfg->iec60958_cfg->status[3]);
|
||||
/* yes, this is correct: status[4] goes to CHST5 register */
|
||||
hdmi_write_reg(av_base, HDMI_CORE_AV_I2S_CHST5,
|
||||
cfg->iec60958_cfg->status[4]);
|
||||
|
||||
/* set I2S parameters */
|
||||
r = hdmi_read_reg(av_base, HDMI_CORE_AV_I2S_IN_CTRL);
|
||||
r = FLD_MOD(r, cfg->i2s_cfg.sck_edge_mode, 6, 6);
|
||||
r = FLD_MOD(r, cfg->i2s_cfg.vbit, 4, 4);
|
||||
|
@ -1124,12 +1139,6 @@ void hdmi_core_audio_config(struct hdmi_ip_data *ip_data,
|
|||
r = FLD_MOD(r, cfg->i2s_cfg.shift, 0, 0);
|
||||
hdmi_write_reg(av_base, HDMI_CORE_AV_I2S_IN_CTRL, r);
|
||||
|
||||
r = hdmi_read_reg(av_base, HDMI_CORE_AV_I2S_CHST5);
|
||||
r = FLD_MOD(r, cfg->freq_sample, 7, 4);
|
||||
r = FLD_MOD(r, cfg->i2s_cfg.word_length, 3, 1);
|
||||
r = FLD_MOD(r, cfg->i2s_cfg.word_max_length, 0, 0);
|
||||
hdmi_write_reg(av_base, HDMI_CORE_AV_I2S_CHST5, r);
|
||||
|
||||
REG_FLD_MOD(av_base, HDMI_CORE_AV_I2S_IN_LEN,
|
||||
cfg->i2s_cfg.in_length_bits, 3, 0);
|
||||
|
||||
|
|
|
@ -407,8 +407,6 @@ struct hdmi_audio_dma {
|
|||
};
|
||||
|
||||
struct hdmi_core_audio_i2s_config {
|
||||
u8 word_max_length;
|
||||
u8 word_length;
|
||||
u8 in_length_bits;
|
||||
u8 justification;
|
||||
u8 sck_edge_mode;
|
||||
|
@ -420,7 +418,7 @@ struct hdmi_core_audio_i2s_config {
|
|||
|
||||
struct hdmi_core_audio_config {
|
||||
struct hdmi_core_audio_i2s_config i2s_cfg;
|
||||
u32 freq_sample;
|
||||
struct snd_aes_iec958 *iec60958_cfg;
|
||||
bool fs_override;
|
||||
u32 n;
|
||||
u32 cts;
|
||||
|
|
Reference in New Issue