123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670 |
- /*
- * File : drv_i2s.h
- * This file is part of RT-Thread RTOS
- * COPYRIGHT (C) 2008 - 2012, RT-Thread Development Team
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Change Logs:
- * Date Author Notes
- * 2015-11-19 Urey the first version
- */
- #ifndef _DRV_I2S_H_
- #define _DRV_I2S_H_
- /*********************************************************************************************************
- ** 头文件
- *********************************************************************************************************/
- #include "x1000.h"
- #include "drv_clock.h"
- #include "drv_dma.h"
- /*********************************************************************************************************
- ** CODEC 配置
- *********************************************************************************************************/
- #define JZ_I2S_USE_INNER_CODEC
- #undef JZ_I2S_USE_EX_CODEC
- /*********************************************************************************************************
- ** AIC 数据结构
- *********************************************************************************************************/
- enum aic_mode {
- AIC_NO_MODE = 0,
- AIC_I2S_MODE,
- AIC_SPDIF_MODE,
- AIC_AC97_MODE
- };
- struct jz_aic_device;
- struct jz_aic
- {
- struct rt_device parent;
- uint32_t base;
- struct clk *clk;
- struct clk *clk_gate;
- uint32_t clk_rate;
- /* for interrupt */
- int irqno;
- int irqflags;
- uint32_t ror; /*counter for debug*/
- uint32_t tur;
- uint32_t mask;
- /* for AIC work mode protect */
- enum aic_mode aic_working_mode;
- /* for sub device */
- uint32_t dma_addr;
- struct jz_aic_device *aic_dev;
- };
- struct jz_aic_device
- {
- struct rt_device parent;
- };
- /*********************************************************************************************************
- ** AIC 指令
- *********************************************************************************************************/
- #define AIC_CMD_SET_MODE 0x20
- #define AIC_CMD_SET_RATE 0x21
- #define AIC_CMD_SET_SUBDEV 0x22
- /*********************************************************************************************************
- ** AIC 寄存器操作
- ***********************************************************************************************************/
- static void inline jz_aic_write_reg(struct jz_aic *aic,uint32_t reg, uint32_t val)
- {
- writel(val, aic->base + reg);
- }
- static uint32_t inline jz_aic_read_reg(struct jz_aic *aic,uint32_t reg)
- {
- return readl(aic->base + reg);
- }
- /* For AC97 and I2S */
- #define AICFR (0x00)
- #define AICCR (0x04)
- #define ACCR1 (0x08)
- #define ACCR2 (0x0c)
- #define I2SCR (0x10)
- #define AICSR (0x14)
- #define ACSR (0x18)
- #define I2SSR (0x1c)
- #define ACCAR (0x20)
- #define ACCDR (0x24)
- #define ACSAR (0x28)
- #define ACSDR (0x2c)
- #define I2SDIV (0x30)
- #define AICDR (0x34)
- /* For SPDIF */
- #define SPENA (0x80)
- #define SPCTRL (0x84)
- #define SPSTATE (0x88)
- #define SPCFG1 (0x8c)
- #define SPCFG2 (0x90)
- #define SPFIFO (0x94)
- #define I2S_CPM_VALID 0xb0000070
- /* For AICFR */
- #define AICFR_ENB_BIT (0)
- #define AICFR_ENB_MASK (1 << AICFR_ENB_BIT)
- #define AICFR_SYNCD_BIT (1)
- #define AICFR_SYNCD_MASK (1 << AICFR_SYNCD_BIT)
- #define AICFR_BCKD_BIT (2)
- #define AICFR_BCKD_MASK (1 << AICFR_BCKD_BIT)
- #define AICFR_RST_BIT (3)
- #define AICFR_RST_MASK (1 << AICFR_RST_BIT)
- #define AICFR_AUSEL_BIT (4)
- #define AICFR_AUSEL_MASK (1 << AICFR_AUSEL_BIT)
- #define AICFR_ICDC_BIT (5)
- #define AICFR_ICDC_MASK (1 << AICFR_ICDC_BIT)
- #define AICFR_LSMP_BIT (6)
- #define AICFR_LSMP_MASK (1 << AICFR_LSMP_BIT)
- #define AICFR_CDC_SLV_BIT (7)
- #define AICFR_CDC_SLV_MASK (1 << AICFR_CDC_SLV_BIT)
- #define AICFR_DMODE_BIT (8)
- #define AICFR_DMODE_MASK (1 << AICFR_DMODE_BIT)
- #define AICFR_ISYNCD_BIT (9)
- #define AICFR_ISYNCD_MASK (1 << AICFR_ISYNCD_BIT)
- #define AICFR_IBCKD_BIT (10)
- #define AICFR_IBCKD_MASK (1 << AICFR_IBCKD_BIT)
- #define AICFR_SYSCLKD_BIT (11)
- #define AICFR_SYSCLKD_MASK (1 << AICFR_SYSCLKD_BIT)
- #define AICFR_MSB_BIT (12)
- #define AICFR_MSB_MASK (1 << AICFR_MSB_BIT)
- #define AICFR_TFTH_BIT (16)
- #define AICFR_TFTH_MASK (0x1f << AICFR_TFTH_BIT)
- #define AICFR_RFTH_BIT (24)
- #define AICFR_RFTH_MASK (0x1f << AICFR_RFTH_BIT)
- /* For AICCR */
- #define AICCR_EREC_BIT (0)
- #define AICCR_EREC_MASK (1 << AICCR_EREC_BIT)
- #define AICCR_ERPL_BIT (1)
- #define AICCR_ERPL_MASK (1 << AICCR_ERPL_BIT)
- #define AICCR_ENLBF_BIT (2)
- #define AICCR_ENLBF_MASK (1 << AICCR_ENLBF_BIT)
- #define AICCR_ETFS_BIT (3)
- #define AICCR_ETFS_MASK (1 << AICCR_ETFS_BIT)
- #define AICCR_ERFS_BIT (4)
- #define AICCR_ERFS_MASK (1 << AICCR_ERFS_BIT)
- #define AICCR_ETUR_BIT (5)
- #define AICCR_ETUR_MASK (1 << AICCR_ETUR_BIT)
- #define AICCR_EROR_BIT (6)
- #define AICCR_EROR_MASK (1 << AICCR_EROR_BIT)
- #define AICCR_EALL_INT_MASK (AICCR_EROR_MASK|AICCR_ETUR_MASK|AICCR_ERFS_MASK|AICCR_ETFS_MASK)
- #define AICCR_RFLUSH_BIT (7)
- #define AICCR_RFLUSH_MASK (1 << AICCR_RFLUSH_BIT)
- #define AICCR_TFLUSH_BIT (8)
- #define AICCR_TFLUSH_MASK (1 << AICCR_TFLUSH_BIT)
- #define AICCR_ASVTSU_BIT (9)
- #define AICCR_ASVTSU_MASK (1 << AICCR_ASVTSU_BIT)
- #define AICCR_ENDSW_BIT (10)
- #define AICCR_ENDSW_MASK (1 << AICCR_ENDSW_BIT)
- #define AICCR_M2S_BIT (11)
- #define AICCR_M2S_MASK (1 << AICCR_M2S_BIT)
- #define AICCR_TDMS_BIT (14)
- #define AICCR_TDMS_MASK (1 << AICCR_TDMS_BIT)
- #define AICCR_RDMS_BIT (15)
- #define AICCR_RDMS_MASK (1 << AICCR_RDMS_BIT)
- #define AICCR_ISS_BIT (16)
- #define AICCR_ISS_MASK (0x7 << AICCR_ISS_BIT)
- #define AICCR_OSS_BIT (19)
- #define AICCR_OSS_MASK (0x7 << AICCR_OSS_BIT)
- #define AICCR_CHANNEL_BIT (24)
- #define AICCR_CHANNEL_MASK (0x7 << AICCR_CHANNEL_BIT)
- #define AICCR_PACK16_BIT (28)
- #define AICCR_PACK16_MASK (1 << AICCR_PACK16_BIT)
- /* For ACCR1 */
- #define ACCR1_XS_BIT (0)
- #define ACCR1_XS_MASK (0x3ff << ACCR1_XS_BIT)
- #define ACCR1_RS_BIT (16)
- #define ACCR1_RS_MASK (0x3ff << ACCR1_RS_BIT)
- /* For ACCR2 */
- #define ACCR2_SA_BIT (0)
- #define ACCR2_SA_MASK (1 << ACCR2_SA_BIT)
- #define ACCR2_SS_BIT (1)
- #define ACCR2_SS_MASK (1 << ACCR2_SS_BIT)
- #define ACCR2_SR_BIT (2)
- #define ACCR2_SR_MASK (1 << ACCR2_SR_BIT)
- #define ACCR2_SO_BIT (3)
- #define ACCR2_SO_MASK (1 << ACCR2_SO_BIT)
- #define ACCR2_ECADT_BIT (16)
- #define ACCR2_ECADT_MASK (1 << ACCR2_ECADT_BIT)
- #define ACCR2_ECADR_BIT (17)
- #define ACCR2_ECADR_MASK (1 << ACCR2_ECADR_BIT)
- #define ACCR2_ERSTO_BIT (18)
- #define ACCR2_ERSTO_MASK (1 << ACCR2_ERSTO_BIT)
- /* For I2SCR */
- #define I2SCR_AMSL_BIT (0)
- #define I2SCR_AMSL_MASK (1 << I2SCR_AMSL_BIT)
- #define I2SCR_ESCLK_BIT (4)
- #define I2SCR_ESCLK_MASK (1 << I2SCR_ESCLK_BIT)
- #define I2SCR_STPBK_BIT (12)
- #define I2SCR_STPBK_MASK (1 << I2SCR_STPBK_BIT)
- #define I2SCR_ISTPBK_BIT (13)
- #define I2SCR_ISTPBK_MASK (1 << I2SCR_ISTPBK_BIT)
- #define I2SCR_SWLH_BIT (16)
- #define I2SCR_SWLH_MASK (1 << I2SCR_SWLH_BIT)
- #define I2SCR_RFIRST_BIT (17)
- #define I2SCR_RFIRST_MASK (1 << I2SCR_RFIRST_BIT)
- /* For AICSR */
- #define AICSR_TFS_BIT (3)
- #define AICSR_TFS_MASK (1 << AICSR_TFS_BIT)
- #define AICSR_RFS_BIT (4)
- #define AICSR_RFS_MASK (1 << AICSR_RFS_BIT)
- #define AICSR_TUR_BIT (5)
- #define AICSR_TUR_MASK (1 << AICSR_TUR_BIT)
- #define AICSR_ROR_BIT (6)
- #define AICSR_ROR_MASK (1 << AICSR_ROR_BIT)
- #define AICSR_ALL_INT_MASK (AICSR_TFS_MASK|AICSR_RFS_MASK|AICSR_TUR_MASK|AICSR_ROR_MASK)
- #define AICSR_TFL_BIT (8)
- #define AICSR_TFL_MASK (0x3f << AICSR_TFL_BIT)
- #define AICSR_RFL_BIT (24)
- #define AICSR_RFL_MASK (0x3f << AICSR_RFL_BIT)
- /* For ACSR */
- #define ACSR_CADT_BIT (16)
- #define ACSR_CADT_MASK (1 << ACSR_CADT_BIT)
- #define ACSR_SADR_BIT (17)
- #define ACSR_SADR_MASK (1 << ACSR_SADR_BIT)
- #define ACSR_RSTO_BIT (18)
- #define ACSR_RSTO_MASK (1 << ACSR_RSTO_BIT)
- #define ACSR_CLPM_BIT (19)
- #define ACSR_CLPM_MASK (1 << ACSR_CLPM_BIT)
- #define ACSR_CRDY_BIT (20)
- #define ACSR_CRDY_MASK (1 << ACSR_CRDY_BIT)
- #define ACSR_SLTERR_BIT (21)
- #define ACSR_SLTERR_MASK (1 << ACSR_SLTERR_BIT)
- /* For I2SSR */
- #define I2SSR_BSY_BIT (2)
- #define I2SSR_BSY_MASK (1 << I2SSR_BSY_BIT)
- #define I2SSR_RBSY_BIT (3)
- #define I2SSR_RBSY_MASK (1 << I2SSR_RBSY_BIT)
- #define I2SSR_TBSY_BIT (4)
- #define I2SSR_TBSY_MASK (1 << I2SSR_TBSY_BIT)
- #define I2SSR_CHBSY_BIT (5)
- #define I2SSR_CHBSY_MASK (1 << I2SSR_CHBSY_BIT)
- /* For ACCAR */
- #define ACCAR_CAR_BIT (0)
- #define ACCAR_CAR_MASK (0xfffff << ACCAR_CAR_BIT)
- /* For ACCDR */
- #define ACCDR_CDR_BIT (0)
- #define ACCDR_CDR_MASK (0xfffff << ACCDR_CDR_BIT)
- /* For ACSAR */
- #define ACSAR_SAR_BIT (0)
- #define ACSAR_SAR_MASK (0xfffff << ACSAR_SAR_BIT)
- /* For ACSDR */
- #define ACSDR_SDR_BIT (0)
- #define ACSDR_SDR_MASK (0xfffff << ACSDR_SDR_BIT)
- /* For I2SDIV */
- #define I2SDIV_DV_BIT (0)
- #define I2SDIV_DV_MASK (0x1ff << I2SDIV_DV_BIT)
- #define I2SDIV_IDV_BIT (16)
- #define I2SDIV_IDV_MASK (0x1ff << I2SDIV_IDV_BIT)
- /* For AICDR */
- #define AICDR_DATA_BIT (0)
- #define AICDR_DATA_MASK (0xfffffff << AICDR_DATA_BIT)
- /* For SPENA */
- #define SPENA_SPEN_BIT (0)
- #define SPENA_SPEN_MASK (1 << SPENA_SPEN_BIT)
- /* For SPCTRL */
- #define SPCTRL_M_FFUR_BIT (0)
- #define SPCTRL_M_FFUR_MASK (1 << SPCTRL_M_FFUR_BIT)
- #define SPCTRL_M_TRIG_BIT (1)
- #define SPCTRL_M_TRIG_MASK (1 << SPCTRL_M_TRIG_BIT)
- #define SPCTRL_SPDIF_I2S_BIT (10)
- #define SPCTRL_SPDIF_I2S_MASK (1 << SPCTRL_SPDIF_I2S_BIT)
- #define SPCTRL_SFT_RST_BIT (11)
- #define SPCTRL_SFT_RST_MASK (1 << SPCTRL_SFT_RST_BIT)
- #define SPCTRL_INVALID_BIT (12)
- #define SPCTRL_INVALID_MASK (1 << SPCTRL_INVALID_BIT)
- #define SPCTRL_SIGN_N_BIT (13)
- #define SPCTRL_SIGN_N_MASK (1 << SPCTRL_SIGN_N_BIT)
- #define SPCTRL_D_TYPE_BIT (14)
- #define SPCTRL_D_TYPE_MASK (1 << SPCTRL_D_TYPE_BIT)
- #define SPCTRL_DMA_EN_BIT (15)
- #define SPCTRL_DMA_EN_MASK (1 << SPCTRL_DMA_EN_BIT)
- /* For SPSTATE */
- #define SPSTATE_F_FFUR_BIT (0)
- #define SPSTATE_F_FFUR_MASK (1 << SPSTATE_F_FFUR_BIT)
- #define SPSTATE_F_TRIG_BIT (1)
- #define SPSTATE_F_TRIG_MASK (1 << SPSTATE_F_TRIG_BIT)
- #define SPSTATE_BUSY_BIT (7)
- #define SPSTATE_BUSY_MASK (1 << SPSTATE_BUSY_BIT)
- #define SPSTATE_FIFO_LVL_BIT (8)
- #define SPSTATE_FIFO_LVL_MASK (0x7f << SPSTATE_FIFO_LVL_BIT)
- /* For SPCFG1 */
- #define SPCFG1_CH2_NUM_BIT (0)
- #define SPCFG1_CH2_NUM_MASK (0xf << SPCFG1_CH2_NUM_BIT)
- #define SPCFG1_CH1_NUM_BIT (4)
- #define SPCFG1_CH1_NUM_MASK (0xf << SPCFG1_CH1_NUM_BIT)
- #define SPCFG1_SRC_NUM_BIT (8)
- #define SPCFG1_SRC_NUM_MASK (0xf << SPCFG1_SRC_NUM_BIT)
- #define SPCFG1_TRIG_BIT (12)
- #define SPCFG1_TRIG_MASK (0x3 << SPCFG1_TRIG_BIT)
- #define SPCFG1_ZRO_VLD_BIT (16)
- #define SPCFG1_ZRO_VLD_MASK (1 << SPCFG1_ZRO_VLD_BIT)
- #define SPCFG1_INIT_LVL_BIT (17)
- #define SPCFG1_INIT_LVL_MASK (1 << SPCFG1_INIT_LVL_BIT)
- /* For SPCFG2 */
- #define SPCFG2_CON_PRO_BIT (0)
- #define SPCFG2_CON_PRO_MASK (1 << SPCFG2_CON_PRO_BIT)
- #define SPCFG2_AUDIO_N_BIT (1)
- #define SPCFG2_AUDIO_N_MASK (1 << SPCFG2_AUDIO_N_BIT)
- #define SPCFG2_COPY_N_BIT (2)
- #define SPCFG2_COPY_N_MASK (1 << SPCFG2_COPY_N_BIT)
- #define SPCFG2_PRE_BIT (3)
- #define SPCFG2_PRE_MASK (1 << SPCFG2_PRE_BIT)
- #define SPCFG2_CH_MD_BIT (6)
- #define SPCFG2_CH_MD_MASK (0x3 << SPCFG2_CH_MD_BIT)
- #define SPCFG2_CAT_CODE_BIT (8)
- #define SPCFG2_CAT_CODE_MASK (0xff << SPCFG2_CAT_CODE_BIT)
- #define SPCFG2_CLK_ACU_BIT (16)
- #define SPCFG2_CLK_ACU_MASK (0x3 << SPCFG2_CLK_ACU_BIT)
- #define SPCFG2_MAX_WL_BIT (18)
- #define SPCFG2_MAX_WL_MASK (1 << SPCFG2_MAX_WL_BIT)
- #define SPCFG2_SAMPL_WL_BIT (19)
- #define SPCFG2_SAMPL_WL_MASK (0x7 << SPCFG2_SAMPL_WL_BIT)
- #define SPCFG2_SAMPL_WL_20BITM (0x1 << SPCFG2_SAMPL_WL_BIT)
- #define SPCFG2_SAMPL_WL_21BIT (0x6 << SPCFG2_SAMPL_WL_BIT)
- #define SPCFG2_SAMPL_WL_22BIT (0x2 << SPCFG2_SAMPL_WL_BIT)
- #define SPCFG2_SAMPL_WL_23BIT (0x4 << SPCFG2_SAMPL_WL_BIT)
- #define SPCFG2_SAMPL_WL_24BIT (0x5 << SPCFG2_SAMPL_WL_BIT)
- #define SPCFG2_SAMPL_WL_16BIT (0x1 << SPCFG2_SAMPL_WL_BIT)
- #define SPCFG2_SAMPL_WL_17BIT (0x6 << SPCFG2_SAMPL_WL_BIT)
- #define SPCFG2_SAMPL_WL_18BIT (0x2 << SPCFG2_SAMPL_WL_BIT)
- #define SPCFG2_SAMPL_WL_19BIT (0x4 << SPCFG2_SAMPL_WL_BIT)
- #define SPCFG2_SAMPL_WL_20BITL (0x5 << SPCFG2_SAMPL_WL_BIT)
- #define SPCFG2_ORG_FRQ_BIT (22)
- #define SPCFG2_ORG_FRQ_MASK (0xf << SPCFG2_ORG_FRQ_BIT)
- #define SPCFG2_FS_BIT (26)
- #define SPCFG2_FS_MASK (0xf << SPCFG2_FS_BIT)
- #define SPFIFO_DATA_BIT (0)
- #define SPFIFO_DATA_MASK (0xffffff << SPFIFO_DATA_BIT)
- #define jz_aic_set_reg(parent, addr, val, mask, offset) \
- do { \
- volatile unsigned int reg_tmp; \
- reg_tmp = jz_aic_read_reg(parent, addr); \
- reg_tmp &= ~(mask); \
- reg_tmp |= (val << offset) & mask; \
- jz_aic_write_reg(parent, addr, reg_tmp); \
- } while(0)
- #define jz_aic_get_reg(parent, addr, mask, offset) \
- ((jz_aic_read_reg(parent, addr) & mask) >> offset)
- /*For ALL*/
- /*aic fr*/
- #define __aic_enable_msb(parent) \
- jz_aic_set_reg(parent, AICFR, 1, AICFR_MSB_MASK, AICFR_MSB_BIT)
- #define __aic_disable_msb(parent) \
- jz_aic_set_reg(parent, AICFR, 0, AICFR_MSB_MASK, AICFR_MSB_BIT)
- #define __aic_reset(parent) \
- jz_aic_set_reg(parent, AICFR, 1, AICFR_RST_MASK, AICFR_RST_BIT)
- /*aic cr*/
- #define __aic_flush_rxfifo(parent) \
- jz_aic_set_reg(parent, AICCR, 1, AICCR_RFLUSH_MASK, AICCR_RFLUSH_BIT)
- #define __aic_flush_txfifo(parent) \
- jz_aic_set_reg(parent, AICCR, 1, AICCR_TFLUSH_MASK, AICCR_TFLUSH_BIT)
- #define __aic_en_ror_int(parent) \
- jz_aic_set_reg(parent, AICCR, 1, AICCR_EROR_MASK, AICCR_EROR_BIT)
- #define __aic_dis_ror_int(parent) \
- jz_aic_set_reg(parent, AICCR, 0, AICCR_EROR_MASK, AICCR_EROR_BIT)
- #define __aic_en_tur_int(parent) \
- jz_aic_set_reg(parent, AICCR, 1, AICCR_ETUR_MASK, AICCR_ETUR_BIT)
- #define __aic_dis_tur_int(parent) \
- jz_aic_set_reg(parent, AICCR, 0, AICCR_ETUR_MASK, AICCR_ETUR_BIT)
- #define __aic_en_rfs_int(parent) \
- jz_aic_set_reg(parent, AICCR, 1, AICCR_ERFS_MASK, AICCR_ERFS_BIT)
- #define __aic_dis_rfs_int(parent) \
- jz_aic_set_reg(parent, AICCR, 0, AICCR_ERFS_MASK, AICCR_ERFS_BIT)
- #define __aic_en_tfs_int(parent) \
- jz_aic_set_reg(parent, AICCR, 1, AICCR_ETFS_MASK, AICCR_ETFS_BIT)
- #define __aic_dis_tfs_int(parent) \
- jz_aic_set_reg(parent, AICCR, 0, AICCR_ETFS_MASK, AICCR_ETFS_BIT)
- #define __aic_get_irq_enmask(parent) \
- jz_aic_get_reg(parent, AICCR, AICCR_EALL_INT_MASK, AICCR_ETFS_BIT)
- #define __aic_set_irq_enmask(parent, mask) \
- jz_aic_set_reg(parent, AICCR, mask, AICCR_EALL_INT_MASK, AICCR_ETFS_BIT)
- /*aic sr*/
- #define __aic_read_rfl(parent) \
- jz_aic_get_reg(parent, AICSR ,AICSR_RFL_MASK, AICSR_RFL_BIT)
- #define __aic_read_tfl(parent) \
- jz_aic_get_reg(parent, AICSR, AICSR_TFL_MASK, AICSR_TFL_BIT)
- #define __aic_clear_ror(parent) \
- jz_aic_set_reg(parent, AICSR, 0, AICSR_ROR_MASK, AICSR_ROR_BIT)
- #define __aic_test_ror(parent) \
- jz_aic_get_reg(parent, AICSR, AICSR_ROR_MASK, AICSR_ROR_BIT)
- #define __aic_clear_tur(parent) \
- jz_aic_set_reg(parent, AICSR, 0, AICSR_TUR_MASK, AICSR_TUR_BIT)
- #define __aic_test_tur(parent) \
- jz_aic_get_reg(parent, AICSR, AICSR_TUR_MASK, AICSR_TUR_BIT)
- #define __aic_clear_rfs(parent) \
- jz_aic_set_reg(parent, AICSR, 0, AICSR_RFS_MASK, AICSR_RFS_BIT)
- #define __aic_test_rfs(parent) \
- jz_aic_get_reg(parent, AICSR, AICSR_RFS_MASK, AICSR_RFS_BIT)
- #define __aic_clear_tfs(parent) \
- jz_aic_set_reg(parent, AICSR, 0, AICSR_TFS_MASK, AICSR_TFS_BIT)
- #define __aic_test_tfs(parent) \
- jz_aic_get_reg(parent, AICSR, AICSR_TFS_MASK, AICSR_TFS_BIT)
- #define __aic_get_irq_flag(parent) \
- jz_aic_get_reg(parent, AICSR, AICSR_ALL_INT_MASK, AICSR_TFS_BIT)
- #define __aic_clear_all_irq_flag(parent) \
- jz_aic_set_reg(parent, AICSR, AICSR_ALL_INT_MASK, AICSR_ALL_INT_MASK, AICSR_TFS_BIT)
- /* aic dr*/
- #define __aic_write_txfifo(parent, n) \
- jz_aic_write_reg(parent, AICDR, (n))
- /* For SPFIFO */
- #define __spdif_test_underrun(parent) \
- jz_aic_get_reg(parent, SPSTATE, SPSTATE_F_FFUR_MASK, SPSTATE_F_FFUR_BIT)
- #define __spdif_clear_underrun(parent) \
- jz_aic_set_reg(parent, SPSTATE, 0, SPSTATE_F_FFUR_MASK, SPSTATE_F_FFUR_BIT)
- #define __spdif_is_enable_transmit_dma(parent) \
- jz_aic_get_reg(parent, SPCTRL, SPCTRL_DMA_EN_MASK, SPCTRL_DMA_EN_BIT)
- #define __spdif_enable_transmit_dma(parent) \
- jz_aic_set_reg(parent, SPCTRL, 1, SPCTRL_DMA_EN_MASK, SPCTRL_DMA_EN_BIT)
- #define __spdif_disable_transmit_dma(parent) \
- jz_aic_set_reg(parent, SPCTRL, 0, SPCTRL_DMA_EN_MASK, SPCTRL_DMA_EN_BIT)
- #define __spdif_reset(parent) \
- jz_aic_set_reg(parent, SPCTRL, 1, SPCTRL_SFT_RST_MASK, SPCTRL_SFT_RST_BIT)
- #define __spdif_get_reset(parent) \
- jz_aic_get_reg(parent, SPCTRL,SPCTRL_SFT_RST_MASK, SPCTRL_SFT_RST_BIT)
- #define __spdif_enable(parent) \
- jz_aic_set_reg(parent, SPENA, 1, SPENA_SPEN_MASK, SPENA_SPEN_BIT)
- #define __spdif_disable(parent) \
- jz_aic_set_reg(parent, SPENA, 0, SPENA_SPEN_MASK, SPENA_SPEN_BIT)
- #define __spdif_set_dtype(parent, n) \
- jz_aic_set_reg(parent, SPCTRL, n, SPCTRL_D_TYPE_MASK, SPCTRL_D_TYPE_BIT)
- #define __spdif_set_trigger(parent, n) \
- jz_aic_set_reg(parent, SPCFG1, n, SPCFG1_TRIG_MASK, SPCFG1_TRIG_BIT)
- #define __spdif_set_ch1num(parent, n) \
- jz_aic_set_reg(parent, SPCFG1, n, SPCFG1_CH1_NUM_MASK, SPCFG1_CH1_NUM_BIT)
- #define __spdif_set_ch2num(parent, n) \
- jz_aic_set_reg(parent, SPCFG1, n, SPCFG1_CH2_NUM_MASK, SPCFG1_CH2_NUM_BIT)
- #define __spdif_set_srcnum(parent, n) \
- jz_aic_set_reg(parent, SPCFG1, n, SPCFG1_SRC_NUM_MASK, SPCFG1_SRC_NUM_BIT)
- #define __interface_select_spdif(parent) \
- jz_aic_set_reg(parent, SPCTRL, 1, SPCTRL_SPDIF_I2S_MASK, SPCTRL_SPDIF_I2S_BIT)
- #define __spdif_play_lastsample(parent) \
- jz_aic_set_reg(parent, SPCFG1, 1, SPCFG1_ZRO_VLD_MASK, SPCFG1_ZRO_VLD_BIT)
- #define __spdif_init_set_low(parent) \
- jz_aic_set_reg(parent, SPCFG1, 0, SPCFG1_INIT_LVL_MASK, SPCFG1_INIT_LVL_BIT)
- #define __spdif_choose_consumer(parent) \
- jz_aic_set_reg(parent, SPCFG2, 0, SPCFG2_CON_PRO_MASK, SPCFG2_CON_PRO_BIT)
- #define __spdif_clear_audion(parent) \
- jz_aic_set_reg(parent, SPCFG2, 0, SPCFG2_AUDIO_N_MASK, SPCFG2_AUDIO_N_BIT)
- #define __spdif_set_copyn(parent) \
- jz_aic_set_reg(parent, SPCFG2, 1, SPCFG2_COPY_N_MASK, SPCFG2_COPY_N_BIT)
- #define __spdif_clear_pre(parent) \
- jz_aic_set_reg(parent, SPCFG2, 0, SPCFG2_PRE_MASK, SPCFG2_PRE_BIT)
- #define __spdif_choose_chmd(parent) \
- jz_aic_set_reg(parent, SPCFG2, 0, SPCFG2_CH_MD_MASK, SPCFG2_CH_MD_BIT)
- #define __spdif_set_category_code_normal(parent) \
- jz_aic_set_reg(parent, SPCFG2, 0, SPCFG2_CAT_CODE_MASK, SPCFG2_CAT_CODE_BIT)
- #define __spdif_set_clkacu(parent, n) \
- jz_aic_set_reg(parent, SPCFG2, n, SPCFG2_CLK_ACU_MASK, SPCFG2_CLK_ACU_BIT)
- #define __spdif_set_sample_size(parent, n) \
- jz_aic_set_reg(parent, SPCFG2, n, SPCFG2_SAMPL_WL_MASK, SPCFG2_SAMPL_WL_BIT)
- #define __spdif_set_max_wl(parent, n) \
- jz_aic_set_reg(parent, SPCFG2, n, SPCFG2_MAX_WL_MASK, SPCFG2_MAX_WL_BIT)
- #define __spdif_set_ori_sample_freq(parent, org_frq_tmp) \
- jz_aic_set_reg(parent, SPCFG2, org_frq_tmp, SPCFG2_ORG_FRQ_MASK, SPCFG2_ORG_FRQ_BIT)
- #define __spdif_set_sample_freq(parent, fs_tmp) \
- jz_aic_set_reg(parent, SPCFG2, fs_tmp, SPCFG2_FS_MASK, SPCFG2_FS_BIT)
- #define __spdif_set_valid(parent) \
- jz_aic_set_reg(parent, SPCTRL, 0, SPCTRL_INVALID_MASK, SPCTRL_INVALID_BIT)
- #define __spdif_mask_trig(parent) \
- jz_aic_set_reg(parent, SPCTRL, 1, SPCTRL_M_TRIG_MASK, SPCTRL_M_TRIG_BIT)
- #define __spdif_disable_underrun_intr(parent) \
- jz_aic_set_reg(parent, SPCTRL, 1, SPCTRL_M_FFUR_MASK, SPCTRL_M_FFUR_BIT)
- #define __spdif_set_signn(parent) \
- jz_aic_set_reg(parent, SPCTRL, 1, SPCTRL_SIGN_N_MASK, SPCTRL_SIGN_N_BIT)
- #define __spdif_clear_signn(parent) \
- jz_aic_set_reg(parent, SPCTRL, 0, SPCTRL_SIGN_N_MASK, SPCTRL_SIGN_N_BIT)
- /* For I2S */
- /*aic fr*/
- #define __i2s_is_enable(parent) \
- jz_aic_get_reg(parent, AICFR, AICFR_ENB_MASK, AICFR_ENB_BIT)
- #define __aic_enable(parent) \
- jz_aic_set_reg(parent, AICFR, 1, AICFR_ENB_MASK, AICFR_ENB_BIT)
- #define __aic_disable(parent) \
- jz_aic_set_reg(parent, AICFR, 0, AICFR_ENB_MASK, AICFR_ENB_BIT)
- #define __i2s_external_codec(parent) \
- jz_aic_set_reg(parent, AICFR, 0, AICFR_ICDC_MASK, AICFR_ICDC_BIT)
- #define __i2s_bclk_output(parent) \
- jz_aic_set_reg(parent, AICFR, 1, AICFR_BCKD_MASK, AICFR_BCKD_BIT)
- #define __i2s_bclk_input(parent) \
- jz_aic_set_reg(parent, AICFR, 0, AICFR_BCKD_MASK, AICFR_BCKD_BIT)
- #define __i2s_sync_output(parent) \
- jz_aic_set_reg(parent, AICFR, 1, AICFR_SYNCD_MASK, AICFR_SYNCD_BIT)
- #define __i2s_sync_input(parent) \
- jz_aic_set_reg(parent, AICFR, 0, AICFR_SYNCD_MASK, AICFR_SYNCD_BIT)
- #define __aic_select_i2s(parent) \
- jz_aic_set_reg(parent, AICFR, 1, AICFR_AUSEL_MASK, AICFR_AUSEL_BIT)
- #define __aic_select_internal_codec(parent) \
- jz_aic_set_reg(parent, AICFR, 1, AICFR_ICDC_MASK, AICFR_ICDC_BIT)
- #define __aic_select_external_codec(parent) \
- jz_aic_set_reg(parent, AICFR, 0, AICFR_ICDC_MASK, AICFR_ICDC_BIT)
- #define __i2s_play_zero(parent) \
- jz_aic_set_reg(parent, AICFR, 0, AICFR_LSMP_MASK, AICFR_LSMP_BIT)
- #define __i2s_play_lastsample(parent) \
- jz_aic_set_reg(parent, AICFR, 1, AICFR_LSMP_MASK, AICFR_LSMP_BIT)
- #define __i2s_codec_slave(parent) \
- jz_aic_set_reg(parent, AICFR, 1, AICFR_CDC_SLV_MASK, AICFR_CDC_SLV_BIT)
- #define __i2s_codec_master(parent) \
- jz_aic_set_reg(parent, AICFR, 0, AICFR_CDC_SLV_MASK, AICFR_CDC_SLV_BIT)
- #define __i2s_select_sysclk_output(parent) \
- jz_aic_set_reg(parent, AICFR, 0, AICFR_SYSCLKD_MASK, AICFR_SYSCLKD_BIT)
- #define __i2s_select_sysclk_input(parent) \
- jz_aic_set_reg(parent, AICFR, 1, AICFR_SYSCLKD_MASK, AICFR_SYSCLKD_BIT)
- #define __i2s_set_transmit_trigger(parent, n) \
- jz_aic_set_reg(parent, AICFR, n, AICFR_TFTH_MASK, AICFR_TFTH_BIT)
- #define __i2s_set_receive_trigger(parent, n) \
- jz_aic_set_reg(parent, AICFR, n, AICFR_RFTH_MASK, AICFR_RFTH_BIT)
- /*aiccr*/
- #define I2S_SS2REG(n) (((n) > 18 ? (n)/6 : (n)/9)) /* n = 8, 16, 18, 20, 24 */
- #define __i2s_aic_packet16(parent) \
- jz_aic_set_reg(parent, AICCR, 1, AICCR_PACK16_MASK, AICCR_PACK16_BIT)
- #define __i2s_aic_unpacket16(parent) \
- jz_aic_set_reg(parent, AICCR, 0, AICCR_PACK16_MASK, AICCR_PACK16_BIT)
- #define __i2s_channel(parent, n) \
- jz_aic_set_reg(parent, AICCR, ((n) - 1), AICCR_CHANNEL_MASK, AICCR_CHANNEL_BIT)
- #define __i2s_set_oss(parent, n) \
- jz_aic_set_reg(parent, AICCR, I2S_SS2REG(n) , AICCR_OSS_MASK, AICCR_OSS_BIT)
- #define __i2s_set_iss(parent, n) \
- jz_aic_set_reg(parent, AICCR, I2S_SS2REG(n) , AICCR_ISS_MASK, AICCR_ISS_BIT)
- #define __i2s_transmit_dma_is_enable(parent) \
- jz_aic_get_reg(parent, AICCR, AICCR_TDMS_MASK,AICCR_TDMS_BIT)
- #define __i2s_disable_transmit_dma(parent) \
- jz_aic_set_reg(parent, AICCR, 0, AICCR_TDMS_MASK, AICCR_TDMS_BIT)
- #define __i2s_enable_transmit_dma(parent) \
- jz_aic_set_reg(parent, AICCR, 1, AICCR_TDMS_MASK, AICCR_TDMS_BIT)
- #define __i2s_receive_dma_is_enable(parent) \
- jz_aic_get_reg(parent, AICCR, AICCR_RDMS_MASK,AICCR_RDMS_BIT)
- #define __i2s_disable_receive_dma(parent) \
- jz_aic_set_reg(parent, AICCR, 0, AICCR_RDMS_MASK, AICCR_RDMS_BIT)
- #define __i2s_enable_receive_dma(parent) \
- jz_aic_set_reg(parent, AICCR, 1, AICCR_RDMS_MASK, AICCR_RDMS_BIT)
- #define __i2s_m2s_enable(parent) \
- jz_aic_set_reg(parent, AICCR, 1, AICCR_M2S_MASK, AICCR_M2S_BIT)
- #define __i2s_m2s_disable(parent) \
- jz_aic_set_reg(parent, AICCR, 0, AICCR_M2S_MASK, AICCR_M2S_BIT)
- #define __i2s_endsw_enable(parent) \
- jz_aic_set_reg(parent, AICCR, 1, AICCR_ENDSW_MASK, AICCR_ENDSW_BIT)
- #define __i2s_endsw_disable(parent) \
- jz_aic_set_reg(parent, AICCR, 0, AICCR_ENDSW_MASK, AICCR_ENDSW_BIT)
- #define __i2s_asvtsu_enable(parent) \
- jz_aic_set_reg(parent, AICCR, 1, AICCR_ASVTSU_MASK, AICCR_ASVTSU_BIT)
- #define __i2s_asvtsu_disable(parent) \
- jz_aic_set_reg(parent, AICCR, 0, AICCR_ASVTSU_MASK, AICCR_ASVTSU_BIT)
- #define __i2s_enable_replay(parent) \
- jz_aic_set_reg(parent, AICCR, 1, AICCR_ERPL_MASK, AICCR_ERPL_BIT)
- #define __i2s_enable_record(parent) \
- jz_aic_set_reg(parent, AICCR, 1, AICCR_EREC_MASK, AICCR_EREC_BIT)
- #define __i2s_enable_loopback(parent) \
- jz_aic_set_reg(parent, AICCR, 1, AICCR_ENLBF_MASK, AICCR_ENLBF_BIT)
- #define __i2s_disable_replay(parent) \
- jz_aic_set_reg(parent, AICCR, 0, AICCR_ERPL_MASK, AICCR_ERPL_BIT)
- #define __i2s_disable_record(parent) \
- jz_aic_set_reg(parent, AICCR, 0, AICCR_EREC_MASK, AICCR_EREC_BIT)
- #define __i2s_disable_loopback(parent) \
- jz_aic_set_reg(parent, AICCR, 0, AICCR_ENLBF_MASK, AICCR_ENLBF_BIT)
- /*i2scr*/
- #define __i2s_select_i2s_fmt(parent) \
- jz_aic_set_reg(parent, I2SCR, 0, I2SCR_AMSL_MASK, I2SCR_AMSL_BIT)
- #define __i2s_select_msb_fmt(parent) \
- jz_aic_set_reg(parent, I2SCR, 1, I2SCR_AMSL_MASK, I2SCR_AMSL_BIT)
- #define __i2s_enable_sysclk_output(parent) \
- jz_aic_set_reg(parent, I2SCR, 1, I2SCR_ESCLK_MASK, I2SCR_ESCLK_BIT)
- #define __i2s_disable_sysclk_output(parent) \
- jz_aic_set_reg(parent, I2SCR, 0, I2SCR_ESCLK_MASK, I2SCR_ESCLK_BIT)
- #define __i2s_stop_bitclk(parent) \
- jz_aic_set_reg(parent, I2SCR, 1, I2SCR_STPBK_MASK, I2SCR_STPBK_BIT)
- #define __i2s_start_bitclk(parent) \
- jz_aic_set_reg(parent, I2SCR, 0, I2SCR_STPBK_MASK, I2SCR_STPBK_BIT)
- #define __i2s_select_packed_lrswap(parent) \
- jz_aic_set_reg(parent, I2SCR, 1, I2SCR_SWLH_MASK, I2SCR_SWLH_BIT)
- #define __i2s_select_packed_lrnorm(parent) \
- jz_aic_set_reg(parent, I2SCR, 0, I2SCR_SWLH_MASK, I2SCR_SWLH_BIT)
- #define __i2s_send_rfirst(parent) \
- jz_aic_set_reg(parent, I2SCR, 1, I2SCR_RFIRST_MASK, I2SCR_RFIRST_BIT)
- #define __i2s_send_lfirst(parent) \
- jz_aic_set_reg(parent, I2SCR, 0, I2SCR_RFIRST_MASK, I2SCR_RFIRST_BIT)
- /*i2ssr*/
- #define __i2s_transmiter_is_busy(parent) \
- (!!(jz_aic_read_reg(parent, I2SSR) & I2SSR_TBSY_MASK))
- #define __i2s_receiver_is_busy(parent) \
- (!!(jz_aic_read_reg(parent, I2SSR) & I2SSR_TBSY_MASK))
- /*i2s_div*/
- #define __i2s_set_idv(parent, div) \
- jz_aic_set_reg(parent, I2SDIV, div, I2SDIV_IDV_MASK, I2SDIV_IDV_BIT)
- #define __i2s_set_dv(parent, div) \
- jz_aic_set_reg(parent, I2SDIV, div, I2SDIV_DV_MASK, I2SDIV_DV_BIT)
- #endif /* _DRV_I2S_H_ */
|