]> git.alsa-project.org Git - alsa-lib.git/commitdiff
simple mixer - fix error recovery path for volume / switch write
authorJaroslav Kysela <perex@perex.cz>
Sun, 1 Oct 2006 15:57:36 +0000 (17:57 +0200)
committerJaroslav Kysela <perex@perex.cz>
Sun, 1 Oct 2006 15:57:36 +0000 (17:57 +0200)
If volume or switch write fails, the internal contents for element
is changed, but it is wrong. Reread the whole simple element in this
case to get correct values.

src/mixer/simple_none.c

index 58ffe4aff9fe6688a3cc259b7b1ccde4aa027f1b..7c5b4ea88ee2a8b2293642e0593d5f4cb7bb2ef4 100644 (file)
@@ -515,7 +515,7 @@ static int elem_write_enum(selem_none_t *s)
        return 0;
 }
 
-static int selem_write(snd_mixer_elem_t *elem)
+static int selem_write_main(snd_mixer_elem_t *elem)
 {
        selem_none_t *s;
        unsigned int idx;
@@ -598,6 +598,16 @@ static int selem_write(snd_mixer_elem_t *elem)
        return 0;
 }
 
+static int selem_write(snd_mixer_elem_t *elem)
+{
+       int err;
+       
+       err = selem_write_main(elem);
+       if (err < 0)
+               selem_read(elem);
+       return err;
+}
+
 static void selem_free(snd_mixer_elem_t *elem)
 {
        selem_none_t *simple = snd_mixer_elem_get_private(elem);