diff options
| author | Peter Ujfalusi <peter.ujfalusi@linux.intel.com> | 2021-12-15 21:03:58 +0300 | 
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2021-12-16 01:16:41 +0300 | 
| commit | d4a06c4334aed1fe76ae2b7aaae6ee8b72f30a8e (patch) | |
| tree | 814d02686f3a34c37fef07de3420cc07a563c1e5 | |
| parent | 9d562fdcd52b1bb1a13cd5078ffc06dd3eff3aef (diff) | |
| download | linux-d4a06c4334aed1fe76ae2b7aaae6ee8b72f30a8e.tar.xz | |
ASoC: SOF: Drop ipc_cmd parameter for snd_sof_ipc_set_get_comp_data()
The correct ipc_cmd can be selected based on the `ctrl_cmd` and the `set`
parameters:
if the ctrl_cmd is SOF_CTRL_CMD_BINARY then SOF_IPC_COMP_*_DATA
otherwise SOF_IPC_COMP_*_VALUE.
The SET or GET direction can be selected with the use of `set` parameter.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Link: https://lore.kernel.org/r/20211215180404.53254-3-ranjani.sridharan@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
| -rw-r--r-- | sound/soc/sof/control.c | 15 | ||||
| -rw-r--r-- | sound/soc/sof/ipc.c | 8 | ||||
| -rw-r--r-- | sound/soc/sof/sof-audio.c | 6 | ||||
| -rw-r--r-- | sound/soc/sof/sof-audio.h | 1 | 
4 files changed, 11 insertions, 19 deletions
| diff --git a/sound/soc/sof/control.c b/sound/soc/sof/control.c index bb1dfe4f6d40..299ee466625e 100644 --- a/sound/soc/sof/control.c +++ b/sound/soc/sof/control.c @@ -69,7 +69,6 @@ static void snd_sof_refresh_control(struct snd_sof_control *scontrol)  {  	struct sof_ipc_ctrl_data *cdata = scontrol->control_data;  	struct snd_soc_component *scomp = scontrol->scomp; -	u32 ipc_cmd;  	int ret;  	if (!scontrol->comp_data_dirty) @@ -78,18 +77,13 @@ static void snd_sof_refresh_control(struct snd_sof_control *scontrol)  	if (!pm_runtime_active(scomp->dev))  		return; -	if (scontrol->cmd == SOF_CTRL_CMD_BINARY) -		ipc_cmd = SOF_IPC_COMP_GET_DATA; -	else -		ipc_cmd = SOF_IPC_COMP_GET_VALUE; -  	/* set the ABI header values */  	cdata->data->magic = SOF_ABI_MAGIC;  	cdata->data->abi = SOF_ABI_VERSION;  	/* refresh the component data from DSP */  	scontrol->comp_data_dirty = false; -	ret = snd_sof_ipc_set_get_comp_data(scontrol, ipc_cmd, +	ret = snd_sof_ipc_set_get_comp_data(scontrol,  					    SOF_CTRL_TYPE_VALUE_CHAN_GET,  					    scontrol->cmd, false);  	if (ret < 0) { @@ -143,7 +137,6 @@ int snd_sof_volume_put(struct snd_kcontrol *kcontrol,  	/* notify DSP of mixer updates */  	if (pm_runtime_active(scomp->dev))  		snd_sof_ipc_set_get_comp_data(scontrol, -					      SOF_IPC_COMP_SET_VALUE,  					      SOF_CTRL_TYPE_VALUE_CHAN_SET,  					      SOF_CTRL_CMD_VOLUME,  					      true); @@ -216,7 +209,6 @@ int snd_sof_switch_put(struct snd_kcontrol *kcontrol,  	/* notify DSP of mixer updates */  	if (pm_runtime_active(scomp->dev))  		snd_sof_ipc_set_get_comp_data(scontrol, -					      SOF_IPC_COMP_SET_VALUE,  					      SOF_CTRL_TYPE_VALUE_CHAN_SET,  					      SOF_CTRL_CMD_SWITCH,  					      true); @@ -265,7 +257,6 @@ int snd_sof_enum_put(struct snd_kcontrol *kcontrol,  	/* notify DSP of enum updates */  	if (pm_runtime_active(scomp->dev))  		snd_sof_ipc_set_get_comp_data(scontrol, -					      SOF_IPC_COMP_SET_VALUE,  					      SOF_CTRL_TYPE_VALUE_CHAN_SET,  					      SOF_CTRL_CMD_ENUM,  					      true); @@ -343,7 +334,6 @@ int snd_sof_bytes_put(struct snd_kcontrol *kcontrol,  	/* notify DSP of byte control updates */  	if (pm_runtime_active(scomp->dev))  		snd_sof_ipc_set_get_comp_data(scontrol, -					      SOF_IPC_COMP_SET_DATA,  					      SOF_CTRL_TYPE_DATA_SET,  					      scontrol->cmd,  					      true); @@ -423,7 +413,6 @@ int snd_sof_bytes_ext_put(struct snd_kcontrol *kcontrol,  	/* notify DSP of byte control updates */  	if (pm_runtime_active(scomp->dev))  		snd_sof_ipc_set_get_comp_data(scontrol, -					      SOF_IPC_COMP_SET_DATA,  					      SOF_CTRL_TYPE_DATA_SET,  					      scontrol->cmd,  					      true); @@ -463,7 +452,7 @@ int snd_sof_bytes_ext_volatile_get(struct snd_kcontrol *kcontrol, unsigned int _  	cdata->data->magic = SOF_ABI_MAGIC;  	cdata->data->abi = SOF_ABI_VERSION;  	/* get all the component data from DSP */ -	ret = snd_sof_ipc_set_get_comp_data(scontrol, SOF_IPC_COMP_GET_DATA, SOF_CTRL_TYPE_DATA_GET, +	ret = snd_sof_ipc_set_get_comp_data(scontrol, SOF_CTRL_TYPE_DATA_GET,  					    scontrol->cmd, false);  	if (ret < 0)  		goto out; diff --git a/sound/soc/sof/ipc.c b/sound/soc/sof/ipc.c index 670d780241a3..bcfe7edee05e 100644 --- a/sound/soc/sof/ipc.c +++ b/sound/soc/sof/ipc.c @@ -817,7 +817,6 @@ static int sof_set_get_large_ctrl_data(struct snd_sof_dev *sdev,   * IPC get()/set() for kcontrols.   */  int snd_sof_ipc_set_get_comp_data(struct snd_sof_control *scontrol, -				  u32 ipc_cmd,  				  enum sof_ipc_ctrl_type ctrl_type,  				  enum sof_ipc_ctrl_cmd ctrl_cmd, bool set)  { @@ -830,6 +829,7 @@ int snd_sof_ipc_set_get_comp_data(struct snd_sof_control *scontrol,  	struct snd_sof_widget *swidget;  	bool widget_found = false;  	size_t send_bytes; +	u32 ipc_cmd;  	int err;  	list_for_each_entry(swidget, &sdev->widget_list, list) { @@ -873,6 +873,12 @@ int snd_sof_ipc_set_get_comp_data(struct snd_sof_control *scontrol,  		return err;  	} +	/* Select the IPC cmd based on the ctrl_cmd and the direction */ +	if (ctrl_cmd == SOF_CTRL_CMD_BINARY) +		ipc_cmd = set ? SOF_IPC_COMP_SET_DATA : SOF_IPC_COMP_GET_DATA; +	else +		ipc_cmd = set ? SOF_IPC_COMP_SET_VALUE : SOF_IPC_COMP_GET_VALUE; +  	cdata->rhdr.hdr.cmd = SOF_IPC_GLB_COMP_MSG | ipc_cmd;  	cdata->cmd = ctrl_cmd;  	cdata->type = ctrl_type; diff --git a/sound/soc/sof/sof-audio.c b/sound/soc/sof/sof-audio.c index 58a62bfb16ab..dacc0122c3b4 100644 --- a/sound/soc/sof/sof-audio.c +++ b/sound/soc/sof/sof-audio.c @@ -14,7 +14,7 @@  static int sof_kcontrol_setup(struct snd_sof_dev *sdev, struct snd_sof_control *scontrol)  { -	int ipc_cmd, ctrl_type; +	enum sof_ipc_ctrl_type ctrl_type;  	int ret;  	/* reset readback offset for scontrol */ @@ -25,18 +25,16 @@ static int sof_kcontrol_setup(struct snd_sof_dev *sdev, struct snd_sof_control *  	case SOF_CTRL_CMD_VOLUME:  	case SOF_CTRL_CMD_ENUM:  	case SOF_CTRL_CMD_SWITCH: -		ipc_cmd = SOF_IPC_COMP_SET_VALUE;  		ctrl_type = SOF_CTRL_TYPE_VALUE_CHAN_SET;  		break;  	case SOF_CTRL_CMD_BINARY: -		ipc_cmd = SOF_IPC_COMP_SET_DATA;  		ctrl_type = SOF_CTRL_TYPE_DATA_SET;  		break;  	default:  		return 0;  	} -	ret = snd_sof_ipc_set_get_comp_data(scontrol, ipc_cmd, ctrl_type, scontrol->cmd, true); +	ret = snd_sof_ipc_set_get_comp_data(scontrol, ctrl_type, scontrol->cmd, true);  	if (ret < 0)  		dev_err(sdev->dev, "error: failed kcontrol value set for widget: %d\n",  			scontrol->comp_id); diff --git a/sound/soc/sof/sof-audio.h b/sound/soc/sof/sof-audio.h index 1c1d68e220d5..f4316cd742a7 100644 --- a/sound/soc/sof/sof-audio.h +++ b/sound/soc/sof/sof-audio.h @@ -240,7 +240,6 @@ static inline void snd_sof_compr_init_elapsed_work(struct work_struct *work) { }   * Mixer IPC   */  int snd_sof_ipc_set_get_comp_data(struct snd_sof_control *scontrol, -				  u32 ipc_cmd,  				  enum sof_ipc_ctrl_type ctrl_type,  				  enum sof_ipc_ctrl_cmd ctrl_cmd, bool set); | 
