diff options
author | Takashi Iwai <tiwai@suse.de> | 2011-04-28 11:58:43 +0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2011-04-28 11:58:43 +0400 |
commit | 59bb7f0eebe69aa32a5c7917a23a7da1c5667d73 (patch) | |
tree | 07148368f34290c5127f106909b1fb2422a3f7fb /sound/usb/mixer.c | |
parent | 13eb4ab8ca719c852ae5fbd6e803afa333ad569a (diff) | |
download | linux-59bb7f0eebe69aa32a5c7917a23a7da1c5667d73.tar.xz |
ALSA: usb-audio - Don't expose broken dB ranges
Some crappy USB-audio devices give broken dB ranges, e.g. both min and max
are 0dB. This confuses the volume control that prefers dB expression such
as alsactl or PulseAudio. In such a case, it's much better not to expose
the broken dB information.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/usb/mixer.c')
-rw-r--r-- | sound/usb/mixer.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c index 5e4775716607..c8c28cd75534 100644 --- a/sound/usb/mixer.c +++ b/sound/usb/mixer.c @@ -1097,11 +1097,13 @@ static void build_feature_ctl(struct mixer_build *state, void *raw_desc, append_ctl_name(kctl, control == UAC_FU_MUTE ? " Switch" : " Volume"); if (control == UAC_FU_VOLUME) { - kctl->tlv.c = mixer_vol_tlv; - kctl->vd[0].access |= - SNDRV_CTL_ELEM_ACCESS_TLV_READ | - SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK; check_mapped_dB(map, cval); + if (cval->dBmin < cval->dBmax) { + kctl->tlv.c = mixer_vol_tlv; + kctl->vd[0].access |= + SNDRV_CTL_ELEM_ACCESS_TLV_READ | + SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK; + } } break; |