Warning: This file is not a C or C++ file. It does not have highlighting.
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
---|---|
2 | // |
3 | // ALSA SoC Texas Instruments TAS2781 Audio Smart Amplifier |
4 | // |
5 | // Copyright (C) 2022 - 2023 Texas Instruments Incorporated |
6 | // https://www.ti.com |
7 | // |
8 | // The TAS2781 driver implements a flexible and configurable |
9 | // algo coefficient setting for one, two, or even multiple |
10 | // TAS2781 chips. |
11 | // |
12 | // Author: Shenghao Ding <shenghao-ding@ti.com> |
13 | // Author: Kevin Lu <kevin-lu@ti.com> |
14 | // |
15 | |
16 | #ifndef __TASDEVICE_DSP_H__ |
17 | #define __TASDEVICE_DSP_H__ |
18 | |
19 | #define MAIN_ALL_DEVICES 0x0d |
20 | #define MAIN_DEVICE_A 0x01 |
21 | #define MAIN_DEVICE_B 0x08 |
22 | #define MAIN_DEVICE_C 0x10 |
23 | #define MAIN_DEVICE_D 0x14 |
24 | #define COEFF_DEVICE_A 0x03 |
25 | #define COEFF_DEVICE_B 0x0a |
26 | #define COEFF_DEVICE_C 0x11 |
27 | #define COEFF_DEVICE_D 0x15 |
28 | #define PRE_DEVICE_A 0x04 |
29 | #define PRE_DEVICE_B 0x0b |
30 | #define PRE_DEVICE_C 0x12 |
31 | #define PRE_DEVICE_D 0x16 |
32 | |
33 | #define PPC3_VERSION 0x4100 |
34 | #define PPC3_VERSION_TAS2781 0x14600 |
35 | #define TASDEVICE_DEVICE_SUM 8 |
36 | #define TASDEVICE_CONFIG_SUM 64 |
37 | |
38 | #define TASDEVICE_MAX_CHANNELS 8 |
39 | |
40 | enum tasdevice_dsp_dev_idx { |
41 | TASDEVICE_DSP_TAS_2555 = 0, |
42 | TASDEVICE_DSP_TAS_2555_STEREO, |
43 | TASDEVICE_DSP_TAS_2557_MONO, |
44 | TASDEVICE_DSP_TAS_2557_DUAL_MONO, |
45 | TASDEVICE_DSP_TAS_2559, |
46 | TASDEVICE_DSP_TAS_2563, |
47 | TASDEVICE_DSP_TAS_2563_DUAL_MONO = 7, |
48 | TASDEVICE_DSP_TAS_2563_QUAD, |
49 | TASDEVICE_DSP_TAS_2563_21, |
50 | TASDEVICE_DSP_TAS_2781, |
51 | TASDEVICE_DSP_TAS_2781_DUAL_MONO, |
52 | TASDEVICE_DSP_TAS_2781_21, |
53 | TASDEVICE_DSP_TAS_2781_QUAD, |
54 | TASDEVICE_DSP_TAS_MAX_DEVICE |
55 | }; |
56 | |
57 | struct tasdevice_fw_fixed_hdr { |
58 | unsigned int fwsize; |
59 | unsigned int ppcver; |
60 | unsigned int drv_ver; |
61 | }; |
62 | |
63 | struct tasdevice_dspfw_hdr { |
64 | struct tasdevice_fw_fixed_hdr fixed_hdr; |
65 | unsigned short device_family; |
66 | unsigned short device; |
67 | unsigned char ndev; |
68 | }; |
69 | |
70 | struct tasdev_blk { |
71 | int nr_retry; |
72 | unsigned int type; |
73 | unsigned char is_pchksum_present; |
74 | unsigned char pchksum; |
75 | unsigned char is_ychksum_present; |
76 | unsigned char ychksum; |
77 | unsigned int nr_cmds; |
78 | unsigned int blk_size; |
79 | unsigned int nr_subblocks; |
80 | /* fixed m68k compiling issue, storing the dev_idx as a member of block |
81 | * can reduce unnecessary timeand system resource comsumption of |
82 | * dev_idx mapping every time the block data writing to the dsp. |
83 | */ |
84 | unsigned char dev_idx; |
85 | unsigned char *data; |
86 | }; |
87 | |
88 | struct tasdevice_data { |
89 | char name[64]; |
90 | unsigned int nr_blk; |
91 | struct tasdev_blk *dev_blks; |
92 | }; |
93 | |
94 | struct tasdevice_prog { |
95 | unsigned int prog_size; |
96 | struct tasdevice_data dev_data; |
97 | }; |
98 | |
99 | struct tasdevice_config { |
100 | unsigned int cfg_size; |
101 | char name[64]; |
102 | struct tasdevice_data dev_data; |
103 | }; |
104 | |
105 | struct tasdevice_calibration { |
106 | struct tasdevice_data dev_data; |
107 | }; |
108 | |
109 | struct tasdevice_fw { |
110 | struct tasdevice_dspfw_hdr fw_hdr; |
111 | unsigned short nr_programs; |
112 | struct tasdevice_prog *programs; |
113 | unsigned short nr_configurations; |
114 | struct tasdevice_config *configs; |
115 | unsigned short nr_calibrations; |
116 | struct tasdevice_calibration *calibrations; |
117 | struct device *dev; |
118 | }; |
119 | |
120 | enum tasdevice_dsp_fw_state { |
121 | TASDEVICE_DSP_FW_NONE = 0, |
122 | TASDEVICE_DSP_FW_PENDING, |
123 | TASDEVICE_DSP_FW_FAIL, |
124 | TASDEVICE_DSP_FW_ALL_OK, |
125 | }; |
126 | |
127 | enum tasdevice_bin_blk_type { |
128 | TASDEVICE_BIN_BLK_COEFF = 1, |
129 | TASDEVICE_BIN_BLK_POST_POWER_UP, |
130 | TASDEVICE_BIN_BLK_PRE_SHUTDOWN, |
131 | TASDEVICE_BIN_BLK_PRE_POWER_UP, |
132 | TASDEVICE_BIN_BLK_POST_SHUTDOWN |
133 | }; |
134 | |
135 | struct tasdevice_rca_hdr { |
136 | unsigned int img_sz; |
137 | unsigned int checksum; |
138 | unsigned int binary_version_num; |
139 | unsigned int drv_fw_version; |
140 | unsigned char plat_type; |
141 | unsigned char dev_family; |
142 | unsigned char reserve; |
143 | unsigned char ndev; |
144 | unsigned char devs[TASDEVICE_DEVICE_SUM]; |
145 | unsigned int nconfig; |
146 | unsigned int config_size[TASDEVICE_CONFIG_SUM]; |
147 | }; |
148 | |
149 | struct tasdev_blk_data { |
150 | unsigned char dev_idx; |
151 | unsigned char block_type; |
152 | unsigned short yram_checksum; |
153 | unsigned int block_size; |
154 | unsigned int n_subblks; |
155 | unsigned char *regdata; |
156 | }; |
157 | |
158 | struct tasdevice_config_info { |
159 | unsigned int nblocks; |
160 | unsigned int real_nblocks; |
161 | unsigned char active_dev; |
162 | struct tasdev_blk_data **blk_data; |
163 | }; |
164 | |
165 | struct tasdevice_rca { |
166 | struct tasdevice_rca_hdr fw_hdr; |
167 | int ncfgs; |
168 | struct tasdevice_config_info **cfg_info; |
169 | int profile_cfg_id; |
170 | }; |
171 | |
172 | void tasdevice_select_cfg_blk(void *context, int conf_no, |
173 | unsigned char block_type); |
174 | void tasdevice_config_info_remove(void *context); |
175 | void tasdevice_dsp_remove(void *context); |
176 | int tasdevice_dsp_parser(void *context); |
177 | int tasdevice_rca_parser(void *context, const struct firmware *fmw); |
178 | void tasdevice_dsp_remove(void *context); |
179 | void tasdevice_calbin_remove(void *context); |
180 | int tasdevice_select_tuningprm_cfg(void *context, int prm, |
181 | int cfg_no, int rca_conf_no); |
182 | int tasdevice_prmg_load(void *context, int prm_no); |
183 | int tasdevice_prmg_calibdata_load(void *context, int prm_no); |
184 | void tasdevice_tuning_switch(void *context, int state); |
185 | int tas2781_load_calibration(void *context, char *file_name, |
186 | unsigned short i); |
187 | |
188 | #endif |
189 |
Warning: This file is not a C or C++ file. It does not have highlighting.