kernel_samsung_a34x-permissive/sound/soc/mediatek/mt6765/mt6765-sound.c

2667 lines
95 KiB
C
Raw Permalink Normal View History

// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) 2019 MediaTek Inc.
* Author: Michael Hsiao <michael.hsiao@mediatek.com>
*/
/*****************************************************************************
* C O M P I L E R F L A G S
*****************************************************************************/
/*****************************************************************************
* E X T E R N A L R E F E R E N C E S
*****************************************************************************/
#include "mtk-auddrv-afe.h"
#include "mtk-auddrv-ana.h"
#include "mtk-auddrv-clk.h"
#include "mtk-auddrv-common.h"
#include "mtk-auddrv-def.h"
#include "mtk-auddrv-gpio.h"
#include "mtk-auddrv-kernel.h"
#include "mtk-soc-afe-control.h"
#include "mtk-soc-analog-type.h"
#include "mtk-soc-codec-63xx.h"
#include "mtk-soc-digital-type.h"
#include "mtk-soc-pcm-common.h"
#include "mtk-soc-pcm-platform.h"
#include <asm/div64.h>
#include <asm/irq.h>
#include <linux/completion.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/dma-mapping.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/jiffies.h>
#include <linux/kernel.h>
#include <linux/miscdevice.h>
#include <linux/mm.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/platform_device.h>
#include <linux/proc_fs.h>
#include <linux/sched.h>
#include <linux/semaphore.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <linux/string.h>
#include <linux/uaccess.h>
#include <linux/vmalloc.h>
#include <linux/wait.h>
#if defined(CONFIG_MTK_PASR)
#include <mt-plat/mtk_lpae.h>
#else
#define enable_4G() (false)
#endif
static const uint16_t kSideToneCoefficientTable16k[] = {
0x049C, 0x09E8, 0x09E0, 0x089C,
0xFF54, 0xF488, 0xEAFC, 0xEBAC,
0xfA40, 0x17AC, 0x3D1C, 0x6028,
0x7538
};
static const uint16_t kSideToneCoefficientTable32k[] = {
0xFE52, 0x0042, 0x00C5, 0x0194,
0x029A, 0x03B7, 0x04BF, 0x057D,
0x05BE, 0x0555, 0x0426, 0x0230,
0xFF92, 0xFC89, 0xF973, 0xF6C6,
0xF500, 0xF49D, 0xF603, 0xF970,
0xFEF3, 0x065F, 0x0F4F, 0x1928,
0x2329, 0x2C80, 0x345E, 0x3A0D,
0x3D08
};
static const uint16_t kSideToneCoefficientTable48k[] = {
0x0401, 0xFFB0, 0xFF5A, 0xFECE,
0xFE10, 0xFD28, 0xFC21, 0xFB08,
0xF9EF, 0xF8E8, 0xF80A, 0xF76C,
0xF724, 0xF746, 0xF7E6, 0xF90F,
0xFACC, 0xFD1E, 0xFFFF, 0x0364,
0x0737, 0x0B62, 0x0FC1, 0x1431,
0x188A, 0x1CA4, 0x2056, 0x237D,
0x25F9, 0x27B0, 0x2890
};
/* reg, bit position, bit mask */
static const unsigned int mMemIfSampleRate[Soc_Aud_Digital_Block_MEM_I2S +
1][3] = {
[Soc_Aud_Digital_Block_MEM_DL1] = {AFE_DAC_CON1, 0, 0xf},
[Soc_Aud_Digital_Block_MEM_DL2] = {AFE_DAC_CON1, 4, 0xf},
[Soc_Aud_Digital_Block_MEM_VUL] = {AFE_DAC_CON1, 16, 0xf},
[Soc_Aud_Digital_Block_MEM_DAI] = {AFE_DAC_CON0, 24, 0x3},
[Soc_Aud_Digital_Block_MEM_DL3] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_AWB] = {AFE_DAC_CON1, 12, 0xf},
[Soc_Aud_Digital_Block_MEM_MOD_DAI] = {AFE_DAC_CON1, 30, 0x3},
[Soc_Aud_Digital_Block_MEM_DL1_DATA2] = {AFE_REG_UNDEFINED, 0,
0x0},
[Soc_Aud_Digital_Block_MEM_VUL_DATA2] = {AFE_REG_UNDEFINED, 0,
0x0},
[Soc_Aud_Digital_Block_MEM_VUL2] = {AFE_DAC_CON2, 4, 0xf},
[Soc_Aud_Digital_Block_MEM_DAI2] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_AWB2] = {AFE_DAC_CON2, 16, 0xf},
[Soc_Aud_Digital_Block_MEM_I2S] = {AFE_DAC_CON1, 8, 0xf},
};
/* reg, bit position, bit mask */
static const unsigned int mMemIfChannels[Soc_Aud_Digital_Block_MEM_I2S +
1][3] = {
[Soc_Aud_Digital_Block_MEM_DL1] = {AFE_DAC_CON1, 21, 0x1},
[Soc_Aud_Digital_Block_MEM_DL2] = {AFE_DAC_CON1, 22, 0x1},
[Soc_Aud_Digital_Block_MEM_VUL] = {AFE_DAC_CON1, 27, 0x1},
[Soc_Aud_Digital_Block_MEM_DAI] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_DL3] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_AWB] = {AFE_DAC_CON1, 24, 0x1},
[Soc_Aud_Digital_Block_MEM_MOD_DAI] = {AFE_REG_UNDEFINED, 0,
0x0},
[Soc_Aud_Digital_Block_MEM_DL1_DATA2] = {AFE_REG_UNDEFINED, 0,
0x0},
[Soc_Aud_Digital_Block_MEM_VUL_DATA2] = {AFE_REG_UNDEFINED, 0,
0x0},
[Soc_Aud_Digital_Block_MEM_VUL2] = {AFE_DAC_CON2, 0, 0x1},
[Soc_Aud_Digital_Block_MEM_DAI2] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_AWB2] = {AFE_DAC_CON2, 20, 0x1},
[Soc_Aud_Digital_Block_MEM_I2S] = {AFE_REG_UNDEFINED, 0, 0x0},
};
/* reg, bit position, bit mask */
static const unsigned int mMemIfMonoChSelect[Soc_Aud_Digital_Block_MEM_I2S +
1][3] = {
[Soc_Aud_Digital_Block_MEM_DL1] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_DL2] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_VUL] = {AFE_DAC_CON1, 28, 0x1},
[Soc_Aud_Digital_Block_MEM_DAI] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_DL3] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_AWB] = {AFE_DAC_CON1, 25, 0x1},
[Soc_Aud_Digital_Block_MEM_MOD_DAI] = {AFE_REG_UNDEFINED, 0,
0x0},
[Soc_Aud_Digital_Block_MEM_DL1_DATA2] = {AFE_REG_UNDEFINED, 0,
0x0},
[Soc_Aud_Digital_Block_MEM_VUL_DATA2] = {AFE_REG_UNDEFINED, 0,
0x0},
[Soc_Aud_Digital_Block_MEM_VUL2] = {AFE_DAC_CON2, 1, 0x1},
[Soc_Aud_Digital_Block_MEM_DAI2] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_AWB2] = {AFE_DAC_CON2, 21, 0x1},
[Soc_Aud_Digital_Block_MEM_I2S] = {AFE_REG_UNDEFINED, 0, 0x0},
};
/* reg, bit position, bit mask */
static const unsigned int mMemDuplicateWrite[Soc_Aud_Digital_Block_MEM_I2S +
1][3] = {
[Soc_Aud_Digital_Block_MEM_DL1] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_DL2] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_VUL] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_DAI] = {AFE_DAC_CON1, 29, 0x1},
[Soc_Aud_Digital_Block_MEM_DL3] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_AWB] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_MOD_DAI] = {AFE_DAC_CON0, 26, 0x1},
[Soc_Aud_Digital_Block_MEM_DL1_DATA2] = {AFE_REG_UNDEFINED, 0,
0x0},
[Soc_Aud_Digital_Block_MEM_VUL_DATA2] = {AFE_REG_UNDEFINED, 0,
0x0},
[Soc_Aud_Digital_Block_MEM_VUL2] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_DAI2] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_AWB2] = {AFE_REG_UNDEFINED, 0, 0x0},
[Soc_Aud_Digital_Block_MEM_I2S] = {AFE_REG_UNDEFINED, 0, 0x0},
};
/* audio block, reg, bit position */
static const unsigned int
mMemAudioBlockEnableReg[][MEM_BLOCK_ENABLE_REG_INDEX_NUM] = {
{Soc_Aud_Digital_Block_MEM_DL1, AFE_DAC_CON0, 1},
{Soc_Aud_Digital_Block_MEM_DL2, AFE_DAC_CON0, 2},
{Soc_Aud_Digital_Block_MEM_VUL, AFE_DAC_CON0, 3},
{Soc_Aud_Digital_Block_MEM_DAI, AFE_DAC_CON0, 4},
{Soc_Aud_Digital_Block_MEM_DL3, AFE_DAC_CON0, 5},
{Soc_Aud_Digital_Block_MEM_AWB, AFE_DAC_CON0, 6},
{Soc_Aud_Digital_Block_MEM_MOD_DAI, AFE_DAC_CON0, 7},
{Soc_Aud_Digital_Block_MEM_DL1_DATA2, AFE_DAC_CON0, 8},
{Soc_Aud_Digital_Block_MEM_VUL_DATA2, AFE_DAC_CON0, 9},
{Soc_Aud_Digital_Block_MEM_VUL2, AFE_DAC_CON0, 27},
{Soc_Aud_Digital_Block_MEM_AWB2, AFE_DAC_CON0, 29},
};
const struct Aud_IRQ_CTRL_REG mIRQCtrlRegs[Soc_Aud_IRQ_MCU_MODE_NUM] = {
{
/*IRQ0*/
{AFE_IRQ_MCU_CON0, 0, 0x1}, /* irq on */
{AFE_IRQ_MCU_CON1, 0, 0xf}, /* irq mode */
{AFE_IRQ_MCU_CNT0, 0, 0x3ffff}, /* irq count */
{AFE_IRQ_MCU_CLR, 0, 0x1}, /* irq clear */
{AFE_IRQ_MCU_CLR, 16, 0x1}, /* irq miss clear */
{AFE_IRQ_MCU_STATUS, 0, 0x1}, /* irq status */
{AFE_IRQ_MCU_EN, 0, 0x1}, /* irq enable */
Soc_Aud_IRQ_MCU /* irq use for specify purpose */
},
{
/*IRQ1*/
{AFE_IRQ_MCU_CON0, 1, 0x1}, /* irq on */
{AFE_IRQ_MCU_CON1, 4, 0xf}, /* irq mode */
{AFE_IRQ_MCU_CNT1, 0, 0x3ffff}, /* irq count */
{AFE_IRQ_MCU_CLR, 1, 0x1}, /* irq clear */
{AFE_IRQ_MCU_CLR, 17, 0x1}, /* irq miss clear */
{AFE_IRQ_MCU_STATUS, 1, 0x1}, /* irq status */
{AFE_IRQ_MCU_EN, 1, 0x1}, /* irq enable */
Soc_Aud_IRQ_MCU /* irq use for specify purpose */
},
{
/*IRQ2*/
{AFE_IRQ_MCU_CON0, 2, 0x1}, /* irq on */
{AFE_IRQ_MCU_CON1, 8, 0xf}, /* irq mode */
{AFE_IRQ_MCU_CNT2, 0, 0x3ffff}, /* irq count */
{AFE_IRQ_MCU_CLR, 2, 0x1}, /* irq clear */
{AFE_IRQ_MCU_CLR, 18, 0x1}, /* irq miss clear */
{AFE_IRQ_MCU_STATUS, 2, 0x1}, /* irq status */
{AFE_IRQ_MCU_EN, 2, 0x1}, /* irq enable */
Soc_Aud_IRQ_MCU /* irq use for specify purpose */
},
{
/*IRQ3*/
{AFE_IRQ_MCU_CON0, 3, 0x1}, /* irq on */
{AFE_IRQ_MCU_CON1, 12, 0xf}, /* irq mode */
{AFE_IRQ_MCU_CNT3, 0, 0x3ffff}, /* irq count */
{AFE_IRQ_MCU_CLR, 3, 0x1}, /* irq clear */
{AFE_IRQ_MCU_CLR, 19, 0x1}, /* irq miss clear */
{AFE_IRQ_MCU_STATUS, 3, 0x1}, /* irq status */
{AFE_IRQ_MCU_EN, 3, 0x1}, /* irq enable */
Soc_Aud_IRQ_MCU /* irq use for specify purpose */
},
{
/*IRQ4*/
{AFE_IRQ_MCU_CON0, 4, 0x1}, /* irq on */
{AFE_IRQ_MCU_CON1, 16, 0xf}, /* irq mode */
{AFE_IRQ_MCU_CNT4, 0, 0x3ffff}, /* irq count */
{AFE_IRQ_MCU_CLR, 4, 0x1}, /* irq clear */
{AFE_IRQ_MCU_CLR, 20, 0x1}, /* irq miss clear */
{AFE_IRQ_MCU_STATUS, 4, 0x1}, /* irq status */
{AFE_IRQ_MCU_EN, 4, 0x1}, /* irq enable */
Soc_Aud_IRQ_MCU /* irq use for specify purpose */
},
{
/*IRQ5*/
{AFE_IRQ_MCU_CON0, 5, 0x1}, /* irq on */
{AFE_IRQ_MCU_CON1, 20, 0xf}, /* irq mode */
{AFE_IRQ_MCU_CNT5, 0, 0x3ffff}, /* irq count */
{AFE_IRQ_MCU_CLR, 5, 0x1}, /* irq clear */
{AFE_IRQ_MCU_CLR, 21, 0x1}, /* irq miss clear */
{AFE_IRQ_MCU_STATUS, 5, 0x1}, /* irq status */
{AFE_IRQ_MCU_EN, 5, 0x1}, /* irq enable */
Soc_Aud_IRQ_MCU /* irq use for specify purpose */
},
{
/*IRQ6*/
{AFE_IRQ_MCU_CON0, 6, 0x1}, /* irq on */
{AFE_IRQ_MCU_CON1, 24, 0xf}, /* irq mode */
{AFE_IRQ_MCU_CNT6, 0, 0x3ffff}, /* irq count */
{AFE_IRQ_MCU_CLR, 6, 0x1}, /* irq clear */
{AFE_IRQ_MCU_CLR, 22, 0x1}, /* irq miss clear */
{AFE_IRQ_MCU_STATUS, 6, 0x1}, /* irq status */
{AFE_IRQ_MCU_EN, 6, 0x1}, /* irq enable */
Soc_Aud_IRQ_MCU /* irq use for specify purpose */
},
{
/*IRQ7*/
{AFE_IRQ_MCU_CON0, 7, 0x1}, /* irq on */
{AFE_IRQ_MCU_CON1, 28, 0xf}, /* irq mode */
{AFE_IRQ_MCU_CNT7, 0, 0x3ffff}, /* irq count */
{AFE_IRQ_MCU_CLR, 7, 0x1}, /* irq clear */
{AFE_IRQ_MCU_CLR, 23, 0x1}, /* irq miss clear */
{AFE_IRQ_MCU_STATUS, 7, 0x1}, /* irq status */
{AFE_IRQ_MCU_EN, 7, 0x1}, /* irq enable */
Soc_Aud_IRQ_CM4 /* irq use for specify purpose */
},
{
/*IRQ8*/
{AFE_IRQ_MCU_CON0, 8, 0x1}, /* irq on */
{AFE_REG_UNDEFINED, 0, 0x0}, /* irq mode */
{AFE_REG_UNDEFINED, 0, 0x0}, /* irq count */
{AFE_IRQ_MCU_CLR, 8, 0x1}, /* irq clear */
{AFE_IRQ_MCU_CLR, 24, 0x1}, /* irq miss clear */
{AFE_IRQ_MCU_STATUS, 8, 0x1}, /* irq status */
{AFE_IRQ_MCU_EN, 8, 0x1}, /* irq enable */
Soc_Aud_IRQ_MCU /* irq use for specify purpose */
},
{
/*IRQ9*/
{AFE_IRQ_MCU_CON0, 9, 0x1}, /* irq on */
{AFE_REG_UNDEFINED, 0, 0x0}, /* irq mode */
{AFE_REG_UNDEFINED, 0, 0x0}, /* irq count */
{AFE_IRQ_MCU_CLR, 9, 0x1}, /* irq clear */
{AFE_IRQ_MCU_CLR, 25, 0x1}, /* irq miss clear */
{AFE_IRQ_MCU_STATUS, 9, 0x1}, /* irq status */
{AFE_IRQ_MCU_EN, 9, 0x1}, /* irq enable */
Soc_Aud_IRQ_MCU /* irq use for specify purpose */
},
{
/*IRQ10*/
{AFE_IRQ_MCU_CON0, 10, 0x1}, /* irq on */
{AFE_REG_UNDEFINED, 0, 0x0}, /* irq mode */
{AFE_REG_UNDEFINED, 0, 0x0}, /* irq count */
{AFE_IRQ_MCU_CLR, 10, 0x1}, /* irq clear */
{AFE_IRQ_MCU_CLR, 26, 0x1}, /* irq miss clear */
{AFE_IRQ_MCU_STATUS, 10, 0x1}, /* irq status */
{AFE_IRQ_MCU_EN, 10, 0x1}, /* irq enable */
Soc_Aud_IRQ_MCU /* irq use for specify purpose */
},
{
/*IRQ11*/
{AFE_IRQ_MCU_CON0, 11, 0x1}, /* irq on */
{AFE_IRQ_MCU_CON2, 0, 0x0}, /* irq mode */
{AFE_IRQ_MCU_CNT11, 0, 0x0}, /* irq count */
{AFE_IRQ_MCU_CLR, 11, 0x1}, /* irq clear */
{AFE_IRQ_MCU_CLR, 27, 0x1}, /* irq miss clear */
{AFE_IRQ_MCU_STATUS, 11, 0x1}, /* irq status */
{AFE_IRQ_MCU_EN, 11, 0x1}, /* irq enable */
Soc_Aud_IRQ_MCU /* irq use for specify purpose */
},
{
/*IRQ12*/
{AFE_IRQ_MCU_CON0, 12, 0x1}, /* irq on */
{AFE_IRQ_MCU_CON2, 4, 0x0}, /* irq mode */
{AFE_IRQ_MCU_CNT12, 0, 0x0}, /* irq count */
{AFE_IRQ_MCU_CLR, 12, 0x1}, /* irq clear */
{AFE_IRQ_MCU_CLR, 28, 0x1}, /* irq miss clear */
{AFE_IRQ_MCU_STATUS, 12, 0x1}, /* irq status */
{AFE_IRQ_MCU_EN, 12, 0x1}, /* irq enable */
Soc_Aud_IRQ_MCU /* irq use for specify purpose */
},
{
/*IRQ_ACC1*/
{AFE_REG_UNDEFINED, 13, 0x1}, /* irq on */
{AFE_REG_UNDEFINED, 8, 0x0}, /* irq mode */
{AFE_REG_UNDEFINED, 0, 0x0}, /* irq count */
{AFE_REG_UNDEFINED, 13, 0x1}, /* irq clear */
{AFE_REG_UNDEFINED, 29, 0x1}, /* irq miss clear */
{AFE_REG_UNDEFINED, 13, 0x1}, /* irq status */
{AFE_REG_UNDEFINED, 13, 0x1}, /* irq enable */
Soc_Aud_IRQ_MCU /* irq use for specify purpose */
},
{
/*IRQ_ACC2*/
{AFE_REG_UNDEFINED, 14, 0x1}, /* irq on */
{AFE_REG_UNDEFINED, 12, 0x0}, /* irq mode */
{AFE_REG_UNDEFINED, 0, 0x0}, /* irq count */
{AFE_REG_UNDEFINED, 14, 0x1}, /* irq clear */
{AFE_REG_UNDEFINED, 30, 0x1}, /* irq miss clear */
{AFE_REG_UNDEFINED, 14, 0x1}, /* irq status */
{AFE_REG_UNDEFINED, 14, 0x1}, /* irq enable */
Soc_Aud_IRQ_MCU /* irq use for specify purpose */
},
};
const struct Aud_RegBitsInfo mIRQPurposeRegs[Soc_Aud_IRQ_PURPOSE_NUM] = {
{AFE_IRQ_MCU_EN, 0, 0xffff}, /* Soc_Aud_IRQ_MCU */
{AFE_REG_UNDEFINED, 0, 0x0}, /* Soc_Aud_IRQ_MD32 */
{AFE_REG_UNDEFINED, 0, 0x0}, /* Soc_Aud_IRQ_MD32_H */
{AFE_REG_UNDEFINED, 0, 0x0}, /* Soc_Aud_IRQ_DSP */
{AFE_IRQ_MCU_EN1, 16, 0xffff}, /* Soc_Aud_IRQ_CM4 */
};
static const unsigned int
afe_buffer_regs[Soc_Aud_AFE_IO_Block_NUM_OF_IO_BLOCK]
[aud_buffer_ctrl_num] = {
[Soc_Aud_AFE_IO_Block_MEM_DL1] = {
AFE_DL1_BASE, AFE_DL1_END,
AFE_DL1_CUR}, /* DL1 */
[Soc_Aud_AFE_IO_Block_MEM_DL2] = {
AFE_DL2_BASE, AFE_DL2_END,
AFE_DL2_CUR}, /* DL2 */
};
/* Above structures may vary with chips!!!! */
/* set address hardware , platform dependent*/
static int set_mem_blk_addr(int mem_blk, dma_addr_t addr, size_t size)
{
pr_debug("%s mem_blk = %d\n", __func__, mem_blk);
switch (mem_blk) {
case Soc_Aud_Digital_Block_MEM_DL1:
Afe_Set_Reg(AFE_DL1_BASE, addr, 0xffffffff);
Afe_Set_Reg(AFE_DL1_END, addr + (size - 1), 0xffffffff);
break;
case Soc_Aud_Digital_Block_MEM_DL2:
Afe_Set_Reg(AFE_DL2_BASE, addr, 0xffffffff);
Afe_Set_Reg(AFE_DL2_END, addr + (size - 1), 0xffffffff);
break;
case Soc_Aud_Digital_Block_MEM_VUL:
Afe_Set_Reg(AFE_VUL_BASE, addr, 0xffffffff);
Afe_Set_Reg(AFE_VUL_END, addr + (size - 1), 0xffffffff);
break;
case Soc_Aud_Digital_Block_MEM_DAI:
Afe_Set_Reg(AFE_DAI_BASE, addr, 0xffffffff);
Afe_Set_Reg(AFE_DAI_END, addr + (size - 1), 0xffffffff);
break;
case Soc_Aud_Digital_Block_MEM_MOD_DAI:
Afe_Set_Reg(AFE_MOD_DAI_BASE, addr, 0xffffffff);
Afe_Set_Reg(AFE_MOD_DAI_END, addr + (size - 1), 0xffffffff);
break;
case Soc_Aud_Digital_Block_MEM_AWB2:
Afe_Set_Reg(AFE_AWB2_BASE, addr, 0xffffffff);
Afe_Set_Reg(AFE_AWB2_END, addr + (size - 1), 0xffffffff);
break;
case Soc_Aud_Digital_Block_MEM_AWB:
Afe_Set_Reg(AFE_AWB_BASE, addr, 0xffffffff);
Afe_Set_Reg(AFE_AWB_END, addr + (size - 1), 0xffffffff);
break;
case Soc_Aud_Digital_Block_MEM_VUL2:
Afe_Set_Reg(AFE_VUL2_BASE, addr, 0xffffffff);
Afe_Set_Reg(AFE_VUL2_END, addr + (size - 1), 0xffffffff);
break;
case Soc_Aud_Digital_Block_MEM_DL1_DATA2:
case Soc_Aud_Digital_Block_MEM_DL3:
case Soc_Aud_Digital_Block_MEM_HDMI:
default:
pr_debug("%s not suuport mem_blk = %d", __func__, mem_blk);
}
return 0;
}
static const int MEM_BLOCK_ENABLE_REG_NUM = ARRAY_SIZE(mMemAudioBlockEnableReg);
struct aud_reg_string aud_afe_reg_dump[] = {
{"AUDIO_TOP_CON0", AUDIO_TOP_CON0},
{"AUDIO_TOP_CON1", AUDIO_TOP_CON1},
{"AUDIO_TOP_CON3", AUDIO_TOP_CON3},
{"AFE_DAC_CON0", AFE_DAC_CON0},
{"AFE_DAC_CON1", AFE_DAC_CON1},
{"AFE_HD_ENGEN_ENABLE", AFE_HD_ENGEN_ENABLE},
{"AFE_I2S_CON", AFE_I2S_CON},
{"AFE_DAIBT_CON0", AFE_DAIBT_CON0},
{"AFE_CONN0", AFE_CONN0},
{"AFE_CONN1", AFE_CONN1},
{"AFE_CONN2", AFE_CONN2},
{"AFE_CONN3", AFE_CONN3},
{"AFE_CONN4", AFE_CONN4},
{"AFE_I2S_CON1", AFE_I2S_CON1},
{"AFE_I2S_CON2", AFE_I2S_CON2},
{"AFE_MRGIF_CON", AFE_MRGIF_CON},
{"AFE_DL1_BASE", AFE_DL1_BASE},
{"AFE_DL1_CUR", AFE_DL1_CUR},
{"AFE_DL1_END", AFE_DL1_END},
{"AFE_I2S_CON3", AFE_I2S_CON3},
{"AFE_DL2_BASE", AFE_DL2_BASE},
{"AFE_DL2_CUR", AFE_DL2_CUR},
{"AFE_DL2_END", AFE_DL2_END},
{"AFE_CONN5", AFE_CONN5},
{"AFE_CONN_24BIT", AFE_CONN_24BIT},
{"AFE_AWB_BASE", AFE_AWB_BASE},
{"AFE_AWB_END", AFE_AWB_END},
{"AFE_AWB_CUR", AFE_AWB_CUR},
{"AFE_VUL_BASE", AFE_VUL_BASE},
{"AFE_VUL_END", AFE_VUL_END},
{"AFE_VUL_CUR", AFE_VUL_CUR},
{"AFE_DAI_BASE", AFE_DAI_BASE},
{"AFE_DAI_END", AFE_DAI_END},
{"AFE_DAI_CUR", AFE_DAI_CUR},
{"AFE_CONN6", AFE_CONN6},
{"AFE_MEMIF_MSB", AFE_MEMIF_MSB},
{"AFE_MEMIF_MON0", AFE_MEMIF_MON0},
{"AFE_MEMIF_MON1", AFE_MEMIF_MON1},
{"AFE_MEMIF_MON2", AFE_MEMIF_MON2},
{"AFE_MEMIF_MON3", AFE_MEMIF_MON3},
{"AFE_MEMIF_MON4", AFE_MEMIF_MON4},
{"AFE_MEMIF_MON5", AFE_MEMIF_MON5},
{"AFE_MEMIF_MON6", AFE_MEMIF_MON6},
{"AFE_MEMIF_MON7", AFE_MEMIF_MON7},
{"AFE_MEMIF_MON8", AFE_MEMIF_MON8},
{"AFE_MEMIF_MON9", AFE_MEMIF_MON9},
{"AFE_ADDA_DL_SRC2_CON0", AFE_ADDA_DL_SRC2_CON0},
{"AFE_ADDA_DL_SRC2_CON1", AFE_ADDA_DL_SRC2_CON1},
{"AFE_ADDA_UL_SRC_CON0", AFE_ADDA_UL_SRC_CON0},
{"AFE_ADDA_UL_SRC_CON1", AFE_ADDA_UL_SRC_CON1},
{"AFE_ADDA_TOP_CON0", AFE_ADDA_TOP_CON0},
{"AFE_ADDA_UL_DL_CON0", AFE_ADDA_UL_DL_CON0},
{"AFE_ADDA_SRC_DEBUG", AFE_ADDA_SRC_DEBUG},
{"AFE_ADDA_SRC_DEBUG_MON0", AFE_ADDA_SRC_DEBUG_MON0},
{"AFE_ADDA_SRC_DEBUG_MON1", AFE_ADDA_SRC_DEBUG_MON1},
{"AFE_ADDA_UL_SRC_MON0", AFE_ADDA_UL_SRC_MON0},
{"AFE_ADDA_UL_SRC_MON1", AFE_ADDA_UL_SRC_MON1},
{"AFE_SIDETONE_DEBUG", AFE_SIDETONE_DEBUG},
{"AFE_SIDETONE_MON", AFE_SIDETONE_MON},
{"AFE_SGEN_CON2", AFE_SGEN_CON2},
{"AFE_SIDETONE_CON0", AFE_SIDETONE_CON0},
{"AFE_SIDETONE_COEFF", AFE_SIDETONE_COEFF},
{"AFE_SIDETONE_CON1", AFE_SIDETONE_CON1},
{"AFE_SIDETONE_GAIN", AFE_SIDETONE_GAIN},
{"AFE_SGEN_CON0", AFE_SGEN_CON0},
{"AFE_TOP_CON0", AFE_TOP_CON0},
{"AFE_BUS_CFG", AFE_BUS_CFG},
{"AFE_BUS_MON0", AFE_BUS_MON0},
{"AFE_ADDA_PREDIS_CON0", AFE_ADDA_PREDIS_CON0},
{"AFE_ADDA_PREDIS_CON1", AFE_ADDA_PREDIS_CON1},
{"AFE_MRGIF_MON0", AFE_MRGIF_MON0},
{"AFE_MRGIF_MON1", AFE_MRGIF_MON1},
{"AFE_MRGIF_MON2", AFE_MRGIF_MON2},
{"AFE_I2S_MON", AFE_I2S_MON},
{"AFE_ADDA_IIR_COEF_02_01", AFE_ADDA_IIR_COEF_02_01},
{"AFE_ADDA_IIR_COEF_04_03", AFE_ADDA_IIR_COEF_04_03},
{"AFE_ADDA_IIR_COEF_06_05", AFE_ADDA_IIR_COEF_06_05},
{"AFE_ADDA_IIR_COEF_08_07", AFE_ADDA_IIR_COEF_08_07},
{"AFE_ADDA_IIR_COEF_10_09", AFE_ADDA_IIR_COEF_10_09},
{"AFE_DAC_CON2", AFE_DAC_CON2},
{"AFE_IRQ_MCU_CON1", AFE_IRQ_MCU_CON1},
{"AFE_IRQ_MCU_CON2", AFE_IRQ_MCU_CON2},
{"AFE_DAC_MON", AFE_DAC_MON},
{"AFE_VUL2_BASE", AFE_VUL2_BASE},
{"AFE_VUL2_END", AFE_VUL2_END},
{"AFE_VUL2_CUR", AFE_VUL2_CUR},
{"AFE_IRQ_MCU_CNT0", AFE_IRQ_MCU_CNT0},
{"AFE_IRQ_MCU_CNT6", AFE_IRQ_MCU_CNT6},
{"AFE_IRQ0_MCU_CNT_MON", AFE_IRQ0_MCU_CNT_MON},
{"AFE_IRQ6_MCU_CNT_MON", AFE_IRQ6_MCU_CNT_MON},
{"AFE_IRQ_MCU_EN1", AFE_IRQ_MCU_EN1},
{"AFE_MOD_DAI_BASE", AFE_MOD_DAI_BASE},
{"AFE_MOD_DAI_END", AFE_MOD_DAI_END},
{"AFE_MOD_DAI_CUR", AFE_MOD_DAI_CUR},
{"AFE_IRQ3_MCU_CNT_MON", AFE_IRQ3_MCU_CNT_MON},
{"AFE_IRQ4_MCU_CNT_MON", AFE_IRQ4_MCU_CNT_MON},
{"AFE_IRQ_MCU_CON0", AFE_IRQ_MCU_CON0},
{"AFE_IRQ_MCU_STATUS", AFE_IRQ_MCU_STATUS},
{"AFE_IRQ_MCU_CLR", AFE_IRQ_MCU_CLR},
{"AFE_IRQ_MCU_CNT1", AFE_IRQ_MCU_CNT1},
{"AFE_IRQ_MCU_CNT2", AFE_IRQ_MCU_CNT2},
{"AFE_IRQ_MCU_EN", AFE_IRQ_MCU_EN},
{"AFE_IRQ_MCU_MON2", AFE_IRQ_MCU_MON2},
{"AFE_IRQ_MCU_CNT5", AFE_IRQ_MCU_CNT5},
{"AFE_IRQ1_MCU_CNT_MON", AFE_IRQ1_MCU_CNT_MON},
{"AFE_IRQ2_MCU_CNT_MON", AFE_IRQ2_MCU_CNT_MON},
{"AFE_IRQ1_MCU_EN_CNT_MON", AFE_IRQ1_MCU_EN_CNT_MON},
{"AFE_IRQ5_MCU_CNT_MON", AFE_IRQ5_MCU_CNT_MON},
{"AFE_MEMIF_MINLEN", AFE_MEMIF_MINLEN},
{"AFE_MEMIF_MAXLEN", AFE_MEMIF_MAXLEN},
{"AFE_MEMIF_PBUF_SIZE", AFE_MEMIF_PBUF_SIZE},
{"AFE_IRQ_MCU_CNT7", AFE_IRQ_MCU_CNT7},
{"AFE_IRQ7_MCU_CNT_MON", AFE_IRQ7_MCU_CNT_MON},
{"AFE_IRQ_MCU_CNT3", AFE_IRQ_MCU_CNT3},
{"AFE_IRQ_MCU_CNT4", AFE_IRQ_MCU_CNT4},
{"AFE_IRQ_MCU_CNT11", AFE_IRQ_MCU_CNT11},
{"AFE_APLL1_TUNER_CFG", AFE_APLL1_TUNER_CFG},
{"AFE_APLL2_TUNER_CFG", AFE_APLL2_TUNER_CFG},
{"AFE_MEMIF_HD_MODE", AFE_MEMIF_HD_MODE},
{"AFE_MEMIF_HDALIGN", AFE_MEMIF_HDALIGN},
{"AFE_CONN33", AFE_CONN33},
{"AFE_IRQ_MCU_CNT12", AFE_IRQ_MCU_CNT12},
{"AFE_GAIN1_CON0", AFE_GAIN1_CON0},
{"AFE_GAIN1_CON1", AFE_GAIN1_CON1},
{"AFE_GAIN1_CON2", AFE_GAIN1_CON2},
{"AFE_GAIN1_CON3", AFE_GAIN1_CON3},
{"AFE_CONN7", AFE_CONN7},
{"AFE_GAIN1_CUR", AFE_GAIN1_CUR},
{"AFE_GAIN2_CON0", AFE_GAIN2_CON0},
{"AFE_GAIN2_CON1", AFE_GAIN2_CON1},
{"AFE_GAIN2_CON2", AFE_GAIN2_CON2},
{"AFE_GAIN2_CON3", AFE_GAIN2_CON3},
{"AFE_CONN8", AFE_CONN8},
{"AFE_GAIN2_CUR", AFE_GAIN2_CUR},
{"AFE_CONN9", AFE_CONN9},
{"AFE_CONN10", AFE_CONN10},
{"AFE_CONN11", AFE_CONN11},
{"AFE_CONN12", AFE_CONN12},
{"AFE_CONN13", AFE_CONN13},
{"AFE_CONN14", AFE_CONN14},
{"AFE_CONN15", AFE_CONN15},
{"AFE_CONN16", AFE_CONN16},
{"AFE_CONN17", AFE_CONN17},
{"AFE_CONN18", AFE_CONN18},
{"AFE_CONN21", AFE_CONN21},
{"AFE_CONN22", AFE_CONN22},
{"AFE_CONN23", AFE_CONN23},
{"AFE_CONN24", AFE_CONN24},
{"AFE_CONN_RS", AFE_CONN_RS},
{"AFE_CONN_DI", AFE_CONN_DI},
{"AFE_CONN25", AFE_CONN25},
{"AFE_CONN26", AFE_CONN26},
{"AFE_CONN27", AFE_CONN27},
{"AFE_CONN28", AFE_CONN28},
{"AFE_CONN29", AFE_CONN29},
{"AFE_CONN30", AFE_CONN30},
{"AFE_CONN31", AFE_CONN31},
{"AFE_CONN32", AFE_CONN32},
{"AFE_SRAM_DELSEL_CON0", AFE_SRAM_DELSEL_CON0},
{"AFE_SRAM_DELSEL_CON2", AFE_SRAM_DELSEL_CON2},
{"AFE_SRAM_DELSEL_CON3", AFE_SRAM_DELSEL_CON3},
{"AFE_ASRC_2CH_CON12", AFE_ASRC_2CH_CON12},
{"AFE_ASRC_2CH_CON13", AFE_ASRC_2CH_CON13},
{"PCM_INTF_CON1", PCM_INTF_CON1},
{"PCM_INTF_CON2", PCM_INTF_CON2},
{"PCM2_INTF_CON", PCM2_INTF_CON},
{"FPGA_CFG0", FPGA_CFG0},
{"FPGA_CFG1", FPGA_CFG1},
{"FPGA_CFG2", FPGA_CFG2},
{"FPGA_CFG3", FPGA_CFG3},
{"AFE_CONN34", AFE_CONN34},
{"AFE_IRQ8_MCU_CNT_MON", AFE_IRQ8_MCU_CNT_MON},
{"AFE_IRQ11_MCU_CNT_MON", AFE_IRQ11_MCU_CNT_MON},
{"AFE_IRQ12_MCU_CNT_MON", AFE_IRQ12_MCU_CNT_MON},
{"AFE_GENERAL_REG0", AFE_GENERAL_REG0},
{"AFE_GENERAL_REG1", AFE_GENERAL_REG1},
{"AFE_GENERAL_REG2", AFE_GENERAL_REG2},
{"AFE_GENERAL_REG3", AFE_GENERAL_REG3},
{"AFE_GENERAL_REG4", AFE_GENERAL_REG4},
{"AFE_GENERAL_REG5", AFE_GENERAL_REG5},
{"AFE_GENERAL_REG6", AFE_GENERAL_REG6},
{"AFE_GENERAL_REG7", AFE_GENERAL_REG7},
{"AFE_GENERAL_REG8", AFE_GENERAL_REG8},
{"AFE_GENERAL_REG9", AFE_GENERAL_REG9},
{"AFE_GENERAL_REG10", AFE_GENERAL_REG10},
{"AFE_GENERAL_REG11", AFE_GENERAL_REG11},
{"AFE_GENERAL_REG12", AFE_GENERAL_REG12},
{"AFE_GENERAL_REG13", AFE_GENERAL_REG13},
{"AFE_GENERAL_REG14", AFE_GENERAL_REG14},
{"AFE_GENERAL_REG15", AFE_GENERAL_REG15},
{"AFE_CBIP_CFG0", AFE_CBIP_CFG0},
{"AFE_CBIP_MON0", AFE_CBIP_MON0},
{"AFE_CBIP_SLV_MUX_MON0", AFE_CBIP_SLV_MUX_MON0},
{"AFE_CBIP_SLV_DECODER_MON0", AFE_CBIP_SLV_DECODER_MON0},
{"AFE_DAI2_CUR", AFE_DAI2_CUR},
{"AFE_DAI2_CUR_MSB", AFE_DAI2_CUR_MSB},
{"AFE_CONN0_1", AFE_CONN0_1},
{"AFE_CONN1_1", AFE_CONN1_1},
{"AFE_CONN2_1", AFE_CONN2_1},
{"AFE_CONN3_1", AFE_CONN3_1},
{"AFE_CONN4_1", AFE_CONN4_1},
{"AFE_CONN5_1", AFE_CONN5_1},
{"AFE_CONN6_1", AFE_CONN6_1},
{"AFE_CONN7_1", AFE_CONN7_1},
{"AFE_CONN8_1", AFE_CONN8_1},
{"AFE_CONN9_1", AFE_CONN9_1},
{"AFE_CONN10_1", AFE_CONN10_1},
{"AFE_CONN11_1", AFE_CONN11_1},
{"AFE_CONN12_1", AFE_CONN12_1},
{"AFE_CONN13_1", AFE_CONN13_1},
{"AFE_CONN14_1", AFE_CONN14_1},
{"AFE_CONN15_1", AFE_CONN15_1},
{"AFE_CONN16_1", AFE_CONN16_1},
{"AFE_CONN17_1", AFE_CONN17_1},
{"AFE_CONN18_1", AFE_CONN18_1},
{"AFE_CONN21_1", AFE_CONN21_1},
{"AFE_CONN22_1", AFE_CONN22_1},
{"AFE_CONN23_1", AFE_CONN23_1},
{"AFE_CONN24_1", AFE_CONN24_1},
{"AFE_CONN25_1", AFE_CONN25_1},
{"AFE_CONN26_1", AFE_CONN26_1},
{"AFE_CONN27_1", AFE_CONN27_1},
{"AFE_CONN28_1", AFE_CONN28_1},
{"AFE_CONN29_1", AFE_CONN29_1},
{"AFE_CONN30_1", AFE_CONN30_1},
{"AFE_CONN31_1", AFE_CONN31_1},
{"AFE_CONN32_1", AFE_CONN32_1},
{"AFE_CONN33_1", AFE_CONN33_1},
{"AFE_CONN34_1", AFE_CONN34_1},
{"AFE_CONN_RS_1", AFE_CONN_RS_1},
{"AFE_CONN_DI_1", AFE_CONN_DI_1},
{"AFE_CONN_24BIT_1", AFE_CONN_24BIT_1},
{"AFE_CONN_REG", AFE_CONN_REG},
{"AFE_CONN35", AFE_CONN35},
{"AFE_CONN36", AFE_CONN36},
{"AFE_CONN37", AFE_CONN37},
{"AFE_CONN38", AFE_CONN38},
{"AFE_CONN35_1", AFE_CONN35_1},
{"AFE_CONN36_1", AFE_CONN36_1},
{"AFE_CONN37_1", AFE_CONN37_1},
{"AFE_CONN38_1", AFE_CONN38_1},
{"AFE_CONN39", AFE_CONN39},
{"AFE_CONN39_1", AFE_CONN39_1},
{"AFE_DL1_BASE_MSB", AFE_DL1_BASE_MSB},
{"AFE_DL1_CUR_MSB", AFE_DL1_CUR_MSB},
{"AFE_DL1_END_MSB", AFE_DL1_END_MSB},
{"AFE_DL2_BASE_MSB", AFE_DL2_BASE_MSB},
{"AFE_DL2_CUR_MSB", AFE_DL2_CUR_MSB},
{"AFE_DL2_END_MSB", AFE_DL2_END_MSB},
{"AFE_AWB_BASE_MSB", AFE_AWB_BASE_MSB},
{"AFE_AWB_END_MSB", AFE_AWB_END_MSB},
{"AFE_AWB_CUR_MSB", AFE_AWB_CUR_MSB},
{"AFE_VUL_BASE_MSB", AFE_VUL_BASE_MSB},
{"AFE_VUL_END_MSB", AFE_VUL_END_MSB},
{"AFE_VUL_CUR_MSB", AFE_VUL_CUR_MSB},
{"AFE_DAI_BASE_MSB", AFE_DAI_BASE_MSB},
{"AFE_DAI_END_MSB", AFE_DAI_END_MSB},
{"AFE_DAI_CUR_MSB", AFE_DAI_CUR_MSB},
{"AFE_VUL2_BASE_MSB", AFE_VUL2_BASE_MSB},
{"AFE_VUL2_END_MSB", AFE_VUL2_END_MSB},
{"AFE_VUL2_CUR_MSB", AFE_VUL2_CUR_MSB},
{"AFE_MOD_DAI_BASE_MSB", AFE_MOD_DAI_BASE_MSB},
{"AFE_MOD_DAI_END_MSB", AFE_MOD_DAI_END_MSB},
{"AFE_MOD_DAI_CUR_MSB", AFE_MOD_DAI_CUR_MSB},
{"AFE_AWB2_BASE", AFE_AWB2_BASE},
{"AFE_AWB2_END", AFE_AWB2_END},
{"AFE_AWB2_CUR", AFE_AWB2_CUR},
{"AFE_AWB2_BASE_MSB", AFE_AWB2_BASE_MSB},
{"AFE_AWB2_END_MSB", AFE_AWB2_END_MSB},
{"AFE_AWB2_CUR_MSB", AFE_AWB2_CUR_MSB},
{"AFE_ADDA_DL_SDM_DCCOMP_CON", AFE_ADDA_DL_SDM_DCCOMP_CON},
{"AFE_ADDA_DL_SDM_TEST", AFE_ADDA_DL_SDM_TEST},
{"AFE_ADDA_DL_DC_COMP_CFG0", AFE_ADDA_DL_DC_COMP_CFG0},
{"AFE_ADDA_DL_DC_COMP_CFG1", AFE_ADDA_DL_DC_COMP_CFG1},
{"AFE_ADDA_DL_SDM_FIFO_MON", AFE_ADDA_DL_SDM_FIFO_MON},
{"AFE_ADDA_DL_SRC_LCH_MON", AFE_ADDA_DL_SRC_LCH_MON},
{"AFE_ADDA_DL_SRC_RCH_MON", AFE_ADDA_DL_SRC_RCH_MON},
{"AFE_ADDA_DL_SDM_OUT_MON", AFE_ADDA_DL_SDM_OUT_MON},
{"AFE_ADDA_PREDIS_CON2", AFE_ADDA_PREDIS_CON2},
{"AFE_ADDA_PREDIS_CON3", AFE_ADDA_PREDIS_CON3},
{"AFE_MEMIF_MON12", AFE_MEMIF_MON12},
{"AFE_MEMIF_MON13", AFE_MEMIF_MON13},
{"AFE_MEMIF_MON14", AFE_MEMIF_MON14},
{"AFE_MEMIF_MON15", AFE_MEMIF_MON15},
{"AFE_MEMIF_MON16", AFE_MEMIF_MON16},
{"AFE_MEMIF_MON17", AFE_MEMIF_MON17},
{"AFE_MEMIF_MON18", AFE_MEMIF_MON18},
{"AFE_MEMIF_MON19", AFE_MEMIF_MON19},
{"AFE_MEMIF_MON20", AFE_MEMIF_MON20},
{"AFE_MEMIF_MON21", AFE_MEMIF_MON21},
{"AFE_MEMIF_MON22", AFE_MEMIF_MON22},
{"AFE_MEMIF_MON23", AFE_MEMIF_MON23},
{"AFE_MEMIF_MON24", AFE_MEMIF_MON24},
{"AFE_ADDA_MTKAIF_CFG0", AFE_ADDA_MTKAIF_CFG0},
{"AFE_ADDA_MTKAIF_TX_CFG1", AFE_ADDA_MTKAIF_TX_CFG1},
{"AFE_ADDA_MTKAIF_RX_CFG0", AFE_ADDA_MTKAIF_RX_CFG0},
{"AFE_ADDA_MTKAIF_RX_CFG1", AFE_ADDA_MTKAIF_RX_CFG1},
{"AFE_ADDA_MTKAIF_RX_CFG2", AFE_ADDA_MTKAIF_RX_CFG2},
{"AFE_ADDA_MTKAIF_MON0", AFE_ADDA_MTKAIF_MON0},
{"AFE_ADDA_MTKAIF_MON1", AFE_ADDA_MTKAIF_MON1},
{"AFE_AUD_PAD_TOP_CFG ", AFE_AUD_PAD_TOP_CFG},
};
void Afe_Log_Print(void)
{
int idx = 0;
AudDrv_Clk_On();
for (idx = 0; idx < ARRAY_SIZE(aud_afe_reg_dump); idx++)
pr_debug("reg %s = 0x%x, value:0x%x\n",
aud_afe_reg_dump[idx].regname,
aud_afe_reg_dump[idx].address,
Afe_Get_Reg(aud_afe_reg_dump[idx].address));
AudDrv_Clk_Off();
}
/* export symbols for other module using */
EXPORT_SYMBOL(Afe_Log_Print);
void Enable4pin_I2S0_I2S3(unsigned int SampleRate, unsigned int wLenBit)
{
/* wLenBit : 0:Soc_Aud_I2S_WLEN_WLEN_32BITS
* /1:Soc_Aud_I2S_WLEN_WLEN_16BITS
*/
unsigned int Audio_I2S0 = 0;
unsigned int Audio_I2S3 = 0;
/*Afe_Set_Reg(AUDIO_TOP_CON1, 0x2, 0x2);*/
/* I2S_SOFT_Reset 4 wire i2s mode*/
Afe_Set_Reg(AUDIO_TOP_CON1, 0x1 << 4, 0x1 << 4); /* I2S0 clock-gated */
Afe_Set_Reg(AUDIO_TOP_CON1, 0x1 << 7, 0x1 << 7); /* I2S3 clock-gated */
/* Set I2S0 configuration */
Audio_I2S0 |= (Soc_Aud_I2S_IN_PAD_SEL_I2S_IN_FROM_IO_MUX
<< 28); /* I2S in from io_mux */
Audio_I2S0 |= Soc_Aud_LOW_JITTER_CLOCK << 12; /* Low jitter mode */
Audio_I2S0 |= (Soc_Aud_INV_LRCK_NO_INVERSE << 5);
Audio_I2S0 |= (Soc_Aud_I2S_FORMAT_I2S << 3);
Audio_I2S0 |= (wLenBit << 1);
Afe_Set_Reg(AFE_I2S_CON, Audio_I2S0, MASK_ALL);
SetSampleRate(Soc_Aud_Digital_Block_MEM_I2S,
SampleRate); /* set I2S0 sample rate */
/* Set I2S3 configuration */
Audio_I2S3 |= Soc_Aud_LOW_JITTER_CLOCK << 12; /* Low jitter mode */
Audio_I2S3 |=
SampleRateTransform(SampleRate, Soc_Aud_Digital_Block_I2S_IN_2)
<< 8;
Audio_I2S3 |= Soc_Aud_I2S_FORMAT_I2S << 3; /* I2s format */
Audio_I2S3 |= wLenBit << 1; /* WLEN */
Afe_Set_Reg(AFE_I2S_CON3, Audio_I2S3, AFE_MASK_ALL);
Afe_Set_Reg(AUDIO_TOP_CON1, 0 << 4,
0x1 << 4); /* Clear I2S0 clock-gated */
Afe_Set_Reg(AUDIO_TOP_CON1, 0 << 7,
0x1 << 7); /* Clear I2S3 clock-gated */
udelay(200);
/*Afe_Set_Reg(AUDIO_TOP_CON1, 0, 0x2);*/
/* Clear I2S_SOFT_Reset 4
* wire i2s mode
*/
Afe_Set_Reg(AFE_I2S_CON, 0x1, 0x1); /* Enable I2S0 */
Afe_Set_Reg(AFE_I2S_CON3, 0x1, 0x1); /* Enable I2S3 */
}
void SetChipModemPcmConfig(int modem_index,
struct audio_digital_pcm p_modem_pcm_attribute)
{
unsigned int reg_pcm2_intf_con = 0;
unsigned int reg_pcm_intf_con1 = 0;
pr_debug("+%s()\n", __func__);
if (modem_index == MODEM_1) {
reg_pcm2_intf_con |=
(p_modem_pcm_attribute.mTxLchRepeatSel & 0x1) << 13;
reg_pcm2_intf_con |=
(p_modem_pcm_attribute.mVbt16kModeSel & 0x1) << 12;
reg_pcm2_intf_con |= (p_modem_pcm_attribute.mSingelMicSel & 0x1)
<< 7;
reg_pcm2_intf_con |= (p_modem_pcm_attribute.mAsyncFifoSel & 0x1)
<< 6;
reg_pcm2_intf_con |=
(p_modem_pcm_attribute.mPcmWordLength & 0x1) << 5;
reg_pcm2_intf_con |=
(p_modem_pcm_attribute.mPcmModeWidebandSel & 0x3) << 3;
reg_pcm2_intf_con |= (p_modem_pcm_attribute.mPcmFormat & 0x3)
<< 1;
pr_debug("%s(), PCM2_INTF_CON(0x%lx) = 0x%x\n", __func__,
PCM2_INTF_CON, reg_pcm2_intf_con);
Afe_Set_Reg(PCM2_INTF_CON, reg_pcm2_intf_con, MASK_ALL);
} else if (modem_index == MODEM_2 || modem_index == MODEM_EXTERNAL) {
/* MODEM_2 use PCM_INTF_CON1 (0x530) !!! */
reg_pcm_intf_con1 |= (p_modem_pcm_attribute.mBclkOutInv & 0x01)
<< 22;
reg_pcm_intf_con1 |=
(p_modem_pcm_attribute.mTxLchRepeatSel & 0x01) << 19;
reg_pcm_intf_con1 |=
(p_modem_pcm_attribute.mVbt16kModeSel & 0x01) << 18;
reg_pcm_intf_con1 |= (p_modem_pcm_attribute.mExtModemSel & 0x01)
<< 17;
reg_pcm_intf_con1 |=
(p_modem_pcm_attribute.mExtendBckSyncLength & 0x1F)
<< 9;
reg_pcm_intf_con1 |=
(p_modem_pcm_attribute.mExtendBckSyncTypeSel & 0x01)
<< 8;
reg_pcm_intf_con1 |=
(p_modem_pcm_attribute.mSingelMicSel & 0x01) << 7;
reg_pcm_intf_con1 |=
(p_modem_pcm_attribute.mAsyncFifoSel & 0x01) << 6;
reg_pcm_intf_con1 |=
(p_modem_pcm_attribute.mSlaveModeSel & 0x01) << 5;
reg_pcm_intf_con1 |=
(p_modem_pcm_attribute.mPcmModeWidebandSel & 0x03) << 3;
reg_pcm_intf_con1 |= (p_modem_pcm_attribute.mPcmFormat & 0x03)
<< 1;
pr_debug("%s(), PCM_INTF_CON1(0x%lx) = 0x%x", __func__,
PCM_INTF_CON1, reg_pcm_intf_con1);
Afe_Set_Reg(PCM_INTF_CON1, reg_pcm_intf_con1, MASK_ALL);
}
}
bool SetChipModemPcmEnable(int modem_index, bool modem_pcm_on)
{
unsigned int mPcm1AsyncFifo;
pr_debug("+%s(), modem_index = %d, modem_pcm_on = %d\n", __func__,
modem_index, modem_pcm_on);
if (modem_index ==
MODEM_1) { /* MODEM_1 use PCM2_INTF_CON (0x53C) !!! */
/* todo:: temp for use fifo */
Afe_Set_Reg(PCM2_INTF_CON, modem_pcm_on, 0x1);
} else if (modem_index == MODEM_2 || modem_index == MODEM_EXTERNAL) {
/* MODEM_2 use PCM_INTF_CON1 (0x530) !!! */
if (modem_pcm_on ==
true) { /* turn on ASRC before Modem PCM on */
Afe_Set_Reg(PCM_INTF_CON2, (modem_index - 1) << 8,
0x100);
/* selects internal MD2/MD3 PCM interface (0x538[8]) */
mPcm1AsyncFifo =
(Afe_Get_Reg(PCM_INTF_CON1) & 0x0040) >> 6;
Afe_Set_Reg(PCM_INTF_CON1, 0x1, 0x1);
} else if (modem_pcm_on ==
false) { /* turn off ASRC after Modem PCM off */
Afe_Set_Reg(PCM_INTF_CON1, 0x0, 0x1);
}
} else {
pr_debug("%s(), no such modem_index: %d!!", __func__,
modem_index);
return false;
}
return true;
}
bool set_chip_sine_gen_sample_rate(unsigned int sample_rate)
{
unsigned int sine_mode_ch1 = 0;
unsigned int sine_mode_ch2 = 0;
pr_debug("+%s(): sample_rate = %d\n", __func__, sample_rate);
sine_mode_ch1 = SampleRateTransform(sample_rate, 0) << 8;
sine_mode_ch2 = SampleRateTransform(sample_rate, 0) << 20;
Afe_Set_Reg(AFE_SGEN_CON0, sine_mode_ch1, 0xf << 8);
Afe_Set_Reg(AFE_SGEN_CON0, sine_mode_ch2, 0xf << 20);
return true;
}
bool set_chip_sine_gen_amplitude(unsigned int amp_divide)
{
if (amp_divide < Soc_Aud_SGEN_AMP_DIV_128 ||
amp_divide > Soc_Aud_SGEN_AMP_DIV_1) {
pr_debug("%s(): [AudioWarn] amp_divide = %d is invalid\n",
__func__, amp_divide);
return false;
}
Afe_Set_Reg(AFE_SGEN_CON0, amp_divide << 17, 0x7 << 17);
Afe_Set_Reg(AFE_SGEN_CON0, amp_divide << 5, 0x7 << 5);
return true;
}
bool set_chip_afe_enable(bool enable)
{
if (enable) {
Afe_Set_Reg(AFE_DAC_CON0, 0x1, 0x1);
} else {
int retry = 0;
Afe_Set_Reg(AFE_DAC_CON0, 0x0, 0x1);
while ((Afe_Get_Reg(AFE_DAC_MON) & 0x1) && ++retry < 100000)
udelay(10);
if (retry)
pr_debug("%s(), retry %d\n", __func__, retry);
}
return true;
}
bool set_chip_dai_bt_enable(bool enable, struct audio_digital_dai_bt *dai_bt,
struct audio_mrg_if *mrg)
{
if (enable == true) {
/* turn on dai bt */
Afe_Set_Reg(AFE_DAIBT_CON0, dai_bt->mDAI_BT_MODE << 9,
0x1 << 9);
if (mrg->MrgIf_En == true) {
Afe_Set_Reg(AFE_DAIBT_CON0, 0x1 << 12,
0x1 << 12); /* use merge */
Afe_Set_Reg(AFE_DAIBT_CON0, 0x1 << 3,
0x1 << 3); /* data ready */
Afe_Set_Reg(AFE_DAIBT_CON0, 0x3,
0x3); /* Turn on DAIBT */
} else { /* turn on merge and daiBT */
Afe_Set_Reg(AFE_MRGIF_CON,
mrg->Mrg_I2S_SampleRate << 20, 0xF00000);
/* set Mrg_I2S Samping Rate */
Afe_Set_Reg(AFE_MRGIF_CON, 1 << 16,
1 << 16); /* set Mrg_I2S enable */
Afe_Set_Reg(AFE_MRGIF_CON, 1,
0x1); /* Turn on Merge Interface */
udelay(100);
Afe_Set_Reg(AFE_DAIBT_CON0, 0x1 << 12,
0x1 << 12); /* use merge */
Afe_Set_Reg(AFE_DAIBT_CON0, 0x1 << 3,
0x1 << 3); /* data ready */
Afe_Set_Reg(AFE_DAIBT_CON0, 0x3,
0x3); /* Turn on DAIBT */
}
} else {
if (mrg->Mergeif_I2S_Enable == true) {
Afe_Set_Reg(AFE_DAIBT_CON0, 0,
0x3); /* Turn off DAIBT */
} else {
Afe_Set_Reg(AFE_DAIBT_CON0, 0, 0x3); /* Turn on DAIBT */
udelay(100);
Afe_Set_Reg(AFE_MRGIF_CON, 0 << 16,
1 << 16); /* set Mrg_I2S enable */
Afe_Set_Reg(AFE_MRGIF_CON, 0,
0x1); /* Turn on Merge Interface */
mrg->MrgIf_En = false;
}
dai_bt->mBT_ON = false;
dai_bt->mDAIBT_ON = false;
}
return true;
}
bool set_chip_hw_digital_gain_mode(enum soc_aud_digital_block aud_block,
unsigned int sample_rate,
unsigned int sample_per_step)
{
unsigned int value = 0;
value = (sample_per_step << 8) |
(SampleRateTransform(sample_rate, aud_block) << 4);
switch (aud_block) {
case Soc_Aud_Digital_Block_HW_GAIN1:
Afe_Set_Reg(AFE_GAIN1_CON0, value, 0xfff0);
break;
case Soc_Aud_Digital_Block_HW_GAIN2:
Afe_Set_Reg(AFE_GAIN2_CON0, value, 0xfff0);
break;
default:
return false;
}
return true;
}
bool set_chip_hw_digital_gain_enable(enum soc_aud_digital_block aud_block,
bool enable)
{
switch (aud_block) {
case Soc_Aud_Digital_Block_HW_GAIN1:
if (enable)
Afe_Set_Reg(AFE_GAIN1_CUR, 0, 0xFFFFFFFF);
/* Let current gain be 0 to ramp up */
Afe_Set_Reg(AFE_GAIN1_CON0, enable, 0x1);
break;
case Soc_Aud_Digital_Block_HW_GAIN2:
if (enable)
Afe_Set_Reg(AFE_GAIN2_CUR, 0, 0xFFFFFFFF);
/* Let current gain be 0 to ramp up */
Afe_Set_Reg(AFE_GAIN2_CON0, enable, 0x1);
break;
default:
pr_debug("%s with no match type\n", __func__);
return false;
}
return true;
}
bool set_chip_hw_digital_gain(enum soc_aud_digital_block aud_block,
unsigned int gain)
{
switch (aud_block) {
case Soc_Aud_Digital_Block_HW_GAIN1:
Afe_Set_Reg(AFE_GAIN1_CON1, gain, 0xffffffff);
break;
case Soc_Aud_Digital_Block_HW_GAIN2:
Afe_Set_Reg(AFE_GAIN2_CON1, gain, 0xffffffff);
break;
default:
pr_debug("%s with no match type\n", __func__);
return false;
}
return true;
}
bool set_chip_adda_enable(bool enable)
{
if (enable)
Afe_Set_Reg(AFE_ADDA_UL_DL_CON0, 0x1, 0x1);
else
Afe_Set_Reg(AFE_ADDA_UL_DL_CON0, 0x0, 0x1);
return true;
}
bool set_chip_ul_src_enable(bool enable)
{
if (enable)
Afe_Set_Reg(AFE_ADDA_UL_SRC_CON0, 0x1, 0x1);
else
Afe_Set_Reg(AFE_ADDA_UL_SRC_CON0, 0x0, 0x1);
return true;
}
bool set_chip_ul2_src_enable(bool enable)
{
return true;
}
bool set_chip_dl_src_enable(bool enable)
{
if (enable)
Afe_Set_Reg(AFE_ADDA_DL_SRC2_CON0, 0x1, 0x1);
else
Afe_Set_Reg(AFE_ADDA_DL_SRC2_CON0, 0x0, 0x1);
return true;
}
bool set_i2s_dac_out_source(unsigned int aud_block)
{
int source_sel = 0;
switch (aud_block) {
case Soc_Aud_AFE_IO_Block_I2S1_DAC: {
source_sel = 1; /* select source from o3o4 */
break;
}
case Soc_Aud_AFE_IO_Block_I2S1_DAC_2: {
source_sel = 0; /* select source from o28o29 */
break;
}
default:
pr_debug("The source can not be the aud_block = %d\n",
aud_block);
return false;
}
Afe_Set_Reg(AFE_I2S_CON1, source_sel, 1 << 16);
return true;
}
bool EnableSideToneFilter(bool stf_on)
{
/* MD support 16K/32K sampling rate */
uint8_t kSideToneHalfTapNum;
const uint16_t *kSideToneCoefficientTable;
unsigned int eSamplingRate =
(Afe_Get_Reg(AFE_ADDA_UL_SRC_CON0) & 0x60000) >> 17;
if (eSamplingRate == Soc_Aud_ADDA_UL_SAMPLERATE_48K) {
kSideToneHalfTapNum =
sizeof(kSideToneCoefficientTable48k) / sizeof(uint16_t);
kSideToneCoefficientTable = kSideToneCoefficientTable48k;
} else if (eSamplingRate == Soc_Aud_ADDA_UL_SAMPLERATE_32K) {
kSideToneHalfTapNum =
sizeof(kSideToneCoefficientTable32k) / sizeof(uint16_t);
kSideToneCoefficientTable = kSideToneCoefficientTable32k;
} else {
kSideToneHalfTapNum =
sizeof(kSideToneCoefficientTable16k) / sizeof(uint16_t);
kSideToneCoefficientTable = kSideToneCoefficientTable16k;
}
pr_debug("+%s(), stf_on = %d, kSTFCoef[0]=0x%x\n", __func__, stf_on,
kSideToneCoefficientTable[0]);
AudDrv_Clk_On();
if (stf_on == false) {
/* bypass STF result & disable */
uint32_t reg_value = (!stf_on << 31) | (!stf_on << 30) |
(!stf_on << 29) | (!stf_on << 28) |
(stf_on << 8);
Afe_Set_Reg(AFE_SIDETONE_CON1, reg_value, MASK_ALL);
/* set side tone gain = 0 */
Afe_Set_Reg(AFE_SIDETONE_GAIN, 0, MASK_ALL);
pr_debug("%s(), AFE_SIDETONE_GAIN[0x%lx] = 0x%x\n", __func__,
AFE_SIDETONE_GAIN, 0);
} else {
/* using STF result & enable & set half tap num */
uint32_t write_reg_value = (!stf_on << 31) | (!stf_on << 30) |
(!stf_on << 29) | (!stf_on << 28) |
(stf_on << 8) | kSideToneHalfTapNum;
/* set side tone coefficient */
const bool enable_read_write =
true; /* enable read/write side tone coefficient */
const bool read_write_sel = true; /* for write case */
const bool sel_ch2 = false; /* using uplink ch1 as STF input */
uint32_t read_reg_value = Afe_Get_Reg(AFE_SIDETONE_CON0);
size_t coef_addr = 0;
/* set side tone gain */
Afe_Set_Reg(AFE_SIDETONE_GAIN, 0, MASK_ALL);
Afe_Set_Reg(AFE_SIDETONE_CON1, write_reg_value, MASK_ALL);
pr_debug("%s(), AFE_SIDETONE_CON1[0x%lx] = 0x%x\n", __func__,
AFE_SIDETONE_CON1, write_reg_value);
for (coef_addr = 0; coef_addr < kSideToneHalfTapNum;
coef_addr++) {
bool old_write_ready = (read_reg_value >> 29) & 0x1;
bool new_write_ready = 0;
int try_cnt = 0;
write_reg_value = enable_read_write << 25 |
read_write_sel << 24 | sel_ch2 << 23 |
coef_addr << 16 |
kSideToneCoefficientTable[coef_addr];
Afe_Set_Reg(AFE_SIDETONE_CON0, write_reg_value,
0x39FFFFF);
/* wait until flag write_ready changed (means write
* done)
*/
for (try_cnt = 0; try_cnt < 10;
try_cnt++) { /* max try 10 times */
/* msleep(3); */
/* usleep_range(3 * 1000, 20 * 1000); */
read_reg_value = Afe_Get_Reg(AFE_SIDETONE_CON0);
new_write_ready = (read_reg_value >> 29) & 0x1;
if (new_write_ready ==
old_write_ready) { /* flip => ok */
udelay(3);
if (try_cnt == 9) {
AUDIO_AEE(
"EnableSideToneFilter new_write_ready == old_write_ready");
AudDrv_Clk_Off();
return false;
}
} else {
break;
}
}
}
}
AudDrv_Clk_Off();
pr_debug("-%s(), stf_on = %d\n", __func__, stf_on);
return true;
}
void set_stf_gain(int gain)
{
AudDrv_Clk_On();
Afe_Set_Reg(AFE_SIDETONE_GAIN, gain, 0xffff);
AudDrv_Clk_Off();
}
void set_stf_positive_gain_db(int gain_db)
{
if (gain_db >= 0 && gain_db <= 24) {
AudDrv_Clk_On();
Afe_Set_Reg(AFE_SIDETONE_GAIN, (gain_db / 6) << 16, 0x7 << 16);
AudDrv_Clk_Off();
} else {
pr_debug("%s(), gain_db %d invalid\n", __func__, gain_db);
}
}
bool CleanPreDistortion(void)
{
Afe_Set_Reg(AFE_ADDA_PREDIS_CON0, 0, MASK_ALL);
Afe_Set_Reg(AFE_ADDA_PREDIS_CON1, 0, MASK_ALL);
return false;
}
static void set_adda_dl_src_gain(bool mute)
{
if (mute) {
Afe_Set_Reg(AFE_ADDA_DL_SRC2_CON1, 0, MASK_ALL);
} else {
/* SA suggest apply -0.3db to audio/speech path */
/* 2013.02.22 for voice mode degrade 0.3 db */
Afe_Set_Reg(AFE_ADDA_DL_SRC2_CON1, 0xf74f0000, MASK_ALL);
}
}
bool SetDLSrc2(unsigned int rate)
{
unsigned int AfeAddaDLSrc2Con0;
AfeAddaDLSrc2Con0 =
SampleRateTransform(rate, Soc_Aud_Digital_Block_ADDA_DL);
if (AfeAddaDLSrc2Con0 == 0 || AfeAddaDLSrc2Con0 == 3) {
/* 8k or 16k voice mode */
AfeAddaDLSrc2Con0 =
(AfeAddaDLSrc2Con0 << 28) | (0x03 << 24) |
(0x03 << 11) | (0x01 << 5);
} else {
AfeAddaDLSrc2Con0 = (AfeAddaDLSrc2Con0 << 28) |
(0x03 << 24) | (0x03 << 11);
}
AfeAddaDLSrc2Con0 = AfeAddaDLSrc2Con0 | (0x01 << 1);
Afe_Set_Reg(AFE_ADDA_DL_SRC2_CON0, AfeAddaDLSrc2Con0, MASK_ALL);
set_adda_dl_src_gain(false);
SetSdmLevel(AUDIO_SDM_LEVEL_NORMAL);
return true;
}
unsigned int SampleRateTransformI2s(unsigned int SampleRate)
{
switch (SampleRate) {
case 8000:
return Soc_Aud_I2S_SAMPLERATE_I2S_8K;
case 11025:
return Soc_Aud_I2S_SAMPLERATE_I2S_11K;
case 12000:
return Soc_Aud_I2S_SAMPLERATE_I2S_12K;
case 16000:
return Soc_Aud_I2S_SAMPLERATE_I2S_16K;
case 22050:
return Soc_Aud_I2S_SAMPLERATE_I2S_22K;
case 24000:
return Soc_Aud_I2S_SAMPLERATE_I2S_24K;
case 32000:
return Soc_Aud_I2S_SAMPLERATE_I2S_32K;
case 44100:
return Soc_Aud_I2S_SAMPLERATE_I2S_44K;
case 48000:
return Soc_Aud_I2S_SAMPLERATE_I2S_48K;
case 88200:
return Soc_Aud_I2S_SAMPLERATE_I2S_88K;
case 96000:
return Soc_Aud_I2S_SAMPLERATE_I2S_96K;
case 176400:
return Soc_Aud_I2S_SAMPLERATE_I2S_174K;
case 192000:
return Soc_Aud_I2S_SAMPLERATE_I2S_192K;
case 260000:
return Soc_Aud_I2S_SAMPLERATE_I2S_260K;
default:
break;
}
return Soc_Aud_I2S_SAMPLERATE_I2S_44K;
}
enum {
UL_IIR_SW = 0,
/* 3.3 Hz if 32kHz mode ; 5 Hz if 48kHz mode ; 10Hz if 96kHz mode */
UL_IIR_HW_LEVEL1,
/* 6.6 Hz if 32kHz mode ; 10Hz if 48kHz mode ; 20Hz if 96kHz mode */
UL_IIR_HW_LEVEL2,
/* 16.6 Hz if 32kHz mode ; 25Hz if 48kHz mode ; 50Hz if 96kHz mode */
UL_IIR_HW_LEVEL3,
/* 33.3 Hz if 32kHz mode ; 50Hz if 48kHz mode ; 100Hz if 96kHz mode */
UL_IIR_HW_LEVEL4,
/* 50 Hz if 32kHz mode ; 75Hz if 48kHz mode ; 150Hz if 96kHz mode */
UL_IIR_HW_LEVEL5,
};
bool set_chip_adc_in(unsigned int rate)
{
unsigned int dVoiceModeSelect = 0;
unsigned int enable_iir = 1;
unsigned int afeAddaUlSrcCon0 = 0; /* default value */
/* enable aud_pad_top fifo,
* need set after GPIO enable, pmic miso clk on
*/
Afe_Set_Reg(AFE_AUD_PAD_TOP_CFG, 0x31, MASK_ALL);
/* reset MTKAIF_CFG0, no lpbk, protocol 1 */
Afe_Set_Reg(AFE_ADDA_MTKAIF_CFG0, 0x0, MASK_ALL);
/* Using Internal ADC */
Afe_Set_Reg(AFE_ADDA_TOP_CON0, 0, 0x1);
dVoiceModeSelect =
SampleRateTransform(rate, Soc_Aud_Digital_Block_ADDA_UL);
afeAddaUlSrcCon0 |= (dVoiceModeSelect << 17) & (0x7 << 17);
afeAddaUlSrcCon0 |= (enable_iir << 10) & (0x1 << 10);
afeAddaUlSrcCon0 |= UL_IIR_SW << 7;
if ((afeAddaUlSrcCon0 & 0x380) == UL_IIR_SW) {
/* 35HZ @48K */
Afe_Set_Reg(AFE_ADDA_IIR_COEF_02_01, 0x00000000, MASK_ALL);
Afe_Set_Reg(AFE_ADDA_IIR_COEF_04_03, 0x00003FB8, MASK_ALL);
Afe_Set_Reg(AFE_ADDA_IIR_COEF_06_05, 0x3FB80000, MASK_ALL);
Afe_Set_Reg(AFE_ADDA_IIR_COEF_08_07, 0x3FB80000, MASK_ALL);
Afe_Set_Reg(AFE_ADDA_IIR_COEF_10_09, 0x0000C048, MASK_ALL);
}
Afe_Set_Reg(AFE_ADDA_UL_SRC_CON0, afeAddaUlSrcCon0, MASK_ALL);
/* mtkaif_rxif_data_mode = 0, amic */
Afe_Set_Reg(AFE_ADDA_MTKAIF_RX_CFG0, 0x0, 0x1);
return true;
}
bool set_chip_adc2_in(unsigned int rate)
{
return true;
}
bool setChipDmicPath(bool _enable, unsigned int sample_rate)
{
return true;
}
bool SetSampleRate(unsigned int Aud_block, unsigned int SampleRate)
{
SampleRate = SampleRateTransform(SampleRate, Aud_block);
switch (Aud_block) {
case Soc_Aud_Digital_Block_MEM_DL1:
case Soc_Aud_Digital_Block_MEM_DL1_DATA2:
case Soc_Aud_Digital_Block_MEM_DL2:
case Soc_Aud_Digital_Block_MEM_DL3:
case Soc_Aud_Digital_Block_MEM_I2S:
case Soc_Aud_Digital_Block_MEM_AWB:
case Soc_Aud_Digital_Block_MEM_VUL:
case Soc_Aud_Digital_Block_MEM_DAI:
case Soc_Aud_Digital_Block_MEM_MOD_DAI:
case Soc_Aud_Digital_Block_MEM_VUL_DATA2:
case Soc_Aud_Digital_Block_MEM_AWB2:
case Soc_Aud_Digital_Block_MEM_VUL2:
Afe_Set_Reg(mMemIfSampleRate[Aud_block][0],
SampleRate << mMemIfSampleRate[Aud_block][1],
mMemIfSampleRate[Aud_block][2]
<< mMemIfSampleRate[Aud_block][1]);
break;
default:
pr_debug("audio_error: %s(): given Aud_block is not valid!!!!\n",
__func__);
return false;
}
return true;
}
bool SetChannels(unsigned int Memory_Interface, unsigned int channel)
{
const bool bMono = (channel == 1) ? true : false;
switch (Memory_Interface) {
case Soc_Aud_Digital_Block_MEM_DL1:
case Soc_Aud_Digital_Block_MEM_DL2:
case Soc_Aud_Digital_Block_MEM_DL3:
case Soc_Aud_Digital_Block_MEM_AWB:
case Soc_Aud_Digital_Block_MEM_VUL:
case Soc_Aud_Digital_Block_MEM_AWB2:
case Soc_Aud_Digital_Block_MEM_VUL2:
Afe_Set_Reg(mMemIfChannels[Memory_Interface][0],
bMono << mMemIfChannels[Memory_Interface][1],
mMemIfChannels[Memory_Interface][2]
<< mMemIfChannels[Memory_Interface][1]);
break;
case Soc_Aud_Digital_Block_MEM_DAI:
case Soc_Aud_Digital_Block_MEM_MOD_DAI:
SetMemDuplicateWrite(Memory_Interface, channel == 2 ? 1 : 0);
break;
default:
pr_debug("[AudioWarn] SetChannels Memory_Interface = %d, channel = %d, bMono = %d\n",
Memory_Interface, channel, bMono);
return false;
}
return true;
}
int SetMemifMonoSel(unsigned int Memory_Interface, bool mono_use_r_ch)
{
switch (Memory_Interface) {
case Soc_Aud_Digital_Block_MEM_AWB:
case Soc_Aud_Digital_Block_MEM_VUL:
case Soc_Aud_Digital_Block_MEM_AWB2:
case Soc_Aud_Digital_Block_MEM_VUL2:
Afe_Set_Reg(mMemIfMonoChSelect[Memory_Interface][0],
mono_use_r_ch
<< mMemIfMonoChSelect[Memory_Interface][1],
mMemIfMonoChSelect[Memory_Interface][2]
<< mMemIfMonoChSelect[Memory_Interface][1]);
break;
default:
pr_debug("[AudioWarn] %s(), invalid Memory_Interface = %d\n",
__func__, Memory_Interface);
return -EINVAL;
}
return 0;
}
bool SetMemDuplicateWrite(unsigned int InterfaceType, int dupwrite)
{
switch (InterfaceType) {
case Soc_Aud_Digital_Block_MEM_DAI:
case Soc_Aud_Digital_Block_MEM_MOD_DAI:
Afe_Set_Reg(mMemDuplicateWrite[InterfaceType][0],
dupwrite << mMemDuplicateWrite[InterfaceType][1],
mMemDuplicateWrite[InterfaceType][2]
<< mMemDuplicateWrite[InterfaceType][1]);
break;
default:
return false;
}
return true;
}
unsigned int GetEnableAudioBlockRegInfo(unsigned int Aud_block, int index)
{
int i = 0;
for (i = 0; i < MEM_BLOCK_ENABLE_REG_NUM; i++) {
if (mMemAudioBlockEnableReg
[i][MEM_BLOCK_ENABLE_REG_INDEX_AUDIO_BLOCK] ==
Aud_block)
return mMemAudioBlockEnableReg[i][index];
}
return 0; /* 0: no such bit */
}
unsigned int GetEnableAudioBlockRegAddr(unsigned int Aud_block)
{
return GetEnableAudioBlockRegInfo(Aud_block,
MEM_BLOCK_ENABLE_REG_INDEX_REG);
}
unsigned int GetEnableAudioBlockRegOffset(unsigned int Aud_block)
{
return GetEnableAudioBlockRegInfo(Aud_block,
MEM_BLOCK_ENABLE_REG_INDEX_OFFSET);
}
bool SetMemIfFormatReg(unsigned int InterfaceType, unsigned int eFetchFormat)
{
unsigned int isAlign =
eFetchFormat == AFE_WLEN_32_BIT_ALIGN_24BIT_DATA_8BIT_0 ? 1 : 0;
unsigned int isHD = eFetchFormat == AFE_WLEN_16_BIT ? 0 : 1;
/*
* pr_debug("+%s(), InterfaceType = %d, eFetchFormat = %d,
* mAudioMEMIF[InterfaceType].mFetchFormatPerSample = %d\n",
* __FUNCTION__
* , InterfaceType, eFetchFormat,
* mAudioMEMIF[InterfaceType]->mFetchFormatPerSample);
*/
/* force cpu use 8_24 format when writing 32bit data */
Afe_Set_Reg(AFE_MEMIF_MSB, 0 << 28, 1 << 28);
switch (InterfaceType) {
case Soc_Aud_Digital_Block_MEM_DL1:
Afe_Set_Reg(AFE_MEMIF_HDALIGN, isAlign << 0, 1 << 0);
Afe_Set_Reg(AFE_MEMIF_HD_MODE, isHD << 0, 3 << 0);
break;
case Soc_Aud_Digital_Block_MEM_DL1_DATA2:
Afe_Set_Reg(AFE_MEMIF_HDALIGN, isAlign << 1, 1 << 1);
Afe_Set_Reg(AFE_MEMIF_HD_MODE, isHD << 2, 3 << 2);
break;
case Soc_Aud_Digital_Block_MEM_DL2:
Afe_Set_Reg(AFE_MEMIF_HDALIGN, isAlign << 2, 1 << 2);
Afe_Set_Reg(AFE_MEMIF_HD_MODE, isHD << 4, 3 << 4);
break;
case Soc_Aud_Digital_Block_MEM_DL3:
Afe_Set_Reg(AFE_MEMIF_HDALIGN, isAlign << 3, 1 << 3);
Afe_Set_Reg(AFE_MEMIF_HD_MODE, isHD << 6, 3 << 6);
break;
case Soc_Aud_Digital_Block_MEM_AWB:
Afe_Set_Reg(AFE_MEMIF_HDALIGN, isAlign << 4, 1 << 4);
Afe_Set_Reg(AFE_MEMIF_HD_MODE, isHD << 8, 3 << 8);
break;
case Soc_Aud_Digital_Block_MEM_VUL:
Afe_Set_Reg(AFE_MEMIF_HDALIGN, isAlign << 5, 1 << 5);
Afe_Set_Reg(AFE_MEMIF_HD_MODE, isHD << 10, 3 << 10);
break;
case Soc_Aud_Digital_Block_MEM_AWB2:
Afe_Set_Reg(AFE_MEMIF_HDALIGN, isAlign << 14, 1 << 14);
Afe_Set_Reg(AFE_MEMIF_HD_MODE, isHD << 28, 3 << 28);
break;
case Soc_Aud_Digital_Block_MEM_VUL2:
Afe_Set_Reg(AFE_MEMIF_HDALIGN, isAlign << 7, 1 << 7);
Afe_Set_Reg(AFE_MEMIF_HD_MODE, isHD << 14, 3 << 14);
break;
case Soc_Aud_Digital_Block_MEM_DAI:
Afe_Set_Reg(AFE_MEMIF_HDALIGN, isAlign << 8, 1 << 8);
Afe_Set_Reg(AFE_MEMIF_HD_MODE, isHD << 16, 3 << 16);
break;
case Soc_Aud_Digital_Block_MEM_MOD_DAI:
Afe_Set_Reg(AFE_MEMIF_HDALIGN, isAlign << 9, 1 << 9);
Afe_Set_Reg(AFE_MEMIF_HD_MODE, isHD << 18, 3 << 18);
break;
case Soc_Aud_Digital_Block_MEM_HDMI:
Afe_Set_Reg(AFE_MEMIF_HDALIGN, isAlign << 10, 1 << 10);
Afe_Set_Reg(AFE_MEMIF_HD_MODE, isHD << 20, 3 << 20);
break;
default:
return false;
}
return true;
}
ssize_t AudDrv_Reg_Dump(char *buffer, int size)
{
int n = 0;
pr_debug("mt_soc_debug_read\n");
n += scnprintf(buffer + n, size - n, "AUDIO_TOP_CON0 = 0x%x\n",
Afe_Get_Reg(AUDIO_TOP_CON0));
n += scnprintf(buffer + n, size - n, "AUDIO_TOP_CON1 = 0x%x\n",
Afe_Get_Reg(AUDIO_TOP_CON1));
n += scnprintf(buffer + n, size - n, "AUDIO_TOP_CON3 = 0x%x\n",
Afe_Get_Reg(AUDIO_TOP_CON3));
n += scnprintf(buffer + n, size - n, "AFE_DAC_CON0 = 0x%x\n",
Afe_Get_Reg(AFE_DAC_CON0));
n += scnprintf(buffer + n, size - n, "AFE_DAC_CON1 = 0x%x\n",
Afe_Get_Reg(AFE_DAC_CON1));
n += scnprintf(buffer + n, size - n, "AFE_HD_ENGEN_ENABLE = 0x%x\n",
Afe_Get_Reg(AFE_HD_ENGEN_ENABLE));
n += scnprintf(buffer + n, size - n, "AFE_I2S_CON = 0x%x\n",
Afe_Get_Reg(AFE_I2S_CON));
n += scnprintf(buffer + n, size - n, "AFE_DAIBT_CON0 = 0x%x\n",
Afe_Get_Reg(AFE_DAIBT_CON0));
n += scnprintf(buffer + n, size - n, "AFE_CONN0 = 0x%x\n",
Afe_Get_Reg(AFE_CONN0));
n += scnprintf(buffer + n, size - n, "AFE_CONN1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN1));
n += scnprintf(buffer + n, size - n, "AFE_CONN2 = 0x%x\n",
Afe_Get_Reg(AFE_CONN2));
n += scnprintf(buffer + n, size - n, "AFE_CONN3 = 0x%x\n",
Afe_Get_Reg(AFE_CONN3));
n += scnprintf(buffer + n, size - n, "AFE_CONN4 = 0x%x\n",
Afe_Get_Reg(AFE_CONN4));
n += scnprintf(buffer + n, size - n, "AFE_I2S_CON1 = 0x%x\n",
Afe_Get_Reg(AFE_I2S_CON1));
n += scnprintf(buffer + n, size - n, "AFE_I2S_CON2 = 0x%x\n",
Afe_Get_Reg(AFE_I2S_CON2));
n += scnprintf(buffer + n, size - n, "AFE_MRGIF_CON = 0x%x\n",
Afe_Get_Reg(AFE_MRGIF_CON));
n += scnprintf(buffer + n, size - n, "AFE_DL1_BASE = 0x%x\n",
Afe_Get_Reg(AFE_DL1_BASE));
n += scnprintf(buffer + n, size - n, "AFE_DL1_CUR = 0x%x\n",
Afe_Get_Reg(AFE_DL1_CUR));
n += scnprintf(buffer + n, size - n, "AFE_DL1_END = 0x%x\n",
Afe_Get_Reg(AFE_DL1_END));
n += scnprintf(buffer + n, size - n, "AFE_I2S_CON3 = 0x%x\n",
Afe_Get_Reg(AFE_I2S_CON3));
n += scnprintf(buffer + n, size - n, "AFE_DL2_BASE = 0x%x\n",
Afe_Get_Reg(AFE_DL2_BASE));
n += scnprintf(buffer + n, size - n, "AFE_DL2_CUR = 0x%x\n",
Afe_Get_Reg(AFE_DL2_CUR));
n += scnprintf(buffer + n, size - n, "AFE_DL2_END = 0x%x\n",
Afe_Get_Reg(AFE_DL2_END));
n += scnprintf(buffer + n, size - n, "AFE_CONN5 = 0x%x\n",
Afe_Get_Reg(AFE_CONN5));
n += scnprintf(buffer + n, size - n, "AFE_CONN_24BIT = 0x%x\n",
Afe_Get_Reg(AFE_CONN_24BIT));
n += scnprintf(buffer + n, size - n, "AFE_AWB_BASE = 0x%x\n",
Afe_Get_Reg(AFE_AWB_BASE));
n += scnprintf(buffer + n, size - n, "AFE_AWB_END = 0x%x\n",
Afe_Get_Reg(AFE_AWB_END));
n += scnprintf(buffer + n, size - n, "AFE_AWB_CUR = 0x%x\n",
Afe_Get_Reg(AFE_AWB_CUR));
n += scnprintf(buffer + n, size - n, "AFE_VUL_BASE = 0x%x\n",
Afe_Get_Reg(AFE_VUL_BASE));
n += scnprintf(buffer + n, size - n, "AFE_VUL_END = 0x%x\n",
Afe_Get_Reg(AFE_VUL_END));
n += scnprintf(buffer + n, size - n, "AFE_VUL_CUR = 0x%x\n",
Afe_Get_Reg(AFE_VUL_CUR));
n += scnprintf(buffer + n, size - n, "AFE_DAI_BASE = 0x%x\n",
Afe_Get_Reg(AFE_DAI_BASE));
n += scnprintf(buffer + n, size - n, "AFE_DAI_END = 0x%x\n",
Afe_Get_Reg(AFE_DAI_END));
n += scnprintf(buffer + n, size - n, "AFE_DAI_CUR = 0x%x\n",
Afe_Get_Reg(AFE_DAI_CUR));
n += scnprintf(buffer + n, size - n, "AFE_CONN6 = 0x%x\n",
Afe_Get_Reg(AFE_CONN6));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MSB = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MSB));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON0 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON0));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON1 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON1));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON2 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON2));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON3 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON3));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON4 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON4));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON5 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON5));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON6 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON6));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON7 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON7));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON8 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON8));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON9 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON9));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_DL_SRC2_CON0 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_DL_SRC2_CON0));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_DL_SRC2_CON1 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_DL_SRC2_CON1));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_UL_SRC_CON0 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_UL_SRC_CON0));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_UL_SRC_CON1 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_UL_SRC_CON1));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_TOP_CON0 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_TOP_CON0));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_UL_DL_CON0 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_UL_DL_CON0));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_SRC_DEBUG = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_SRC_DEBUG));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_SRC_DEBUG_MON0 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_SRC_DEBUG_MON0));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_SRC_DEBUG_MON1 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_SRC_DEBUG_MON1));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_UL_SRC_MON0 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_UL_SRC_MON0));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_UL_SRC_MON1 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_UL_SRC_MON1));
n += scnprintf(buffer + n, size - n, "AFE_SIDETONE_DEBUG = 0x%x\n",
Afe_Get_Reg(AFE_SIDETONE_DEBUG));
n += scnprintf(buffer + n, size - n, "AFE_SIDETONE_MON = 0x%x\n",
Afe_Get_Reg(AFE_SIDETONE_MON));
n += scnprintf(buffer + n, size - n, "AFE_SGEN_CON2 = 0x%x\n",
Afe_Get_Reg(AFE_SGEN_CON2));
n += scnprintf(buffer + n, size - n, "AFE_SIDETONE_CON0 = 0x%x\n",
Afe_Get_Reg(AFE_SIDETONE_CON0));
n += scnprintf(buffer + n, size - n, "AFE_SIDETONE_COEFF = 0x%x\n",
Afe_Get_Reg(AFE_SIDETONE_COEFF));
n += scnprintf(buffer + n, size - n, "AFE_SIDETONE_CON1 = 0x%x\n",
Afe_Get_Reg(AFE_SIDETONE_CON1));
n += scnprintf(buffer + n, size - n, "AFE_SIDETONE_GAIN = 0x%x\n",
Afe_Get_Reg(AFE_SIDETONE_GAIN));
n += scnprintf(buffer + n, size - n, "AFE_SGEN_CON0 = 0x%x\n",
Afe_Get_Reg(AFE_SGEN_CON0));
n += scnprintf(buffer + n, size - n, "AFE_TOP_CON0 = 0x%x\n",
Afe_Get_Reg(AFE_TOP_CON0));
n += scnprintf(buffer + n, size - n, "AFE_BUS_CFG = 0x%x\n",
Afe_Get_Reg(AFE_BUS_CFG));
n += scnprintf(buffer + n, size - n, "AFE_BUS_MON0 = 0x%x\n",
Afe_Get_Reg(AFE_BUS_MON0));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_PREDIS_CON0 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_PREDIS_CON0));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_PREDIS_CON1 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_PREDIS_CON1));
n += scnprintf(buffer + n, size - n, "AFE_MRGIF_MON0 = 0x%x\n",
Afe_Get_Reg(AFE_MRGIF_MON0));
n += scnprintf(buffer + n, size - n, "AFE_MRGIF_MON1 = 0x%x\n",
Afe_Get_Reg(AFE_MRGIF_MON1));
n += scnprintf(buffer + n, size - n, "AFE_MRGIF_MON2 = 0x%x\n",
Afe_Get_Reg(AFE_MRGIF_MON2));
n += scnprintf(buffer + n, size - n, "AFE_I2S_MON = 0x%x\n",
Afe_Get_Reg(AFE_I2S_MON));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_IIR_COEF_02_01 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_IIR_COEF_02_01));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_IIR_COEF_04_03 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_IIR_COEF_04_03));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_IIR_COEF_06_05 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_IIR_COEF_06_05));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_IIR_COEF_08_07 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_IIR_COEF_08_07));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_IIR_COEF_10_09 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_IIR_COEF_10_09));
n += scnprintf(buffer + n, size - n, "AFE_DAC_CON2 = 0x%x\n",
Afe_Get_Reg(AFE_DAC_CON2));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CON1 = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_CON1));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CON2 = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_CON2));
n += scnprintf(buffer + n, size - n, "AFE_DAC_MON = 0x%x\n",
Afe_Get_Reg(AFE_DAC_MON));
n += scnprintf(buffer + n, size - n, "AFE_VUL2_BASE = 0x%x\n",
Afe_Get_Reg(AFE_VUL2_BASE));
n += scnprintf(buffer + n, size - n, "AFE_VUL2_END = 0x%x\n",
Afe_Get_Reg(AFE_VUL2_END));
n += scnprintf(buffer + n, size - n, "AFE_VUL2_CUR = 0x%x\n",
Afe_Get_Reg(AFE_VUL2_CUR));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT0 = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_CNT0));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT6 = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_CNT6));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_EN1 = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_EN1));
n += scnprintf(buffer + n, size - n, "AFE_IRQ0_MCU_CNT_MON = 0x%x\n",
Afe_Get_Reg(AFE_IRQ0_MCU_CNT_MON));
n += scnprintf(buffer + n, size - n, "AFE_IRQ6_MCU_CNT_MON = 0x%x\n",
Afe_Get_Reg(AFE_IRQ6_MCU_CNT_MON));
n += scnprintf(buffer + n, size - n, "AFE_MOD_DAI_BASE = 0x%x\n",
Afe_Get_Reg(AFE_MOD_DAI_BASE));
n += scnprintf(buffer + n, size - n, "AFE_MOD_DAI_END = 0x%x\n",
Afe_Get_Reg(AFE_MOD_DAI_END));
n += scnprintf(buffer + n, size - n, "AFE_MOD_DAI_CUR = 0x%x\n",
Afe_Get_Reg(AFE_MOD_DAI_CUR));
n += scnprintf(buffer + n, size - n, "AFE_IRQ3_MCU_CNT_MON = 0x%x\n",
Afe_Get_Reg(AFE_IRQ3_MCU_CNT_MON));
n += scnprintf(buffer + n, size - n, "AFE_IRQ4_MCU_CNT_MON = 0x%x\n",
Afe_Get_Reg(AFE_IRQ4_MCU_CNT_MON));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CON0 = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_CON0));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_STATUS = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_STATUS));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CLR = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_CLR));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT1 = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_CNT1));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT2 = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_CNT2));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_EN = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_EN));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_MON2 = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_MON2));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT5 = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_CNT5));
n += scnprintf(buffer + n, size - n, "AFE_IRQ1_MCU_CNT_MON = 0x%x\n",
Afe_Get_Reg(AFE_IRQ1_MCU_CNT_MON));
n += scnprintf(buffer + n, size - n, "AFE_IRQ2_MCU_CNT_MON = 0x%x\n",
Afe_Get_Reg(AFE_IRQ2_MCU_CNT_MON));
n += scnprintf(buffer + n, size - n, "AFE_IRQ1_MCU_EN_CNT_MON = 0x%x\n",
Afe_Get_Reg(AFE_IRQ1_MCU_EN_CNT_MON));
n += scnprintf(buffer + n, size - n, "AFE_IRQ5_MCU_CNT_MON = 0x%x\n",
Afe_Get_Reg(AFE_IRQ5_MCU_CNT_MON));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MINLEN = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MINLEN));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MAXLEN = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MAXLEN));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_PBUF_SIZE = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_PBUF_SIZE));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT7 = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_CNT7));
n += scnprintf(buffer + n, size - n, "AFE_IRQ7_MCU_CNT_MON = 0x%x\n",
Afe_Get_Reg(AFE_IRQ7_MCU_CNT_MON));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT3 = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_CNT3));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT4 = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_CNT4));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT11 = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_CNT11));
n += scnprintf(buffer + n, size - n, "AFE_APLL1_TUNER_CFG = 0x%x\n",
Afe_Get_Reg(AFE_APLL1_TUNER_CFG));
n += scnprintf(buffer + n, size - n, "AFE_APLL2_TUNER_CFG = 0x%x\n",
Afe_Get_Reg(AFE_APLL2_TUNER_CFG));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_HD_MODE = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_HD_MODE));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_HDALIGN = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_HDALIGN));
n += scnprintf(buffer + n, size - n, "AFE_CONN33 = 0x%x\n",
Afe_Get_Reg(AFE_CONN33));
n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT12 = 0x%x\n",
Afe_Get_Reg(AFE_IRQ_MCU_CNT12));
n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CON0 = 0x%x\n",
Afe_Get_Reg(AFE_GAIN1_CON0));
n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CON1 = 0x%x\n",
Afe_Get_Reg(AFE_GAIN1_CON1));
n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CON2 = 0x%x\n",
Afe_Get_Reg(AFE_GAIN1_CON2));
n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CON3 = 0x%x\n",
Afe_Get_Reg(AFE_GAIN1_CON3));
n += scnprintf(buffer + n, size - n, "AFE_CONN7 = 0x%x\n",
Afe_Get_Reg(AFE_CONN7));
n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CUR = 0x%x\n",
Afe_Get_Reg(AFE_GAIN1_CUR));
n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CON0 = 0x%x\n",
Afe_Get_Reg(AFE_GAIN2_CON0));
n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CON1 = 0x%x\n",
Afe_Get_Reg(AFE_GAIN2_CON1));
n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CON2 = 0x%x\n",
Afe_Get_Reg(AFE_GAIN2_CON2));
n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CON3 = 0x%x\n",
Afe_Get_Reg(AFE_GAIN2_CON3));
n += scnprintf(buffer + n, size - n, "AFE_CONN8 = 0x%x\n",
Afe_Get_Reg(AFE_CONN8));
n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CUR = 0x%x\n",
Afe_Get_Reg(AFE_GAIN2_CUR));
n += scnprintf(buffer + n, size - n, "AFE_CONN9 = 0x%x\n",
Afe_Get_Reg(AFE_CONN9));
n += scnprintf(buffer + n, size - n, "AFE_CONN10 = 0x%x\n",
Afe_Get_Reg(AFE_CONN10));
n += scnprintf(buffer + n, size - n, "AFE_CONN11 = 0x%x\n",
Afe_Get_Reg(AFE_CONN11));
n += scnprintf(buffer + n, size - n, "AFE_CONN12 = 0x%x\n",
Afe_Get_Reg(AFE_CONN12));
n += scnprintf(buffer + n, size - n, "AFE_CONN13 = 0x%x\n",
Afe_Get_Reg(AFE_CONN13));
n += scnprintf(buffer + n, size - n, "AFE_CONN14 = 0x%x\n",
Afe_Get_Reg(AFE_CONN14));
n += scnprintf(buffer + n, size - n, "AFE_CONN15 = 0x%x\n",
Afe_Get_Reg(AFE_CONN15));
n += scnprintf(buffer + n, size - n, "AFE_CONN16 = 0x%x\n",
Afe_Get_Reg(AFE_CONN16));
n += scnprintf(buffer + n, size - n, "AFE_CONN17 = 0x%x\n",
Afe_Get_Reg(AFE_CONN17));
n += scnprintf(buffer + n, size - n, "AFE_CONN18 = 0x%x\n",
Afe_Get_Reg(AFE_CONN18));
n += scnprintf(buffer + n, size - n, "AFE_CONN21 = 0x%x\n",
Afe_Get_Reg(AFE_CONN21));
n += scnprintf(buffer + n, size - n, "AFE_CONN22 = 0x%x\n",
Afe_Get_Reg(AFE_CONN22));
n += scnprintf(buffer + n, size - n, "AFE_CONN23 = 0x%x\n",
Afe_Get_Reg(AFE_CONN23));
n += scnprintf(buffer + n, size - n, "AFE_CONN24 = 0x%x\n",
Afe_Get_Reg(AFE_CONN24));
n += scnprintf(buffer + n, size - n, "AFE_CONN_RS = 0x%x\n",
Afe_Get_Reg(AFE_CONN_RS));
n += scnprintf(buffer + n, size - n, "AFE_CONN_DI = 0x%x\n",
Afe_Get_Reg(AFE_CONN_DI));
n += scnprintf(buffer + n, size - n, "AFE_CONN25 = 0x%x\n",
Afe_Get_Reg(AFE_CONN25));
n += scnprintf(buffer + n, size - n, "AFE_CONN26 = 0x%x\n",
Afe_Get_Reg(AFE_CONN26));
n += scnprintf(buffer + n, size - n, "AFE_CONN27 = 0x%x\n",
Afe_Get_Reg(AFE_CONN27));
n += scnprintf(buffer + n, size - n, "AFE_CONN28 = 0x%x\n",
Afe_Get_Reg(AFE_CONN28));
n += scnprintf(buffer + n, size - n, "AFE_CONN29 = 0x%x\n",
Afe_Get_Reg(AFE_CONN29));
n += scnprintf(buffer + n, size - n, "AFE_CONN30 = 0x%x\n",
Afe_Get_Reg(AFE_CONN30));
n += scnprintf(buffer + n, size - n, "AFE_CONN31 = 0x%x\n",
Afe_Get_Reg(AFE_CONN31));
n += scnprintf(buffer + n, size - n, "AFE_CONN32 = 0x%x\n",
Afe_Get_Reg(AFE_CONN32));
n += scnprintf(buffer + n, size - n, "AFE_SRAM_DELSEL_CON0 = 0x%x\n",
Afe_Get_Reg(AFE_SRAM_DELSEL_CON0));
n += scnprintf(buffer + n, size - n, "AFE_SRAM_DELSEL_CON2 = 0x%x\n",
Afe_Get_Reg(AFE_SRAM_DELSEL_CON2));
n += scnprintf(buffer + n, size - n, "AFE_SRAM_DELSEL_CON3 = 0x%x\n",
Afe_Get_Reg(AFE_SRAM_DELSEL_CON3));
n += scnprintf(buffer + n, size - n, "AFE_ASRC_2CH_CON12 = 0x%x\n",
Afe_Get_Reg(AFE_ASRC_2CH_CON12));
n += scnprintf(buffer + n, size - n, "AFE_ASRC_2CH_CON13 = 0x%x\n",
Afe_Get_Reg(AFE_ASRC_2CH_CON13));
n += scnprintf(buffer + n, size - n, "PCM_INTF_CON1 = 0x%x\n",
Afe_Get_Reg(PCM_INTF_CON1));
n += scnprintf(buffer + n, size - n, "PCM_INTF_CON2 = 0x%x\n",
Afe_Get_Reg(PCM_INTF_CON2));
n += scnprintf(buffer + n, size - n, "PCM2_INTF_CON = 0x%x\n",
Afe_Get_Reg(PCM2_INTF_CON));
n += scnprintf(buffer + n, size - n, "AFE_CONN34 = 0x%x\n",
Afe_Get_Reg(AFE_CONN34));
#ifdef CONFIG_FPGA_EARLY_PORTING
n += scnprintf(buffer + n, size - n, "FPGA_CFG0 = 0x%x\n",
Afe_Get_Reg(FPGA_CFG0));
n += scnprintf(buffer + n, size - n, "FPGA_CFG1 = 0x%x\n",
Afe_Get_Reg(FPGA_CFG1));
n += scnprintf(buffer + n, size - n, "FPGA_CFG2 = 0x%x\n",
Afe_Get_Reg(FPGA_CFG2));
n += scnprintf(buffer + n, size - n, "FPGA_CFG3 = 0x%x\n",
Afe_Get_Reg(FPGA_CFG3));
#endif
n += scnprintf(buffer + n, size - n, "AFE_IRQ8_MCU_CNT_MON = 0x%x\n",
Afe_Get_Reg(AFE_IRQ8_MCU_CNT_MON));
n += scnprintf(buffer + n, size - n, "AFE_IRQ11_MCU_CNT_MON = 0x%x\n",
Afe_Get_Reg(AFE_IRQ11_MCU_CNT_MON));
n += scnprintf(buffer + n, size - n, "AFE_IRQ12_MCU_CNT_MON = 0x%x\n",
Afe_Get_Reg(AFE_IRQ12_MCU_CNT_MON));
n += scnprintf(buffer + n, size - n, "AFE_CBIP_CFG0 = 0x%x\n",
Afe_Get_Reg(AFE_CBIP_CFG0));
n += scnprintf(buffer + n, size - n, "AFE_CBIP_MON0 = 0x%x\n",
Afe_Get_Reg(AFE_CBIP_MON0));
n += scnprintf(buffer + n, size - n, "AFE_CBIP_SLV_MUX_MON0 = 0x%x\n",
Afe_Get_Reg(AFE_CBIP_SLV_MUX_MON0));
n += scnprintf(buffer + n, size - n,
"AFE_CBIP_SLV_DECODER_MON0 = 0x%x\n",
Afe_Get_Reg(AFE_CBIP_SLV_DECODER_MON0));
n += scnprintf(buffer + n, size - n, "AFE_DAI2_CUR = 0x%x\n",
Afe_Get_Reg(AFE_DAI2_CUR));
n += scnprintf(buffer + n, size - n, "AFE_DAI2_CUR_MSB = 0x%x\n",
Afe_Get_Reg(AFE_DAI2_CUR_MSB));
n += scnprintf(buffer + n, size - n, "AFE_CONN0_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN0_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN1_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN1_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN2_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN2_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN3_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN3_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN4_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN4_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN5_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN5_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN6_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN6_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN7_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN7_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN8_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN8_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN9_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN9_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN10_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN10_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN11_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN11_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN12_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN12_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN13_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN13_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN14_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN14_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN15_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN15_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN16_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN16_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN17_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN17_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN18_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN18_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN21_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN21_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN22_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN22_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN23_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN23_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN24_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN24_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN25_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN25_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN26_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN26_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN27_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN27_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN28_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN28_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN29_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN29_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN30_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN30_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN31_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN31_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN32_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN32_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN33_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN33_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN34_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN34_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN_RS_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN_RS_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN_DI_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN_DI_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN_24BIT_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN_24BIT_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN_REG = 0x%x\n",
Afe_Get_Reg(AFE_CONN_REG));
n += scnprintf(buffer + n, size - n, "AFE_CONN35 = 0x%x\n",
Afe_Get_Reg(AFE_CONN35));
n += scnprintf(buffer + n, size - n, "AFE_CONN36 = 0x%x\n",
Afe_Get_Reg(AFE_CONN36));
n += scnprintf(buffer + n, size - n, "AFE_CONN37 = 0x%x\n",
Afe_Get_Reg(AFE_CONN37));
n += scnprintf(buffer + n, size - n, "AFE_CONN38 = 0x%x\n",
Afe_Get_Reg(AFE_CONN38));
n += scnprintf(buffer + n, size - n, "AFE_CONN35_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN35_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN36_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN36_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN37_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN37_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN38_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN38_1));
n += scnprintf(buffer + n, size - n, "AFE_CONN39 = 0x%x\n",
Afe_Get_Reg(AFE_CONN39));
n += scnprintf(buffer + n, size - n, "AFE_CONN39_1 = 0x%x\n",
Afe_Get_Reg(AFE_CONN39_1));
n += scnprintf(buffer + n, size - n, "AFE_DL1_BASE_MSB = 0x%x\n",
Afe_Get_Reg(AFE_DL1_BASE_MSB));
n += scnprintf(buffer + n, size - n, "AFE_DL1_CUR_MSB = 0x%x\n",
Afe_Get_Reg(AFE_DL1_CUR_MSB));
n += scnprintf(buffer + n, size - n, "AFE_DL1_END_MSB = 0x%x\n",
Afe_Get_Reg(AFE_DL1_END_MSB));
n += scnprintf(buffer + n, size - n, "AFE_DL2_BASE_MSB = 0x%x\n",
Afe_Get_Reg(AFE_DL2_BASE_MSB));
n += scnprintf(buffer + n, size - n, "AFE_DL2_CUR_MSB = 0x%x\n",
Afe_Get_Reg(AFE_DL2_CUR_MSB));
n += scnprintf(buffer + n, size - n, "AFE_DL2_END_MSB = 0x%x\n",
Afe_Get_Reg(AFE_DL2_END_MSB));
n += scnprintf(buffer + n, size - n, "AFE_AWB_BASE_MSB = 0x%x\n",
Afe_Get_Reg(AFE_AWB_BASE_MSB));
n += scnprintf(buffer + n, size - n, "AFE_AWB_END_MSB = 0x%x\n",
Afe_Get_Reg(AFE_AWB_END_MSB));
n += scnprintf(buffer + n, size - n, "AFE_AWB_CUR_MSB = 0x%x\n",
Afe_Get_Reg(AFE_AWB_CUR_MSB));
n += scnprintf(buffer + n, size - n, "AFE_VUL_BASE_MSB = 0x%x\n",
Afe_Get_Reg(AFE_VUL_BASE_MSB));
n += scnprintf(buffer + n, size - n, "AFE_VUL_END_MSB = 0x%x\n",
Afe_Get_Reg(AFE_VUL_END_MSB));
n += scnprintf(buffer + n, size - n, "AFE_VUL_CUR_MSB = 0x%x\n",
Afe_Get_Reg(AFE_VUL_CUR_MSB));
n += scnprintf(buffer + n, size - n, "AFE_DAI_BASE_MSB = 0x%x\n",
Afe_Get_Reg(AFE_DAI_BASE_MSB));
n += scnprintf(buffer + n, size - n, "AFE_DAI_END_MSB = 0x%x\n",
Afe_Get_Reg(AFE_DAI_END_MSB));
n += scnprintf(buffer + n, size - n, "AFE_DAI_CUR_MSB = 0x%x\n",
Afe_Get_Reg(AFE_DAI_CUR_MSB));
n += scnprintf(buffer + n, size - n, "AFE_VUL2_BASE_MSB = 0x%x\n",
Afe_Get_Reg(AFE_VUL2_BASE_MSB));
n += scnprintf(buffer + n, size - n, "AFE_VUL2_END_MSB = 0x%x\n",
Afe_Get_Reg(AFE_VUL2_END_MSB));
n += scnprintf(buffer + n, size - n, "AFE_VUL2_CUR_MSB = 0x%x\n",
Afe_Get_Reg(AFE_VUL2_CUR_MSB));
n += scnprintf(buffer + n, size - n, "AFE_MOD_DAI_BASE_MSB = 0x%x\n",
Afe_Get_Reg(AFE_MOD_DAI_BASE_MSB));
n += scnprintf(buffer + n, size - n, "AFE_MOD_DAI_END_MSB = 0x%x\n",
Afe_Get_Reg(AFE_MOD_DAI_END_MSB));
n += scnprintf(buffer + n, size - n, "AFE_MOD_DAI_CUR_MSB = 0x%x\n",
Afe_Get_Reg(AFE_MOD_DAI_CUR_MSB));
n += scnprintf(buffer + n, size - n, "AFE_AWB2_BASE = 0x%x\n",
Afe_Get_Reg(AFE_AWB2_BASE));
n += scnprintf(buffer + n, size - n, "AFE_AWB2_END = 0x%x\n",
Afe_Get_Reg(AFE_AWB2_END));
n += scnprintf(buffer + n, size - n, "AFE_AWB2_CUR = 0x%x\n",
Afe_Get_Reg(AFE_AWB2_CUR));
n += scnprintf(buffer + n, size - n, "AFE_AWB2_BASE_MSB = 0x%x\n",
Afe_Get_Reg(AFE_AWB2_BASE_MSB));
n += scnprintf(buffer + n, size - n, "AFE_AWB2_END_MSB = 0x%x\n",
Afe_Get_Reg(AFE_AWB2_END_MSB));
n += scnprintf(buffer + n, size - n, "AFE_AWB2_CUR_MSB = 0x%x\n",
Afe_Get_Reg(AFE_AWB2_CUR_MSB));
n += scnprintf(buffer + n, size - n,
"AFE_ADDA_DL_SDM_DCCOMP_CON = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_DL_SDM_DCCOMP_CON));
n += scnprintf(buffer + n, size - n,
"AFE_ADDA_DL_SDM_TEST = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_DL_SDM_TEST));
n += scnprintf(buffer + n, size - n,
"AFE_ADDA_DL_DC_COMP_CFG0 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_DL_DC_COMP_CFG0));
n += scnprintf(buffer + n, size - n,
"AFE_ADDA_DL_DC_COMP_CFG1 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_DL_DC_COMP_CFG1));
n += scnprintf(buffer + n, size - n,
"AFE_ADDA_DL_SDM_FIFO_MON = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_DL_SDM_FIFO_MON));
n += scnprintf(buffer + n, size - n,
"AFE_ADDA_DL_SRC_LCH_MON = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_DL_SRC_LCH_MON));
n += scnprintf(buffer + n, size - n,
"AFE_ADDA_DL_SRC_RCH_MON = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_DL_SRC_RCH_MON));
n += scnprintf(buffer + n, size - n,
"AFE_ADDA_DL_SDM_OUT_MON = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_DL_SDM_OUT_MON));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_PREDIS_CON2 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_PREDIS_CON2));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_PREDIS_CON3 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_PREDIS_CON3));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON12 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON12));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON13 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON13));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON14 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON14));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON15 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON15));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON16 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON16));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON17 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON17));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON18 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON18));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON19 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON19));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON20 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON20));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON21 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON21));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON22 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON22));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON23 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON23));
n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON24 = 0x%x\n",
Afe_Get_Reg(AFE_MEMIF_MON24));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_MTKAIF_CFG0 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_MTKAIF_CFG0));
n += scnprintf(buffer + n, size - n,
"AFE_ADDA_MTKAIF_TX_CFG1 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_MTKAIF_TX_CFG1));
n += scnprintf(buffer + n, size - n,
"AFE_ADDA_MTKAIF_RX_CFG0 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_MTKAIF_RX_CFG0));
n += scnprintf(buffer + n, size - n,
"AFE_ADDA_MTKAIF_RX_CFG1 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_MTKAIF_RX_CFG1));
n += scnprintf(buffer + n, size - n,
"AFE_ADDA_MTKAIF_RX_CFG2 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_MTKAIF_RX_CFG2));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_MTKAIF_MON0 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_MTKAIF_MON0));
n += scnprintf(buffer + n, size - n, "AFE_ADDA_MTKAIF_MON1 = 0x%x\n",
Afe_Get_Reg(AFE_ADDA_MTKAIF_MON1));
n += scnprintf(buffer + n, size - n, "AFE_AUD_PAD_TOP_CFG = 0x%x\n",
Afe_Get_Reg(AFE_AUD_PAD_TOP_CFG));
n += scnprintf(buffer + n, size - n, "AFE_CONNSYS_I2S_CON = 0x%x\n",
Afe_Get_Reg(AFE_CONNSYS_I2S_CON));
n += scnprintf(buffer + n, size - n, "AFE_CONNSYS_I2S_MON = 0x%x\n",
Afe_Get_Reg(AFE_CONNSYS_I2S_MON));
n += scnprintf(buffer + n, size - n, "AFE_ASRC_CONNSYS_CON0 = 0x%x\n",
Afe_Get_Reg(AFE_ASRC_CONNSYS_CON0));
n += scnprintf(buffer + n, size - n, "AFE_ASRC_2CH_CON1 = 0x%x\n",
Afe_Get_Reg(AFE_ASRC_2CH_CON1));
n += scnprintf(buffer + n, size - n, "AFE_ASRC_CONNSYS_CON13 = 0x%x\n",
Afe_Get_Reg(AFE_ASRC_CONNSYS_CON13));
n += scnprintf(buffer + n, size - n, "AFE_ASRC_CONNSYS_CON14 = 0x%x\n",
Afe_Get_Reg(AFE_ASRC_CONNSYS_CON14));
n += scnprintf(buffer + n, size - n, "AFE_ASRC_CONNSYS_CON15 = 0x%x\n",
Afe_Get_Reg(AFE_ASRC_CONNSYS_CON15));
n += scnprintf(buffer + n, size - n, "AFE_ASRC_CONNSYS_CON16 = 0x%x\n",
Afe_Get_Reg(AFE_ASRC_CONNSYS_CON16));
n += scnprintf(buffer + n, size - n, "AFE_ASRC_CONNSYS_CON17 = 0x%x\n",
Afe_Get_Reg(AFE_ASRC_CONNSYS_CON17));
n += scnprintf(buffer + n, size - n, "AFE_ASRC_CONNSYS_CON18 = 0x%x\n",
Afe_Get_Reg(AFE_ASRC_CONNSYS_CON18));
n += scnprintf(buffer + n, size - n, "AFE_ASRC_CONNSYS_CON19 = 0x%x\n",
Afe_Get_Reg(AFE_ASRC_CONNSYS_CON19));
n += scnprintf(buffer + n, size - n, "AFE_ASRC_CONNSYS_CON20 = 0x%x\n",
Afe_Get_Reg(AFE_ASRC_CONNSYS_CON20));
n += scnprintf(buffer + n, size - n, "AFE_ASRC_CONNSYS_CON21 = 0x%x\n",
Afe_Get_Reg(AFE_ASRC_CONNSYS_CON21));
n += scnprintf(buffer + n, size - n, "AP_PLL_CON3 = 0x%x\n",
GetApmixedCfg(AP_PLL_CON3));
return n;
}
bool SetFmI2sConnection(unsigned int ConnectionState)
{
SetIntfConnection(ConnectionState, Soc_Aud_AFE_IO_Block_I2S_CONNSYS,
Soc_Aud_AFE_IO_Block_HW_GAIN1_OUT);
SetIntfConnection(ConnectionState, Soc_Aud_AFE_IO_Block_HW_GAIN1_IN,
Soc_Aud_AFE_IO_Block_I2S1_DAC);
SetIntfConnection(ConnectionState, Soc_Aud_AFE_IO_Block_HW_GAIN1_IN,
Soc_Aud_AFE_IO_Block_I2S1_DAC_2);
SetIntfConnection(ConnectionState, Soc_Aud_AFE_IO_Block_HW_GAIN1_IN,
Soc_Aud_AFE_IO_Block_I2S3);
return true;
}
bool SetFmAwbConnection(unsigned int ConnectionState)
{
#ifdef CONFIG_MTK_TC10_FEATURE
SetIntfConnection(ConnectionState, Soc_Aud_AFE_IO_Block_I2S_CONNSYS,
Soc_Aud_AFE_IO_Block_HW_GAIN2_OUT);
SetIntfConnection(ConnectionState, Soc_Aud_AFE_IO_Block_HW_GAIN2_IN,
Soc_Aud_AFE_IO_Block_MEM_VUL2);
#else
SetIntfConnection(ConnectionState, Soc_Aud_AFE_IO_Block_I2S_CONNSYS,
Soc_Aud_AFE_IO_Block_MEM_VUL2);
#endif
return true;
}
int SetFmI2sInEnable(bool enable)
{
return setConnsysI2SInEnable(enable);
}
int SetFmI2sIn(struct audio_digital_i2s *mDigitalI2S)
{
return setConnsysI2SIn(mDigitalI2S);
}
bool GetFmI2sInPathEnable(void)
{
return GetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_IN_CONNSYS);
}
bool SetFmI2sInPathEnable(bool bEnable)
{
return SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_IN_CONNSYS,
bEnable);
}
int SetFmI2sAsrcEnable(bool enable)
{
return setConnsysI2SEnable(enable);
}
int SetFmI2sAsrcConfig(bool bIsUseASRC, unsigned int dToSampleRate)
{
return setConnsysI2SAsrc(bIsUseASRC, dToSampleRate);
}
bool SetAncRecordReg(unsigned int value, unsigned int mask)
{
return false;
}
const struct Aud_IRQ_CTRL_REG *
GetIRQCtrlReg(enum Soc_Aud_IRQ_MCU_MODE irqIndex)
{
return &mIRQCtrlRegs[irqIndex];
}
const struct Aud_RegBitsInfo *
GetIRQPurposeReg(enum Soc_Aud_IRQ_PURPOSE irqPurpose)
{
return &mIRQPurposeRegs[irqPurpose];
}
const unsigned int GetBufferCtrlReg(enum soc_aud_afe_io_block memif_type,
enum aud_buffer_ctrl_info buffer_ctrl)
{
if (!afe_buffer_regs[memif_type][buffer_ctrl])
pr_debug("%s, invalid afe_buffer_regs, memif: %d, buffer_ctrl: %d",
__func__, memif_type, buffer_ctrl);
return afe_buffer_regs[memif_type][buffer_ctrl];
}
/*Irq handler function array*/
static void Aud_IRQ1_Handler(void)
{
if (GetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_DL1) &&
is_irq_from_ext_module() == false)
Auddrv_DL1_Interrupt_Handler();
if (GetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_DL2))
Auddrv_DL2_Interrupt_Handler();
}
static void Aud_IRQ2_Handler(void)
{
if (GetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_VUL))
Auddrv_UL1_Interrupt_Handler();
if (GetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_AWB))
Auddrv_AWB_Interrupt_Handler();
if (GetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_DAI))
Auddrv_DAI_Interrupt_Handler();
if (GetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_VUL_DATA2))
Auddrv_UL2_Interrupt_Handler();
if (GetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_MOD_DAI))
Auddrv_MOD_DAI_Interrupt_Handler();
if (GetMemoryPathEnable(Soc_Aud_Digital_Block_MEM_VUL2))
Auddrv_VUL2_Interrupt_Handler();
}
static void (*Aud_IRQ_Handler_Funcs[Soc_Aud_IRQ_MCU_MODE_NUM])(void) = {
NULL,
Aud_IRQ1_Handler,
Aud_IRQ2_Handler,
NULL,
NULL,
NULL,
NULL,
NULL, /* Reserved */
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
};
void RunIRQHandler(enum Soc_Aud_IRQ_MCU_MODE irqIndex)
{
if (Aud_IRQ_Handler_Funcs[irqIndex] != NULL)
Aud_IRQ_Handler_Funcs[irqIndex]();
else
pr_debug("%s(), Aud_IRQ%d_Handler is Null", __func__, irqIndex);
}
enum Soc_Aud_IRQ_MCU_MODE
irq_request_number(enum soc_aud_digital_block mem_block)
{
switch (mem_block) {
case Soc_Aud_Digital_Block_MEM_DL1:
case Soc_Aud_Digital_Block_MEM_DL2:
return Soc_Aud_IRQ_MCU_MODE_IRQ1_MCU_MODE;
case Soc_Aud_Digital_Block_MEM_VUL:
case Soc_Aud_Digital_Block_MEM_AWB:
case Soc_Aud_Digital_Block_MEM_DAI:
case Soc_Aud_Digital_Block_MEM_MOD_DAI:
case Soc_Aud_Digital_Block_MEM_VUL_DATA2:
case Soc_Aud_Digital_Block_MEM_VUL2:
case Soc_Aud_Digital_Block_MEM_AWB2:
return Soc_Aud_IRQ_MCU_MODE_IRQ2_MCU_MODE;
default:
pr_debug("%s, can't request irq_num by this mem_block = %d",
__func__, mem_block);
AUDIO_ASSERT(0);
return Soc_Aud_IRQ_MCU_MODE_IRQ1_MCU_MODE;
}
}
bool IsNeedToSetHighAddr(bool usingdram, dma_addr_t addr)
{
return false;
}
bool SetHighAddr(enum soc_aud_digital_block MemBlock, bool usingdram,
dma_addr_t addr)
{
/* TODO: need check how Vinson support 34 bit */
return true;
}
int get_usage_digital_block(enum audio_usage_id id)
{
switch (id) {
case AUDIO_USAGE_PCM_CAPTURE:
return Soc_Aud_Digital_Block_MEM_VUL;
case AUDIO_USAGE_SCP_SPK_IV_DATA:
return Soc_Aud_Digital_Block_MEM_AWB2;
case AUDIO_USAGE_DEEPBUFFER_PLAYBACK:
return Soc_Aud_Digital_Block_MEM_DL2;
case AUDIO_USAGE_FM_CAPTURE:
return Soc_Aud_Digital_Block_MEM_VUL2;
default:
pr_debug("%s(), not defined id %d\n", __func__, id);
return -EINVAL;
};
}
int get_usage_digital_block_io(enum audio_usage_id id)
{
switch (id) {
case AUDIO_USAGE_PCM_CAPTURE:
return Soc_Aud_AFE_IO_Block_MEM_VUL;
case AUDIO_USAGE_SCP_SPK_IV_DATA:
return Soc_Aud_AFE_IO_Block_MEM_AWB2;
case AUDIO_USAGE_DEEPBUFFER_PLAYBACK:
return Soc_Aud_AFE_IO_Block_MEM_DL2;
default:
pr_debug("%s(), not defined id %d\n", __func__, id);
return -EINVAL;
};
}
void SetSdmLevel(unsigned int level)
{
Afe_Set_Reg(AFE_ADDA_DL_SDM_DCCOMP_CON, level, 0x3f);
}
enum audio_sram_mode get_prefer_sram_mode(void)
{
return audio_sram_compact_mode;
}
int set_sram_mode(enum audio_sram_mode sram_mode)
{
if (sram_mode == audio_sram_compact_mode) {
/* all memif use compact mode */
Afe_Set_Reg(AFE_MEMIF_HDALIGN, 0x0 << 16, 0x7fff << 16);
/* cpu use compact mode when access sram data */
Afe_Set_Reg(AFE_MEMIF_MSB, 1 << 29, 1 << 29);
} else {
/* all memif use normal mode */
Afe_Set_Reg(AFE_MEMIF_HDALIGN, 0x7fff << 16, 0x7fff << 16);
/* cpu use normal mode when access sram data */
Afe_Set_Reg(AFE_MEMIF_MSB, 0 << 29, 1 << 29);
}
return 0;
}
/* mtk_codec_ops */
static int enable_dc_compensation(bool enable)
{
Afe_Set_Reg(AFE_ADDA_DL_SDM_DCCOMP_CON,
(enable ? 1 : 0) << 8,
0x1 << 8);
return 0;
}
static int set_lch_dc_compensation(int value)
{
Afe_Set_Reg(AFE_ADDA_DL_DC_COMP_CFG0, value, MASK_ALL);
return 0;
}
static int set_rch_dc_compensation(int value)
{
Afe_Set_Reg(AFE_ADDA_DL_DC_COMP_CFG1, value, MASK_ALL);
return 0;
}
static int set_ap_dmic(bool enable)
{
if (enable) {
if (GetMemoryPathEnable(Soc_Aud_Digital_Block_ADDA_UL)) {
set_adc_enable(false);
/* mtkaif_rxif_data_mode = 1, dmic */
Afe_Set_Reg(AFE_ADDA_MTKAIF_RX_CFG0, 0x1, 0x1);
/* dmic mode, 3.25M*/
Afe_Set_Reg(AFE_ADDA_MTKAIF_RX_CFG0, 0x0, 0xf << 20);
Afe_Set_Reg(AFE_ADDA_UL_SRC_CON0, 0x0, 0x1 << 5);
Afe_Set_Reg(AFE_ADDA_UL_SRC_CON0, 0x0, 0x3 << 14);
/* turn on dmic, ch1, ch2 */
Afe_Set_Reg(AFE_ADDA_UL_SRC_CON0, 0x1 << 1, 0x1 << 1);
Afe_Set_Reg(AFE_ADDA_UL_SRC_CON0, 0x3 << 21, 0x3 << 21);
set_adc_enable(true);
}
}
return 0;
}
static int set_hp_impedance_ctl(bool enable)
{
/* open adda dl path for dc compensation */
if (enable) {
AudDrv_Clk_On();
if (GetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_DAC) ==
false) {
SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_DAC,
true);
SetI2SDacOut(48000, false,
Soc_Aud_I2S_WLEN_WLEN_32BITS);
SetI2SDacEnable(true);
} else {
SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_DAC,
true);
}
/* set data mute */
set_adda_dl_src_gain(true);
EnableAfe(true);
} else {
/* unmute data */
set_adda_dl_src_gain(false);
/* stop DAC output */
SetMemoryPathEnable(Soc_Aud_Digital_Block_I2S_OUT_DAC, false);
if (GetI2SDacEnable() == false)
SetI2SDacEnable(false);
EnableAfe(false);
AudDrv_Clk_Off();
}
return 0;
}
bool set_chip_sine_gen_enable(unsigned int connection, bool direction,
bool Enable)
{
pr_debug("+%s(), connection = %d, direction = %d, Enable= %d\n",
__func__, connection, direction, Enable);
if (Enable && direction) {
Afe_Set_Reg(AFE_SGEN_CON0, 0x04AC2AC1, 0xffffffff);
switch (connection) {
case Soc_Aud_InterConnectionInput_I00:
case Soc_Aud_InterConnectionInput_I01:
Afe_Set_Reg(AFE_SGEN_CON2, 0x0, 0x3f);
break;
case Soc_Aud_InterConnectionInput_I02:
Afe_Set_Reg(AFE_SGEN_CON2, 0x1, 0x3f);
break;
case Soc_Aud_InterConnectionInput_I03:
case Soc_Aud_InterConnectionInput_I04:
Afe_Set_Reg(AFE_SGEN_CON2, 0x2, 0x3f);
break;
case Soc_Aud_InterConnectionInput_I05:
case Soc_Aud_InterConnectionInput_I06:
Afe_Set_Reg(AFE_SGEN_CON2, 0x3, 0x3f);
break;
case Soc_Aud_InterConnectionInput_I07:
case Soc_Aud_InterConnectionInput_I08:
Afe_Set_Reg(AFE_SGEN_CON2, 0x4, 0x3f);
break;
case Soc_Aud_InterConnectionInput_I09:
Afe_Set_Reg(AFE_SGEN_CON2, 0x5, 0x3f);
case Soc_Aud_InterConnectionInput_I10:
case Soc_Aud_InterConnectionInput_I11:
Afe_Set_Reg(AFE_SGEN_CON2, 0x6, 0x3f);
break;
case Soc_Aud_InterConnectionInput_I12:
case Soc_Aud_InterConnectionInput_I13:
Afe_Set_Reg(AFE_SGEN_CON2, 0x7, 0x3f);
break;
case Soc_Aud_InterConnectionInput_I14:
Afe_Set_Reg(AFE_SGEN_CON2, 0x8, 0x3f);
break;
case Soc_Aud_InterConnectionInput_I15:
case Soc_Aud_InterConnectionInput_I16:
Afe_Set_Reg(AFE_SGEN_CON2, 0x9, 0x3f);
break;
case Soc_Aud_InterConnectionInput_I17:
case Soc_Aud_InterConnectionInput_I18:
Afe_Set_Reg(AFE_SGEN_CON2, 0xa, 0x3f);
break;
case Soc_Aud_InterConnectionInput_I19:
case Soc_Aud_InterConnectionInput_I20:
Afe_Set_Reg(AFE_SGEN_CON2, 0xb, 0x3f);
break;
case Soc_Aud_InterConnectionInput_I21:
case Soc_Aud_InterConnectionInput_I22:
Afe_Set_Reg(AFE_SGEN_CON2, 0xc, 0x3f);
break;
case Soc_Aud_InterConnectionInput_I23:
case Soc_Aud_InterConnectionInput_I24:
Afe_Set_Reg(AFE_SGEN_CON2, 0xd, 0x3f);
break;
case Soc_Aud_InterConnectionInput_I25:
case Soc_Aud_InterConnectionInput_I26:
Afe_Set_Reg(AFE_SGEN_CON2, 0xe, 0x3f);
break;
case Soc_Aud_InterConnectionInput_I27:
case Soc_Aud_InterConnectionInput_I28:
Afe_Set_Reg(AFE_SGEN_CON2, 0xf, 0x3f);
break;
default:
break;
}
} else if (Enable) {
Afe_Set_Reg(AFE_SGEN_CON0, 0x04AC2AC1, 0xffffffff);
switch (connection) {
case Soc_Aud_InterConnectionOutput_O00:
case Soc_Aud_InterConnectionOutput_O01:
Afe_Set_Reg(AFE_SGEN_CON2, 0x20, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O02:
Afe_Set_Reg(AFE_SGEN_CON2, 0x21, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O03:
case Soc_Aud_InterConnectionOutput_O04:
Afe_Set_Reg(AFE_SGEN_CON2, 0x22, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O05:
case Soc_Aud_InterConnectionOutput_O06:
Afe_Set_Reg(AFE_SGEN_CON2, 0x23, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O07:
case Soc_Aud_InterConnectionOutput_O08:
Afe_Set_Reg(AFE_SGEN_CON2, 0x24, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O09:
case Soc_Aud_InterConnectionOutput_O10:
Afe_Set_Reg(AFE_SGEN_CON2, 0x25, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O11:
Afe_Set_Reg(AFE_SGEN_CON2, 0x26, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O12:
Afe_Set_Reg(AFE_SGEN_CON2, 0x27, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O13:
case Soc_Aud_InterConnectionOutput_O14:
Afe_Set_Reg(AFE_SGEN_CON2, 0x28, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O15:
case Soc_Aud_InterConnectionOutput_O16:
Afe_Set_Reg(AFE_SGEN_CON2, 0x29, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O17:
case Soc_Aud_InterConnectionOutput_O18:
Afe_Set_Reg(AFE_SGEN_CON2, 0x2a, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O19:
case Soc_Aud_InterConnectionOutput_O20:
Afe_Set_Reg(AFE_SGEN_CON2, 0x2b, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O21:
case Soc_Aud_InterConnectionOutput_O22:
Afe_Set_Reg(AFE_SGEN_CON2, 0x2c, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O23:
case Soc_Aud_InterConnectionOutput_O24:
Afe_Set_Reg(AFE_SGEN_CON2, 0x2d, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O25:
Afe_Set_Reg(AFE_SGEN_CON2, 0x2e, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O28:
case Soc_Aud_InterConnectionOutput_O29:
Afe_Set_Reg(AFE_SGEN_CON2, 0x2f, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O30:
case Soc_Aud_InterConnectionOutput_O31:
Afe_Set_Reg(AFE_SGEN_CON2, 0x36, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O34:
Afe_Set_Reg(AFE_SGEN_CON2, 0x31, 0x3f);
break;
case Soc_Aud_InterConnectionOutput_O36:
case Soc_Aud_InterConnectionOutput_O37:
Afe_Set_Reg(AFE_SGEN_CON2, 0x34, 0x3f);
break;
default:
break;
}
} else {
Afe_Set_Reg(AFE_SGEN_CON0, 0x0, 0xffffffff);
Afe_Set_Reg(AFE_SGEN_CON2, 0x3f, 0x3f);
}
return true;
}
static struct mtk_codec_ops mtk_codec_platform_ops = {
.enable_dc_compensation = enable_dc_compensation,
.set_lch_dc_compensation = set_lch_dc_compensation,
.set_rch_dc_compensation = set_rch_dc_compensation,
.set_ap_dmic = set_ap_dmic,
.set_hp_impedance_ctl = set_hp_impedance_ctl,
};
static struct mtk_mem_blk_ops mem_blk_ops = {
.set_chip_memif_addr = set_mem_blk_addr,
};
static struct mtk_afe_platform_ops afe_platform_ops = {
.set_sinegen = set_chip_sine_gen_enable,
};
/* plaform dependent ops should implement here*/
void init_afe_ops(void)
{
/* init all afe ops here */
set_mem_blk_ops(&mem_blk_ops);
set_afe_platform_ops(&afe_platform_ops);
set_codec_ops(&mtk_codec_platform_ops);
}