File Index
Files and directories
Sign in
FILE

aw88395_device.h

File preview with syntax highlighting.

linux-6.19.14/sound/soc/codecs/aw88395/aw88395_device.h C
  1// SPDX-License-Identifier: GPL-2.0-only
  2//
  3// aw88395_device.h --  AW88395 function for ALSA Audio Driver
  4//
  5// Copyright (c) 2022-2023 AWINIC Technology CO., LTD
  6//
  7// Author: Bruce zhao <zhaolei@awinic.com>
  8//
  9
 10#ifndef __AW88395_DEVICE_FILE_H__
 11#define __AW88395_DEVICE_FILE_H__
 12
 13#include "aw88395.h"
 14#include "aw88395_data_type.h"
 15#include "aw88395_lib.h"
 16
 17#define AW88395_DEV_DEFAULT_CH				(0)
 18#define AW88395_DEV_DSP_CHECK_MAX			(5)
 19#define AW88395_DSP_I2C_WRITES
 20#define AW88395_MAX_RAM_WRITE_BYTE_SIZE		(128)
 21#define AW88395_DSP_ODD_NUM_BIT_TEST			(0x5555)
 22#define AW88395_DSP_EVEN_NUM_BIT_TEST			(0xAAAA)
 23#define AW88395_DSP_ST_CHECK_MAX			(2)
 24#define AW88395_FADE_IN_OUT_DEFAULT			(0)
 25#define AW88395_CALI_RE_MAX				(15000)
 26#define AW88395_CALI_RE_MIN				(4000)
 27#define AW88395_CALI_DELAY_CACL(value)			((value * 32) / 48)
 28
 29#define AW88395_DSP_RE_TO_SHOW_RE(re, shift)		(((re) * (1000)) >> (shift))
 30#define AW88395_SHOW_RE_TO_DSP_RE(re, shift)		(((re) << shift) / (1000))
 31
 32#define AW88395_ACF_FILE				"aw88395_acf.bin"
 33#define AW88395_DEV_SYSST_CHECK_MAX			(10)
 34
 35enum {
 36	AW88395_DEV_VDSEL_DAC = 0,
 37	AW88395_DEV_VDSEL_VSENSE = 1,
 38};
 39
 40enum {
 41	AW88395_DSP_CRC_NA = 0,
 42	AW88395_DSP_CRC_OK = 1,
 43};
 44
 45enum {
 46	AW88395_DSP_FW_UPDATE_OFF = 0,
 47	AW88395_DSP_FW_UPDATE_ON = 1,
 48};
 49
 50enum {
 51	AW88395_FORCE_UPDATE_OFF = 0,
 52	AW88395_FORCE_UPDATE_ON = 1,
 53};
 54
 55enum {
 56	AW88395_1000_US = 1000,
 57	AW88395_2000_US = 2000,
 58	AW88395_3000_US = 3000,
 59	AW88395_4000_US = 4000,
 60	AW88395_5000_US = 5000,
 61	AW88395_10000_US = 10000,
 62	AW88395_100000_US = 100000,
 63};
 64
 65enum {
 66	AW88395_DEV_TYPE_OK = 0,
 67	AW88395_DEV_TYPE_NONE = 1,
 68};
 69
 70
 71enum AW88395_DEV_STATUS {
 72	AW88395_DEV_PW_OFF = 0,
 73	AW88395_DEV_PW_ON,
 74};
 75
 76enum AW88395_DEV_FW_STATUS {
 77	AW88395_DEV_FW_FAILED = 0,
 78	AW88395_DEV_FW_OK,
 79};
 80
 81enum AW88395_DEV_MEMCLK {
 82	AW88395_DEV_MEMCLK_OSC = 0,
 83	AW88395_DEV_MEMCLK_PLL = 1,
 84};
 85
 86enum AW88395_DEV_DSP_CFG {
 87	AW88395_DEV_DSP_WORK = 0,
 88	AW88395_DEV_DSP_BYPASS = 1,
 89};
 90
 91enum {
 92	AW_DSP_16_DATA = 0,
 93	AW_DSP_32_DATA = 1,
 94};
 95
 96enum {
 97	AW88395_NOT_RCV_MODE = 0,
 98	AW88395_RCV_MODE = 1,
 99};
100
101struct aw_profctrl_desc {
102	unsigned int cur_mode;
103};
104
105enum {
106	CALI_RESULT_NORMAL,
107	CALI_RESULT_ERROR,
108};
109
110struct aw_volume_desc {
111	unsigned int init_volume;
112	unsigned int mute_volume;
113	unsigned int ctl_volume;
114	unsigned int max_volume;
115};
116
117struct aw_dsp_mem_desc {
118	unsigned int dsp_madd_reg;
119	unsigned int dsp_mdat_reg;
120	unsigned int dsp_fw_base_addr;
121	unsigned int dsp_cfg_base_addr;
122};
123
124struct aw_vmax_desc {
125	unsigned int init_vmax;
126};
127
128struct aw_cali_delay_desc {
129	unsigned int delay;
130};
131
132#define AW_CALI_CFG_NUM (4)
133struct cali_cfg {
134	uint32_t data[AW_CALI_CFG_NUM];
135};
136
137struct aw_cali_backup_desc {
138	unsigned int dsp_ng_cfg;
139	unsigned int dsp_lp_cfg;
140};
141
142struct aw_cali_desc {
143	u32 cali_re;
144	u32 ra;
145	bool cali_switch;
146	bool cali_running;
147	uint16_t cali_result;
148	uint16_t store_vol;
149	struct cali_cfg cali_cfg;
150	struct aw_cali_backup_desc backup_info;
151};
152
153struct aw_container {
154	int len;
155	u8 data[];
156};
157
158struct aw_device {
159	int status;
160	struct mutex dsp_lock;
161
162	unsigned char prof_cur;
163	unsigned char prof_index;
164	unsigned char dsp_crc_st;
165	unsigned char dsp_cfg;
166	u16 chip_id;
167
168	unsigned int channel;
169	unsigned int fade_step;
170	unsigned int prof_data_type;
171
172	struct i2c_client *i2c;
173	struct device *dev;
174	struct regmap *regmap;
175	char *acf;
176
177	u32 dsp_fw_len;
178	u32 dsp_cfg_len;
179	u8 platform;
180	u8 fw_status;
181
182	unsigned int fade_in_time;
183	unsigned int fade_out_time;
184
185	struct aw_prof_info prof_info;
186	struct aw_sec_data_desc crc_dsp_cfg;
187	struct aw_profctrl_desc profctrl_desc;
188	struct aw_volume_desc volume_desc;
189	struct aw_dsp_mem_desc dsp_mem_desc;
190	struct aw_vmax_desc vmax_desc;
191
192	struct aw_cali_delay_desc cali_delay_desc;
193	struct aw_cali_desc cali_desc;
194
195};
196
197int aw88395_init(struct aw_device **aw_dev, struct i2c_client *i2c, struct regmap *regmap);
198int aw88395_dev_init(struct aw_device *aw_dev, struct aw_container *aw_cfg);
199int aw88395_dev_start(struct aw_device *aw_dev);
200int aw88395_dev_stop(struct aw_device *aw_dev);
201int aw88395_dev_fw_update(struct aw_device *aw_dev, bool up_dsp_fw_en, bool force_up_en);
202
203void aw88395_dev_set_volume(struct aw_device *aw_dev, unsigned short set_vol);
204int aw88395_dev_get_prof_data(struct aw_device *aw_dev, int index,
205			struct aw_prof_desc **prof_desc);
206int aw88395_dev_get_prof_name(struct aw_device *aw_dev, int index, char **prof_name);
207int aw88395_dev_set_profile_index(struct aw_device *aw_dev, int index);
208int aw88395_dev_get_profile_index(struct aw_device *aw_dev);
209int aw88395_dev_get_profile_count(struct aw_device *aw_dev);
210int aw88395_dev_load_acf_check(struct aw_device *aw_dev, struct aw_container *aw_cfg);
211int aw88395_dev_cfg_load(struct aw_device *aw_dev, struct aw_container *aw_cfg);
212void aw88395_dev_mute(struct aw_device *aw_dev, bool is_mute);
213int aw_dev_dsp_write(struct aw_device *aw_dev,
214		unsigned short dsp_addr, unsigned int dsp_data, unsigned char data_type);
215int aw_dev_dsp_read(struct aw_device *aw_dev,
216		unsigned short dsp_addr, unsigned int *dsp_data, unsigned char data_type);
217
218#endif
~/ Read-only file preview.