194 lines
4.4 KiB
C
194 lines
4.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0
|
|
* aw882xx_calib.h
|
|
*
|
|
* Copyright (c) 2020 AWINIC Technology CO., LTD
|
|
*
|
|
* Author: Nick Li <liweilei@awinic.com.cn>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2 of the License, or (at your
|
|
* option) any later version.
|
|
*/
|
|
|
|
#ifndef __AW882XX_CALIBRATION_H__
|
|
#define __AW882XX_CALIBRATION_H__
|
|
|
|
#define AW_CALI_READ_RE_TIMES (8)
|
|
#define AW_CALI_READ_F0_Q_TIMES (5)
|
|
#define AW_ERRO_CALI_VALUE (0)
|
|
#define AW_CALI_RE_DEFAULT_TIMER (3000)
|
|
|
|
#define AW_CALI_RE_MAX (15000)
|
|
#define AW_CALI_RE_MIN (4000)
|
|
|
|
#define AW_CALI_CFG_NUM (3)
|
|
#define AW_CALI_DATA_NUM (6)
|
|
#define AW_PARAMS_NUM (600)
|
|
#define AW_KILO_PARAMS_NUM (1000)
|
|
|
|
#define AW_CALI_RE_DEFAULT_MAX (50000)
|
|
#define AW_CALI_RE_DEFAULT_MIN (1000)
|
|
|
|
#define AW_DEV_RE_RANGE (RE_RANGE_NUM * AW_DEV_CH_MAX)
|
|
|
|
struct aw_device;
|
|
|
|
enum afe_module_type {
|
|
AW_RX_MODULE = 0,
|
|
AW_TX_MODULE = 1,
|
|
};
|
|
|
|
enum {
|
|
MSG_CALI_DISABLE_DATA = 0,
|
|
MSG_CALI_RE_ENABLE_DATA,
|
|
MSG_CALI_F0_ENABLE_DATA,
|
|
};
|
|
|
|
struct cali_cfg {
|
|
int32_t data[AW_CALI_CFG_NUM];
|
|
};
|
|
|
|
struct cali_data {
|
|
int32_t data[AW_CALI_DATA_NUM];
|
|
};
|
|
|
|
struct params_data {
|
|
int32_t data[AW_PARAMS_NUM];
|
|
};
|
|
|
|
struct ptr_params_data {
|
|
int len;
|
|
int32_t *data;
|
|
};
|
|
|
|
struct f0_q_data {
|
|
int32_t data[4];
|
|
};
|
|
|
|
enum {
|
|
AW_IOCTL_MSG_IOCTL = 0,
|
|
AW_IOCTL_MSG_RD_DSP,
|
|
AW_IOCTL_MSG_WR_DSP
|
|
};
|
|
|
|
enum {
|
|
CALI_CHECK_DISABLE = 0,
|
|
CALI_CHECK_ENABLE = 1,
|
|
};
|
|
|
|
enum {
|
|
CALI_RESULT_NONE = 0,
|
|
CALI_RESULT_NORMAL = 1,
|
|
CALI_RESULT_ERROR = -1,
|
|
};
|
|
|
|
enum {
|
|
RE_MIN_FLAG = 0,
|
|
RE_MAX_FLAG = 1,
|
|
RE_RANGE_NUM = 2,
|
|
};
|
|
|
|
enum {
|
|
CALI_DATA_RE = 0,
|
|
CALI_DATA_F0,
|
|
CALI_DATA_F0_Q,
|
|
};
|
|
|
|
struct re_data {
|
|
uint32_t re_range[2];
|
|
};
|
|
|
|
#define AW_IOCTL_MSG_VERSION (0)
|
|
typedef struct {
|
|
int32_t type;
|
|
int32_t opcode_id;
|
|
int32_t version;
|
|
int32_t data_len;
|
|
char *data_buf;
|
|
int32_t reseriver[2];
|
|
} aw_ioctl_msg_t;
|
|
|
|
#define AW_IOCTL_MAGIC 'a'
|
|
#define AW_IOCTL_SET_CALI_CFG _IOWR(AW_IOCTL_MAGIC, 1, struct cali_cfg)
|
|
#define AW_IOCTL_GET_CALI_CFG _IOWR(AW_IOCTL_MAGIC, 2, struct cali_cfg)
|
|
#define AW_IOCTL_GET_CALI_DATA _IOWR(AW_IOCTL_MAGIC, 3, struct cali_data)
|
|
#define AW_IOCTL_SET_NOISE _IOWR(AW_IOCTL_MAGIC, 4, int32_t)
|
|
#define AW_IOCTL_GET_F0 _IOWR(AW_IOCTL_MAGIC, 5, int32_t)
|
|
#define AW_IOCTL_SET_CALI_RE _IOWR(AW_IOCTL_MAGIC, 6, int32_t)
|
|
#define AW_IOCTL_GET_CALI_RE _IOWR(AW_IOCTL_MAGIC, 7, int32_t)
|
|
#define AW_IOCTL_SET_VMAX _IOWR(AW_IOCTL_MAGIC, 8, int32_t)
|
|
#define AW_IOCTL_GET_VMAX _IOWR(AW_IOCTL_MAGIC, 9, int32_t)
|
|
#define AW_IOCTL_SET_PARAM _IOWR(AW_IOCTL_MAGIC, 10, struct params_data)
|
|
#define AW_IOCTL_ENABLE_CALI _IOWR(AW_IOCTL_MAGIC, 11, int8_t)
|
|
#define AW_IOCTL_SET_PTR_PARAM_NUM _IOWR(AW_IOCTL_MAGIC, 12, struct ptr_params_data)
|
|
#define AW_IOCTL_GET_F0_Q _IOWR(AW_IOCTL_MAGIC, 13, struct f0_q_data)
|
|
#define AW_IOCTL_SET_DSP_HMUTE _IOWR(AW_IOCTL_MAGIC, 14, int32_t)
|
|
#define AW_IOCTL_SET_CALI_CFG_FLAG _IOWR(AW_IOCTL_MAGIC, 15, int32_t)
|
|
#define AW_IOCTL_MSG _IOWR(AW_IOCTL_MAGIC, 16, aw_ioctl_msg_t)
|
|
#define AW_IOCTL_GET_RE_RANGE _IOWR(AW_IOCTL_MAGIC, 17, struct re_data)
|
|
|
|
enum{
|
|
AW_CALI_MODE_NONE = 0,
|
|
AW_CALI_MODE_ALL,
|
|
AW_CALI_MODE_MAX,
|
|
};
|
|
|
|
enum {
|
|
AW_CALI_CMD_RE = 0,
|
|
AW_CALI_CMD_F0,
|
|
AW_CALI_CMD_RE_F0,
|
|
AW_CALI_CMD_F0_Q,
|
|
AW_CALI_CMD_RE_F0_Q,
|
|
};
|
|
|
|
enum {
|
|
CALI_OPS_HMUTE = 0X0001,
|
|
CALI_OPS_NOISE = 0X0002,
|
|
};
|
|
|
|
enum {
|
|
CALI_TYPE_RE = 0,
|
|
CALI_TYPE_F0,
|
|
};
|
|
|
|
enum {
|
|
CALI_STR_NONE = 0,
|
|
CALI_STR_CALI_RE_F0,
|
|
CALI_STR_CALI_RE,
|
|
CALI_STR_CALI_F0,
|
|
CALI_STR_SET_RE,
|
|
CALI_STR_SHOW_RE, /*show cali_re*/
|
|
CALI_STR_SHOW_R0, /*show real r0*/
|
|
CALI_STR_SHOW_CALI_F0, /*GET DEV CALI_F0*/
|
|
CALI_STR_SHOW_F0, /*SHOW REAL F0*/
|
|
CALI_STR_SHOW_TE,
|
|
CALI_STR_SHOW_ST,
|
|
CALI_STR_DEV_SEL, /*switch device*/
|
|
CALI_STR_VER,
|
|
CALI_STR_DEV_NUM,
|
|
CALI_STR_CALI_F0_Q,
|
|
CALI_STR_SHOW_F0_Q,
|
|
CALI_STR_SHOW_RE_RANGE,
|
|
CALI_STR_MAX,
|
|
};
|
|
|
|
struct aw_cali_desc {
|
|
unsigned char status;
|
|
unsigned char mode; /*0:NONE 1:ATTR 2:CLASS 3:MISC */
|
|
int32_t cali_re; /*set cali_re*/
|
|
int32_t cali_f0; /*store cali_f0*/
|
|
int32_t cali_q; /*store cali q*/
|
|
int8_t cali_result;
|
|
uint8_t cali_check_st;
|
|
};
|
|
|
|
int aw882xx_cali_init(struct aw_cali_desc *cali_desc);
|
|
void aw882xx_cali_deinit(struct aw_cali_desc *cali_desc);
|
|
int aw882xx_cali_svc_get_cali_status(void);
|
|
int aw882xx_cali_read_re_from_nvram(int32_t *cali_re, int32_t ch_index);
|
|
bool aw882xx_cali_check_result(struct aw_cali_desc *cali_desc);
|
|
|
|
|
|
#endif
|