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