Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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 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);
	int value = ucontrol->value.integer.value[0];
	int err;

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

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

+10 −3
Original line number 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_line6_pcm *line6pcm = snd_kcontrol_chip(kcontrol);
	int err;

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

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

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

	return 1;
}