Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * linux/sound/soc/hisilicon/hi6210-i2s.h
0004  *
0005  * Copyright (C) 2015 Linaro, Ltd
0006  * Author: Andy Green <andy.green@linaro.org>
0007  *
0008  * Note at least on 6220, S2 == BT, S1 == Digital FM Radio IF
0009  */
0010 
0011 #ifndef _HI6210_I2S_H
0012 #define _HI6210_I2S_H
0013 
0014 #define HII2S_SW_RST_N              0
0015 
0016 #define HII2S_SW_RST_N__STEREO_UPLINK_WORDLEN_SHIFT         28
0017 #define HII2S_SW_RST_N__STEREO_UPLINK_WORDLEN_MASK          3
0018 #define HII2S_SW_RST_N__THIRDMD_UPLINK_WORDLEN_SHIFT            26
0019 #define HII2S_SW_RST_N__THIRDMD_UPLINK_WORDLEN_MASK         3
0020 #define HII2S_SW_RST_N__VOICE_UPLINK_WORDLEN_SHIFT          24
0021 #define HII2S_SW_RST_N__VOICE_UPLINK_WORDLEN_MASK           3
0022 #define HII2S_SW_RST_N__ST_DL_WORDLEN_SHIFT             20
0023 #define HII2S_SW_RST_N__ST_DL_WORDLEN_MASK              3
0024 #define HII2S_SW_RST_N__THIRDMD_DLINK_WORDLEN_SHIFT         18
0025 #define HII2S_SW_RST_N__THIRDMD_DLINK_WORDLEN_MASK          3
0026 #define HII2S_SW_RST_N__VOICE_DLINK_WORDLEN_SHIFT           16
0027 #define HII2S_SW_RST_N__VOICE_DLINK_WORDLEN_MASK            3
0028 
0029 #define HII2S_SW_RST_N__SW_RST_N                    BIT(0)
0030 
0031 enum hi6210_bits {
0032     HII2S_BITS_16,
0033     HII2S_BITS_18,
0034     HII2S_BITS_20,
0035     HII2S_BITS_24,
0036 };
0037 
0038 
0039 #define HII2S_IF_CLK_EN_CFG         4
0040 
0041 #define HII2S_IF_CLK_EN_CFG__THIRDMD_UPLINK_EN              BIT(25)
0042 #define HII2S_IF_CLK_EN_CFG__THIRDMD_DLINK_EN               BIT(24)
0043 #define HII2S_IF_CLK_EN_CFG__S3_IF_CLK_EN               BIT(20)
0044 #define HII2S_IF_CLK_EN_CFG__S2_IF_CLK_EN               BIT(16)
0045 #define HII2S_IF_CLK_EN_CFG__S2_OL_MIXER_EN             BIT(15)
0046 #define HII2S_IF_CLK_EN_CFG__S2_OL_SRC_EN               BIT(14)
0047 #define HII2S_IF_CLK_EN_CFG__S2_IR_PGA_EN               BIT(13)
0048 #define HII2S_IF_CLK_EN_CFG__S2_IL_PGA_EN               BIT(12)
0049 #define HII2S_IF_CLK_EN_CFG__S1_IR_PGA_EN               BIT(10)
0050 #define HII2S_IF_CLK_EN_CFG__S1_IL_PGA_EN               BIT(9)
0051 #define HII2S_IF_CLK_EN_CFG__S1_IF_CLK_EN               BIT(8)
0052 #define HII2S_IF_CLK_EN_CFG__VOICE_DLINK_SRC_EN             BIT(7)
0053 #define HII2S_IF_CLK_EN_CFG__VOICE_DLINK_EN             BIT(6)
0054 #define HII2S_IF_CLK_EN_CFG__ST_DL_R_EN                 BIT(5)
0055 #define HII2S_IF_CLK_EN_CFG__ST_DL_L_EN                 BIT(4)
0056 #define HII2S_IF_CLK_EN_CFG__VOICE_UPLINK_R_EN              BIT(3)
0057 #define HII2S_IF_CLK_EN_CFG__VOICE_UPLINK_L_EN              BIT(2)
0058 #define HII2S_IF_CLK_EN_CFG__STEREO_UPLINK_R_EN             BIT(1)
0059 #define HII2S_IF_CLK_EN_CFG__STEREO_UPLINK_L_EN             BIT(0)
0060 
0061 #define HII2S_DIG_FILTER_CLK_EN_CFG     8
0062 #define HII2S_DIG_FILTER_CLK_EN_CFG__DACR_SDM_EN            BIT(30)
0063 #define HII2S_DIG_FILTER_CLK_EN_CFG__DACR_HBF2I_EN          BIT(28)
0064 #define HII2S_DIG_FILTER_CLK_EN_CFG__DACR_MIXER_EN          BIT(25)
0065 #define HII2S_DIG_FILTER_CLK_EN_CFG__DACR_AGC_EN            BIT(24)
0066 #define HII2S_DIG_FILTER_CLK_EN_CFG__DACL_SDM_EN            BIT(22)
0067 #define HII2S_DIG_FILTER_CLK_EN_CFG__DACL_HBF2I_EN          BIT(20)
0068 #define HII2S_DIG_FILTER_CLK_EN_CFG__DACL_MIXER_EN          BIT(17)
0069 #define HII2S_DIG_FILTER_CLK_EN_CFG__DACL_AGC_EN            BIT(16)
0070 
0071 #define HII2S_FS_CFG                0xc
0072 
0073 #define HII2S_FS_CFG__FS_S2_SHIFT                   28
0074 #define HII2S_FS_CFG__FS_S2_MASK                    7
0075 #define HII2S_FS_CFG__FS_S1_SHIFT                   24
0076 #define HII2S_FS_CFG__FS_S1_MASK                    7
0077 #define HII2S_FS_CFG__FS_ADCLR_SHIFT                    20
0078 #define HII2S_FS_CFG__FS_ADCLR_MASK                 7
0079 #define HII2S_FS_CFG__FS_DACLR_SHIFT                    16
0080 #define HII2S_FS_CFG__FS_DACLR_MASK                 7
0081 #define HII2S_FS_CFG__FS_ST_DL_R_SHIFT                  8
0082 #define HII2S_FS_CFG__FS_ST_DL_R_MASK                   7
0083 #define HII2S_FS_CFG__FS_ST_DL_L_SHIFT                  4
0084 #define HII2S_FS_CFG__FS_ST_DL_L_MASK                   7
0085 #define HII2S_FS_CFG__FS_VOICE_DLINK_SHIFT              0
0086 #define HII2S_FS_CFG__FS_VOICE_DLINK_MASK               7
0087 
0088 enum hi6210_i2s_rates {
0089     HII2S_FS_RATE_8KHZ = 0,
0090     HII2S_FS_RATE_16KHZ = 1,
0091     HII2S_FS_RATE_32KHZ = 2,
0092     HII2S_FS_RATE_48KHZ = 4,
0093     HII2S_FS_RATE_96KHZ = 5,
0094     HII2S_FS_RATE_192KHZ = 6,
0095 };
0096 
0097 #define HII2S_I2S_CFG               0x10
0098 
0099 #define HII2S_I2S_CFG__S2_IF_TX_EN                  BIT(31)
0100 #define HII2S_I2S_CFG__S2_IF_RX_EN                  BIT(30)
0101 #define HII2S_I2S_CFG__S2_FRAME_MODE                    BIT(29)
0102 #define HII2S_I2S_CFG__S2_MST_SLV                   BIT(28)
0103 #define HII2S_I2S_CFG__S2_LRCK_MODE                 BIT(27)
0104 #define HII2S_I2S_CFG__S2_CHNNL_MODE                    BIT(26)
0105 #define HII2S_I2S_CFG__S2_CODEC_IO_WORDLENGTH_SHIFT         24
0106 #define HII2S_I2S_CFG__S2_CODEC_IO_WORDLENGTH_MASK          3
0107 #define HII2S_I2S_CFG__S2_DIRECT_LOOP_SHIFT             22
0108 #define HII2S_I2S_CFG__S2_DIRECT_LOOP_MASK              3
0109 #define HII2S_I2S_CFG__S2_TX_CLK_SEL                    BIT(21)
0110 #define HII2S_I2S_CFG__S2_RX_CLK_SEL                    BIT(20)
0111 #define HII2S_I2S_CFG__S2_CODEC_DATA_FORMAT             BIT(19)
0112 #define HII2S_I2S_CFG__S2_FUNC_MODE_SHIFT               16
0113 #define HII2S_I2S_CFG__S2_FUNC_MODE_MASK                7
0114 #define HII2S_I2S_CFG__S1_IF_TX_EN                  BIT(15)
0115 #define HII2S_I2S_CFG__S1_IF_RX_EN                  BIT(14)
0116 #define HII2S_I2S_CFG__S1_FRAME_MODE                    BIT(13)
0117 #define HII2S_I2S_CFG__S1_MST_SLV                   BIT(12)
0118 #define HII2S_I2S_CFG__S1_LRCK_MODE                 BIT(11)
0119 #define HII2S_I2S_CFG__S1_CHNNL_MODE                    BIT(10)
0120 #define HII2S_I2S_CFG__S1_CODEC_IO_WORDLENGTH_SHIFT         8
0121 #define HII2S_I2S_CFG__S1_CODEC_IO_WORDLENGTH_MASK          3
0122 #define HII2S_I2S_CFG__S1_DIRECT_LOOP_SHIFT             6
0123 #define HII2S_I2S_CFG__S1_DIRECT_LOOP_MASK              3
0124 #define HII2S_I2S_CFG__S1_TX_CLK_SEL                    BIT(5)
0125 #define HII2S_I2S_CFG__S1_RX_CLK_SEL                    BIT(4)
0126 #define HII2S_I2S_CFG__S1_CODEC_DATA_FORMAT             BIT(3)
0127 #define HII2S_I2S_CFG__S1_FUNC_MODE_SHIFT               0
0128 #define HII2S_I2S_CFG__S1_FUNC_MODE_MASK                7
0129 
0130 enum hi6210_i2s_formats {
0131     HII2S_FORMAT_I2S,
0132     HII2S_FORMAT_PCM_STD,
0133     HII2S_FORMAT_PCM_USER,
0134     HII2S_FORMAT_LEFT_JUST,
0135     HII2S_FORMAT_RIGHT_JUST,
0136 };
0137 
0138 #define HII2S_DIG_FILTER_MODULE_CFG     0x14
0139 
0140 #define HII2S_DIG_FILTER_MODULE_CFG__DACR_MIXER_GAIN_SHIFT      28
0141 #define HII2S_DIG_FILTER_MODULE_CFG__DACR_MIXER_GAIN_MASK       3
0142 #define HII2S_DIG_FILTER_MODULE_CFG__DACR_MIXER_IN4_MUTE        BIT(27)
0143 #define HII2S_DIG_FILTER_MODULE_CFG__DACR_MIXER_IN3_MUTE        BIT(26)
0144 #define HII2S_DIG_FILTER_MODULE_CFG__DACR_MIXER_IN2_MUTE        BIT(25)
0145 #define HII2S_DIG_FILTER_MODULE_CFG__DACR_MIXER_IN1_MUTE        BIT(24)
0146 #define HII2S_DIG_FILTER_MODULE_CFG__DACL_MIXER_GAIN_SHIFT      20
0147 #define HII2S_DIG_FILTER_MODULE_CFG__DACL_MIXER_GAIN_MASK       3
0148 #define HII2S_DIG_FILTER_MODULE_CFG__DACL_MIXER_IN4_MUTE        BIT(19)
0149 #define HII2S_DIG_FILTER_MODULE_CFG__DACL_MIXER_IN3_MUTE        BIT(18)
0150 #define HII2S_DIG_FILTER_MODULE_CFG__DACL_MIXER_IN2_MUTE        BIT(17)
0151 #define HII2S_DIG_FILTER_MODULE_CFG__DACL_MIXER_IN1_MUTE        BIT(16)
0152 #define HII2S_DIG_FILTER_MODULE_CFG__SW_DACR_SDM_DITHER         BIT(9)
0153 #define HII2S_DIG_FILTER_MODULE_CFG__SW_DACL_SDM_DITHER         BIT(8)
0154 #define HII2S_DIG_FILTER_MODULE_CFG__LM_CODEC_DAC2ADC_SHIFT     4
0155 #define HII2S_DIG_FILTER_MODULE_CFG__LM_CODEC_DAC2ADC_MASK      7
0156 #define HII2S_DIG_FILTER_MODULE_CFG__RM_CODEC_DAC2ADC_SHIFT     0
0157 #define HII2S_DIG_FILTER_MODULE_CFG__RM_CODEC_DAC2ADC_MASK      7
0158 
0159 enum hi6210_gains {
0160     HII2S_GAIN_100PC,
0161     HII2S_GAIN_50PC,
0162     HII2S_GAIN_25PC,
0163 };
0164 
0165 #define HII2S_MUX_TOP_MODULE_CFG        0x18
0166 
0167 #define HII2S_MUX_TOP_MODULE_CFG__VOICE_DLINK_MIXER_GAIN_SHIFT      14
0168 #define HII2S_MUX_TOP_MODULE_CFG__VOICE_DLINK_MIXER_GAIN_MASK       3
0169 #define HII2S_MUX_TOP_MODULE_CFG__VOICE_DLINK_MIXER_IN2_MUTE        BIT(13)
0170 #define HII2S_MUX_TOP_MODULE_CFG__VOICE_DLINK_MIXER_IN1_MUTE        BIT(12)
0171 #define HII2S_MUX_TOP_MODULE_CFG__S2_OL_MIXER_GAIN_SHIFT        10
0172 #define HII2S_MUX_TOP_MODULE_CFG__S2_OL_MIXER_GAIN_MASK         3
0173 #define HII2S_MUX_TOP_MODULE_CFG__S2_OL_MIXER_IN2_MUTE          BIT(9)
0174 #define HII2S_MUX_TOP_MODULE_CFG__S2_OL_MIXER_IN1_MUTE          BIT(8)
0175 #define HII2S_MUX_TOP_MODULE_CFG__S2_OL_SRC_RDY             BIT(6)
0176 #define HII2S_MUX_TOP_MODULE_CFG__S2_OL_SRC_MODE_SHIFT          4
0177 #define HII2S_MUX_TOP_MODULE_CFG__S2_OL_SRC_MODE_MASK           3
0178 #define HII2S_MUX_TOP_MODULE_CFG__VOICE_DLINK_SRC_RDY           BIT(3)
0179 #define HII2S_MUX_TOP_MODULE_CFG__VOICE_DLINK_SRC_MODE_SHIFT        0
0180 #define HII2S_MUX_TOP_MODULE_CFG__VOICE_DLINK_SRC_MODE_MASK     7
0181 
0182 enum hi6210_s2_src_mode {
0183     HII2S_S2_SRC_MODE_3,
0184     HII2S_S2_SRC_MODE_12,
0185     HII2S_S2_SRC_MODE_6,
0186     HII2S_S2_SRC_MODE_2,
0187 };
0188 
0189 enum hi6210_voice_dlink_src_mode {
0190     HII2S_VOICE_DL_SRC_MODE_12 = 1,
0191     HII2S_VOICE_DL_SRC_MODE_6,
0192     HII2S_VOICE_DL_SRC_MODE_2,
0193     HII2S_VOICE_DL_SRC_MODE_3,
0194 };
0195 
0196 #define HII2S_ADC_PGA_CFG           0x1c
0197 #define HII2S_S1_INPUT_PGA_CFG          0x20
0198 #define HII2S_S2_INPUT_PGA_CFG          0x24
0199 #define HII2S_ST_DL_PGA_CFG         0x28
0200 #define HII2S_VOICE_SIDETONE_DLINK_PGA_CFG  0x2c
0201 #define HII2S_APB_AFIFO_CFG_1           0x30
0202 #define HII2S_APB_AFIFO_CFG_2           0x34
0203 #define HII2S_ST_DL_FIFO_TH_CFG         0x38
0204 
0205 #define HII2S_ST_DL_FIFO_TH_CFG__ST_DL_R_AEMPTY_SHIFT           24
0206 #define HII2S_ST_DL_FIFO_TH_CFG__ST_DL_R_AEMPTY_MASK            0x1f
0207 #define HII2S_ST_DL_FIFO_TH_CFG__ST_DL_R_AFULL_SHIFT            16
0208 #define HII2S_ST_DL_FIFO_TH_CFG__ST_DL_R_AFULL_MASK         0x1f
0209 #define HII2S_ST_DL_FIFO_TH_CFG__ST_DL_L_AEMPTY_SHIFT           8
0210 #define HII2S_ST_DL_FIFO_TH_CFG__ST_DL_L_AEMPTY_MASK            0x1f
0211 #define HII2S_ST_DL_FIFO_TH_CFG__ST_DL_L_AFULL_SHIFT            0
0212 #define HII2S_ST_DL_FIFO_TH_CFG__ST_DL_L_AFULL_MASK         0x1f
0213 
0214 #define HII2S_STEREO_UPLINK_FIFO_TH_CFG     0x3c
0215 #define HII2S_VOICE_UPLINK_FIFO_TH_CFG      0x40
0216 #define HII2S_CODEC_IRQ_MASK            0x44
0217 #define HII2S_CODEC_IRQ             0x48
0218 #define HII2S_DACL_AGC_CFG_1            0x4c
0219 #define HII2S_DACL_AGC_CFG_2            0x50
0220 #define HII2S_DACR_AGC_CFG_1            0x54
0221 #define HII2S_DACR_AGC_CFG_2            0x58
0222 #define HII2S_DMIC_SIF_CFG          0x5c
0223 #define HII2S_MISC_CFG              0x60
0224 
0225 #define HII2S_MISC_CFG__THIRDMD_DLINK_TEST_SEL              BIT(17)
0226 #define HII2S_MISC_CFG__THIRDMD_DLINK_DIN_SEL               BIT(16)
0227 #define HII2S_MISC_CFG__S3_DOUT_RIGHT_SEL               BIT(14)
0228 #define HII2S_MISC_CFG__S3_DOUT_LEFT_SEL                BIT(13)
0229 #define HII2S_MISC_CFG__S3_DIN_TEST_SEL                 BIT(12)
0230 #define HII2S_MISC_CFG__VOICE_DLINK_SRC_UP_DOUT_VLD_SEL         BIT(8)
0231 #define HII2S_MISC_CFG__VOICE_DLINK_TEST_SEL                BIT(7)
0232 #define HII2S_MISC_CFG__VOICE_DLINK_DIN_SEL             BIT(6)
0233 #define HII2S_MISC_CFG__ST_DL_TEST_SEL                  BIT(4)
0234 #define HII2S_MISC_CFG__S2_DOUT_RIGHT_SEL               BIT(3)
0235 #define HII2S_MISC_CFG__S2_DOUT_TEST_SEL                BIT(2)
0236 #define HII2S_MISC_CFG__S1_DOUT_TEST_SEL                BIT(1)
0237 #define HII2S_MISC_CFG__S2_DOUT_LEFT_SEL                BIT(0)
0238 
0239 #define HII2S_S2_SRC_CFG            0x64
0240 #define HII2S_MEM_CFG               0x68
0241 #define HII2S_THIRDMD_PCM_PGA_CFG       0x6c
0242 #define HII2S_THIRD_MODEM_FIFO_TH       0x70
0243 #define HII2S_S3_ANTI_FREQ_JITTER_TX_INC_CNT    0x74
0244 #define HII2S_S3_ANTI_FREQ_JITTER_TX_DEC_CNT    0x78
0245 #define HII2S_S3_ANTI_FREQ_JITTER_RX_INC_CNT    0x7c
0246 #define HII2S_S3_ANTI_FREQ_JITTER_RX_DEC_CNT    0x80
0247 #define HII2S_ANTI_FREQ_JITTER_EN       0x84
0248 #define HII2S_CLK_SEL               0x88
0249 
0250 /* 0 = BT owns the i2s */
0251 #define HII2S_CLK_SEL__I2S_BT_FM_SEL                    BIT(0)
0252 /* 0 = internal source, 1 = ext */
0253 #define HII2S_CLK_SEL__EXT_12_288MHZ_SEL                BIT(1)
0254 
0255 
0256 #define HII2S_THIRDMD_DLINK_CHANNEL     0xe8
0257 #define HII2S_THIRDMD_ULINK_CHANNEL     0xec
0258 #define HII2S_VOICE_DLINK_CHANNEL       0xf0
0259 
0260 /* shovel data in here for playback */
0261 #define HII2S_ST_DL_CHANNEL         0xf4
0262 #define HII2S_STEREO_UPLINK_CHANNEL     0xf8
0263 #define HII2S_VOICE_UPLINK_CHANNEL      0xfc
0264 
0265 #endif/* _HI6210_I2S_H */