Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 11 Jun 2002 07:10:04 -0700 (PDT)
From:      Colin Perkins <csp@isi.edu>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: kern/39146: sound fails to load on some Thinkpad models
Message-ID:  <200206111410.g5BEA4626624@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/39146; it has been noted by GNATS.

From: Colin Perkins <csp@isi.edu>
To: freebsd-gnats-submit@FreeBSD.org
Cc: daniel@pelleg.org
Subject: Re: kern/39146: sound fails to load on some Thinkpad models
Date: Tue, 11 Jun 2002 10:02:50 -0400

 Try the following (from Orion Hodson <hodson@freebsd.org>, I just tweaked
 it to work with reinit_mixer too)
 Colin
 
 
 
 Index: ac97.c
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/sound/pcm/ac97.c,v
 retrieving revision 1.5.2.9
 diff -u -r1.5.2.9 ac97.c
 --- ac97.c	2002/04/22 15:49:35	1.5.2.9
 +++ ac97.c	2002/06/11 13:58:31
 @@ -373,7 +373,18 @@
  
  	wrcd(codec, AC97_REG_POWER, (codec->flags & AC97_F_EAPD_INV)? 0x8000 : 0x0000);
  	wrcd(codec, AC97_REG_RESET, 0);
 -	DELAY(100000);
 +	for(i = 0; i < 500; i++) {
 +		static u_int32_t os = 0;
 +		u_int32_t s = rdcd(codec, AC97_REG_POWER) & AC97_POWER_STATUS;
 +		if (s == AC97_POWER_STATUS)
 +			break;
 +		if (s != os)
 +			device_printf(codec->dev, "status 0x%02x %d\n", s, i);
 +		os = s;
 +		DELAY(10000);
 +	}
 +	device_printf(codec->dev, "Ready at %d\n", i);
 +
  	wrcd(codec, AC97_REG_POWER, (codec->flags & AC97_F_EAPD_INV)? 0x8000 : 0x0000);
  
  	i = rdcd(codec, AC97_REG_RESET);
 @@ -468,7 +479,17 @@
  
  	wrcd(codec, AC97_REG_POWER, (codec->flags & AC97_F_EAPD_INV)? 0x8000 : 0x0000);
  	wrcd(codec, AC97_REG_RESET, 0);
 -	DELAY(100000);
 +	for (i = 0; i < 500; i++) {
 +		static u_int32_t os = 0;
 +		u_int32_t s = rdcd(codec, AC97_REG_POWER) & AC97_POWER_STATUS;
 +		if (s == AC97_POWER_STATUS)
 +			break;
 +		if (s != os)
 +			device_printf(codec->dev, "status 0x%02x %d\n", s, i);
 +		os = s;
 +		DELAY(10000);
 +	}
 +	device_printf(codec->dev, "Ready at %d\n", i);
  	wrcd(codec, AC97_REG_POWER, (codec->flags & AC97_F_EAPD_INV)? 0x8000 : 0x0000);
  	i = rdcd(codec, AC97_REG_RESET);
  
 Index: ac97.h
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/sound/pcm/ac97.h,v
 retrieving revision 1.3.2.7
 diff -u -r1.3.2.7 ac97.h
 --- ac97.h	2002/04/22 15:49:35	1.3.2.7
 +++ ac97.h	2002/06/11 13:58:54
 @@ -56,6 +56,12 @@
  #define AC97_REG_GEN	0x20
  #define AC97_REG_3D	0x22
  #define AC97_REG_POWER	0x26
 +#define		AC97_POWER_ADC		(1 << 0)
 +#define		AC97_POWER_DAC		(1 << 1)
 +#define 	AC97_POWER_ANL		(1 << 2)
 +#define 	AC97_POWER_REF		(1 << 3)
 +#define		AC97_POWER_STATUS	(AC97_POWER_ADC | AC97_POWER_DAC | \
 +					 AC97_POWER_REF | AC97_POWER_ANL )
  #define AC97_REGEXT_ID		0x28
  #define 	AC97_EXTCAP_VRA		(1 << 0)
  #define 	AC97_EXTCAP_DRA		(1 << 1)
 

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200206111410.g5BEA4626624>