brintos

brintos / linux-shallow public Read only

0
0
Text · 4.8 KiB · 3cda9da Raw
195 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2//3// ALSA SoC Texas Instruments TAS2781 Audio Smart Amplifier4//5// Copyright (C) 2022 - 2024 Texas Instruments Incorporated6// https://www.ti.com7//8// The TAS2781 driver implements a flexible and configurable9// algo coefficient setting for one, two, or even multiple10// TAS2781 chips.11//12// Author: Shenghao Ding <shenghao-ding@ti.com>13// Author: Kevin Lu <kevin-lu@ti.com>14//15 16#ifndef __TAS2781_DSP_H__17#define __TAS2781_DSP_H__18 19#define MAIN_ALL_DEVICES			0x0d20#define MAIN_DEVICE_A				0x0121#define MAIN_DEVICE_B				0x0822#define MAIN_DEVICE_C				0x1023#define MAIN_DEVICE_D				0x1424#define COEFF_DEVICE_A				0x0325#define COEFF_DEVICE_B				0x0a26#define COEFF_DEVICE_C				0x1127#define COEFF_DEVICE_D				0x1528#define PRE_DEVICE_A				0x0429#define PRE_DEVICE_B				0x0b30#define PRE_DEVICE_C				0x1231#define PRE_DEVICE_D				0x1632 33#define PPC3_VERSION				0x410034#define PPC3_VERSION_TAS2781			0x1460035#define TASDEVICE_DEVICE_SUM			836#define TASDEVICE_CONFIG_SUM			6437 38#define TASDEVICE_MAX_CHANNELS			839 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_DEVICE55};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 block81	 * can reduce unnecessary timeand system resource comsumption of82	 * 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_fw_state {121	/* Driver in startup mode, not load any firmware. */122	TASDEVICE_DSP_FW_PENDING,123	/* DSP firmware in the system, but parsing error. */124	TASDEVICE_DSP_FW_FAIL,125	/*126	 * Only RCA (Reconfigurable Architecture) firmware load127	 * successfully.128	 */129	TASDEVICE_RCA_FW_OK,130	/* Both RCA and DSP firmware load successfully. */131	TASDEVICE_DSP_FW_ALL_OK,132};133 134enum tasdevice_bin_blk_type {135	TASDEVICE_BIN_BLK_COEFF = 1,136	TASDEVICE_BIN_BLK_POST_POWER_UP,137	TASDEVICE_BIN_BLK_PRE_SHUTDOWN,138	TASDEVICE_BIN_BLK_PRE_POWER_UP,139	TASDEVICE_BIN_BLK_POST_SHUTDOWN140};141 142struct tasdevice_rca_hdr {143	unsigned int img_sz;144	unsigned int checksum;145	unsigned int binary_version_num;146	unsigned int drv_fw_version;147	unsigned char plat_type;148	unsigned char dev_family;149	unsigned char reserve;150	unsigned char ndev;151	unsigned char devs[TASDEVICE_DEVICE_SUM];152	unsigned int nconfig;153	unsigned int config_size[TASDEVICE_CONFIG_SUM];154};155 156struct tasdev_blk_data {157	unsigned char dev_idx;158	unsigned char block_type;159	unsigned short yram_checksum;160	unsigned int block_size;161	unsigned int n_subblks;162	unsigned char *regdata;163};164 165struct tasdevice_config_info {166	unsigned int nblocks;167	unsigned int real_nblocks;168	unsigned char active_dev;169	struct tasdev_blk_data **blk_data;170};171 172struct tasdevice_rca {173	struct tasdevice_rca_hdr fw_hdr;174	int ncfgs;175	struct tasdevice_config_info **cfg_info;176	int profile_cfg_id;177};178 179void tasdevice_select_cfg_blk(void *context, int conf_no,180	unsigned char block_type);181void tasdevice_config_info_remove(void *context);182void tasdevice_dsp_remove(void *context);183int tasdevice_dsp_parser(void *context);184int tasdevice_rca_parser(void *context, const struct firmware *fmw);185void tasdevice_dsp_remove(void *context);186void tasdevice_calbin_remove(void *context);187int tasdevice_select_tuningprm_cfg(void *context, int prm,188	int cfg_no, int rca_conf_no);189int tasdevice_prmg_load(void *context, int prm_no);190void tasdevice_tuning_switch(void *context, int state);191int tas2781_load_calibration(void *context, char *file_name,192	unsigned short i);193 194#endif195