Commit | Line | Data |
---|---|---|
678f38eb SD |
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | // | |
3 | // ALSA SoC Texas Instruments TAS2781 Audio Smart Amplifier | |
4 | // | |
b195acf5 | 5 | // Copyright (C) 2022 - 2024 Texas Instruments Incorporated |
678f38eb SD |
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 | ||
b195acf5 SD |
16 | #ifndef __TAS2781_DSP_H__ |
17 | #define __TAS2781_DSP_H__ | |
678f38eb SD |
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; | |
4c556d1e SD |
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; | |
678f38eb SD |
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); | |
678f38eb SD |
183 | void tasdevice_tuning_switch(void *context, int state); |
184 | int tas2781_load_calibration(void *context, char *file_name, | |
185 | unsigned short i); | |
186 | ||
187 | #endif |