Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c1164ed8 authored by Ricardo Neri's avatar Ricardo Neri Committed by Tomi Valkeinen
Browse files

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: default avatarRicardo Neri <ricardo.neri@ti.com>
parent 7e151f7f
Loading
Loading
Loading
Loading
+19 −10
Original line number Original line Diff line number Diff line
@@ -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,
	REG_FLD_MOD(av_base, HDMI_CORE_AV_SPDIF_CTRL,
						cfg->fs_override, 1, 1);
						cfg->fs_override, 1, 1);


	/* I2S parameters */
	/*
	REG_FLD_MOD(av_base, HDMI_CORE_AV_I2S_CHST4,
	 * Set IEC-60958-3 channel status word. It is passed to the IP
						cfg->freq_sample, 3, 0);
	 * 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 = 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.sck_edge_mode, 6, 6);
	r = FLD_MOD(r, cfg->i2s_cfg.vbit, 4, 4);
	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);
	r = FLD_MOD(r, cfg->i2s_cfg.shift, 0, 0);
	hdmi_write_reg(av_base, HDMI_CORE_AV_I2S_IN_CTRL, r);
	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,
	REG_FLD_MOD(av_base, HDMI_CORE_AV_I2S_IN_LEN,
			cfg->i2s_cfg.in_length_bits, 3, 0);
			cfg->i2s_cfg.in_length_bits, 3, 0);


+1 −3
Original line number Original line Diff line number Diff line
@@ -407,8 +407,6 @@ struct hdmi_audio_dma {
};
};


struct hdmi_core_audio_i2s_config {
struct hdmi_core_audio_i2s_config {
	u8 word_max_length;
	u8 word_length;
	u8 in_length_bits;
	u8 in_length_bits;
	u8 justification;
	u8 justification;
	u8 sck_edge_mode;
	u8 sck_edge_mode;
@@ -420,7 +418,7 @@ struct hdmi_core_audio_i2s_config {


struct hdmi_core_audio_config {
struct hdmi_core_audio_config {
	struct hdmi_core_audio_i2s_config	i2s_cfg;
	struct hdmi_core_audio_i2s_config	i2s_cfg;
	u32					freq_sample;
	struct snd_aes_iec958			*iec60958_cfg;
	bool					fs_override;
	bool					fs_override;
	u32					n;
	u32					n;
	u32					cts;
	u32					cts;