Blame view

sound/x86/intel_hdmi_lpe_audio.h 7.2 KB
8e8e69d67   Thomas Gleixner   treewide: Replace...
1
  /* SPDX-License-Identifier: GPL-2.0-only */
287599cf2   Jerome Anand   ALSA: add Intel H...
2
3
4
5
6
7
8
9
10
11
12
  /*
   *   intel_hdmi_lpe_audio.h - Intel HDMI LPE audio driver
   *
   *  Copyright (C) 2016 Intel Corp
   *  Authors:	Sailaja Bandarupalli <sailaja.bandarupalli@intel.com>
   *		Ramesh Babu K V <ramesh.babu@intel.com>
   *		Vaibhav Agarwal <vaibhav.agarwal@intel.com>
   *		Jerome Anand <jerome.anand@intel.com>
   *		Aravind Siddappaji <aravindx.siddappaji@intel.com>
   *  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   *
287599cf2   Jerome Anand   ALSA: add Intel H...
13
14
15
16
   * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   */
  #ifndef __INTEL_HDMI_LPE_AUDIO_H
  #define __INTEL_HDMI_LPE_AUDIO_H
287599cf2   Jerome Anand   ALSA: add Intel H...
17
18
19
  #define HAD_MIN_CHANNEL		2
  #define HAD_MAX_CHANNEL		8
  #define HAD_NUM_OF_RING_BUFS	4
e1b239f37   Takashi Iwai   ALSA: x86: Refact...
20
21
22
23
  /* max 20bit address, aligned to 64 */
  #define HAD_MAX_BUFFER		((1024 * 1024 - 1) & ~0x3f)
  #define HAD_DEFAULT_BUFFER	(600 * 1024) /* default prealloc size */
  #define HAD_MAX_PERIODS		256	/* arbitrary, but should suffice */
8d48c0163   Takashi Iwai   ALSA: x86: Allow ...
24
  #define HAD_MIN_PERIODS		1
e1b239f37   Takashi Iwai   ALSA: x86: Refact...
25
26
  #define HAD_MAX_PERIOD_BYTES	((HAD_MAX_BUFFER / HAD_MIN_PERIODS) & ~0x3f)
  #define HAD_MIN_PERIOD_BYTES	1024	/* might be smaller */
287599cf2   Jerome Anand   ALSA: add Intel H...
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
  #define HAD_FIFO_SIZE		0 /* fifo not being used */
  #define MAX_SPEAKERS		8
  
  #define AUD_SAMPLE_RATE_32	32000
  #define AUD_SAMPLE_RATE_44_1	44100
  #define AUD_SAMPLE_RATE_48	48000
  #define AUD_SAMPLE_RATE_88_2	88200
  #define AUD_SAMPLE_RATE_96	96000
  #define AUD_SAMPLE_RATE_176_4	176400
  #define AUD_SAMPLE_RATE_192	192000
  
  #define HAD_MIN_RATE		AUD_SAMPLE_RATE_32
  #define HAD_MAX_RATE		AUD_SAMPLE_RATE_192
  
  #define DIS_SAMPLE_RATE_25_2	25200
  #define DIS_SAMPLE_RATE_27	27000
  #define DIS_SAMPLE_RATE_54	54000
  #define DIS_SAMPLE_RATE_74_25	74250
  #define DIS_SAMPLE_RATE_148_5	148500
  #define HAD_REG_WIDTH		0x08
287599cf2   Jerome Anand   ALSA: add Intel H...
47
  #define HAD_MAX_DIP_WORDS		16
287599cf2   Jerome Anand   ALSA: add Intel H...
48

964ca8083   Pierre-Louis Bossart   ALSA: x86: intel_...
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
  /* DP Link Rates */
  #define DP_2_7_GHZ			270000
  #define DP_1_62_GHZ			162000
  
  /* Maud Values */
  #define AUD_SAMPLE_RATE_32_DP_2_7_MAUD_VAL		1988
  #define AUD_SAMPLE_RATE_44_1_DP_2_7_MAUD_VAL		2740
  #define AUD_SAMPLE_RATE_48_DP_2_7_MAUD_VAL		2982
  #define AUD_SAMPLE_RATE_88_2_DP_2_7_MAUD_VAL		5480
  #define AUD_SAMPLE_RATE_96_DP_2_7_MAUD_VAL		5965
  #define AUD_SAMPLE_RATE_176_4_DP_2_7_MAUD_VAL		10961
  #define HAD_MAX_RATE_DP_2_7_MAUD_VAL			11930
  #define AUD_SAMPLE_RATE_32_DP_1_62_MAUD_VAL		3314
  #define AUD_SAMPLE_RATE_44_1_DP_1_62_MAUD_VAL		4567
  #define AUD_SAMPLE_RATE_48_DP_1_62_MAUD_VAL		4971
  #define AUD_SAMPLE_RATE_88_2_DP_1_62_MAUD_VAL		9134
  #define AUD_SAMPLE_RATE_96_DP_1_62_MAUD_VAL		9942
  #define AUD_SAMPLE_RATE_176_4_DP_1_62_MAUD_VAL		18268
  #define HAD_MAX_RATE_DP_1_62_MAUD_VAL			19884
  
  /* Naud Value */
  #define DP_NAUD_VAL					32768
287599cf2   Jerome Anand   ALSA: add Intel H...
71
72
73
  /* HDMI Controller register offsets - audio domain common */
  /* Base address for below regs = 0x65000 */
  enum hdmi_ctrl_reg_offset_common {
03c343775   Takashi Iwai   ALSA: x86: Clean ...
74
  	AUDIO_HDMI_CONFIG_A = 0x000,
287599cf2   Jerome Anand   ALSA: add Intel H...
75
76
77
78
  	AUDIO_HDMI_CONFIG_B = 0x800,
  	AUDIO_HDMI_CONFIG_C = 0x900,
  };
  /* HDMI controller register offsets */
4151ee845   Takashi Iwai   ALSA: x86: Remove...
79
  enum hdmi_ctrl_reg_offset {
287599cf2   Jerome Anand   ALSA: add Intel H...
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
  	AUD_CONFIG		= 0x0,
  	AUD_CH_STATUS_0		= 0x08,
  	AUD_CH_STATUS_1		= 0x0C,
  	AUD_HDMI_CTS		= 0x10,
  	AUD_N_ENABLE		= 0x14,
  	AUD_SAMPLE_RATE		= 0x18,
  	AUD_BUF_CONFIG		= 0x20,
  	AUD_BUF_CH_SWAP		= 0x24,
  	AUD_BUF_A_ADDR		= 0x40,
  	AUD_BUF_A_LENGTH	= 0x44,
  	AUD_BUF_B_ADDR		= 0x48,
  	AUD_BUF_B_LENGTH	= 0x4c,
  	AUD_BUF_C_ADDR		= 0x50,
  	AUD_BUF_C_LENGTH	= 0x54,
  	AUD_BUF_D_ADDR		= 0x58,
  	AUD_BUF_D_LENGTH	= 0x5c,
  	AUD_CNTL_ST		= 0x60,
4151ee845   Takashi Iwai   ALSA: x86: Remove...
97
98
  	AUD_HDMI_STATUS		= 0x64, /* v2 */
  	AUD_HDMIW_INFOFR	= 0x68, /* v2 */
287599cf2   Jerome Anand   ALSA: add Intel H...
99
  };
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
100
  /* Audio configuration */
287599cf2   Jerome Anand   ALSA: add Intel H...
101
102
103
  union aud_cfg {
  	struct {
  		u32 aud_en:1;
77531beeb   Takashi Iwai   ALSA: x86: Rearra...
104
  		u32 layout:1;		/* LAYOUT[01], see below */
287599cf2   Jerome Anand   ALSA: add Intel H...
105
  		u32 fmt:2;
287599cf2   Jerome Anand   ALSA: add Intel H...
106
107
108
109
110
  		u32 num_ch:3;
  		u32 set:1;
  		u32 flat:1;
  		u32 val_bit:1;
  		u32 user_bit:1;
77531beeb   Takashi Iwai   ALSA: x86: Rearra...
111
112
113
114
115
116
117
  		u32 underrun:1;		/* 0: send null packets,
  					 * 1: send silence stream
  					 */
  		u32 packet_mode:1;	/* 0: 32bit container, 1: 16bit */
  		u32 left_align:1;	/* 0: MSB bits 0-23, 1: bits 8-31 */
  		u32 bogus_sample:1;	/* bogus sample for odd channels */
  		u32 dp_modei:1;		/* 0: HDMI, 1: DP */
287599cf2   Jerome Anand   ALSA: add Intel H...
118
  		u32 rsvd:16;
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
119
120
  	} regx;
  	u32 regval;
287599cf2   Jerome Anand   ALSA: add Intel H...
121
  };
03c343775   Takashi Iwai   ALSA: x86: Clean ...
122
123
  #define AUD_CONFIG_VALID_BIT			(1 << 9)
  #define AUD_CONFIG_DP_MODE			(1 << 15)
77531beeb   Takashi Iwai   ALSA: x86: Rearra...
124
125
126
  #define AUD_CONFIG_CH_MASK	0x70
  #define LAYOUT0			0		/* interleaved stereo */
  #define LAYOUT1			1		/* for channels > 2 */
03c343775   Takashi Iwai   ALSA: x86: Clean ...
127

7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
128
  /* Audio Channel Status 0 Attributes */
287599cf2   Jerome Anand   ALSA: add Intel H...
129
130
131
132
133
134
135
136
137
138
  union aud_ch_status_0 {
  	struct {
  		u32 ch_status:1;
  		u32 lpcm_id:1;
  		u32 cp_info:1;
  		u32 format:3;
  		u32 mode:2;
  		u32 ctg_code:8;
  		u32 src_num:4;
  		u32 ch_num:4;
77531beeb   Takashi Iwai   ALSA: x86: Rearra...
139
  		u32 samp_freq:4;	/* CH_STATUS_MAP_XXX */
287599cf2   Jerome Anand   ALSA: add Intel H...
140
141
  		u32 clk_acc:2;
  		u32 rsvd:2;
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
142
143
  	} regx;
  	u32 regval;
287599cf2   Jerome Anand   ALSA: add Intel H...
144
  };
77531beeb   Takashi Iwai   ALSA: x86: Rearra...
145
146
147
148
149
150
151
152
  /* samp_freq values - Sampling rate as per IEC60958 Ver 3 */
  #define CH_STATUS_MAP_32KHZ	0x3
  #define CH_STATUS_MAP_44KHZ	0x0
  #define CH_STATUS_MAP_48KHZ	0x2
  #define CH_STATUS_MAP_88KHZ	0x8
  #define CH_STATUS_MAP_96KHZ	0xA
  #define CH_STATUS_MAP_176KHZ	0xC
  #define CH_STATUS_MAP_192KHZ	0xE
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
153
  /* Audio Channel Status 1 Attributes */
287599cf2   Jerome Anand   ALSA: add Intel H...
154
155
156
157
158
  union aud_ch_status_1 {
  	struct {
  		u32 max_wrd_len:1;
  		u32 wrd_len:3;
  		u32 rsvd:28;
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
159
160
  	} regx;
  	u32 regval;
287599cf2   Jerome Anand   ALSA: add Intel H...
161
  };
77531beeb   Takashi Iwai   ALSA: x86: Rearra...
162
163
164
165
  #define MAX_SMPL_WIDTH_20	0x0
  #define MAX_SMPL_WIDTH_24	0x1
  #define SMPL_WIDTH_16BITS	0x1
  #define SMPL_WIDTH_24BITS	0x5
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
166
  /* CTS register */
287599cf2   Jerome Anand   ALSA: add Intel H...
167
168
  union aud_hdmi_cts {
  	struct {
287599cf2   Jerome Anand   ALSA: add Intel H...
169
170
171
  		u32 cts_val:24;
  		u32 en_cts_prog:1;
  		u32 rsvd:7;
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
172
173
  	} regx;
  	u32 regval;
287599cf2   Jerome Anand   ALSA: add Intel H...
174
  };
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
175
  /* N register */
287599cf2   Jerome Anand   ALSA: add Intel H...
176
177
  union aud_hdmi_n_enable {
  	struct {
287599cf2   Jerome Anand   ALSA: add Intel H...
178
179
180
  		u32 n_val:24;
  		u32 en_n_prog:1;
  		u32 rsvd:7;
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
181
182
  	} regx;
  	u32 regval;
287599cf2   Jerome Anand   ALSA: add Intel H...
183
  };
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
184
  /* Audio Buffer configurations */
287599cf2   Jerome Anand   ALSA: add Intel H...
185
186
  union aud_buf_config {
  	struct {
287599cf2   Jerome Anand   ALSA: add Intel H...
187
188
189
190
191
  		u32 audio_fifo_watermark:8;
  		u32 dma_fifo_watermark:3;
  		u32 rsvd0:5;
  		u32 aud_delay:8;
  		u32 rsvd1:8;
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
192
193
  	} regx;
  	u32 regval;
287599cf2   Jerome Anand   ALSA: add Intel H...
194
  };
77531beeb   Takashi Iwai   ALSA: x86: Rearra...
195
196
  #define FIFO_THRESHOLD		0xFE
  #define DMA_FIFO_THRESHOLD	0x7
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
197
  /* Audio Sample Swapping offset */
287599cf2   Jerome Anand   ALSA: add Intel H...
198
199
200
201
202
203
204
205
206
207
208
  union aud_buf_ch_swap {
  	struct {
  		u32 first_0:3;
  		u32 second_0:3;
  		u32 first_1:3;
  		u32 second_1:3;
  		u32 first_2:3;
  		u32 second_2:3;
  		u32 first_3:3;
  		u32 second_3:3;
  		u32 rsvd:8;
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
209
210
  	} regx;
  	u32 regval;
287599cf2   Jerome Anand   ALSA: add Intel H...
211
  };
77531beeb   Takashi Iwai   ALSA: x86: Rearra...
212
  #define SWAP_LFE_CENTER		0x00fac4c8	/* octal 76543210 */
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
213
  /* Address for Audio Buffer */
287599cf2   Jerome Anand   ALSA: add Intel H...
214
215
216
217
218
219
  union aud_buf_addr {
  	struct {
  		u32 valid:1;
  		u32 intr_en:1;
  		u32 rsvd:4;
  		u32 addr:26;
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
220
221
  	} regx;
  	u32 regval;
287599cf2   Jerome Anand   ALSA: add Intel H...
222
  };
e1b239f37   Takashi Iwai   ALSA: x86: Refact...
223
224
  #define AUD_BUF_VALID		(1U << 0)
  #define AUD_BUF_INTR_EN		(1U << 1)
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
225
  /* Length of Audio Buffer */
287599cf2   Jerome Anand   ALSA: add Intel H...
226
227
228
229
  union aud_buf_len {
  	struct {
  		u32 buf_len:20;
  		u32 rsvd:12;
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
230
231
  	} regx;
  	u32 regval;
287599cf2   Jerome Anand   ALSA: add Intel H...
232
  };
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
233
  /* Audio Control State Register offset */
287599cf2   Jerome Anand   ALSA: add Intel H...
234
235
236
237
238
239
240
241
242
243
244
245
  union aud_ctrl_st {
  	struct {
  		u32 ram_addr:4;
  		u32 eld_ack:1;
  		u32 eld_addr:4;
  		u32 eld_buf_size:5;
  		u32 eld_valid:1;
  		u32 cp_ready:1;
  		u32 dip_freq:2;
  		u32 dip_idx:3;
  		u32 dip_en_sta:4;
  		u32 rsvd:7;
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
246
247
  	} regx;
  	u32 regval;
287599cf2   Jerome Anand   ALSA: add Intel H...
248
  };
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
249
  /* Audio HDMI Widget Data Island Packet offset */
287599cf2   Jerome Anand   ALSA: add Intel H...
250
251
252
253
254
255
  union aud_info_frame1 {
  	struct {
  		u32 pkt_type:8;
  		u32 ver_num:8;
  		u32 len:5;
  		u32 rsvd:11;
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
256
257
  	} regx;
  	u32 regval;
287599cf2   Jerome Anand   ALSA: add Intel H...
258
  };
77531beeb   Takashi Iwai   ALSA: x86: Rearra...
259
260
  #define HDMI_INFO_FRAME_WORD1	0x000a0184
  #define DP_INFO_FRAME_WORD1	0x00441b84
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
261
  /* DIP frame 2 */
287599cf2   Jerome Anand   ALSA: add Intel H...
262
263
264
265
266
267
268
269
270
271
  union aud_info_frame2 {
  	struct {
  		u32 chksum:8;
  		u32 chnl_cnt:3;
  		u32 rsvd0:1;
  		u32 coding_type:4;
  		u32 smpl_size:2;
  		u32 smpl_freq:3;
  		u32 rsvd1:3;
  		u32 format:8;
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
272
273
  	} regx;
  	u32 regval;
287599cf2   Jerome Anand   ALSA: add Intel H...
274
  };
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
275
  /* DIP frame 3 */
287599cf2   Jerome Anand   ALSA: add Intel H...
276
277
278
279
280
281
282
  union aud_info_frame3 {
  	struct {
  		u32 chnl_alloc:8;
  		u32 rsvd0:3;
  		u32 lsv:4;
  		u32 dm_inh:1;
  		u32 rsvd1:16;
7ceba75f2   Takashi Iwai   ALSA: x86: Reduce...
283
284
  	} regx;
  	u32 regval;
287599cf2   Jerome Anand   ALSA: add Intel H...
285
  };
77531beeb   Takashi Iwai   ALSA: x86: Rearra...
286
  #define VALID_DIP_WORDS		3
03c343775   Takashi Iwai   ALSA: x86: Clean ...
287
288
289
  /* AUD_HDMI_STATUS bits */
  #define HDMI_AUDIO_UNDERRUN		(1U << 31)
  #define HDMI_AUDIO_BUFFER_DONE		(1U << 29)
287599cf2   Jerome Anand   ALSA: add Intel H...
290

03c343775   Takashi Iwai   ALSA: x86: Clean ...
291
  /* AUD_HDMI_STATUS register mask */
77531beeb   Takashi Iwai   ALSA: x86: Rearra...
292
293
294
  #define AUD_HDMI_STATUS_MASK_UNDERRUN	0xC0000000
  #define AUD_HDMI_STATUS_MASK_SRDBG	0x00000002
  #define AUD_HDMI_STATUSG_MASK_FUNCRST	0x00000001
287599cf2   Jerome Anand   ALSA: add Intel H...
295

287599cf2   Jerome Anand   ALSA: add Intel H...
296
  #endif