kern/118546: snd_ich: recording broken

Ariff Abdullah ariff at FreeBSD.org
Tue Dec 11 02:50:02 PST 2007


The following reply was made to PR kern/118546; it has been noted by GNATS.

From: Ariff Abdullah <ariff at FreeBSD.org>
To: bug-followup at FreeBSD.org, uyamba at gmail.com
Cc:  
Subject: Re: kern/118546: snd_ich: recording broken
Date: Tue, 11 Dec 2007 18:44:42 +0800

 This is a multi-part message in MIME format.
 
 --Multipart=_Tue__11_Dec_2007_18_44_42_+0800_5xfqKp2NlJR+0LXn
 Content-Type: text/plain; charset=US-ASCII
 Content-Transfer-Encoding: 7bit
 
 > pcm0: <Intel ICH3 (82801CA)> at io 0xd800, 0xdc80 irq 9 bufsz 16384
 > kld snd_ich [MPSAFE] (1p:1v/2r:1v channels duplex default)
                               ^^
 I have doubt for this 2nd record channel for a long time..
 
 
 1) Try disabling vchan for record channel (vrec) through
    sysctl dev.pcm.0.rec.vchans=0. This basically restore 6.x
    behaviour.
 
 2) If #1 works, try the attached patch even with vrec enabled.
 
 
 --
 Ariff Abdullah
 FreeBSD
 
 ... Recording in stereo is obviously too advanced
     and confusing for us idiot ***** users :P ........
 
 --Multipart=_Tue__11_Dec_2007_18_44_42_+0800_5xfqKp2NlJR+0LXn
 Content-Type: text/x-diff;
  name="ich.c.diff"
 Content-Disposition: attachment;
  filename="ich.c.diff"
 Content-Transfer-Encoding: 7bit
 
 Index: src/sys/dev/sound/pci/ich.c
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/sound/pci/ich.c,v
 retrieving revision 1.78
 diff -u -r1.78 ich.c
 --- src/sys/dev/sound/pci/ich.c	11 Jul 2007 14:27:45 -0000	1.78
 +++ src/sys/dev/sound/pci/ich.c	11 Dec 2007 09:52:27 -0000
 @@ -91,6 +91,7 @@
  #define ICH_FIXED_RATE		(1 << 3)
  #define ICH_DMA_NOCACHE		(1 << 4)
  #define ICH_HIGH_LATENCY	(1 << 5)
 +#define ICH_MCH_ENABLED		(1 << 6)
  
  static const struct ich_type {
          uint16_t	vendor;
 @@ -980,6 +981,10 @@
  	    device_get_unit(dev), "fixedrate", &i) == 0 && i != 0)
  		sc->flags |= ICH_FIXED_RATE;
  
 +	if (resource_int_value(device_get_name(dev),
 +	    device_get_unit(dev), "mch_enabled", &i) == 0 && i != 0)
 +		sc->flags |= ICH_MCH_ENABLED;
 +
  	sc->irqid = 0;
  	sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &sc->irqid,
  	    RF_ACTIVE | RF_SHAREABLE);
 @@ -1026,7 +1031,11 @@
  	extcaps = ac97_getextcaps(sc->codec);
  	sc->hasvra = extcaps & AC97_EXTCAP_VRA;
  	sc->hasvrm = extcaps & AC97_EXTCAP_VRM;
 -	sc->hasmic = ac97_getcaps(sc->codec) & AC97_CAP_MICCHANNEL;
 +	if ((sc->flags & ICH_MCH_ENABLED) &&
 +	    (ac97_getcaps(sc->codec) & AC97_CAP_MICCHANNEL))
 +		sc->hasmic = 1;
 +	else
 +		sc->flags &= ~ICH_MCH_ENABLED;
  	ac97_setextmode(sc->codec, sc->hasvra | sc->hasvrm);
  
  	sc->dtbl_size = sizeof(struct ich_desc) * ICH_DTBL_LENGTH *
 
 --Multipart=_Tue__11_Dec_2007_18_44_42_+0800_5xfqKp2NlJR+0LXn--


More information about the freebsd-multimedia mailing list