1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0+ */ 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun #ifndef __AWINIC_CALIBRATION_H__ 4*4882a593Smuzhiyun #define __AWINIC_CALIBRATION_H__ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun /*#define AW_CALI_STORE_EXAMPLE*/ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #define AW_CALI_STORE_EXAMPLE 9*4882a593Smuzhiyun #define AW_ERRO_CALI_RE_VALUE (0) 10*4882a593Smuzhiyun #define AW_ERRO_CALI_F0_VALUE (2600) 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #define AW_CALI_RE_DEFAULT_TIMER (3000) 13*4882a593Smuzhiyun #define MSGS_SIZE (512) 14*4882a593Smuzhiyun #define RESERVED_SIZE (252) 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #define AW_CALI_ALL_DEV (0xFFFFFFFF) 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #define AW_CALI_RE_MAX (15000) 20*4882a593Smuzhiyun #define AW_CALI_RE_MIN (4000) 21*4882a593Smuzhiyun #define AW_CALI_CFG_NUM (4) 22*4882a593Smuzhiyun #define AW_CALI_F0_DATA_NUM (4) 23*4882a593Smuzhiyun #define AW_CALI_READ_CNT_MAX (8) 24*4882a593Smuzhiyun #define AW_CALI_DATA_SUM_RM (2) 25*4882a593Smuzhiyun #define AW_DSP_RE_TO_SHOW_RE(re, shift) (((re) * (1000)) >> (shift)) 26*4882a593Smuzhiyun #define AW_SHOW_RE_TO_DSP_RE(re, shift) (((re) << shift) / (1000)) 27*4882a593Smuzhiyun #define AW_CALI_F0_TIME (5 * 1000) 28*4882a593Smuzhiyun #define F0_READ_CNT_MAX (5) 29*4882a593Smuzhiyun #define AW_FS_CFG_MAX (11) 30*4882a593Smuzhiyun #define AW_DEV_CH_MAX (16) 31*4882a593Smuzhiyun #define AW_DEV_RE_RANGE (RE_RANGE_NUM * AW_DEV_CH_MAX) 32*4882a593Smuzhiyun #define AW_TE_CACL_VALUE(te, coil_alpha) ((int32_t)(((int32_t)te << 18) / (coil_alpha))) 33*4882a593Smuzhiyun #define AW_RE_REALTIME_VALUE(re_cacl, te_cacl) ((re_cacl) + (int32_t)((int64_t)((te_cacl) * (re_cacl)) >> 14)) 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun enum { 36*4882a593Smuzhiyun CALI_CHECK_DISABLE = 0, 37*4882a593Smuzhiyun CALI_CHECK_ENABLE = 1, 38*4882a593Smuzhiyun }; 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun enum { 41*4882a593Smuzhiyun CALI_RESULT_NONE = 0, 42*4882a593Smuzhiyun CALI_RESULT_NORMAL = 1, 43*4882a593Smuzhiyun CALI_RESULT_ERROR = -1, 44*4882a593Smuzhiyun }; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun enum { 47*4882a593Smuzhiyun CALI_OPS_HMUTE = 0X0001, 48*4882a593Smuzhiyun CALI_OPS_NOISE = 0X0002, 49*4882a593Smuzhiyun }; 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun enum { 52*4882a593Smuzhiyun CALI_TYPE_RE = 0, 53*4882a593Smuzhiyun CALI_TYPE_F0, 54*4882a593Smuzhiyun }; 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun enum{ 57*4882a593Smuzhiyun AW_CALI_MODE_NONE = 0, 58*4882a593Smuzhiyun AW_CALI_MODE_ATTR, 59*4882a593Smuzhiyun AW_CALI_MODE_CLASS, 60*4882a593Smuzhiyun AW_CALI_MODE_MISC, 61*4882a593Smuzhiyun AW_CALI_MODE_MAX 62*4882a593Smuzhiyun }; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun enum { 65*4882a593Smuzhiyun GET_RE_TYPE = 0, 66*4882a593Smuzhiyun GET_F0_TYPE, 67*4882a593Smuzhiyun GET_Q_TYPE, 68*4882a593Smuzhiyun }; 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun enum { 71*4882a593Smuzhiyun AW_CALI_CMD_RE = 0, 72*4882a593Smuzhiyun AW_CALI_CMD_F0, 73*4882a593Smuzhiyun AW_CALI_CMD_RE_F0, 74*4882a593Smuzhiyun AW_CALI_CMD_F0_Q, 75*4882a593Smuzhiyun AW_CALI_CMD_RE_F0_Q, 76*4882a593Smuzhiyun }; 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun enum { 79*4882a593Smuzhiyun CALI_STR_NONE = 0, 80*4882a593Smuzhiyun CALI_STR_CALI_RE_F0, 81*4882a593Smuzhiyun CALI_STR_CALI_RE, 82*4882a593Smuzhiyun CALI_STR_CALI_F0, 83*4882a593Smuzhiyun CALI_STR_SET_RE, 84*4882a593Smuzhiyun CALI_STR_SHOW_RE, /*show cali_re*/ 85*4882a593Smuzhiyun CALI_STR_SHOW_R0, /*show real r0*/ 86*4882a593Smuzhiyun CALI_STR_SHOW_CALI_F0, /*GET DEV CALI_F0*/ 87*4882a593Smuzhiyun CALI_STR_SHOW_F0, /*SHOW REAL F0*/ 88*4882a593Smuzhiyun CALI_STR_SHOW_TE, 89*4882a593Smuzhiyun CALI_STR_DEV_SEL, /*switch device*/ 90*4882a593Smuzhiyun CALI_STR_VER, 91*4882a593Smuzhiyun CALI_STR_SHOW_RE_RANGE, 92*4882a593Smuzhiyun CALI_STR_MAX, 93*4882a593Smuzhiyun }; 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun enum { 96*4882a593Smuzhiyun RE_MIN_FLAG = 0, 97*4882a593Smuzhiyun RE_MAX_FLAG = 1, 98*4882a593Smuzhiyun RE_RANGE_NUM = 2, 99*4882a593Smuzhiyun }; 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun struct re_data { 102*4882a593Smuzhiyun uint32_t re_range[2]; 103*4882a593Smuzhiyun }; 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun #define AW_IOCTL_MAGIC 'a' 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun #define AW_IOCTL_GET_F0 _IOWR(AW_IOCTL_MAGIC, 5, int32_t) 109*4882a593Smuzhiyun #define AW_IOCTL_SET_CALI_RE _IOWR(AW_IOCTL_MAGIC, 6, int32_t) 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun #define AW_IOCTL_GET_RE _IOWR(AW_IOCTL_MAGIC, 17, int32_t) 112*4882a593Smuzhiyun #define AW_IOCTL_GET_CALI_F0 _IOWR(AW_IOCTL_MAGIC, 18, int32_t) 113*4882a593Smuzhiyun #define AW_IOCTL_GET_REAL_R0 _IOWR(AW_IOCTL_MAGIC, 19, int32_t) 114*4882a593Smuzhiyun #define AW_IOCTL_GET_TE _IOWR(AW_IOCTL_MAGIC, 20, int32_t) 115*4882a593Smuzhiyun #define AW_IOCTL_GET_RE_RANGE _IOWR(AW_IOCTL_MAGIC, 21, struct re_data) 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun struct cali_cfg { 118*4882a593Smuzhiyun uint32_t data[AW_CALI_CFG_NUM]; 119*4882a593Smuzhiyun }; 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun struct aw_cali_desc { 123*4882a593Smuzhiyun bool status; 124*4882a593Smuzhiyun struct cali_cfg cali_cfg; 125*4882a593Smuzhiyun uint16_t store_vol; 126*4882a593Smuzhiyun uint32_t cali_re; /*cali value*/ 127*4882a593Smuzhiyun uint32_t f0; 128*4882a593Smuzhiyun uint32_t q; 129*4882a593Smuzhiyun uint32_t ra; 130*4882a593Smuzhiyun int8_t cali_result; 131*4882a593Smuzhiyun uint8_t cali_check_st; 132*4882a593Smuzhiyun }; 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun void aw_cali_init(struct aw_cali_desc *cali_desc); 135*4882a593Smuzhiyun void aw_cali_deinit(struct aw_cali_desc *cali_desc); 136*4882a593Smuzhiyun bool aw_cali_svc_get_cali_status(struct aw_cali_desc *cali_desc); 137*4882a593Smuzhiyun int aw_cali_svc_set_cali_re_to_dsp(struct aw_cali_desc *cali_desc); 138*4882a593Smuzhiyun int aw_cali_svc_get_ra(struct aw_cali_desc *cali_desc); 139*4882a593Smuzhiyun int aw_cali_svc_get_dev_te(struct aw_cali_desc *cali_desc, int32_t *te); 140*4882a593Smuzhiyun int aw_cali_get_cali_re(struct aw_cali_desc *cali_desc); 141*4882a593Smuzhiyun int aw_cali_read_cali_re_from_dsp(struct aw_cali_desc *cali_desc, uint32_t *re); 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun #endif 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun 148