xref: /OK3568_Linux_fs/kernel/sound/soc/codecs/aw883xx/aw_calib.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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