Skip to content

Commit

Permalink
ALSA: hda/tas2781: Upgrade calibratd-data writing code to support Alp…
Browse files Browse the repository at this point in the history
…ha and Beta dsp firmware

Since 2025, the firmware for tas2781 has been added more audio acoustic
features, such as non-linear compensation, advanced battery guard,
rattle-noise suppression, etc. The version was divided into two different
series. Both series have a slight change on the calibrated data storage
addresses, which becames flexible instead of fixed. In order to support
new firwmares in time, the code have some related upgrades.

Signed-off-by: Shenghao Ding <shenghao-ding@ti.com>
Link: https://patch.msgid.link/20250328074326.796-1-shenghao-ding@ti.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Shenghao Ding authored and Takashi Iwai committed Mar 28, 2025
1 parent 84c3c08 commit 2a07804
Showing 1 changed file with 20 additions and 10 deletions.
30 changes: 20 additions & 10 deletions sound/pci/hda/tas2781_hda_i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -558,28 +558,38 @@ static int tas2563_save_calibration(struct tasdevice_priv *tas_priv)

static void tas2781_apply_calib(struct tasdevice_priv *tas_priv)
{
static const unsigned char page_array[CALIB_MAX] = {
0x17, 0x18, 0x18, 0x13, 0x18,
struct calidata *cali_data = &tas_priv->cali_data;
struct cali_reg *r = &cali_data->cali_reg_array;
unsigned int cali_reg[CALIB_MAX] = {
TASDEVICE_REG(0, 0x17, 0x74),
TASDEVICE_REG(0, 0x18, 0x0c),
TASDEVICE_REG(0, 0x18, 0x14),
TASDEVICE_REG(0, 0x13, 0x70),
TASDEVICE_REG(0, 0x18, 0x7c),
};
static const unsigned char rgno_array[CALIB_MAX] = {
0x74, 0x0c, 0x14, 0x70, 0x7c,
};
int offset = 0;
int i, j, rc;
int oft = 0;
__be32 data;

if (tas_priv->dspbin_typ != TASDEV_BASIC) {
cali_reg[0] = r->r0_reg;
cali_reg[1] = r->invr0_reg;
cali_reg[2] = r->r0_low_reg;
cali_reg[3] = r->pow_reg;
cali_reg[4] = r->tlimit_reg;
}

for (i = 0; i < tas_priv->ndev; i++) {
for (j = 0; j < CALIB_MAX; j++) {
data = cpu_to_be32(
*(uint32_t *)&tas_priv->cali_data.data[offset]);
*(uint32_t *)&tas_priv->cali_data.data[oft]);
rc = tasdevice_dev_bulk_write(tas_priv, i,
TASDEVICE_REG(0, page_array[j], rgno_array[j]),
(unsigned char *)&data, 4);
cali_reg[j], (unsigned char *)&data, 4);
if (rc < 0)
dev_err(tas_priv->dev,
"chn %d calib %d bulk_wr err = %d\n",
i, j, rc);
offset += 4;
oft += 4;
}
}
}
Expand Down

0 comments on commit 2a07804

Please sign in to comment.