Viewing file: tas2781-dsp.h (4.85 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* SPDX-License-Identifier: GPL-2.0 */ // // ALSA SoC Texas Instruments TAS2781 Audio Smart Amplifier // // Copyright (C) 2022 - 2024 Texas Instruments Incorporated // https://www.ti.com // // The TAS2781 driver implements a flexible and configurable // algo coefficient setting for one, two, or even multiple // TAS2781 chips. // // Author: Shenghao Ding <[email protected]> // Author: Kevin Lu <[email protected]> //
#ifndef __TAS2781_DSP_H__ #define __TAS2781_DSP_H__
#define MAIN_ALL_DEVICES 0x0d #define MAIN_DEVICE_A 0x01 #define MAIN_DEVICE_B 0x08 #define MAIN_DEVICE_C 0x10 #define MAIN_DEVICE_D 0x14 #define COEFF_DEVICE_A 0x03 #define COEFF_DEVICE_B 0x0a #define COEFF_DEVICE_C 0x11 #define COEFF_DEVICE_D 0x15 #define PRE_DEVICE_A 0x04 #define PRE_DEVICE_B 0x0b #define PRE_DEVICE_C 0x12 #define PRE_DEVICE_D 0x16
#define PPC3_VERSION 0x4100 #define PPC3_VERSION_TAS2781 0x14600 #define TASDEVICE_DEVICE_SUM 8 #define TASDEVICE_CONFIG_SUM 64
#define TASDEVICE_MAX_CHANNELS 8
enum tasdevice_dsp_dev_idx { TASDEVICE_DSP_TAS_2555 = 0, TASDEVICE_DSP_TAS_2555_STEREO, TASDEVICE_DSP_TAS_2557_MONO, TASDEVICE_DSP_TAS_2557_DUAL_MONO, TASDEVICE_DSP_TAS_2559, TASDEVICE_DSP_TAS_2563, TASDEVICE_DSP_TAS_2563_DUAL_MONO = 7, TASDEVICE_DSP_TAS_2563_QUAD, TASDEVICE_DSP_TAS_2563_21, TASDEVICE_DSP_TAS_2781, TASDEVICE_DSP_TAS_2781_DUAL_MONO, TASDEVICE_DSP_TAS_2781_21, TASDEVICE_DSP_TAS_2781_QUAD, TASDEVICE_DSP_TAS_MAX_DEVICE };
struct tasdevice_fw_fixed_hdr { unsigned int fwsize; unsigned int ppcver; unsigned int drv_ver; };
struct tasdevice_dspfw_hdr { struct tasdevice_fw_fixed_hdr fixed_hdr; unsigned short device_family; unsigned short device; unsigned char ndev; };
struct tasdev_blk { int nr_retry; unsigned int type; unsigned char is_pchksum_present; unsigned char pchksum; unsigned char is_ychksum_present; unsigned char ychksum; unsigned int nr_cmds; unsigned int blk_size; unsigned int nr_subblocks; /* fixed m68k compiling issue, storing the dev_idx as a member of block * can reduce unnecessary timeand system resource comsumption of * dev_idx mapping every time the block data writing to the dsp. */ unsigned char dev_idx; unsigned char *data; };
struct tasdevice_data { char name[64]; unsigned int nr_blk; struct tasdev_blk *dev_blks; };
struct tasdevice_prog { unsigned int prog_size; struct tasdevice_data dev_data; };
struct tasdevice_config { unsigned int cfg_size; char name[64]; struct tasdevice_data dev_data; };
struct tasdevice_calibration { struct tasdevice_data dev_data; };
struct tasdevice_fw { struct tasdevice_dspfw_hdr fw_hdr; unsigned short nr_programs; struct tasdevice_prog *programs; unsigned short nr_configurations; struct tasdevice_config *configs; unsigned short nr_calibrations; struct tasdevice_calibration *calibrations; struct device *dev; };
enum tasdevice_fw_state { /* Driver in startup mode, not load any firmware. */ TASDEVICE_DSP_FW_PENDING, /* DSP firmware in the system, but parsing error. */ TASDEVICE_DSP_FW_FAIL, /* * Only RCA (Reconfigurable Architecture) firmware load * successfully. */ TASDEVICE_RCA_FW_OK, /* Both RCA and DSP firmware load successfully. */ TASDEVICE_DSP_FW_ALL_OK, };
enum tasdevice_bin_blk_type { TASDEVICE_BIN_BLK_COEFF = 1, TASDEVICE_BIN_BLK_POST_POWER_UP, TASDEVICE_BIN_BLK_PRE_SHUTDOWN, TASDEVICE_BIN_BLK_PRE_POWER_UP, TASDEVICE_BIN_BLK_POST_SHUTDOWN };
struct tasdevice_rca_hdr { unsigned int img_sz; unsigned int checksum; unsigned int binary_version_num; unsigned int drv_fw_version; unsigned char plat_type; unsigned char dev_family; unsigned char reserve; unsigned char ndev; unsigned char devs[TASDEVICE_DEVICE_SUM]; unsigned int nconfig; unsigned int config_size[TASDEVICE_CONFIG_SUM]; };
struct tasdev_blk_data { unsigned char dev_idx; unsigned char block_type; unsigned short yram_checksum; unsigned int block_size; unsigned int n_subblks; unsigned char *regdata; };
struct tasdevice_config_info { unsigned int nblocks; unsigned int real_nblocks; unsigned char active_dev; struct tasdev_blk_data **blk_data; };
struct tasdevice_rca { struct tasdevice_rca_hdr fw_hdr; int ncfgs; struct tasdevice_config_info **cfg_info; int profile_cfg_id; };
void tasdevice_select_cfg_blk(void *context, int conf_no, unsigned char block_type); void tasdevice_config_info_remove(void *context); void tasdevice_dsp_remove(void *context); int tasdevice_dsp_parser(void *context); int tasdevice_rca_parser(void *context, const struct firmware *fmw); void tasdevice_dsp_remove(void *context); void tasdevice_calbin_remove(void *context); int tasdevice_select_tuningprm_cfg(void *context, int prm, int cfg_no, int rca_conf_no); int tasdevice_prmg_load(void *context, int prm_no); void tasdevice_tuning_switch(void *context, int state); int tas2781_load_calibration(void *context, char *file_name, unsigned short i);
#endif
|