~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/sound/tas2781.h

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 //
  3 // ALSA SoC Texas Instruments TAS2563/TAS2781 Audio Smart Amplifier
  4 //
  5 // Copyright (C) 2022 - 2024 Texas Instruments Incorporated
  6 // https://www.ti.com
  7 //
  8 // The TAS2563/TAS2781 driver implements a flexible and configurable
  9 // algo coefficient setting for one, two, or even multiple
 10 // TAS2563/TAS2781 chips.
 11 //
 12 // Author: Shenghao Ding <shenghao-ding@ti.com>
 13 // Author: Kevin Lu <kevin-lu@ti.com>
 14 //
 15 
 16 #ifndef __TAS2781_H__
 17 #define __TAS2781_H__
 18 
 19 #include "tas2781-dsp.h"
 20 
 21 /* version number */
 22 #define TAS2781_DRV_VER                 1
 23 #define SMARTAMP_MODULE_NAME            "tas2781"
 24 #define TAS2781_GLOBAL_ADDR     0x40
 25 #define TAS2563_GLOBAL_ADDR     0x48
 26 #define TASDEVICE_RATES                 (SNDRV_PCM_RATE_44100 |\
 27         SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000 |\
 28         SNDRV_PCM_RATE_88200)
 29 
 30 #define TASDEVICE_FORMATS               (SNDRV_PCM_FMTBIT_S16_LE | \
 31         SNDRV_PCM_FMTBIT_S24_LE | \
 32         SNDRV_PCM_FMTBIT_S32_LE)
 33 
 34 /*PAGE Control Register (available in page0 of each book) */
 35 #define TASDEVICE_PAGE_SELECT           0x00
 36 #define TASDEVICE_BOOKCTL_PAGE          0x00
 37 #define TASDEVICE_BOOKCTL_REG           127
 38 #define TASDEVICE_BOOK_ID(reg)          (reg / (256 * 128))
 39 #define TASDEVICE_PAGE_ID(reg)          ((reg % (256 * 128)) / 128)
 40 #define TASDEVICE_PAGE_REG(reg)         ((reg % (256 * 128)) % 128)
 41 #define TASDEVICE_PGRG(reg)             (reg % (256 * 128))
 42 #define TASDEVICE_REG(book, page, reg)  (((book * 256 * 128) + \
 43                                         (page * 128)) + reg)
 44 
 45 /*Software Reset */
 46 #define TASDEVICE_REG_SWRESET           TASDEVICE_REG(0x0, 0X0, 0x01)
 47 #define TASDEVICE_REG_SWRESET_RESET     BIT(0)
 48 
 49 /*I2C Checksum */
 50 #define TASDEVICE_I2CChecksum           TASDEVICE_REG(0x0, 0x0, 0x7E)
 51 
 52 /* Volume control */
 53 #define TAS2563_DVC_LVL                 TASDEVICE_REG(0x00, 0x02, 0x0C)
 54 #define TAS2781_DVC_LVL                 TASDEVICE_REG(0x0, 0x0, 0x1A)
 55 #define TAS2781_AMP_LEVEL               TASDEVICE_REG(0x0, 0x0, 0x03)
 56 #define TAS2781_AMP_LEVEL_MASK          GENMASK(5, 1)
 57 
 58 #define TASDEVICE_CMD_SING_W            0x1
 59 #define TASDEVICE_CMD_BURST             0x2
 60 #define TASDEVICE_CMD_DELAY             0x3
 61 #define TASDEVICE_CMD_FIELD_W           0x4
 62 
 63 enum audio_device {
 64         TAS2563,
 65         TAS2781,
 66 };
 67 
 68 enum device_catlog_id {
 69         LENOVO = 0,
 70         OTHERS
 71 };
 72 
 73 struct tasdevice {
 74         struct tasdevice_fw *cali_data_fmw;
 75         unsigned int dev_addr;
 76         unsigned int err_code;
 77         unsigned char cur_book;
 78         short cur_prog;
 79         short cur_conf;
 80         bool is_loading;
 81         bool is_loaderr;
 82 };
 83 
 84 struct tasdevice_irqinfo {
 85         int irq_gpio;
 86         int irq;
 87 };
 88 
 89 struct calidata {
 90         unsigned char *data;
 91         unsigned long total_sz;
 92 };
 93 
 94 struct tasdevice_priv {
 95         struct tasdevice tasdevice[TASDEVICE_MAX_CHANNELS];
 96         struct tasdevice_irqinfo irq_info;
 97         struct tasdevice_rca rcabin;
 98         struct calidata cali_data;
 99         struct tasdevice_fw *fmw;
100         struct gpio_desc *reset;
101         struct mutex codec_lock;
102         struct regmap *regmap;
103         struct device *dev;
104         struct tm tm;
105 
106         enum device_catlog_id catlog_id;
107         unsigned char cal_binaryname[TASDEVICE_MAX_CHANNELS][64];
108         unsigned char crc8_lkp_tbl[CRC8_TABLE_SIZE];
109         unsigned char coef_binaryname[64];
110         unsigned char rca_binaryname[64];
111         unsigned char dev_name[32];
112         const char *name_prefix;
113         unsigned char ndev;
114         unsigned int magic_num;
115         unsigned int chip_id;
116         unsigned int sysclk;
117 
118         int cur_prog;
119         int cur_conf;
120         int fw_state;
121         int index;
122         void *client;
123         void *codec;
124         bool force_fwload_status;
125         bool playback_started;
126         bool isacpi;
127         unsigned int global_addr;
128 
129         int (*fw_parse_variable_header)(struct tasdevice_priv *tas_priv,
130                 const struct firmware *fmw, int offset);
131         int (*fw_parse_program_data)(struct tasdevice_priv *tas_priv,
132                 struct tasdevice_fw *tas_fmw,
133                 const struct firmware *fmw, int offset);
134         int (*fw_parse_configuration_data)(struct tasdevice_priv *tas_priv,
135                 struct tasdevice_fw *tas_fmw,
136                 const struct firmware *fmw, int offset);
137         int (*tasdevice_load_block)(struct tasdevice_priv *tas_priv,
138                 struct tasdev_blk *block);
139 
140         int (*save_calibration)(struct tasdevice_priv *tas_priv);
141         void (*apply_calibration)(struct tasdevice_priv *tas_priv);
142 };
143 
144 void tasdevice_reset(struct tasdevice_priv *tas_dev);
145 int tascodec_init(struct tasdevice_priv *tas_priv, void *codec,
146         struct module *module,
147         void (*cont)(const struct firmware *fw, void *context));
148 struct tasdevice_priv *tasdevice_kzalloc(struct i2c_client *i2c);
149 int tasdevice_init(struct tasdevice_priv *tas_priv);
150 void tasdevice_remove(struct tasdevice_priv *tas_priv);
151 int tasdevice_save_calibration(struct tasdevice_priv *tas_priv);
152 void tasdevice_apply_calibration(struct tasdevice_priv *tas_priv);
153 int tasdevice_dev_read(struct tasdevice_priv *tas_priv,
154         unsigned short chn, unsigned int reg, unsigned int *value);
155 int tasdevice_dev_write(struct tasdevice_priv *tas_priv,
156         unsigned short chn, unsigned int reg, unsigned int value);
157 int tasdevice_dev_bulk_write(
158         struct tasdevice_priv *tas_priv, unsigned short chn,
159         unsigned int reg, unsigned char *p_data, unsigned int n_length);
160 int tasdevice_dev_bulk_read(struct tasdevice_priv *tas_priv,
161         unsigned short chn, unsigned int reg, unsigned char *p_data,
162         unsigned int n_length);
163 int tasdevice_dev_update_bits(
164         struct tasdevice_priv *tasdevice, unsigned short chn,
165         unsigned int reg, unsigned int mask, unsigned int value);
166 int tasdevice_amp_putvol(struct tasdevice_priv *tas_priv,
167         struct snd_ctl_elem_value *ucontrol, struct soc_mixer_control *mc);
168 int tasdevice_amp_getvol(struct tasdevice_priv *tas_priv,
169         struct snd_ctl_elem_value *ucontrol, struct soc_mixer_control *mc);
170 int tasdevice_digital_putvol(struct tasdevice_priv *tas_priv,
171         struct snd_ctl_elem_value *ucontrol, struct soc_mixer_control *mc);
172 int tasdevice_digital_getvol(struct tasdevice_priv *tas_priv,
173         struct snd_ctl_elem_value *ucontrol, struct soc_mixer_control *mc);
174 
175 #endif /* __TAS2781_H__ */
176 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php