diff --git a/sound/soc/amlogic/auge/audio_utils.c b/sound/soc/amlogic/auge/audio_utils.c index f5205a11de21..2d232262e132 100644 --- a/sound/soc/amlogic/auge/audio_utils.c +++ b/sound/soc/amlogic/auge/audio_utils.c @@ -961,9 +961,14 @@ void fratv_enable(bool enable) * 0: select from ATV; * 1: select from ADEC; */ -void fratv_src_select(int src) +void fratv_src_select(bool src) { - audiobus_update_bits(EE_AUDIO_FRATV_CTRL0, 0x1 << 20, (bool)src << 20); + audiobus_update_bits(EE_AUDIO_FRATV_CTRL0, 0x1 << 20, src << 20); +} + +void fratv_LR_swap(bool swap) +{ + audiobus_update_bits(EE_AUDIO_FRATV_CTRL0, 0x1 << 19, swap << 19); } void cec_arc_enable(int src, bool enable) diff --git a/sound/soc/amlogic/auge/audio_utils.h b/sound/soc/amlogic/auge/audio_utils.h index 26981818541c..a665e4929df6 100644 --- a/sound/soc/amlogic/auge/audio_utils.h +++ b/sound/soc/amlogic/auge/audio_utils.h @@ -27,7 +27,10 @@ extern void audio_locker_set(int enable); extern int audio_locker_get(void); extern void fratv_enable(bool enable); -extern void fratv_src_select(int src); + +extern void fratv_src_select(bool src); + +extern void fratv_LR_swap(bool swap); extern void cec_arc_enable(int src, bool enable); #endif diff --git a/sound/soc/amlogic/auge/extn.c b/sound/soc/amlogic/auge/extn.c index 3cfb815da868..da3d415f4a0e 100644 --- a/sound/soc/amlogic/auge/extn.c +++ b/sound/soc/amlogic/auge/extn.c @@ -460,7 +460,10 @@ static int extn_dai_prepare( msb = 15; lsb = 0; - fratv_src_select(1); + /* commented it, selected by atv demod, + * select 0 for non standard signal. + */ + /* fratv_src_select(1); */ } else if (src == FRHDMIRX) { if (p_extn->hdmirx_mode) { /* PAO */ diff --git a/sound/soc/amlogic/meson/audio_hw.c b/sound/soc/amlogic/meson/audio_hw.c index 5c4361d692e8..5f3b72eec4ec 100644 --- a/sound/soc/amlogic/meson/audio_hw.c +++ b/sound/soc/amlogic/meson/audio_hw.c @@ -434,8 +434,10 @@ static void i2sin_fifo2_set_buf(u32 addr, u32 size, u32 src, u32 ch) ); if (audio_in_source == 1) { - /* ATV from adec */ - aml_audin_write(AUDIN_ATV_DEMOD_CTRL, 7); + /* commented it, selected by atv demod, + * select 0 for non standard signal. + */ + /*aml_audin_write(AUDIN_ATV_DEMOD_CTRL, 7);*/ aml_audin_update_bits(AUDIN_FIFO2_CTRL, (0x7 << AUDIN_FIFO_DIN_SEL), (ATV_ADEC << AUDIN_FIFO_DIN_SEL)); @@ -459,6 +461,22 @@ static void i2sin_fifo2_set_buf(u32 addr, u32 size, u32 src, u32 ch) } +/* source select + * 0: select from ATV; + * 1: select from ADEC; + */ +void atv_src_select(bool src) +{ + aml_audin_update_bits(AUDIN_ATV_DEMOD_CTRL, + 0x3, (src << 1) && src); +} + +void atv_LR_swap(bool swap) +{ + aml_audin_update_bits(AUDIN_ATV_DEMOD_CTRL, + 0x1 << 2, swap << 2); +} + static void spdifin_reg_set(void) { /* get clk81 clk_rate */ diff --git a/sound/soc/amlogic/meson/audio_hw.h b/sound/soc/amlogic/meson/audio_hw.h index b4d38b85ee6e..e69fca7eae45 100644 --- a/sound/soc/amlogic/meson/audio_hw.h +++ b/sound/soc/amlogic/meson/audio_hw.h @@ -198,6 +198,9 @@ extern bool is_audin_lr_invert_check(void); extern bool is_audbuf_gate_rm(void); extern void chipset_set_spdif_pao(void); +extern void atv_src_select(bool src); +extern void atv_LR_swap(bool swap); + extern unsigned int IEC958_mode_codec; extern unsigned int clk81;