lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <s5h39rzclx3.wl%tiwai@suse.de>
Date:	Thu, 21 Oct 2010 22:48:08 +0200
From:	Takashi Iwai <tiwai@...e.de>
To:	Valdis.Kletnieks@...edu
Cc:	Jiri Slaby <jirislaby@...il.com>, linux-kernel@...r.kernel.org,
	akpm@...ux-foundation.org, mm-commits@...r.kernel.org,
	clemens@...isch.de, Jaroslav Kysela <perex@...ex.cz>,
	Colin Guthrie <gmane@...in.guthr.ie>,
	alsa-devel@...a-project.org
Subject: Re: HDA: no sound [was: mmotm 2010-10-20-15-01 uploaded]

[Added Colin to Cc]

At Thu, 21 Oct 2010 16:29:17 -0400,
Valdis.Kletnieks@...edu wrote:
> 
> On Thu, 21 Oct 2010 21:40:08 +0200, Takashi Iwai said:
> > > >>>   commit de8c85f7840e5e29629de95f5af24297fb325e0b
> > > >>>     ALSA: HDA: Sigmatel: work around incorrect master muting
> > > >>
> > > >> Reverting this one helps.
> > > > 
> > > > The latter one?
> > > 
> > > Yeah. Otherwise I would write it to the former :).
> 
> Confirming - reverting that one commit fixes sound on my Dell laptop as
> well.
> 
> > This might be a user-space issue, then.
> 
> That would be icky, if we have to lockstep a 2.6.37 kernel upgrade to
> an alsa-lib upgrade.  Stuff like udev and perf having to lockstep is
> bad enough...

Yeah, if this is really the culprit, we should think of reverting the
commit, at least until the use-space fix is more populated.

> > Could you try once the latest alsa-lib?  If you are using SUSE packages,
> > the snapshot rpms are available on OBS multimedia:audio:snapshot/alsa
> > repo.  (The version number of the package is still 1.0.22, but don't
> > care; I just forgot to change the spec file.
> 
> Hmm... on my laptop, Fedora Rawhide is showing:
> 
> % rpm -qi alsa-lib
> Name        : alsa-lib                     Relocations: (not relocatable)
> Version     : 1.0.23                            Vendor: Fedora Project
> Release     : 1.fc14                        Build Date: Fri 16 Apr 2010 07:48:17 AM EDT
> Install Date: Sun 18 Apr 2010 03:22:04 PM EDT      Build Host: x86-02.phx2.fedoraproject.org
> Group       : System Environment/Libraries   Source RPM: alsa-lib-1.0.23-1.fc14.src.rpm
> Size        : 1188301                          License: LGPLv2+
> Signature   : (none)
> Packager    : Fedora Project
> URL         : http://www.alsa-project.org/
> Summary     : The Advanced Linux Sound Architecture (ALSA) library
> Description :
> The Advanced Linux Sound Architecture (ALSA) provides audio and MIDI
> functionality to the Linux operating system.
> 
> Is that "recent enough", or do I need to find something newer?

Well, this doesn't tell much...
The fix patch for alsa-lib is pretty recent.  Attached below.


thanks,

Takashi

---
commit 2f6206da0c1ff88235e6eca0077343f22a4b43ee
Author: Clemens Ladisch <clemens@...isch.de>
Date:   Fri Oct 15 10:33:20 2010 +0200

    tlv: fix returned dB information for min-is-mute controls
    
    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@...isch.de>
    Signed-off-by: Takashi Iwai <tiwai@...e.de>

diff --git a/src/control/tlv.c b/src/control/tlv.c
index ba52752..f7c9976 100644
--- a/src/control/tlv.c
+++ b/src/control/tlv.c
@@ -167,17 +167,23 @@ int snd_tlv_get_dB_range(unsigned int *tlv, long rangemin, long rangemax,
 	}
 	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 *tlv, long rangemin, long rangemax,
 		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 *tlv, long rangemin, long rangemax,
 		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 *tlv, long rangemin, long rangemax,
 		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 {
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ