mirror of
https://github.com/torvalds/linux.git
synced 2025-12-01 15:35:58 +07:00
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:
committed by
Mark Brown
parent
32dffd4c3e
commit
e83dcd139e
@@ -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,
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user