audio: atv source selected by atv demod [1/1]
authorZhe Wang <Zhe.Wang@amlogic.com>
Wed, 12 Jun 2019 06:28:10 +0000 (14:28 +0800)
committerZhe Wang <Zhe.Wang@amlogic.com>
Wed, 12 Jun 2019 06:38:46 +0000 (14:38 +0800)
PD#TV-6044, PD#TV-6047

Problem:
ATV sound output has noise when input non standard signal.

Solution:
release atv source select function to atv demod

Verify:
x301.

Change-Id: I96e58531150c3f20946ab636d701296328215686
Signed-off-by: Zhe Wang <Zhe.Wang@amlogic.com>
sound/soc/amlogic/auge/audio_utils.c
sound/soc/amlogic/auge/audio_utils.h
sound/soc/amlogic/auge/extn.c
sound/soc/amlogic/meson/audio_hw.c
sound/soc/amlogic/meson/audio_hw.h

index f5205a11de21001080fce8c6d66628a2fa01ed70..2d232262e132e6ca739cdad46b00c93e8c8c61ae 100644 (file)
@@ -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)
index 26981818541c988b3c21a970bd335c1d8a7b437d..a665e4929df601d8cb9a6d25d57ea0607a43066f 100644 (file)
@@ -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
index a5fd6428a537e6bbbf101245f4522d07ee99efb2..31a208aa7482925b4f38ebdc3ce83ef97d38ab13 100644 (file)
@@ -442,7 +442,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 */
 
index 5c4361d692e8e61b9894863548cd9698fd73e2d0..5f3b72eec4ec73931f9008aa65f3a2dba5ac703b 100644 (file)
@@ -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 */
index b4d38b85ee6e0aaebdd309fcabb377d27c98d984..e69fca7eae45cab110ed3c6cb285d96afc89ea42 100644 (file)
@@ -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;