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