提交 7a0a8716 编写于 作者: T Takashi Iwai

ALSA: pcm: Set config update bits only when really changed

The PCM config space refine codes touch the parameter rmask and cmask
bits when the given config parameter is changed.  But in most places
it checks only whether the changed value is non-zero or not, and they
don't consider whether a negative error value is returned.  This will
lead to the incorrect update bits set upon the error path.

Fix the codes to check properly the return code whether it's really
updated or an error.
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
上级 c1350bff
...@@ -186,7 +186,7 @@ static int _snd_pcm_hw_param_mask(struct snd_pcm_hw_params *params, ...@@ -186,7 +186,7 @@ static int _snd_pcm_hw_param_mask(struct snd_pcm_hw_params *params,
{ {
int changed; int changed;
changed = snd_mask_refine(hw_param_mask(params, var), val); changed = snd_mask_refine(hw_param_mask(params, var), val);
if (changed) { if (changed > 0) {
params->cmask |= 1 << var; params->cmask |= 1 << var;
params->rmask |= 1 << var; params->rmask |= 1 << var;
} }
...@@ -233,7 +233,7 @@ static int _snd_pcm_hw_param_min(struct snd_pcm_hw_params *params, ...@@ -233,7 +233,7 @@ static int _snd_pcm_hw_param_min(struct snd_pcm_hw_params *params,
val, open); val, open);
else else
return -EINVAL; return -EINVAL;
if (changed) { if (changed > 0) {
params->cmask |= 1 << var; params->cmask |= 1 << var;
params->rmask |= 1 << var; params->rmask |= 1 << var;
} }
...@@ -294,7 +294,7 @@ static int _snd_pcm_hw_param_max(struct snd_pcm_hw_params *params, ...@@ -294,7 +294,7 @@ static int _snd_pcm_hw_param_max(struct snd_pcm_hw_params *params,
val, open); val, open);
else else
return -EINVAL; return -EINVAL;
if (changed) { if (changed > 0) {
params->cmask |= 1 << var; params->cmask |= 1 << var;
params->rmask |= 1 << var; params->rmask |= 1 << var;
} }
...@@ -500,7 +500,7 @@ static int _snd_pcm_hw_param_set(struct snd_pcm_hw_params *params, ...@@ -500,7 +500,7 @@ static int _snd_pcm_hw_param_set(struct snd_pcm_hw_params *params,
} }
} else } else
return -EINVAL; return -EINVAL;
if (changed) { if (changed > 0) {
params->cmask |= 1 << var; params->cmask |= 1 << var;
params->rmask |= 1 << var; params->rmask |= 1 << var;
} }
...@@ -540,7 +540,7 @@ static int _snd_pcm_hw_param_setinteger(struct snd_pcm_hw_params *params, ...@@ -540,7 +540,7 @@ static int _snd_pcm_hw_param_setinteger(struct snd_pcm_hw_params *params,
{ {
int changed; int changed;
changed = snd_interval_setinteger(hw_param_interval(params, var)); changed = snd_interval_setinteger(hw_param_interval(params, var));
if (changed) { if (changed > 0) {
params->cmask |= 1 << var; params->cmask |= 1 << var;
params->rmask |= 1 << var; params->rmask |= 1 << var;
} }
......
...@@ -1603,7 +1603,7 @@ static int _snd_pcm_hw_param_first(struct snd_pcm_hw_params *params, ...@@ -1603,7 +1603,7 @@ static int _snd_pcm_hw_param_first(struct snd_pcm_hw_params *params,
changed = snd_interval_refine_first(hw_param_interval(params, var)); changed = snd_interval_refine_first(hw_param_interval(params, var));
else else
return -EINVAL; return -EINVAL;
if (changed) { if (changed > 0) {
params->cmask |= 1 << var; params->cmask |= 1 << var;
params->rmask |= 1 << var; params->rmask |= 1 << var;
} }
...@@ -1649,7 +1649,7 @@ static int _snd_pcm_hw_param_last(struct snd_pcm_hw_params *params, ...@@ -1649,7 +1649,7 @@ static int _snd_pcm_hw_param_last(struct snd_pcm_hw_params *params,
changed = snd_interval_refine_last(hw_param_interval(params, var)); changed = snd_interval_refine_last(hw_param_interval(params, var));
else else
return -EINVAL; return -EINVAL;
if (changed) { if (changed > 0) {
params->cmask |= 1 << var; params->cmask |= 1 << var;
params->rmask |= 1 << var; params->rmask |= 1 << var;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册