Commit 47d7328f authored by Peter Ujfalusi's avatar Peter Ujfalusi Committed by Mark Brown

ASoC: SOF: Drop ctrl_type parameter for snd_sof_ipc_set_get_comp_data()

The SOF_CTRL_TYPE_VALUE_COMP_* type is not used by the firmware nor in the
kernel side.
It is also not clear what action should be taken for such type.

With this in mind:
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_CTRL_TYPE_DATA_*
otherwise SOF_CTRL_TYPE_VALUE_CHAN_*.

The SET or GET direction can be selected with the use of `set` parameter.
Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: default avatarKai Vehmanen <kai.vehmanen@linux.intel.com>
Signed-off-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Link: https://lore.kernel.org/r/20211215180404.53254-8-ranjani.sridharan@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 68be4f0e
...@@ -83,8 +83,7 @@ static void snd_sof_refresh_control(struct snd_sof_control *scontrol) ...@@ -83,8 +83,7 @@ static void snd_sof_refresh_control(struct snd_sof_control *scontrol)
/* refresh the component data from DSP */ /* refresh the component data from DSP */
scontrol->comp_data_dirty = false; scontrol->comp_data_dirty = false;
ret = snd_sof_ipc_set_get_comp_data(scontrol, ret = snd_sof_ipc_set_get_comp_data(scontrol, false);
SOF_CTRL_TYPE_VALUE_CHAN_GET, false);
if (ret < 0) { if (ret < 0) {
dev_err(scomp->dev, "error: failed to get control data: %d\n", ret); dev_err(scomp->dev, "error: failed to get control data: %d\n", ret);
/* Set the flag to re-try next time to get the data */ /* Set the flag to re-try next time to get the data */
...@@ -135,8 +134,7 @@ int snd_sof_volume_put(struct snd_kcontrol *kcontrol, ...@@ -135,8 +134,7 @@ int snd_sof_volume_put(struct snd_kcontrol *kcontrol,
/* notify DSP of mixer updates */ /* notify DSP of mixer updates */
if (pm_runtime_active(scomp->dev)) if (pm_runtime_active(scomp->dev))
snd_sof_ipc_set_get_comp_data(scontrol, snd_sof_ipc_set_get_comp_data(scontrol, true);
SOF_CTRL_TYPE_VALUE_CHAN_SET, true);
return change; return change;
} }
...@@ -205,8 +203,7 @@ int snd_sof_switch_put(struct snd_kcontrol *kcontrol, ...@@ -205,8 +203,7 @@ int snd_sof_switch_put(struct snd_kcontrol *kcontrol,
/* notify DSP of mixer updates */ /* notify DSP of mixer updates */
if (pm_runtime_active(scomp->dev)) if (pm_runtime_active(scomp->dev))
snd_sof_ipc_set_get_comp_data(scontrol, snd_sof_ipc_set_get_comp_data(scontrol, true);
SOF_CTRL_TYPE_VALUE_CHAN_SET, true);
return change; return change;
} }
...@@ -251,8 +248,7 @@ int snd_sof_enum_put(struct snd_kcontrol *kcontrol, ...@@ -251,8 +248,7 @@ int snd_sof_enum_put(struct snd_kcontrol *kcontrol,
/* notify DSP of enum updates */ /* notify DSP of enum updates */
if (pm_runtime_active(scomp->dev)) if (pm_runtime_active(scomp->dev))
snd_sof_ipc_set_get_comp_data(scontrol, snd_sof_ipc_set_get_comp_data(scontrol, true);
SOF_CTRL_TYPE_VALUE_CHAN_SET, true);
return change; return change;
} }
...@@ -326,8 +322,7 @@ int snd_sof_bytes_put(struct snd_kcontrol *kcontrol, ...@@ -326,8 +322,7 @@ int snd_sof_bytes_put(struct snd_kcontrol *kcontrol,
/* notify DSP of byte control updates */ /* notify DSP of byte control updates */
if (pm_runtime_active(scomp->dev)) if (pm_runtime_active(scomp->dev))
snd_sof_ipc_set_get_comp_data(scontrol, snd_sof_ipc_set_get_comp_data(scontrol, true);
SOF_CTRL_TYPE_DATA_SET, true);
return 0; return 0;
} }
...@@ -403,8 +398,7 @@ int snd_sof_bytes_ext_put(struct snd_kcontrol *kcontrol, ...@@ -403,8 +398,7 @@ int snd_sof_bytes_ext_put(struct snd_kcontrol *kcontrol,
/* notify DSP of byte control updates */ /* notify DSP of byte control updates */
if (pm_runtime_active(scomp->dev)) if (pm_runtime_active(scomp->dev))
snd_sof_ipc_set_get_comp_data(scontrol, snd_sof_ipc_set_get_comp_data(scontrol, true);
SOF_CTRL_TYPE_DATA_SET, true);
return 0; return 0;
} }
...@@ -441,7 +435,7 @@ int snd_sof_bytes_ext_volatile_get(struct snd_kcontrol *kcontrol, unsigned int _ ...@@ -441,7 +435,7 @@ int snd_sof_bytes_ext_volatile_get(struct snd_kcontrol *kcontrol, unsigned int _
cdata->data->magic = SOF_ABI_MAGIC; cdata->data->magic = SOF_ABI_MAGIC;
cdata->data->abi = SOF_ABI_VERSION; cdata->data->abi = SOF_ABI_VERSION;
/* get all the component data from DSP */ /* get all the component data from DSP */
ret = snd_sof_ipc_set_get_comp_data(scontrol, SOF_CTRL_TYPE_DATA_GET, false); ret = snd_sof_ipc_set_get_comp_data(scontrol, false);
if (ret < 0) if (ret < 0)
goto out; goto out;
......
...@@ -721,11 +721,6 @@ static int sof_get_ctrl_copy_params(enum sof_ipc_ctrl_type ctrl_type, ...@@ -721,11 +721,6 @@ static int sof_get_ctrl_copy_params(enum sof_ipc_ctrl_type ctrl_type,
sparams->src = (u8 *)src->chanv; sparams->src = (u8 *)src->chanv;
sparams->dst = (u8 *)dst->chanv; sparams->dst = (u8 *)dst->chanv;
break; break;
case SOF_CTRL_TYPE_VALUE_COMP_GET:
case SOF_CTRL_TYPE_VALUE_COMP_SET:
sparams->src = (u8 *)src->compv;
sparams->dst = (u8 *)dst->compv;
break;
case SOF_CTRL_TYPE_DATA_GET: case SOF_CTRL_TYPE_DATA_GET:
case SOF_CTRL_TYPE_DATA_SET: case SOF_CTRL_TYPE_DATA_SET:
sparams->src = (u8 *)src->data->data; sparams->src = (u8 *)src->data->data;
...@@ -816,8 +811,7 @@ static int sof_set_get_large_ctrl_data(struct snd_sof_dev *sdev, ...@@ -816,8 +811,7 @@ static int sof_set_get_large_ctrl_data(struct snd_sof_dev *sdev,
/* /*
* IPC get()/set() for kcontrols. * IPC get()/set() for kcontrols.
*/ */
int snd_sof_ipc_set_get_comp_data(struct snd_sof_control *scontrol, int snd_sof_ipc_set_get_comp_data(struct snd_sof_control *scontrol, bool set)
enum sof_ipc_ctrl_type ctrl_type, bool set)
{ {
struct snd_soc_component *scomp = scontrol->scomp; struct snd_soc_component *scomp = scontrol->scomp;
struct sof_ipc_ctrl_data *cdata = scontrol->control_data; struct sof_ipc_ctrl_data *cdata = scontrol->control_data;
...@@ -825,6 +819,7 @@ int snd_sof_ipc_set_get_comp_data(struct snd_sof_control *scontrol, ...@@ -825,6 +819,7 @@ int snd_sof_ipc_set_get_comp_data(struct snd_sof_control *scontrol,
struct sof_ipc_fw_ready *ready = &sdev->fw_ready; struct sof_ipc_fw_ready *ready = &sdev->fw_ready;
struct sof_ipc_fw_version *v = &ready->version; struct sof_ipc_fw_version *v = &ready->version;
struct sof_ipc_ctrl_data_params sparams; struct sof_ipc_ctrl_data_params sparams;
enum sof_ipc_ctrl_type ctrl_type;
struct snd_sof_widget *swidget; struct snd_sof_widget *swidget;
bool widget_found = false; bool widget_found = false;
size_t send_bytes; size_t send_bytes;
...@@ -872,11 +867,19 @@ int snd_sof_ipc_set_get_comp_data(struct snd_sof_control *scontrol, ...@@ -872,11 +867,19 @@ int snd_sof_ipc_set_get_comp_data(struct snd_sof_control *scontrol,
return err; return err;
} }
/* Select the IPC cmd based on the ctrl_cmd and the direction */ /*
if (cdata->cmd == SOF_CTRL_CMD_BINARY) * Select the IPC cmd and the ctrl_type based on the ctrl_cmd and the
* direction
* Note: SOF_CTRL_TYPE_VALUE_COMP_* is not used and supported currently
* for ctrl_type
*/
if (cdata->cmd == SOF_CTRL_CMD_BINARY) {
ipc_cmd = set ? SOF_IPC_COMP_SET_DATA : SOF_IPC_COMP_GET_DATA; ipc_cmd = set ? SOF_IPC_COMP_SET_DATA : SOF_IPC_COMP_GET_DATA;
else ctrl_type = set ? SOF_CTRL_TYPE_DATA_SET : SOF_CTRL_TYPE_DATA_GET;
} else {
ipc_cmd = set ? SOF_IPC_COMP_SET_VALUE : SOF_IPC_COMP_GET_VALUE; ipc_cmd = set ? SOF_IPC_COMP_SET_VALUE : SOF_IPC_COMP_GET_VALUE;
ctrl_type = set ? SOF_CTRL_TYPE_VALUE_CHAN_SET : SOF_CTRL_TYPE_VALUE_CHAN_GET;
}
cdata->rhdr.hdr.cmd = SOF_IPC_GLB_COMP_MSG | ipc_cmd; cdata->rhdr.hdr.cmd = SOF_IPC_GLB_COMP_MSG | ipc_cmd;
cdata->type = ctrl_type; cdata->type = ctrl_type;
...@@ -892,13 +895,6 @@ int snd_sof_ipc_set_get_comp_data(struct snd_sof_control *scontrol, ...@@ -892,13 +895,6 @@ int snd_sof_ipc_set_get_comp_data(struct snd_sof_control *scontrol,
sparams.hdr_bytes = sizeof(struct sof_ipc_ctrl_data); sparams.hdr_bytes = sizeof(struct sof_ipc_ctrl_data);
sparams.elems = scontrol->num_channels; sparams.elems = scontrol->num_channels;
break; break;
case SOF_CTRL_TYPE_VALUE_COMP_GET:
case SOF_CTRL_TYPE_VALUE_COMP_SET:
sparams.msg_bytes = scontrol->num_channels *
sizeof(struct sof_ipc_ctrl_value_comp);
sparams.hdr_bytes = sizeof(struct sof_ipc_ctrl_data);
sparams.elems = scontrol->num_channels;
break;
case SOF_CTRL_TYPE_DATA_GET: case SOF_CTRL_TYPE_DATA_GET:
case SOF_CTRL_TYPE_DATA_SET: case SOF_CTRL_TYPE_DATA_SET:
sparams.msg_bytes = cdata->data->size; sparams.msg_bytes = cdata->data->size;
......
...@@ -14,27 +14,12 @@ ...@@ -14,27 +14,12 @@
static int sof_kcontrol_setup(struct snd_sof_dev *sdev, struct snd_sof_control *scontrol) static int sof_kcontrol_setup(struct snd_sof_dev *sdev, struct snd_sof_control *scontrol)
{ {
enum sof_ipc_ctrl_type ctrl_type;
int ret; int ret;
/* reset readback offset for scontrol */ /* reset readback offset for scontrol */
scontrol->readback_offset = 0; scontrol->readback_offset = 0;
/* notify DSP of kcontrol values */ ret = snd_sof_ipc_set_get_comp_data(scontrol, true);
switch (scontrol->control_data->cmd) {
case SOF_CTRL_CMD_VOLUME:
case SOF_CTRL_CMD_ENUM:
case SOF_CTRL_CMD_SWITCH:
ctrl_type = SOF_CTRL_TYPE_VALUE_CHAN_SET;
break;
case SOF_CTRL_CMD_BINARY:
ctrl_type = SOF_CTRL_TYPE_DATA_SET;
break;
default:
return 0;
}
ret = snd_sof_ipc_set_get_comp_data(scontrol, ctrl_type, true);
if (ret < 0) if (ret < 0)
dev_err(sdev->dev, "error: failed kcontrol value set for widget: %d\n", dev_err(sdev->dev, "error: failed kcontrol value set for widget: %d\n",
scontrol->comp_id); scontrol->comp_id);
......
...@@ -238,8 +238,7 @@ static inline void snd_sof_compr_init_elapsed_work(struct work_struct *work) { } ...@@ -238,8 +238,7 @@ static inline void snd_sof_compr_init_elapsed_work(struct work_struct *work) { }
/* /*
* Mixer IPC * Mixer IPC
*/ */
int snd_sof_ipc_set_get_comp_data(struct snd_sof_control *scontrol, int snd_sof_ipc_set_get_comp_data(struct snd_sof_control *scontrol, bool set);
enum sof_ipc_ctrl_type ctrl_type, bool set);
/* DAI link fixup */ /* DAI link fixup */
int sof_pcm_dai_link_fixup(struct snd_soc_pcm_runtime *rtd, struct snd_pcm_hw_params *params); int sof_pcm_dai_link_fixup(struct snd_soc_pcm_runtime *rtd, struct snd_pcm_hw_params *params);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment