This is an automated email from the ASF dual-hosted git repository.

jerpelea pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 8de07b2  boards: cxd56xx: audio: Support I2S input
8de07b2 is described below

commit 8de07b2ae81af24a710766c6db3f7721d8fe3d38
Author: SPRESENSE <41312067+sprese...@users.noreply.github.com>
AuthorDate: Tue Feb 8 11:08:09 2022 +0900

    boards: cxd56xx: audio: Support I2S input
    
    Enable the driver setting of I2S input.
---
 arch/arm/include/cxd56xx/audio.h                   |  20 +-
 .../arm/cxd56xx/drivers/audio/cxd56_audio_ac_reg.c |  18 +-
 .../cxd56xx/drivers/audio/cxd56_audio_bca_reg.c    | 308 +++++++++++++++++++--
 boards/arm/cxd56xx/drivers/audio/cxd56_audio_dma.c |  50 ++++
 4 files changed, 359 insertions(+), 37 deletions(-)

diff --git a/arch/arm/include/cxd56xx/audio.h b/arch/arm/include/cxd56xx/audio.h
index b115302..e5f93e5 100644
--- a/arch/arm/include/cxd56xx/audio.h
+++ b/arch/arm/include/cxd56xx/audio.h
@@ -232,6 +232,14 @@ enum cxd56_audio_dma_path_e
 
   CXD56_AUDIO_DMA_PATH_MIC_TO_MEM = 0,
 
+  /* I2S0 to memory */
+
+  CXD56_AUDIO_DMA_PATH_I2S0_TO_MEM,
+
+  /* I2S1 to memory */
+
+  CXD56_AUDIO_DMA_PATH_I2S1_TO_MEM,
+
   /* Memory to BUS I/F1 */
 
   CXD56_AUDIO_DMA_PATH_MEM_TO_BUSIF1,
@@ -294,11 +302,19 @@ enum cxd56_audio_dma_e
 
   CXD56_AUDIO_DMAC_MIC = 0,
 
-  /* I2S_OUT */
+  /* I2S1 Input */
+
+  CXD56_AUDIO_DMAC_I2S0_UP,
+
+  /* I2S1 Output */
 
   CXD56_AUDIO_DMAC_I2S0_DOWN,
 
-  /* I2S2_OUT */
+  /* I2S2 Input */
+
+  CXD56_AUDIO_DMAC_I2S1_UP,
+
+  /* I2S2 Output */
 
   CXD56_AUDIO_DMAC_I2S1_DOWN
 };
diff --git a/boards/arm/cxd56xx/drivers/audio/cxd56_audio_ac_reg.c 
b/boards/arm/cxd56xx/drivers/audio/cxd56_audio_ac_reg.c
index 2a8ce3d..6f6377c 100644
--- a/boards/arm/cxd56xx/drivers/audio/cxd56_audio_ac_reg.c
+++ b/boards/arm/cxd56xx/drivers/audio/cxd56_audio_ac_reg.c
@@ -100,6 +100,10 @@
 #define SRCIN_SEL_CODECDSP_MIX 3
 
 /****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
  * Private Data
  ****************************************************************************/
 
@@ -431,6 +435,10 @@ const struct audio_ac_reg_s g_ac_reg[RI_REG_MAX_ENTRY] =
 };
 
 /****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
  * Private Functions
  ****************************************************************************/
 
@@ -845,15 +853,7 @@ static CXD56_AUDIO_ECODE set_srcin_sel(AC_REG_ID ac_reg_id,
         break;
 
       case CXD56_AUDIO_SIG_MIX:
-        if ((read_ac_reg(RI_COD_INSEL2) == COD_INSEL_SRC1)
-         || (read_ac_reg(RI_COD_INSEL3) == COD_INSEL_SRC1))
-          {
-            return CXD56_AUDIO_ECODE_REG_AC_SEL_INV;
-          }
-        else
-          {
-            val = SRCIN_SEL_CODECDSP_MIX;
-          }
+        val = SRCIN_SEL_CODECDSP_MIX;
         break;
 
       default:
diff --git a/boards/arm/cxd56xx/drivers/audio/cxd56_audio_bca_reg.c 
b/boards/arm/cxd56xx/drivers/audio/cxd56_audio_bca_reg.c
index 721a08b..1900a9f 100644
--- a/boards/arm/cxd56xx/drivers/audio/cxd56_audio_bca_reg.c
+++ b/boards/arm/cxd56xx/drivers/audio/cxd56_audio_bca_reg.c
@@ -360,49 +360,89 @@ void enable_mic_in_fmt16(uint8_t mic_num)
       write_bca_reg(mic_ch_sell[i], TRANS_CH_NO_SELECT);
     }
 
-  write_bca_reg(BCA_CLK_EN_AHBMASTER_MIC_EN, 1);
-  write_bca_reg(BCA_MIC_IN_START_ADR,      0x00000000);
-  write_bca_reg(BCA_MIC_IN_SAMPLE_NO,      0);
+  write_bca_reg(BCA_CLK_EN_AHBMASTER_MIC_EN,  1);
+  write_bca_reg(BCA_MIC_IN_START_ADR,         0x00000000);
+  write_bca_reg(BCA_MIC_IN_SAMPLE_NO,         0);
+}
+
+void enable_i2s1_in_fmt24(void)
+{
+  write_bca_reg(BCA_I2S1_IN_BITWT,            0);
+  write_bca_reg(BCA_I2S1_IN_CH2_SEL,          I2S_IN_SEL_SRC1R);
+  write_bca_reg(BCA_I2S1_IN_CH1_SEL,          I2S_IN_SEL_SRC1L);
+  write_bca_reg(BCA_CLK_EN_AHBMASTER_I2S1_EN, 1);
+  write_bca_reg(BCA_I2S1_IN_START_ADR,        0x00000000);
+  write_bca_reg(BCA_I2S1_IN_SAMPLE_NO,        0);
+}
+
+void enable_i2s1_in_fmt16(void)
+{
+  write_bca_reg(BCA_I2S1_IN_BITWT,            1);
+  write_bca_reg(BCA_I2S1_IN_CH2_SEL,          I2S_IN_SEL_UNUSE);
+  write_bca_reg(BCA_I2S1_IN_CH1_SEL,          I2S_IN_SEL_SRC1L);
+  write_bca_reg(BCA_CLK_EN_AHBMASTER_I2S1_EN, 1);
+  write_bca_reg(BCA_I2S1_IN_START_ADR,        0x00000000);
+  write_bca_reg(BCA_I2S1_IN_SAMPLE_NO,        0);
+}
+
+void enable_i2s2_in_fmt24(void)
+{
+  write_bca_reg(BCA_I2S2_IN_BITWT,            0);
+  write_bca_reg(BCA_I2S2_IN_CH2_SEL,          I2S_IN_SEL_SRC1R);
+  write_bca_reg(BCA_I2S2_IN_CH1_SEL,          I2S_IN_SEL_SRC1L);
+  write_bca_reg(BCA_CLK_EN_AHBMASTER_I2S2_EN, 1);
+  write_bca_reg(BCA_I2S2_IN_START_ADR,        0x00000000);
+  write_bca_reg(BCA_I2S2_IN_SAMPLE_NO,        0);
+}
+
+void enable_i2s2_in_fmt16(void)
+{
+  write_bca_reg(BCA_I2S2_IN_BITWT,            0);
+  write_bca_reg(BCA_I2S2_IN_CH2_SEL,          I2S_IN_SEL_UNUSE);
+  write_bca_reg(BCA_I2S2_IN_CH1_SEL,          I2S_IN_SEL_SRC1L);
+  write_bca_reg(BCA_CLK_EN_AHBMASTER_I2S2_EN, 1);
+  write_bca_reg(BCA_I2S2_IN_START_ADR,        0x00000000);
+  write_bca_reg(BCA_I2S2_IN_SAMPLE_NO,        0);
 }
 
 void enable_i2s1_out_fmt24(void)
 {
-  write_bca_reg(BCA_I2S1_OUT_SD1_L_SEL,     I2S_OUT_SEL_SD1L);
-  write_bca_reg(BCA_I2S1_OUT_SD1_R_SEL,     I2S_OUT_SEL_SD1R);
-  write_bca_reg(BCA_I2S1_OUT_BITWT,         0);
+  write_bca_reg(BCA_I2S1_OUT_SD1_L_SEL,       I2S_OUT_SEL_SD1L);
+  write_bca_reg(BCA_I2S1_OUT_SD1_R_SEL,       I2S_OUT_SEL_SD1R);
+  write_bca_reg(BCA_I2S1_OUT_BITWT,           0);
   write_bca_reg(BCA_CLK_EN_AHBMASTER_I2S1_EN, 1);
-  write_bca_reg(BCA_I2S1_OUT_START_ADR,     0x00000000);
-  write_bca_reg(BCA_I2S2_OUT_SAMPLE_NO,     0);
+  write_bca_reg(BCA_I2S1_OUT_START_ADR,       0x00000000);
+  write_bca_reg(BCA_I2S2_OUT_SAMPLE_NO,       0);
 }
 
 void enable_i2s1_out_fmt16(void)
 {
-  write_bca_reg(BCA_I2S1_OUT_SD1_L_SEL,     I2S_OUT_SEL_SD1L);
-  write_bca_reg(BCA_I2S1_OUT_SD1_R_SEL,     I2S_OUT_SEL_SD1R);
-  write_bca_reg(BCA_I2S1_OUT_BITWT,         1);
+  write_bca_reg(BCA_I2S1_OUT_SD1_L_SEL,       I2S_OUT_SEL_SD1L);
+  write_bca_reg(BCA_I2S1_OUT_SD1_R_SEL,       I2S_OUT_SEL_SD1R);
+  write_bca_reg(BCA_I2S1_OUT_BITWT,           1);
   write_bca_reg(BCA_CLK_EN_AHBMASTER_I2S1_EN, 1);
-  write_bca_reg(BCA_I2S1_OUT_START_ADR,     0x00000000);
-  write_bca_reg(BCA_I2S2_OUT_SAMPLE_NO,     0);
+  write_bca_reg(BCA_I2S1_OUT_START_ADR,       0x00000000);
+  write_bca_reg(BCA_I2S2_OUT_SAMPLE_NO,       0);
 }
 
 void enable_i2s2_out_fmt24(void)
 {
-  write_bca_reg(BCA_I2S2_OUT_SD1_L_SEL,     I2S_OUT_SEL_SD1L);
-  write_bca_reg(BCA_I2S2_OUT_SD1_R_SEL,     I2S_OUT_SEL_SD1R);
-  write_bca_reg(BCA_I2S2_OUT_BITWT,         0);
+  write_bca_reg(BCA_I2S2_OUT_SD1_L_SEL,       I2S_OUT_SEL_SD1L);
+  write_bca_reg(BCA_I2S2_OUT_SD1_R_SEL,       I2S_OUT_SEL_SD1R);
+  write_bca_reg(BCA_I2S2_OUT_BITWT,           0);
   write_bca_reg(BCA_CLK_EN_AHBMASTER_I2S2_EN, 1);
-  write_bca_reg(BCA_I2S2_OUT_START_ADR,     0x00000000);
-  write_bca_reg(BCA_I2S2_OUT_SAMPLE_NO,     0);
+  write_bca_reg(BCA_I2S2_OUT_START_ADR,       0x00000000);
+  write_bca_reg(BCA_I2S2_OUT_SAMPLE_NO,       0);
 }
 
 void enable_i2s2_out_fmt16(void)
 {
-  write_bca_reg(BCA_I2S2_OUT_SD1_L_SEL,     I2S_OUT_SEL_SD1L);
-  write_bca_reg(BCA_I2S2_OUT_SD1_R_SEL,     I2S_OUT_SEL_SD1R);
-  write_bca_reg(BCA_I2S2_OUT_BITWT,         1);
+  write_bca_reg(BCA_I2S2_OUT_SD1_L_SEL,       I2S_OUT_SEL_SD1L);
+  write_bca_reg(BCA_I2S2_OUT_SD1_R_SEL,       I2S_OUT_SEL_SD1R);
+  write_bca_reg(BCA_I2S2_OUT_BITWT,           1);
   write_bca_reg(BCA_CLK_EN_AHBMASTER_I2S2_EN, 1);
-  write_bca_reg(BCA_I2S2_OUT_START_ADR,     0x00000000);
-  write_bca_reg(BCA_I2S2_OUT_SAMPLE_NO,     0);
+  write_bca_reg(BCA_I2S2_OUT_START_ADR,       0x00000000);
+  write_bca_reg(BCA_I2S2_OUT_SAMPLE_NO,       0);
 }
 
 /****************************************************************************
@@ -444,9 +484,15 @@ void cxd56_audio_bca_reg_en_fmt24(cxd56_audio_dma_t 
handle, uint8_t ch_num)
       case CXD56_AUDIO_DMAC_MIC:
         enable_mic_in_fmt24(ch_num);
         break;
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        enable_i2s1_in_fmt24();
+        break;
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         enable_i2s1_out_fmt24();
         break;
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        enable_i2s2_in_fmt24();
+        break;
       default:
         enable_i2s2_out_fmt24();
         break;
@@ -460,9 +506,15 @@ void cxd56_audio_bca_reg_en_fmt16(cxd56_audio_dma_t 
handle, uint8_t ch_num)
       case CXD56_AUDIO_DMAC_MIC:
         enable_mic_in_fmt16(ch_num);
         break;
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        enable_i2s1_in_fmt16();
+        break;
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         enable_i2s1_out_fmt16();
         break;
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        enable_i2s2_in_fmt16();
+        break;
       default:
         enable_i2s2_out_fmt16();
         break;
@@ -483,11 +535,21 @@ void cxd56_audio_bca_reg_get_dma_mstate(cxd56_audio_dma_t 
handle,
         reg_id_error  = BCA_MIC_IN_ERROR_SETTING;
         reg_id_monbuf = BCA_MIC_IN_MONBUF;
         break;
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id_start  = BCA_I2S1_IN_MON_START;
+        reg_id_error  = BCA_I2S1_IN_MON_ERROR_SETTING;
+        reg_id_monbuf = BCA_I2S1_IN_MON_MONBUF;
+        break;
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id_start  = BCA_I2S1_OUT_MON_START;
         reg_id_error  = BCA_I2S1_OUT_MON_ERROR_SETTING;
         reg_id_monbuf = BCA_I2S1_OUT_MON_MONBUF;
         break;
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id_start  = BCA_I2S2_IN_MON_START;
+        reg_id_error  = BCA_I2S2_IN_MON_ERROR_SETTING;
+        reg_id_monbuf = BCA_I2S2_IN_MON_MONBUF;
+        break;
       default:
         reg_id_start  = BCA_I2S2_OUT_MON_START;
         reg_id_error  = BCA_I2S2_OUT_MON_ERROR_SETTING;
@@ -565,10 +627,18 @@ void cxd56_audio_bca_reg_mask_done_int(cxd56_audio_dma_t 
handle)
         reg_id = BCA_MIC_INT_MASK_DONE_MIC;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_INT_MASK_DONE_I2SI;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_INT_MASK_DONE_I2SO;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_INT_MASK_DONE_I2SI;
+        break;
+
       default:
         reg_id = BCA_I2S2_INT_MASK_DONE_I2SO;
         break;
@@ -587,10 +657,18 @@ void 
cxd56_audio_bca_reg_unmask_done_int(cxd56_audio_dma_t handle)
         reg_id = BCA_MIC_INT_MASK_DONE_MIC;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_INT_MASK_DONE_I2SI;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_INT_MASK_DONE_I2SO;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_INT_MASK_DONE_I2SI;
+        break;
+
       default:
         reg_id = BCA_I2S2_INT_MASK_DONE_I2SO;
         break;
@@ -608,10 +686,18 @@ void cxd56_audio_bca_reg_clear_done_int(cxd56_audio_dma_t 
handle)
         reg_id = BCA_MIC_INT_CTRL_DONE_MIC;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_INT_CTRL_DONE_I2SI;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_INT_CTRL_DONE_I2SO;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_INT_CTRL_DONE_I2SI;
+        break;
+
       default:
         reg_id = BCA_I2S2_INT_CTRL_DONE_I2SO;
         break;
@@ -626,11 +712,19 @@ bool 
cxd56_audio_bca_reg_is_dma_fifo_empty(cxd56_audio_dma_t handle)
   switch (handle)
     {
       case CXD56_AUDIO_DMAC_MIC:
+        reg_id = BCA_MIC_IN_RTD_TRG;
+        break;
+
+      case CXD56_AUDIO_DMAC_I2S0_UP:
         reg_id = BCA_I2S1_IN_RTD_TRG;
         break;
 
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
-        reg_id = BCA_I2S1_IN_RTD_TRG;
+        reg_id = BCA_I2S1_OUT_RTD_TRG;
+        break;
+
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_IN_RTD_TRG;
         break;
 
       default:
@@ -655,10 +749,18 @@ void cxd56_audio_bca_reg_mask_err_int(cxd56_audio_dma_t 
handle)
         reg_id = BCA_MIC_INT_MASK_ERR_MIC;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_INT_MASK_ERR_I2SI;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_INT_MASK_ERR_I2SO;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_INT_MASK_ERR_I2SI;
+        break;
+
       default:
         reg_id = BCA_I2S2_INT_MASK_ERR_I2SO;
         break;
@@ -676,10 +778,18 @@ void cxd56_audio_bca_reg_unmask_err_int(cxd56_audio_dma_t 
handle)
         reg_id = BCA_MIC_INT_MASK_ERR_MIC;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_INT_MASK_ERR_I2SI;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_INT_MASK_ERR_I2SO;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_INT_MASK_ERR_I2SI;
+        break;
+
       default:
         reg_id = BCA_I2S2_INT_MASK_ERR_I2SO;
         break;
@@ -697,10 +807,18 @@ void cxd56_audio_bca_reg_clear_err_int(cxd56_audio_dma_t 
handle)
         reg_id = BCA_MIC_INT_CTRL_ERR_MIC;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_INT_CTRL_ERR_I2SI;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_INT_CTRL_ERR_I2SO;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_INT_CTRL_ERR_I2SI;
+        break;
+
       default:
         reg_id = BCA_I2S2_INT_MASK_ERR_I2SO;
         break;
@@ -718,10 +836,15 @@ void cxd56_audio_bca_reg_mask_cmb_int(cxd56_audio_dma_t 
handle)
         reg_id = BCA_MIC_INT_MASK_CMB_MIC;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_INT_MASK_CMB_I2S;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_INT_MASK_CMB_I2S;
+        break;
+
       default:
         reg_id = BCA_I2S2_INT_MASK_CMB_I2S;
         break;
@@ -739,10 +862,15 @@ void cxd56_audio_bca_reg_unmask_cmb_int(cxd56_audio_dma_t 
handle)
         reg_id = BCA_MIC_INT_MASK_CMB_MIC;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_INT_MASK_CMB_I2S;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_INT_MASK_CMB_I2S;
+        break;
+
       default:
         reg_id = BCA_I2S2_INT_MASK_CMB_I2S;
         break;
@@ -760,10 +888,15 @@ void cxd56_audio_bca_reg_clear_cmb_int(cxd56_audio_dma_t 
handle)
         reg_id = BCA_MIC_INT_CTRL_CMB_MIC;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_INT_CTRL_CMB_I2S;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_INT_CTRL_CMB_I2S;
+        break;
+
       default:
         reg_id = BCA_I2S2_INT_CTRL_CMB_I2S;
         break;
@@ -791,10 +924,15 @@ void cxd56_audio_bca_reg_mask_bus_int(cxd56_audio_dma_t 
handle)
         reg_id = AHB_MASTER_MIC_MASK;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = AHB_MASTER_I2S1_MASK;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = AHB_MASTER_I2S2_MASK;
+        break;
+
       default:
         reg_id = AHB_MASTER_I2S2_MASK;
         break;
@@ -814,11 +952,21 @@ void cxd56_audio_bca_reg_unmask_bus_int(cxd56_audio_dma_t 
handle)
         val    = 0x00000303;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = AHB_MASTER_I2S1_MASK;
+        val    = 0x00000101;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = AHB_MASTER_I2S1_MASK;
         val    = 0x00000202;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = AHB_MASTER_I2S2_MASK;
+        val    = 0x00000101;
+        break;
+
       default:
         reg_id = AHB_MASTER_I2S2_MASK;
         val    = 0x00000202;
@@ -839,10 +987,18 @@ void cxd56_audio_bca_reg_set_start_addr(cxd56_audio_dma_t 
handle,
         reg_id = BCA_MIC_IN_START_ADR;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_IN_START_ADR;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_OUT_START_ADR;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_IN_START_ADR;
+        break;
+
       default:
         reg_id = BCA_I2S2_OUT_START_ADR;
         break;
@@ -862,10 +1018,18 @@ void cxd56_audio_bca_reg_set_sample_no(cxd56_audio_dma_t 
handle,
         reg_id = BCA_MIC_IN_SAMPLE_NO;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_IN_SAMPLE_NO;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_OUT_SAMPLE_NO;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_IN_SAMPLE_NO;
+        break;
+
       default:
         reg_id = BCA_I2S2_OUT_SAMPLE_NO;
         break;
@@ -886,10 +1050,18 @@ void cxd56_audio_bca_reg_start_dma(cxd56_audio_dma_t 
handle,
         reg_id = BCA_MIC_IN_RTD_TRG;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_IN_RTD_TRG;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_OUT_RTD_TRG;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_IN_RTD_TRG;
+        break;
+
       default:
         reg_id = BCA_I2S2_OUT_RTD_TRG;
         break;
@@ -908,10 +1080,18 @@ void cxd56_audio_bca_reg_stop_dma(cxd56_audio_dma_t 
handle)
         reg_id = BCA_MIC_IN_RTD_TRG;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_IN_RTD_TRG;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_OUT_RTD_TRG;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_IN_RTD_TRG;
+        break;
+
       default:
         reg_id = BCA_I2S2_OUT_RTD_TRG;
         break;
@@ -930,10 +1110,18 @@ bool cxd56_audio_bca_reg_is_done_int(cxd56_audio_dma_t 
handle)
         reg_id = BCA_MIC_INT_CTRL_DONE_MIC;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_INT_CTRL_DONE_I2SI;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_INT_CTRL_DONE_I2SO;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_INT_CTRL_DONE_I2SI;
+        break;
+
       default:
         reg_id = BCA_I2S2_INT_CTRL_DONE_I2SO;
         break;
@@ -957,10 +1145,18 @@ bool cxd56_audio_bca_reg_is_err_int(cxd56_audio_dma_t 
handle)
         reg_id = BCA_MIC_INT_CTRL_ERR_MIC;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_INT_CTRL_ERR_I2SI;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_INT_CTRL_ERR_I2SO;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_INT_CTRL_ERR_I2SI;
+        break;
+
       default:
         reg_id = BCA_I2S2_INT_CTRL_ERR_I2SO;
         break;
@@ -984,10 +1180,15 @@ bool cxd56_audio_bca_reg_is_smp_int(cxd56_audio_dma_t 
handle)
         reg_id = BCA_MIC_INT_CTRL_SMP_MIC;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_INT_CTRL_SMP_I2S;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_INT_CTRL_SMP_I2S;
+        break;
+
       default:
         reg_id = BCA_I2S2_INT_CTRL_SMP_I2S;
         break;
@@ -1010,12 +1211,17 @@ void cxd56_audio_bca_reg_mask_smp_int(cxd56_audio_dma_t 
handle)
         reg_id = BCA_MIC_INT_MASK_SMP_MIC;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_INT_MASK_SMP_I2S;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_INT_MASK_SMP_I2S;
+        break;
+
       default:
-        reg_id = BCA_I2S1_INT_MASK_SMP_I2S;
+        reg_id = BCA_I2S2_INT_MASK_SMP_I2S;
         break;
     }
 
@@ -1031,12 +1237,17 @@ void 
cxd56_audio_bca_reg_unmask_smp_int(cxd56_audio_dma_t handle)
         reg_id = BCA_MIC_INT_MASK_SMP_MIC;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_INT_MASK_SMP_I2S;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_INT_MASK_SMP_I2S;
+        break;
+
       default:
-        reg_id = BCA_I2S1_INT_MASK_SMP_I2S;
+        reg_id = BCA_I2S2_INT_MASK_SMP_I2S;
         break;
     }
 
@@ -1052,10 +1263,15 @@ void 
cxd56_audio_bca_reg_clear_smp_int(cxd56_audio_dma_t handle)
         reg_id = BCA_MIC_INT_CTRL_SMP_MIC;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_INT_CTRL_SMP_I2S;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_INT_CTRL_SMP_I2S;
+        break;
+
       default:
         reg_id = BCA_I2S2_INT_CTRL_SMP_I2S;
         break;
@@ -1073,10 +1289,18 @@ uint32_t 
cxd56_audio_bca_reg_get_mon_state_err(cxd56_audio_dma_t handle)
         reg_id = BCA_MIC_IN_ERROR_SETTING;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_IN_MON_ERROR_SETTING;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_OUT_MON_ERROR_SETTING;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_IN_MON_ERROR_SETTING;
+        break;
+
       default:
         reg_id = BCA_I2S2_OUT_MON_ERROR_SETTING;
         break;
@@ -1094,10 +1318,18 @@ uint32_t 
cxd56_audio_bca_reg_get_mon_state_start(cxd56_audio_dma_t handle)
         reg_id = BCA_MIC_IN_START;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_IN_MON_START;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_OUT_MON_START;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_IN_MON_START;
+        break;
+
       default:
         reg_id = BCA_I2S2_OUT_MON_START;
         break;
@@ -1115,10 +1347,18 @@ uint32_t 
cxd56_audio_bca_reg_get_mon_state_buf(cxd56_audio_dma_t handle)
         reg_id = BCA_MIC_IN_MONBUF;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_IN_MON_MONBUF;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_OUT_MON_MONBUF;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_IN_MON_MONBUF;
+        break;
+
       default:
         reg_id = BCA_I2S2_OUT_MON_MONBUF;
         break;
@@ -1136,10 +1376,18 @@ uint32_t 
cxd56_audio_bca_reg_get_dma_state(cxd56_audio_dma_t handle)
         reg_id = BCA_MIC_IN_RTD_TRG;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_IN_RTD_TRG;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_OUT_RTD_TRG;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_IN_RTD_TRG;
+        break;
+
       default:
         reg_id = BCA_I2S2_OUT_RTD_TRG;
         break;
@@ -1158,10 +1406,18 @@ void cxd56_audio_bca_reg_reset_chsel(cxd56_audio_dma_t 
handle)
         reg_id = BCA_MIC_IN_CH8_SEL;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        reg_id = BCA_I2S1_IN_CH2_SEL;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         reg_id = BCA_I2S1_OUT_SD1_R_SEL;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        reg_id = BCA_I2S2_IN_CH2_SEL;
+        break;
+
       default:
         reg_id = BCA_I2S2_OUT_SD1_R_SEL;
         break;
diff --git a/boards/arm/cxd56xx/drivers/audio/cxd56_audio_dma.c 
b/boards/arm/cxd56xx/drivers/audio/cxd56_audio_dma.c
index e128d93..a101c57 100644
--- a/boards/arm/cxd56xx/drivers/audio/cxd56_audio_dma.c
+++ b/boards/arm/cxd56xx/drivers/audio/cxd56_audio_dma.c
@@ -94,6 +94,8 @@ static bool s_work_arroud_dmac[DMA_HANDLE_MAX_NUM] =
 {
   true,
   true,
+  true,
+  true,
   true
 };
 
@@ -146,6 +148,14 @@ static CXD56_AUDIO_ECODE 
get_dma_handle(cxd56_audio_dma_path_t path,
         *handle = CXD56_AUDIO_DMAC_MIC;
         break;
 
+      case CXD56_AUDIO_DMA_PATH_I2S0_TO_MEM:
+        *handle = CXD56_AUDIO_DMAC_I2S0_UP;
+        break;
+
+      case CXD56_AUDIO_DMA_PATH_I2S1_TO_MEM:
+        *handle = CXD56_AUDIO_DMAC_I2S1_UP;
+        break;
+
       case CXD56_AUDIO_DMA_PATH_MEM_TO_BUSIF1:
         *handle = CXD56_AUDIO_DMAC_I2S0_DOWN;
         break;
@@ -170,6 +180,14 @@ static CXD56_AUDIO_ECODE get_dma_path(cxd56_audio_dma_t 
handle,
         *path = CXD56_AUDIO_DMA_PATH_MIC_TO_MEM;
         break;
 
+      case CXD56_AUDIO_DMAC_I2S0_UP:
+        *path = CXD56_AUDIO_DMA_PATH_I2S0_TO_MEM;
+        break;
+
+      case CXD56_AUDIO_DMAC_I2S1_UP:
+        *path = CXD56_AUDIO_DMA_PATH_I2S1_TO_MEM;
+        break;
+
       case CXD56_AUDIO_DMAC_I2S0_DOWN:
         *path = CXD56_AUDIO_DMA_PATH_MEM_TO_BUSIF1;
         break;
@@ -603,6 +621,12 @@ void cxd56_audio_dma_int_handler(void)
 
       /* Check done complete state. */
 
+      if (int_i2s & DMA_STATE_BIT_I2S_IN_DONE)
+        {
+          (*g_dma_cb[CXD56_AUDIO_DMAC_I2S0_UP])(CXD56_AUDIO_DMAC_I2S0_UP,
+                                               CXD56_AUDIO_ECODE_DMA_CMPLT);
+        }
+
       if (int_i2s & DMA_STATE_BIT_I2S_OUT_DONE)
         {
           (*g_dma_cb[CXD56_AUDIO_DMAC_I2S0_DOWN])(CXD56_AUDIO_DMAC_I2S0_DOWN,
@@ -611,6 +635,16 @@ void cxd56_audio_dma_int_handler(void)
 
       /* Check transfer err state. */
 
+      if (int_i2s & DMA_STATE_BIT_I2S_IN_ERR)
+        {
+          cxd56_audio_bca_reg_mask_err_int(CXD56_AUDIO_DMAC_I2S0_UP);
+
+          cxd56_audio_bca_reg_clear_err_int(CXD56_AUDIO_DMAC_I2S0_UP);
+
+          (*g_dma_cb[CXD56_AUDIO_DMAC_I2S0_UP])(CXD56_AUDIO_DMAC_I2S0_UP,
+                                               CXD56_AUDIO_ECODE_DMA_TRANS);
+        }
+
       if (int_i2s & DMA_STATE_BIT_I2S_OUT_ERR)
         {
           cxd56_audio_bca_reg_mask_err_int(CXD56_AUDIO_DMAC_I2S0_DOWN);
@@ -640,6 +674,12 @@ void cxd56_audio_dma_int_handler(void)
     {
       /* Clear interrupt. */
 
+      if (int_i2s2 & DMA_STATE_BIT_I2S_IN_DONE)
+        {
+          (*g_dma_cb[CXD56_AUDIO_DMAC_I2S1_UP])(CXD56_AUDIO_DMAC_I2S1_UP,
+                                                CXD56_AUDIO_ECODE_DMA_CMPLT);
+        }
+
       cxd56_audio_bca_reg_clear_dma_done_state_i2s2(int_i2s2);
 
       /* Check done complete state. */
@@ -653,6 +693,16 @@ void cxd56_audio_dma_int_handler(void)
 
       /* Check transfer err state. */
 
+      if (int_i2s2 & DMA_STATE_BIT_I2S_IN_ERR)
+        {
+          cxd56_audio_bca_reg_mask_err_int(CXD56_AUDIO_DMAC_I2S1_UP);
+
+          cxd56_audio_bca_reg_clear_err_int(CXD56_AUDIO_DMAC_I2S1_UP);
+
+          (*g_dma_cb[CXD56_AUDIO_DMAC_I2S1_UP])(CXD56_AUDIO_DMAC_I2S1_UP,
+                                                CXD56_AUDIO_ECODE_DMA_TRANS);
+        }
+
       if (int_i2s2 & DMA_STATE_BIT_I2S_OUT_ERR)
         {
           cxd56_audio_bca_reg_mask_err_int(CXD56_AUDIO_DMAC_I2S1_DOWN);

Reply via email to