1 #ifndef _UAPI_MSM_AUDIO_CALIBRATION_H
2 #define _UAPI_MSM_AUDIO_CALIBRATION_H
3 
4 #include <linux/types.h>
5 #include <linux/ioctl.h>
6 
7 #define CAL_IOCTL_MAGIC 'a'
8 
9 #define AUDIO_ALLOCATE_CALIBRATION	_IOWR(CAL_IOCTL_MAGIC, \
10 							200, void *)
11 #define AUDIO_DEALLOCATE_CALIBRATION	_IOWR(CAL_IOCTL_MAGIC, \
12 							201, void *)
13 #define AUDIO_PREPARE_CALIBRATION	_IOWR(CAL_IOCTL_MAGIC, \
14 							202, void *)
15 #define AUDIO_SET_CALIBRATION		_IOWR(CAL_IOCTL_MAGIC, \
16 							203, void *)
17 #define AUDIO_GET_CALIBRATION		_IOWR(CAL_IOCTL_MAGIC, \
18 							204, void *)
19 #define AUDIO_POST_CALIBRATION		_IOWR(CAL_IOCTL_MAGIC, \
20 							205, void *)
21 
22 /* For Real-Time Audio Calibration */
23 #define AUDIO_GET_RTAC_ADM_INFO		_IOR(CAL_IOCTL_MAGIC, \
24 							207, void *)
25 #define AUDIO_GET_RTAC_VOICE_INFO	_IOR(CAL_IOCTL_MAGIC, \
26 							208, void *)
27 #define AUDIO_GET_RTAC_ADM_CAL		_IOWR(CAL_IOCTL_MAGIC, \
28 							209, void *)
29 #define AUDIO_SET_RTAC_ADM_CAL		_IOWR(CAL_IOCTL_MAGIC, \
30 							210, void *)
31 #define AUDIO_GET_RTAC_ASM_CAL		_IOWR(CAL_IOCTL_MAGIC, \
32 							211, void *)
33 #define AUDIO_SET_RTAC_ASM_CAL		_IOWR(CAL_IOCTL_MAGIC, \
34 							212, void *)
35 #define AUDIO_GET_RTAC_CVS_CAL		_IOWR(CAL_IOCTL_MAGIC, \
36 							213, void *)
37 #define AUDIO_SET_RTAC_CVS_CAL		_IOWR(CAL_IOCTL_MAGIC, \
38 							214, void *)
39 #define AUDIO_GET_RTAC_CVP_CAL		_IOWR(CAL_IOCTL_MAGIC, \
40 							215, void *)
41 #define AUDIO_SET_RTAC_CVP_CAL		_IOWR(CAL_IOCTL_MAGIC, \
42 							216, void *)
43 #define AUDIO_GET_RTAC_AFE_CAL		_IOWR(CAL_IOCTL_MAGIC, \
44 							217, void *)
45 #define AUDIO_SET_RTAC_AFE_CAL		_IOWR(CAL_IOCTL_MAGIC, \
46 							218, void *)
47 enum {
48 	CVP_VOC_RX_TOPOLOGY_CAL_TYPE = 0,
49 	CVP_VOC_TX_TOPOLOGY_CAL_TYPE,
50 	CVP_VOCPROC_STATIC_CAL_TYPE,
51 	CVP_VOCPROC_DYNAMIC_CAL_TYPE,
52 	CVS_VOCSTRM_STATIC_CAL_TYPE,
53 	CVP_VOCDEV_CFG_CAL_TYPE,
54 	CVP_VOCPROC_STATIC_COL_CAL_TYPE,
55 	CVP_VOCPROC_DYNAMIC_COL_CAL_TYPE,
56 	CVS_VOCSTRM_STATIC_COL_CAL_TYPE,
57 
58 	ADM_TOPOLOGY_CAL_TYPE,
59 	ADM_CUST_TOPOLOGY_CAL_TYPE,
60 	ADM_AUDPROC_CAL_TYPE,
61 	ADM_AUDVOL_CAL_TYPE,
62 
63 	ASM_TOPOLOGY_CAL_TYPE,
64 	ASM_CUST_TOPOLOGY_CAL_TYPE,
65 	ASM_AUDSTRM_CAL_TYPE,
66 
67 	AFE_COMMON_RX_CAL_TYPE,
68 	AFE_COMMON_TX_CAL_TYPE,
69 	AFE_ANC_CAL_TYPE,
70 	AFE_AANC_CAL_TYPE,
71 	AFE_FB_SPKR_PROT_CAL_TYPE,
72 	AFE_HW_DELAY_CAL_TYPE,
73 	AFE_SIDETONE_CAL_TYPE,
74 
75 	LSM_CUST_TOPOLOGY_CAL_TYPE,
76 	LSM_TOPOLOGY_CAL_TYPE,
77 	LSM_CAL_TYPE,
78 
79 	ADM_RTAC_INFO_CAL_TYPE,
80 	VOICE_RTAC_INFO_CAL_TYPE,
81 	ADM_RTAC_APR_CAL_TYPE,
82 	ASM_RTAC_APR_CAL_TYPE,
83 	VOICE_RTAC_APR_CAL_TYPE,
84 
85 	MAD_CAL_TYPE,
86 	ULP_AFE_CAL_TYPE,
87 	ULP_LSM_CAL_TYPE,
88 
89 	DTS_EAGLE_CAL_TYPE,
90 	AUDIO_CORE_METAINFO_CAL_TYPE,
91 
92 	MAX_CAL_TYPES,
93 };
94 
95 enum {
96 	VERSION_0_0,
97 };
98 
99 enum {
100 	PER_VOCODER_CAL_BIT_MASK = 0x10000,
101 };
102 
103 #define MAX_IOCTL_CMD_SIZE	512
104 
105 /* common structures */
106 
107 struct audio_cal_header {
108 	int32_t		data_size;
109 	int32_t		version;
110 	int32_t		cal_type;
111 	int32_t		cal_type_size;
112 };
113 
114 struct audio_cal_type_header {
115 	int32_t		version;
116 	int32_t		buffer_number;
117 };
118 
119 struct audio_cal_data {
120 	/* Size of cal data at mem_handle allocation or at vaddr */
121 	int32_t		cal_size;
122 	/* If mem_handle if shared memory is used*/
123 	int32_t		mem_handle;
124 	/* size of virtual memory if shared memory not used */
125 };
126 
127 
128 /* AUDIO_ALLOCATE_CALIBRATION */
129 struct audio_cal_type_alloc {
130 	struct audio_cal_type_header	cal_hdr;
131 	struct audio_cal_data		cal_data;
132 };
133 
134 struct audio_cal_alloc {
135 	struct audio_cal_header		hdr;
136 	struct audio_cal_type_alloc	cal_type;
137 };
138 
139 
140 /* AUDIO_DEALLOCATE_CALIBRATION */
141 struct audio_cal_type_dealloc {
142 	struct audio_cal_type_header	cal_hdr;
143 	struct audio_cal_data		cal_data;
144 };
145 
146 struct audio_cal_dealloc {
147 	struct audio_cal_header		hdr;
148 	struct audio_cal_type_dealloc	cal_type;
149 };
150 
151 
152 /* AUDIO_PREPARE_CALIBRATION */
153 struct audio_cal_type_prepare {
154 	struct audio_cal_type_header	cal_hdr;
155 	struct audio_cal_data		cal_data;
156 };
157 
158 struct audio_cal_prepare {
159 	struct audio_cal_header		hdr;
160 	struct audio_cal_type_prepare	cal_type;
161 };
162 
163 
164 /* AUDIO_POST_CALIBRATION */
165 struct audio_cal_type_post {
166 	struct audio_cal_type_header	cal_hdr;
167 	struct audio_cal_data		cal_data;
168 };
169 
170 struct audio_cal_post {
171 	struct audio_cal_header		hdr;
172 	struct audio_cal_type_post	cal_type;
173 };
174 
175 /*AUDIO_CORE_META_INFO */
176 
177 struct audio_cal_info_metainfo {
178 	uint32_t nKey;
179 };
180 
181 /* Cal info types */
182 enum {
183 	RX_DEVICE,
184 	TX_DEVICE,
185 	MAX_PATH_TYPE
186 };
187 
188 struct audio_cal_info_adm_top {
189 	int32_t		topology;
190 	int32_t		acdb_id;
191 	/* RX_DEVICE or TX_DEVICE */
192 	int32_t		path;
193 	int32_t		app_type;
194 };
195 
196 struct audio_cal_info_audproc {
197 	int32_t		acdb_id;
198 	/* RX_DEVICE or TX_DEVICE */
199 	int32_t		path;
200 	int32_t		app_type;
201 	int32_t		sample_rate;
202 };
203 
204 struct audio_cal_info_audvol {
205 	int32_t		acdb_id;
206 	/* RX_DEVICE or TX_DEVICE */
207 	int32_t		path;
208 	int32_t		app_type;
209 	int32_t		vol_index;
210 };
211 
212 struct audio_cal_info_afe {
213 	int32_t		acdb_id;
214 	/* RX_DEVICE or TX_DEVICE */
215 	int32_t		path;
216 	int32_t		sample_rate;
217 };
218 
219 struct audio_cal_info_asm_top {
220 	int32_t		topology;
221 	int32_t		app_type;
222 };
223 
224 struct audio_cal_info_audstrm {
225 	int32_t		app_type;
226 };
227 
228 struct audio_cal_info_aanc {
229 	int32_t		acdb_id;
230 };
231 
232 #define MAX_HW_DELAY_ENTRIES	25
233 
234 struct audio_cal_hw_delay_entry {
235 	uint32_t sample_rate;
236 	uint32_t delay_usec;
237 };
238 
239 struct audio_cal_hw_delay_data {
240 	uint32_t				num_entries;
241 	struct audio_cal_hw_delay_entry		entry[MAX_HW_DELAY_ENTRIES];
242 };
243 
244 struct audio_cal_info_hw_delay {
245 	int32_t					acdb_id;
246 	/* RX_DEVICE or TX_DEVICE */
247 	int32_t					path;
248 	int32_t					property_type;
249 	struct audio_cal_hw_delay_data		data;
250 };
251 
252 enum msm_spkr_prot_states {
253 	MSM_SPKR_PROT_CALIBRATED,
254 	MSM_SPKR_PROT_CALIBRATION_IN_PROGRESS,
255 	MSM_SPKR_PROT_DISABLED,
256 	MSM_SPKR_PROT_NOT_CALIBRATED
257 };
258 
259 struct audio_cal_info_spk_prot_cfg {
260 	int32_t		r0;
261 	int32_t		t0;
262 	uint32_t	mode; /*0 - Start spk prot
263 	1 - Start calib
264 	2 - Disable spk prot*/
265 };
266 
267 struct audio_cal_info_msm_spk_prot_status {
268 	int32_t		r0;
269 	int32_t		status;
270 };
271 
272 struct audio_cal_info_sidetone {
273 	uint16_t	enable;
274 	uint16_t	gain;
275 	int32_t		tx_acdb_id;
276 	int32_t		rx_acdb_id;
277 	int32_t		mid;
278 	int32_t		pid;
279 };
280 
281 struct audio_cal_info_lsm_top {
282 	int32_t		topology;
283 	int32_t		acdb_id;
284 	int32_t		app_type;
285 };
286 
287 
288 struct audio_cal_info_lsm {
289 	int32_t		acdb_id;
290 	/* RX_DEVICE or TX_DEVICE */
291 	int32_t		path;
292 	int32_t		app_type;
293 };
294 
295 struct audio_cal_info_voc_top {
296 	int32_t		topology;
297 	int32_t		acdb_id;
298 };
299 
300 struct audio_cal_info_vocproc {
301 	int32_t		tx_acdb_id;
302 	int32_t		rx_acdb_id;
303 	int32_t		tx_sample_rate;
304 	int32_t		rx_sample_rate;
305 };
306 
307 enum {
308 	DEFAULT_FEATURE_SET,
309 	VOL_BOOST_FEATURE_SET,
310 };
311 
312 struct audio_cal_info_vocvol {
313 	int32_t		tx_acdb_id;
314 	int32_t		rx_acdb_id;
315 	/* DEFUALT_ or VOL_BOOST_FEATURE_SET */
316 	int32_t		feature_set;
317 };
318 
319 struct audio_cal_info_vocdev_cfg {
320 	int32_t		tx_acdb_id;
321 	int32_t		rx_acdb_id;
322 };
323 
324 #define MAX_VOICE_COLUMNS	20
325 
326 union audio_cal_col_na {
327 	uint8_t		val8;
328 	uint16_t	val16;
329 	uint32_t	val32;
330 	uint64_t	val64;
331 } __packed;
332 
333 struct audio_cal_col {
334 	uint32_t		id;
335 	uint32_t		type;
336 	union audio_cal_col_na	na_value;
337 } __packed;
338 
339 struct audio_cal_col_data {
340 	uint32_t		num_columns;
341 	struct audio_cal_col	column[MAX_VOICE_COLUMNS];
342 } __packed;
343 
344 struct audio_cal_info_voc_col {
345 	int32_t				table_id;
346 	int32_t				tx_acdb_id;
347 	int32_t				rx_acdb_id;
348 	struct audio_cal_col_data	data;
349 };
350 
351 /* AUDIO_SET_CALIBRATION & */
352 struct audio_cal_type_basic {
353 	struct audio_cal_type_header	cal_hdr;
354 	struct audio_cal_data		cal_data;
355 };
356 
357 struct audio_cal_basic {
358 	struct audio_cal_header		hdr;
359 	struct audio_cal_type_basic	cal_type;
360 };
361 
362 struct audio_cal_type_adm_top {
363 	struct audio_cal_type_header	cal_hdr;
364 	struct audio_cal_data		cal_data;
365 	struct audio_cal_info_adm_top	cal_info;
366 };
367 
368 struct audio_cal_adm_top {
369 	struct audio_cal_header		hdr;
370 	struct audio_cal_type_adm_top	cal_type;
371 };
372 
373 struct audio_cal_type_metainfo {
374 	struct audio_cal_type_header	cal_hdr;
375 	struct audio_cal_data		cal_data;
376 	struct audio_cal_info_metainfo	cal_info;
377 };
378 
379 struct audio_core_metainfo {
380 	struct audio_cal_header	  hdr;
381 	struct audio_cal_type_metainfo cal_type;
382 };
383 
384 struct audio_cal_type_audproc {
385 	struct audio_cal_type_header	cal_hdr;
386 	struct audio_cal_data		cal_data;
387 	struct audio_cal_info_audproc	cal_info;
388 };
389 
390 struct audio_cal_audproc {
391 	struct audio_cal_header		hdr;
392 	struct audio_cal_type_audproc	cal_type;
393 };
394 
395 struct audio_cal_type_audvol {
396 	struct audio_cal_type_header	cal_hdr;
397 	struct audio_cal_data		cal_data;
398 	struct audio_cal_info_audvol	cal_info;
399 };
400 
401 struct audio_cal_audvol {
402 	struct audio_cal_header		hdr;
403 	struct audio_cal_type_audvol	cal_type;
404 };
405 
406 struct audio_cal_type_asm_top {
407 	struct audio_cal_type_header	cal_hdr;
408 	struct audio_cal_data		cal_data;
409 	struct audio_cal_info_asm_top	cal_info;
410 };
411 
412 struct audio_cal_asm_top {
413 	struct audio_cal_header		hdr;
414 	struct audio_cal_type_asm_top	cal_type;
415 };
416 
417 struct audio_cal_type_audstrm {
418 	struct audio_cal_type_header	cal_hdr;
419 	struct audio_cal_data		cal_data;
420 	struct audio_cal_info_audstrm	cal_info;
421 };
422 
423 struct audio_cal_audstrm {
424 	struct audio_cal_header		hdr;
425 	struct audio_cal_type_audstrm	cal_type;
426 };
427 
428 struct audio_cal_type_afe {
429 	struct audio_cal_type_header	cal_hdr;
430 	struct audio_cal_data		cal_data;
431 	struct audio_cal_info_afe	cal_info;
432 };
433 
434 struct audio_cal_afe {
435 	struct audio_cal_header		hdr;
436 	struct audio_cal_type_afe	cal_type;
437 };
438 
439 struct audio_cal_type_aanc {
440 	struct audio_cal_type_header	cal_hdr;
441 	struct audio_cal_data		cal_data;
442 	struct audio_cal_info_aanc	cal_info;
443 };
444 
445 struct audio_cal_aanc {
446 	struct audio_cal_header		hdr;
447 	struct audio_cal_type_aanc	cal_type;
448 };
449 
450 struct audio_cal_type_fb_spk_prot_cfg {
451 	struct audio_cal_type_header		cal_hdr;
452 	struct audio_cal_data			cal_data;
453 	struct audio_cal_info_spk_prot_cfg	cal_info;
454 };
455 
456 struct audio_cal_fb_spk_prot_cfg {
457 	struct audio_cal_header			hdr;
458 	struct audio_cal_type_fb_spk_prot_cfg	cal_type;
459 };
460 
461 struct audio_cal_type_hw_delay {
462 	struct audio_cal_type_header	cal_hdr;
463 	struct audio_cal_data		cal_data;
464 	struct audio_cal_info_hw_delay	cal_info;
465 };
466 
467 struct audio_cal_hw_delay {
468 	struct audio_cal_header		hdr;
469 	struct audio_cal_type_hw_delay	cal_type;
470 };
471 
472 struct audio_cal_type_sidetone {
473 	struct audio_cal_type_header		cal_hdr;
474 	struct audio_cal_data			cal_data;
475 	struct audio_cal_info_sidetone		cal_info;
476 };
477 
478 struct audio_cal_sidetone {
479 	struct audio_cal_header			hdr;
480 	struct audio_cal_type_sidetone		cal_type;
481 };
482 
483 struct audio_cal_type_lsm_top {
484 	struct audio_cal_type_header	cal_hdr;
485 	struct audio_cal_data		cal_data;
486 	struct audio_cal_info_lsm_top	cal_info;
487 };
488 
489 struct audio_cal_lsm_top {
490 	struct audio_cal_header		hdr;
491 	struct audio_cal_type_lsm_top	cal_type;
492 };
493 
494 struct audio_cal_type_lsm {
495 	struct audio_cal_type_header	cal_hdr;
496 	struct audio_cal_data		cal_data;
497 	struct audio_cal_info_lsm	cal_info;
498 };
499 
500 struct audio_cal_lsm {
501 	struct audio_cal_header		hdr;
502 	struct audio_cal_type_lsm	cal_type;
503 };
504 
505 struct audio_cal_type_voc_top {
506 	struct audio_cal_type_header	cal_hdr;
507 	struct audio_cal_data		cal_data;
508 	struct audio_cal_info_voc_top	cal_info;
509 };
510 
511 struct audio_cal_voc_top {
512 	struct audio_cal_header		hdr;
513 	struct audio_cal_type_voc_top	cal_type;
514 };
515 
516 struct audio_cal_type_vocproc {
517 	struct audio_cal_type_header	cal_hdr;
518 	struct audio_cal_data		cal_data;
519 	struct audio_cal_info_vocproc	cal_info;
520 };
521 
522 struct audio_cal_vocproc {
523 	struct audio_cal_header		hdr;
524 	struct audio_cal_type_vocproc	cal_type;
525 };
526 
527 struct audio_cal_type_vocvol {
528 	struct audio_cal_type_header	cal_hdr;
529 	struct audio_cal_data		cal_data;
530 	struct audio_cal_info_vocvol	cal_info;
531 };
532 
533 struct audio_cal_vocvol {
534 	struct audio_cal_header		hdr;
535 	struct audio_cal_type_vocvol	cal_type;
536 };
537 
538 struct audio_cal_type_vocdev_cfg {
539 	struct audio_cal_type_header		cal_hdr;
540 	struct audio_cal_data			cal_data;
541 	struct audio_cal_info_vocdev_cfg	cal_info;
542 };
543 
544 struct audio_cal_vocdev_cfg {
545 	struct audio_cal_header			hdr;
546 	struct audio_cal_type_vocdev_cfg	cal_type;
547 };
548 
549 struct audio_cal_type_voc_col {
550 	struct audio_cal_type_header	cal_hdr;
551 	struct audio_cal_data		cal_data;
552 	struct audio_cal_info_voc_col	cal_info;
553 };
554 
555 struct audio_cal_voc_col {
556 	struct audio_cal_header		hdr;
557 	struct audio_cal_type_voc_col	cal_type;
558 };
559 
560 /* AUDIO_GET_CALIBRATION */
561 struct audio_cal_type_fb_spk_prot_status {
562 	struct audio_cal_type_header			cal_hdr;
563 	struct audio_cal_data				cal_data;
564 	struct audio_cal_info_msm_spk_prot_status	cal_info;
565 };
566 
567 struct audio_cal_fb_spk_prot_status {
568 	struct audio_cal_header				hdr;
569 	struct audio_cal_type_fb_spk_prot_status	cal_type;
570 };
571 
572 #endif /* _UAPI_MSM_AUDIO_CALIBRATION_H */
573