ASoC: tas2781: Add keyword "init" in profile section

Since version 0x105, the keyword 'init' was introduced into the profile,
which is used for chip initialization, particularly to store common
settings for other non-initialization profiles.

Signed-off-by: Shenghao Ding <shenghao-ding@ti.com>
Link: https://patch.msgid.link/20250803131110.1443-1-shenghao-ding@ti.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Shenghao Ding
2025-08-03 21:11:10 +08:00
committed by Mark Brown
parent 32dffd4c3e
commit e83dcd139e
3 changed files with 26 additions and 0 deletions

View File

@@ -198,6 +198,14 @@ struct tasdevice_rca {
int ncfgs;
struct tasdevice_config_info **cfg_info;
int profile_cfg_id;
/*
* Since version 0x105, the keyword 'init' was introduced into the
* profile, which is used for chip initialization, particularly to
* store common settings for other non-initialization profiles.
* if (init_profile_id < 0)
* No init profile inside the RCA firmware.
*/
int init_profile_id;
};
void tasdevice_select_cfg_blk(void *context, int conf_no,

View File

@@ -180,6 +180,16 @@ static struct tasdevice_config_info *tasdevice_add_config(
dev_err(tas_priv->dev, "add conf: Out of boundary\n");
goto out;
}
/* If in the RCA bin file are several profiles with the
* keyword "init", init_profile_id only store the last
* init profile id.
*/
if (strnstr(&config_data[config_offset], "init", 64)) {
tas_priv->rcabin.init_profile_id =
tas_priv->rcabin.ncfgs - 1;
dev_dbg(tas_priv->dev, "%s: init profile id = %d\n",
__func__, tas_priv->rcabin.init_profile_id);
}
config_offset += 64;
}
@@ -283,6 +293,8 @@ int tasdevice_rca_parser(void *context, const struct firmware *fmw)
int i;
rca = &(tas_priv->rcabin);
/* Initialize to none */
rca->init_profile_id = -1;
fw_hdr = &(rca->fw_hdr);
if (!fmw || !fmw->data) {
dev_err(tas_priv->dev, "Failed to read %s\n",

View File

@@ -1641,6 +1641,12 @@ static void tasdevice_fw_ready(const struct firmware *fmw,
tasdevice_prmg_load(tas_priv, 0);
tas_priv->cur_prog = 0;
/* Init common setting for different audio profiles */
if (tas_priv->rcabin.init_profile_id >= 0)
tasdevice_select_cfg_blk(tas_priv,
tas_priv->rcabin.init_profile_id,
TASDEVICE_BIN_BLK_PRE_POWER_UP);
#ifdef CONFIG_SND_SOC_TAS2781_ACOUST_I2C
if (tas_priv->name_prefix)
acoustic_debugfs_node = devm_kasprintf(tas_priv->dev,