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
40enum 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
57struct tasdevice_fw_fixed_hdr {
58 unsigned int fwsize;
59 unsigned int ppcver;
60 unsigned int drv_ver;
61};
62
63struct 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
70struct 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
88struct tasdevice_data {
89 char name[64];
90 unsigned int nr_blk;
91 struct tasdev_blk *dev_blks;
92};
93
94struct tasdevice_prog {
95 unsigned int prog_size;
96 struct tasdevice_data dev_data;
97};
98
99struct tasdevice_config {
100 unsigned int cfg_size;
101 char name[64];
102 struct tasdevice_data dev_data;
103};
104
105struct tasdevice_calibration {
106 struct tasdevice_data dev_data;
107};
108
109struct 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
120enum 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
127enum 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
135struct 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
149struct 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
158struct 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
165struct 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
172void tasdevice_select_cfg_blk(void *context, int conf_no,
173 unsigned char block_type);
174void tasdevice_config_info_remove(void *context);
175void tasdevice_dsp_remove(void *context);
176int tasdevice_dsp_parser(void *context);
177int tasdevice_rca_parser(void *context, const struct firmware *fmw);
178void tasdevice_dsp_remove(void *context);
179void tasdevice_calbin_remove(void *context);
180int tasdevice_select_tuningprm_cfg(void *context, int prm,
181 int cfg_no, int rca_conf_no);
182int tasdevice_prmg_load(void *context, int prm_no);
183int tasdevice_prmg_calibdata_load(void *context, int prm_no);
184void tasdevice_tuning_switch(void *context, int state);
185int 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.

source code of linux/include/sound/tas2781-dsp.h