6550dc5de3
- Backport upstream fixes: namehints double-free fix, expansion of more HDMI devices, and a fix for dB conversion 0007-Fix-access-of-freed-memory-in-namehints.patch 0008-HDA-Intel-present-up-to-8-HDMI-DP-outputs-via-hdmi-d.patch 0009-snd_tlv_convert_from_dB-fix-decreasing-gain-across-e.patch OBS-URL: https://build.opensuse.org/request/show/201580 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/alsa?expand=0&rev=141
45 lines
1.8 KiB
Diff
45 lines
1.8 KiB
Diff
From 529706fc323813cfad7c48d3738ea0bfa5b8305e Mon Sep 17 00:00:00 2001
|
|
From: Stephen Warren <swarren@nvidia.com>
|
|
Date: Mon, 30 Sep 2013 15:25:49 -0600
|
|
Subject: [PATCH] snd_tlv_convert_from_dB: fix decreasing gain across entries
|
|
|
|
Currently, for a TLV consisting of TLV_DB_SCALE_ITEMs, if e.g. alsamixer
|
|
calls snd_mixer_selem_set_playback_dB() with a value that is in-between
|
|
two TLV_DB_SCALE_ITEMs, and xdir is negative, the selected raw hardware
|
|
value is the minimum in the first range above that value, rather than the
|
|
maximum in the last range below that value.
|
|
|
|
The user-visible symptom is that in alsamixer, pressing the down key to
|
|
reduce the value sticks at certain points, and cannot be incrementally
|
|
reduced any further, although directly selecting a much lower value (e.g.
|
|
by pressing 0..9) works as expected. This is triggered e.g. by
|
|
sound/soc/codec/max98090.c's max98090_hp_tlv[].
|
|
|
|
Fix this by checking whether xdir is positive or not, rather than
|
|
checking whether it has a non-zero value. The code to select the previous
|
|
range's max value is already present. This matches how xdir is used in
|
|
other parts of the code.
|
|
|
|
Signed-off-by: Stephen Warren <swarren@nvidia.com>
|
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
|
---
|
|
src/control/tlv.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/control/tlv.c b/src/control/tlv.c
|
|
index 6b0b9f4..b08d887 100644
|
|
--- a/src/control/tlv.c
|
|
+++ b/src/control/tlv.c
|
|
@@ -312,7 +312,7 @@ int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax,
|
|
submin, submax,
|
|
db_gain, value, xdir);
|
|
else if (db_gain < dbmin) {
|
|
- *value = xdir || pos == 2 ? submin : prev_submax;
|
|
+ *value = xdir > 0 || pos == 2 ? submin : prev_submax;
|
|
return 0;
|
|
}
|
|
prev_submax = submax;
|
|
--
|
|
1.8.4
|
|
|