Commit 247d95ee authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: line6: Handle error from line6_pcm_acquire()

parent 2954f914
Loading
Loading
Loading
Loading
+10 −3
Original line number Original line Diff line number Diff line
@@ -45,15 +45,22 @@ static int snd_line6_impulse_volume_put(struct snd_kcontrol *kcontrol,
{
{
	struct snd_line6_pcm *line6pcm = snd_kcontrol_chip(kcontrol);
	struct snd_line6_pcm *line6pcm = snd_kcontrol_chip(kcontrol);
	int value = ucontrol->value.integer.value[0];
	int value = ucontrol->value.integer.value[0];
	int err;


	if (line6pcm->impulse_volume == value)
	if (line6pcm->impulse_volume == value)
		return 0;
		return 0;


	line6pcm->impulse_volume = value;
	line6pcm->impulse_volume = value;
	if (value > 0)
	if (value > 0) {
		line6_pcm_acquire(line6pcm, LINE6_STREAM_IMPULSE);
		err = line6_pcm_acquire(line6pcm, LINE6_STREAM_IMPULSE);
	else
		if (err < 0) {
			line6pcm->impulse_volume = 0;
			line6_pcm_release(line6pcm, LINE6_STREAM_IMPULSE);
			return err;
		}
	} else {
		line6_pcm_release(line6pcm, LINE6_STREAM_IMPULSE);
		line6_pcm_release(line6pcm, LINE6_STREAM_IMPULSE);
	}
	return 1;
	return 1;
}
}


+10 −3
Original line number Original line Diff line number Diff line
@@ -182,16 +182,23 @@ static int snd_toneport_monitor_put(struct snd_kcontrol *kcontrol,
				    struct snd_ctl_elem_value *ucontrol)
				    struct snd_ctl_elem_value *ucontrol)
{
{
	struct snd_line6_pcm *line6pcm = snd_kcontrol_chip(kcontrol);
	struct snd_line6_pcm *line6pcm = snd_kcontrol_chip(kcontrol);
	int err;


	if (ucontrol->value.integer.value[0] == line6pcm->volume_monitor)
	if (ucontrol->value.integer.value[0] == line6pcm->volume_monitor)
		return 0;
		return 0;


	line6pcm->volume_monitor = ucontrol->value.integer.value[0];
	line6pcm->volume_monitor = ucontrol->value.integer.value[0];


	if (line6pcm->volume_monitor > 0)
	if (line6pcm->volume_monitor > 0) {
		line6_pcm_acquire(line6pcm, LINE6_STREAM_MONITOR);
		err = line6_pcm_acquire(line6pcm, LINE6_STREAM_MONITOR);
	else
		if (err < 0) {
			line6pcm->volume_monitor = 0;
			line6_pcm_release(line6pcm, LINE6_STREAM_MONITOR);
			line6_pcm_release(line6pcm, LINE6_STREAM_MONITOR);
			return err;
		}
	} else {
		line6_pcm_release(line6pcm, LINE6_STREAM_MONITOR);
	}


	return 1;
	return 1;
}
}