mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-22 07:27:12 +08:00
firmware: cs_dsp: cs_dsp_coeff_write_ctrl() should report changed
ALSA callers need to know whether there was a change to the value so that they can report a control write change correctly. Signed-off-by: Simon Trimmer <simont@opensource.cirrus.com> Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com> Link: https://lore.kernel.org/r/20221123165811.3014472-2-rf@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
committed by
Mark Brown
parent
9abf2313ad
commit
c56f4b2442
@@ -752,7 +752,7 @@ static int cs_dsp_coeff_write_ctrl_raw(struct cs_dsp_coeff_ctl *ctl,
|
||||
*
|
||||
* Must be called with pwr_lock held.
|
||||
*
|
||||
* Return: Zero for success, a negative number on error.
|
||||
* Return: < 0 on error, 1 when the control value changed and 0 when it has not.
|
||||
*/
|
||||
int cs_dsp_coeff_write_ctrl(struct cs_dsp_coeff_ctl *ctl,
|
||||
unsigned int off, const void *buf, size_t len)
|
||||
@@ -767,16 +767,23 @@ int cs_dsp_coeff_write_ctrl(struct cs_dsp_coeff_ctl *ctl,
|
||||
if (len + off * sizeof(u32) > ctl->len)
|
||||
return -EINVAL;
|
||||
|
||||
if (ctl->flags & WMFW_CTL_FLAG_VOLATILE)
|
||||
if (ctl->flags & WMFW_CTL_FLAG_VOLATILE) {
|
||||
ret = -EPERM;
|
||||
else if (buf != ctl->cache)
|
||||
memcpy(ctl->cache + off * sizeof(u32), buf, len);
|
||||
} else if (buf != ctl->cache) {
|
||||
if (memcmp(ctl->cache + off * sizeof(u32), buf, len))
|
||||
memcpy(ctl->cache + off * sizeof(u32), buf, len);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
ctl->set = 1;
|
||||
if (ctl->enabled && ctl->dsp->running)
|
||||
ret = cs_dsp_coeff_write_ctrl_raw(ctl, off, buf, len);
|
||||
|
||||
return ret;
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(cs_dsp_coeff_write_ctrl);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user