alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
From: Clemens Ladisch <clemens@ladisch.de>
To: Colin Guthrie <gmane@colin.guthr.ie>
Cc: alsa-devel@alsa-project.org
Subject: [PATCH 2/2] tlv: fix returned dB information for min-is-mute controls
Date: Fri, 15 Oct 2010 10:33:20 +0200	[thread overview]
Message-ID: <4CB811D0.2080906@ladisch.de> (raw)
In-Reply-To: <4CB8119D.7090505@ladisch.de>

For TLV information that indicates that the minimum value is actually
muted, the returned range used the wrong minimum dB value, and
converting dB values to raw control values did not round up correctly
near the minimum.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>

--- alsa-lib/src/control/tlv.c
+++ alsa-lib/src/control/tlv.c
@@ -167,17 +167,23 @@ int snd_tlv_get_dB_range(unsigned int *t
 	}
 	case SND_CTL_TLVT_DB_SCALE: {
 		int step;
-		*min = (int)tlv[2];
+		if (tlv[3] & 0x10000)
+			*min = SND_CTL_TLV_DB_GAIN_MUTE;
+		else
+			*min = (int)tlv[2];
 		step = (tlv[3] & 0xffff);
-		*max = *min + (long)(step * (rangemax - rangemin));
+		*max = (int)tlv[2] + step * (rangemax - rangemin);
 		return 0;
 	}
 	case SND_CTL_TLVT_DB_MINMAX:
-	case SND_CTL_TLVT_DB_MINMAX_MUTE:
 	case SND_CTL_TLVT_DB_LINEAR:
 		*min = (int)tlv[2];
 		*max = (int)tlv[3];
 		return 0;
+	case SND_CTL_TLVT_DB_MINMAX_MUTE:
+		*min = SND_CTL_TLV_DB_GAIN_MUTE;
+		*max = (int)tlv[3];
+		return 0;
 	}
 	return -EINVAL;
 }
@@ -217,7 +223,7 @@ int snd_tlv_convert_to_dB(unsigned int *
 		min = tlv[2];
 		step = (tlv[3] & 0xffff);
 		mute = (tlv[3] >> 16) & 1;
-		if (mute && volume == rangemin)
+		if (mute && volume <= rangemin)
 			*db_gain = SND_CTL_TLV_DB_GAIN_MUTE;
 		else
 			*db_gain = (volume - rangemin) * step + min;
@@ -327,7 +333,11 @@ int snd_tlv_convert_from_dB(unsigned int
 		step = (tlv[3] & 0xffff);
 		max = min + (int)(step * (rangemax - rangemin));
 		if (db_gain <= min)
-			*value = rangemin;
+			if (db_gain > SND_CTL_TLV_DB_GAIN_MUTE && xdir > 0 &&
+			    (tlv[3] & 0x10000))
+				*value = rangemin + 1;
+			else
+				*value = rangemin;
 		else if (db_gain >= max)
 			*value = rangemax;
 		else {
@@ -345,7 +355,11 @@ int snd_tlv_convert_from_dB(unsigned int
 		min = tlv[2];
 		max = tlv[3];
 		if (db_gain <= min)
-			*value = rangemin;
+			if (db_gain > SND_CTL_TLV_DB_GAIN_MUTE && xdir > 0 &&
+			    tlv[0] == SND_CTL_TLVT_DB_MINMAX_MUTE)
+				*value = rangemin + 1;
+			else
+				*value = rangemin;
 		else if (db_gain >= max)
 			*value = rangemax;
 		else {

  parent reply	other threads:[~2010-10-15  8:32 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-27 14:39 alsactl adds volume controls? David Henningsson
2010-08-27 15:43 ` Clemens Ladisch
2010-08-27 18:36   ` David Henningsson
2010-08-27 22:58     ` Raymond Yau
2010-08-30  8:01       ` Takashi Iwai
2010-08-30  9:30         ` Raymond Yau
2010-08-30 11:09           ` Takashi Iwai
2010-08-30 13:01         ` David Henningsson
2010-08-30 13:08           ` Takashi Iwai
2010-09-01 13:26             ` David Henningsson
2010-09-01 14:06               ` Raymond Yau
2010-09-02  8:06               ` Takashi Iwai
2010-09-02  9:24                 ` David Henningsson
2010-09-02  9:44                   ` Takashi Iwai
2010-09-03  7:03                     ` David Henningsson
2010-09-03  7:07                       ` Jaroslav Kysela
2010-10-02  0:51                         ` Raymond Yau
2010-09-03  7:23                       ` Raymond Yau
2010-09-02 14:10                   ` Jaroslav Kysela
2010-09-02 14:21                     ` Clemens Ladisch
2010-09-02 15:24                       ` Jaroslav Kysela
2010-09-02 15:52                         ` Clemens Ladisch
2010-09-02 17:28                           ` Jaroslav Kysela
2010-09-02 20:28                             ` Sebastian H.
2010-09-29 14:26                             ` Colin Guthrie
2010-09-29 18:09                               ` Mark Brown
2010-09-30  9:17                               ` Raymond Yau
2010-09-30 11:03                               ` Clemens Ladisch
2010-09-30 15:09                                 ` Colin Guthrie
2010-09-30 15:56                                   ` Clemens Ladisch
2010-09-30 16:47                                   ` Mark Brown
2010-09-30 18:09                                     ` Takashi Iwai
2010-09-30 18:20                                       ` Colin Guthrie
2010-09-30 20:36                                       ` Mark Brown
2010-10-01  6:44                                       ` Clemens Ladisch
2010-10-01  8:19                                         ` Colin Guthrie
2010-10-01  9:02                                           ` Clemens Ladisch
2010-10-04 11:35                                             ` Colin Guthrie
2010-10-04 12:26                                               ` Clemens Ladisch
2010-10-04 14:01                                                 ` Takashi Iwai
2010-10-07  8:05                                               ` Clemens Ladisch
2010-10-08 13:21                                                 ` Colin Guthrie
2010-10-08 13:41                                                   ` Clemens Ladisch
2010-10-08 14:05                                                     ` Colin Guthrie
2010-10-08 14:16                                                       ` Colin Guthrie
2010-10-08 14:42                                                         ` Clemens Ladisch
2010-10-08 15:25                                                           ` Colin Guthrie
2010-10-08 15:29                                                             ` Colin Guthrie
2010-10-08 15:49                                                               ` Colin Guthrie
2010-10-12  8:51                                                                 ` Colin Guthrie
2010-10-15  8:32                                                                   ` Clemens Ladisch
2010-10-15  8:32                                                                     ` [PATCH 1/2] ALSA: HDA: Sigmatel: work around incorrect master muting Clemens Ladisch
2010-10-15  8:33                                                                     ` Clemens Ladisch [this message]
2010-10-15  8:39                                                                     ` alsactl adds volume controls? Colin Guthrie
2010-10-16 15:49                                                                       ` Colin Guthrie
2010-10-17  8:50                                                                         ` Takashi Iwai
2010-10-17 11:22                                                                           ` Colin Guthrie
2010-10-08 15:49                                                             ` Clemens Ladisch
2010-10-11  1:34                                                               ` Raymond Yau
2010-10-11  8:25                                                                 ` Colin Guthrie
2010-10-12  8:37                                                                   ` Raymond Yau
2010-10-17  3:39                                                       ` Raymond Yau
2010-10-17 11:18                                                         ` Colin Guthrie
2010-10-04 14:18                                           ` Alexander E. Patrakov
2010-10-04 11:09                                         ` Raymond Yau
2010-10-04 11:38                                           ` Colin Guthrie
2010-10-06  0:05                                             ` Raymond Yau
2010-10-06 23:29                                               ` Colin Guthrie
2010-10-01  5:38                                     ` Raymond Yau
2010-10-03  7:37                               ` Raymond Yau
2010-10-23 11:51   ` Raymond Yau
2010-10-23 13:00     ` Colin Guthrie
2010-10-24 11:49       ` Raymond Yau
2010-08-29  1:35 ` Raymond Yau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4CB811D0.2080906@ladisch.de \
    --to=clemens@ladisch.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=gmane@colin.guthr.ie \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).