Commit e83dcd13 authored by Shenghao Ding's avatar Shenghao Ding Committed by Mark Brown
Browse files

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: default avatarShenghao Ding <shenghao-ding@ti.com>
Link: https://patch.msgid.link/20250803131110.1443-1-shenghao-ding@ti.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 32dffd4c
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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,
+12 −0
Original line number Diff line number Diff line
@@ -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",
+6 −0
Original line number Diff line number Diff line
@@ -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,