0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #ifndef __INTEL_HDMI_LPE_AUDIO_H
0016 #define __INTEL_HDMI_LPE_AUDIO_H
0017
0018 #define HAD_MIN_CHANNEL 2
0019 #define HAD_MAX_CHANNEL 8
0020 #define HAD_NUM_OF_RING_BUFS 4
0021
0022
0023 #define HAD_MAX_BUFFER ((1024 * 1024 - 1) & ~0x3f)
0024 #define HAD_DEFAULT_BUFFER (600 * 1024)
0025 #define HAD_MAX_PERIODS 256
0026 #define HAD_MIN_PERIODS 1
0027 #define HAD_MAX_PERIOD_BYTES ((HAD_MAX_BUFFER / HAD_MIN_PERIODS) & ~0x3f)
0028 #define HAD_MIN_PERIOD_BYTES 1024
0029 #define HAD_FIFO_SIZE 0
0030 #define MAX_SPEAKERS 8
0031
0032 #define AUD_SAMPLE_RATE_32 32000
0033 #define AUD_SAMPLE_RATE_44_1 44100
0034 #define AUD_SAMPLE_RATE_48 48000
0035 #define AUD_SAMPLE_RATE_88_2 88200
0036 #define AUD_SAMPLE_RATE_96 96000
0037 #define AUD_SAMPLE_RATE_176_4 176400
0038 #define AUD_SAMPLE_RATE_192 192000
0039
0040 #define HAD_MIN_RATE AUD_SAMPLE_RATE_32
0041 #define HAD_MAX_RATE AUD_SAMPLE_RATE_192
0042
0043 #define DIS_SAMPLE_RATE_25_2 25200
0044 #define DIS_SAMPLE_RATE_27 27000
0045 #define DIS_SAMPLE_RATE_54 54000
0046 #define DIS_SAMPLE_RATE_74_25 74250
0047 #define DIS_SAMPLE_RATE_148_5 148500
0048 #define HAD_REG_WIDTH 0x08
0049 #define HAD_MAX_DIP_WORDS 16
0050
0051
0052 #define DP_2_7_GHZ 270000
0053 #define DP_1_62_GHZ 162000
0054
0055
0056 #define AUD_SAMPLE_RATE_32_DP_2_7_MAUD_VAL 1988
0057 #define AUD_SAMPLE_RATE_44_1_DP_2_7_MAUD_VAL 2740
0058 #define AUD_SAMPLE_RATE_48_DP_2_7_MAUD_VAL 2982
0059 #define AUD_SAMPLE_RATE_88_2_DP_2_7_MAUD_VAL 5480
0060 #define AUD_SAMPLE_RATE_96_DP_2_7_MAUD_VAL 5965
0061 #define AUD_SAMPLE_RATE_176_4_DP_2_7_MAUD_VAL 10961
0062 #define HAD_MAX_RATE_DP_2_7_MAUD_VAL 11930
0063 #define AUD_SAMPLE_RATE_32_DP_1_62_MAUD_VAL 3314
0064 #define AUD_SAMPLE_RATE_44_1_DP_1_62_MAUD_VAL 4567
0065 #define AUD_SAMPLE_RATE_48_DP_1_62_MAUD_VAL 4971
0066 #define AUD_SAMPLE_RATE_88_2_DP_1_62_MAUD_VAL 9134
0067 #define AUD_SAMPLE_RATE_96_DP_1_62_MAUD_VAL 9942
0068 #define AUD_SAMPLE_RATE_176_4_DP_1_62_MAUD_VAL 18268
0069 #define HAD_MAX_RATE_DP_1_62_MAUD_VAL 19884
0070
0071
0072 #define DP_NAUD_VAL 32768
0073
0074
0075
0076 enum hdmi_ctrl_reg_offset_common {
0077 AUDIO_HDMI_CONFIG_A = 0x000,
0078 AUDIO_HDMI_CONFIG_B = 0x800,
0079 AUDIO_HDMI_CONFIG_C = 0x900,
0080 };
0081
0082 enum hdmi_ctrl_reg_offset {
0083 AUD_CONFIG = 0x0,
0084 AUD_CH_STATUS_0 = 0x08,
0085 AUD_CH_STATUS_1 = 0x0C,
0086 AUD_HDMI_CTS = 0x10,
0087 AUD_N_ENABLE = 0x14,
0088 AUD_SAMPLE_RATE = 0x18,
0089 AUD_BUF_CONFIG = 0x20,
0090 AUD_BUF_CH_SWAP = 0x24,
0091 AUD_BUF_A_ADDR = 0x40,
0092 AUD_BUF_A_LENGTH = 0x44,
0093 AUD_BUF_B_ADDR = 0x48,
0094 AUD_BUF_B_LENGTH = 0x4c,
0095 AUD_BUF_C_ADDR = 0x50,
0096 AUD_BUF_C_LENGTH = 0x54,
0097 AUD_BUF_D_ADDR = 0x58,
0098 AUD_BUF_D_LENGTH = 0x5c,
0099 AUD_CNTL_ST = 0x60,
0100 AUD_HDMI_STATUS = 0x64,
0101 AUD_HDMIW_INFOFR = 0x68,
0102 };
0103
0104
0105 union aud_cfg {
0106 struct {
0107 u32 aud_en:1;
0108 u32 layout:1;
0109 u32 fmt:2;
0110 u32 num_ch:3;
0111 u32 set:1;
0112 u32 flat:1;
0113 u32 val_bit:1;
0114 u32 user_bit:1;
0115 u32 underrun:1;
0116
0117
0118 u32 packet_mode:1;
0119 u32 left_align:1;
0120 u32 bogus_sample:1;
0121 u32 dp_modei:1;
0122 u32 rsvd:16;
0123 } regx;
0124 u32 regval;
0125 };
0126
0127 #define AUD_CONFIG_VALID_BIT (1 << 9)
0128 #define AUD_CONFIG_DP_MODE (1 << 15)
0129 #define AUD_CONFIG_CH_MASK 0x70
0130 #define LAYOUT0 0
0131 #define LAYOUT1 1
0132
0133
0134 union aud_ch_status_0 {
0135 struct {
0136 u32 ch_status:1;
0137 u32 lpcm_id:1;
0138 u32 cp_info:1;
0139 u32 format:3;
0140 u32 mode:2;
0141 u32 ctg_code:8;
0142 u32 src_num:4;
0143 u32 ch_num:4;
0144 u32 samp_freq:4;
0145 u32 clk_acc:2;
0146 u32 rsvd:2;
0147 } regx;
0148 u32 regval;
0149 };
0150
0151
0152 #define CH_STATUS_MAP_32KHZ 0x3
0153 #define CH_STATUS_MAP_44KHZ 0x0
0154 #define CH_STATUS_MAP_48KHZ 0x2
0155 #define CH_STATUS_MAP_88KHZ 0x8
0156 #define CH_STATUS_MAP_96KHZ 0xA
0157 #define CH_STATUS_MAP_176KHZ 0xC
0158 #define CH_STATUS_MAP_192KHZ 0xE
0159
0160
0161 union aud_ch_status_1 {
0162 struct {
0163 u32 max_wrd_len:1;
0164 u32 wrd_len:3;
0165 u32 rsvd:28;
0166 } regx;
0167 u32 regval;
0168 };
0169
0170 #define MAX_SMPL_WIDTH_20 0x0
0171 #define MAX_SMPL_WIDTH_24 0x1
0172 #define SMPL_WIDTH_16BITS 0x1
0173 #define SMPL_WIDTH_24BITS 0x5
0174
0175
0176 union aud_hdmi_cts {
0177 struct {
0178 u32 cts_val:24;
0179 u32 en_cts_prog:1;
0180 u32 rsvd:7;
0181 } regx;
0182 u32 regval;
0183 };
0184
0185
0186 union aud_hdmi_n_enable {
0187 struct {
0188 u32 n_val:24;
0189 u32 en_n_prog:1;
0190 u32 rsvd:7;
0191 } regx;
0192 u32 regval;
0193 };
0194
0195
0196 union aud_buf_config {
0197 struct {
0198 u32 audio_fifo_watermark:8;
0199 u32 dma_fifo_watermark:3;
0200 u32 rsvd0:5;
0201 u32 aud_delay:8;
0202 u32 rsvd1:8;
0203 } regx;
0204 u32 regval;
0205 };
0206
0207 #define FIFO_THRESHOLD 0xFE
0208 #define DMA_FIFO_THRESHOLD 0x7
0209
0210
0211 union aud_buf_ch_swap {
0212 struct {
0213 u32 first_0:3;
0214 u32 second_0:3;
0215 u32 first_1:3;
0216 u32 second_1:3;
0217 u32 first_2:3;
0218 u32 second_2:3;
0219 u32 first_3:3;
0220 u32 second_3:3;
0221 u32 rsvd:8;
0222 } regx;
0223 u32 regval;
0224 };
0225
0226 #define SWAP_LFE_CENTER 0x00fac4c8
0227
0228
0229 union aud_buf_addr {
0230 struct {
0231 u32 valid:1;
0232 u32 intr_en:1;
0233 u32 rsvd:4;
0234 u32 addr:26;
0235 } regx;
0236 u32 regval;
0237 };
0238
0239 #define AUD_BUF_VALID (1U << 0)
0240 #define AUD_BUF_INTR_EN (1U << 1)
0241
0242
0243 union aud_buf_len {
0244 struct {
0245 u32 buf_len:20;
0246 u32 rsvd:12;
0247 } regx;
0248 u32 regval;
0249 };
0250
0251
0252 union aud_ctrl_st {
0253 struct {
0254 u32 ram_addr:4;
0255 u32 eld_ack:1;
0256 u32 eld_addr:4;
0257 u32 eld_buf_size:5;
0258 u32 eld_valid:1;
0259 u32 cp_ready:1;
0260 u32 dip_freq:2;
0261 u32 dip_idx:3;
0262 u32 dip_en_sta:4;
0263 u32 rsvd:7;
0264 } regx;
0265 u32 regval;
0266 };
0267
0268
0269 union aud_info_frame1 {
0270 struct {
0271 u32 pkt_type:8;
0272 u32 ver_num:8;
0273 u32 len:5;
0274 u32 rsvd:11;
0275 } regx;
0276 u32 regval;
0277 };
0278
0279 #define HDMI_INFO_FRAME_WORD1 0x000a0184
0280 #define DP_INFO_FRAME_WORD1 0x00441b84
0281
0282
0283 union aud_info_frame2 {
0284 struct {
0285 u32 chksum:8;
0286 u32 chnl_cnt:3;
0287 u32 rsvd0:1;
0288 u32 coding_type:4;
0289 u32 smpl_size:2;
0290 u32 smpl_freq:3;
0291 u32 rsvd1:3;
0292 u32 format:8;
0293 } regx;
0294 u32 regval;
0295 };
0296
0297
0298 union aud_info_frame3 {
0299 struct {
0300 u32 chnl_alloc:8;
0301 u32 rsvd0:3;
0302 u32 lsv:4;
0303 u32 dm_inh:1;
0304 u32 rsvd1:16;
0305 } regx;
0306 u32 regval;
0307 };
0308
0309 #define VALID_DIP_WORDS 3
0310
0311
0312 #define HDMI_AUDIO_UNDERRUN (1U << 31)
0313 #define HDMI_AUDIO_BUFFER_DONE (1U << 29)
0314
0315
0316 #define AUD_HDMI_STATUS_MASK_UNDERRUN 0xC0000000
0317 #define AUD_HDMI_STATUS_MASK_SRDBG 0x00000002
0318 #define AUD_HDMI_STATUSG_MASK_FUNCRST 0x00000001
0319
0320 #endif