author | Lianlian Zhu <lianlian.zhu@amlogic.com> | 2018-04-18 08:11:03 (GMT) |
---|---|---|
committer | yang.xu <yang.xu@amlogic.com> | 2018-04-20 02:36:55 (GMT) |
commit | e5017fc66c3fb7cae349ae60dc0b25c3bd0da2ae (patch) | |
tree | 8a10bd21b189adcb91577ea276324d58d6b29010 | |
parent | 73d6233662aa766eb30f5654919b88f2a3e804f4 (diff) | |
download | common-e5017fc66c3fb7cae349ae60dc0b25c3bd0da2ae.zip common-e5017fc66c3fb7cae349ae60dc0b25c3bd0da2ae.tar.gz common-e5017fc66c3fb7cae349ae60dc0b25c3bd0da2ae.tar.bz2 |
audio: auge: support raw output[2/2]
PD#162366: audio: auge: add ac3 eac3 dts output
Change-Id: If77a02601ad1fba4985f361188db1abf732043c0
Signed-off-by: Lianlian Zhu <lianlian.zhu@amlogic.com>
-rw-r--r-- | sound/soc/amlogic/auge/spdif.c | 47 | ||||
-rw-r--r-- | sound/soc/amlogic/auge/spdif_hw.h | 9 |
2 files changed, 53 insertions, 3 deletions
diff --git a/sound/soc/amlogic/auge/spdif.c b/sound/soc/amlogic/auge/spdif.c index 3e8df70..2be6bac 100644 --- a/sound/soc/amlogic/auge/spdif.c +++ b/sound/soc/amlogic/auge/spdif.c @@ -419,9 +419,44 @@ static int aml_dai_spdif_prepare( /* TOHDMITX_CTRL0 */ if (p_spdif->id == 1) { spdifoutb_to_hdmitx_ctrl(p_spdif->id); - aout_notifier_call_chain(AOUT_EVENT_IEC_60958_PCM, - substream); + if (IEC958_mode_codec == 2) { + aout_notifier_call_chain( + AOUT_EVENT_RAWDATA_AC_3, + substream); + } else if (IEC958_mode_codec == 3) { + aout_notifier_call_chain( + AOUT_EVENT_RAWDATA_DTS, + substream); + } else if (IEC958_mode_codec == 4) { + aout_notifier_call_chain( + AOUT_EVENT_RAWDATA_DOBLY_DIGITAL_PLUS, + substream); + } else if (IEC958_mode_codec == 5) { + aout_notifier_call_chain( + AOUT_EVENT_RAWDATA_DTS_HD, + substream); + } else if (IEC958_mode_codec == 7 || + IEC958_mode_codec == 8) { + //aml_aiu_write(AIU_958_CHSTAT_L0, 0x1902); + //aml_aiu_write(AIU_958_CHSTAT_L1, 0x900); + //aml_aiu_write(AIU_958_CHSTAT_R0, 0x1902); + //aml_aiu_write(AIU_958_CHSTAT_R1, 0x900); + if (IEC958_mode_codec == 8) + aout_notifier_call_chain( + AOUT_EVENT_RAWDATA_DTS_HD_MA, + substream); + else + aout_notifier_call_chain( + AOUT_EVENT_RAWDATA_MAT_MLP, + substream); + } else { + aout_notifier_call_chain( + AOUT_EVENT_IEC_60958_PCM, + substream); + } + } + } else { struct toddr *to = p_spdif->tddr; unsigned int msb, lsb, toddr_type; @@ -563,7 +598,13 @@ static void aml_set_spdifclk(struct aml_spdif *p_spdif) p_spdif->sysclk_freq); if (p_spdif->sysclk_freq) { unsigned int mul = 4; - + if (IEC958_mode_codec == 4 || IEC958_mode_codec == 5 || + IEC958_mode_codec == 7 || IEC958_mode_codec == 8) { + pr_info("set 4x audio clk for 958\n"); + p_spdif->sysclk_freq = p_spdif->sysclk_freq * 4; + } else { + pr_info("set normal 512 fs /4 fs\n"); + } mpll_freq = p_spdif->sysclk_freq * mul; #ifdef G12A_PTM diff --git a/sound/soc/amlogic/auge/spdif_hw.h b/sound/soc/amlogic/auge/spdif_hw.h index c332bfb..ca55acfb 100644 --- a/sound/soc/amlogic/auge/spdif_hw.h +++ b/sound/soc/amlogic/auge/spdif_hw.h @@ -19,6 +19,15 @@ #define __AML_SPDIF_HW_H__ #include "audio_io.h" #include "regs.h" +/* + * 0 -- other formats except(DD,DD+,DTS) + * 1 -- DTS + * 2 -- DD + * 3 -- DTS with 958 PCM RAW package mode + * 4 -- DD+ + */ + +extern unsigned int IEC958_mode_codec; extern void aml_spdif_enable( struct aml_audio_controller *actrl, |