From 7e6906d056aeea6f8ba378b49b456e961a6b58c8 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 30 Jul 2001 09:58:32 +0000 Subject: [PATCH] Another fix - switch behaviour --- src/mixer/simple.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/mixer/simple.c b/src/mixer/simple.c index 15a01597..523a8489 100644 --- a/src/mixer/simple.c +++ b/src/mixer/simple.c @@ -442,6 +442,22 @@ static int elem_write_switch(selem_t *s, int dir, selem_ctl_type_t type) return 0; } +static int elem_write_switch_constant(selem_t *s, selem_ctl_type_t type, int val) +{ + snd_ctl_elem_value_t ctl; + unsigned int idx; + int err; + selem_ctl_t *c = &s->ctls[type]; + memset(&ctl, 0, sizeof(ctl)); + if ((err = snd_hctl_elem_read(c->elem, &ctl)) < 0) + return err; + for (idx = 0; idx < c->values; idx++) + ctl.value.integer.value[idx] = !!val; + if ((err = snd_hctl_elem_write(c->elem, &ctl)) < 0) + return err; + return 0; +} + static int elem_write_route(selem_t *s, int dir, selem_ctl_type_t type) { snd_ctl_elem_value_t ctl; @@ -483,7 +499,10 @@ static int selem_write(snd_mixer_elem_t *elem) return err; } if (s->ctls[CTL_GLOBAL_SWITCH].elem) { - err = elem_write_switch(s, PLAY, CTL_GLOBAL_SWITCH); + if (s->ctls[CTL_PLAYBACK_SWITCH].elem && s->ctls[CTL_CAPTURE_SWITCH].elem) + err = elem_write_switch_constant(s, CTL_GLOBAL_SWITCH, 1); + else + err = elem_write_switch(s, PLAY, CTL_GLOBAL_SWITCH); if (err < 0) return err; } -- 2.47.1