kern/54176: [PATCH] Updates for AC97 audio (ICH5/R & ALC-655 Codec)

Chris Keladis chris at cmc.optus.net.au
Mon Jul 7 04:10:16 PDT 2003


>Number:         54176
>Category:       kern
>Synopsis:       [PATCH] Updates for AC97 audio (ICH5/R & ALC-655 Codec)
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jul 07 04:10:14 PDT 2003
>Closed-Date:
>Last-Modified:
>Originator:     Chris Keladis
>Release:        FreeBSD 5.1-RELEASE i386
>Organization:
>Environment:

Tracking RELENG_5_1 (19/06/2003 snapshot)

ich.c:
$FreeBSD: src/sys/dev/sound/pci/ich.c,v 1.28 2003/04/16 03:16:55 mdodd Exp $

ac97.c:
$FreeBSD: src/sys/dev/sound/pcm/ac97.c,v 1.42 2003/04/23 16:49:53 jhb Exp $



>Description:
	Kernel does not detect pcm device at all on bootup with such hardware.

>How-To-Repeat:
	N/A
>Fix:

	Patches Below. Seem to work ok, no problem with audio. Have not tested
	recording or other features apart from playback but i expect they would
	work ok.


--- ac97.c.diff begins here ---
--- ac97_28-07-2003.c	Thu Apr 24 02:49:53 2003
+++ ac97.c	Sat Jun 28 12:36:20 2003
@@ -136,6 +136,7 @@
  	{ 0x414c4710, 0x0f, 0, "ALC200", 	0 },
  	{ 0x414c4740, 0x0f, 0, "ALC202", 	0 },
  	{ 0x414c4720, 0x0f, 0, "ALC650", 	0 },
+	{ 0x414c4760, 0x0f, 0, "ALC655",	0 },
  	{ 0x43525900, 0x07, 0, "CS4297", 	0 },
  	{ 0x43525910, 0x07, 0, "CS4297A", 	0 },
  	{ 0x43525920, 0x07, 0, "CS4294/98",	0 },
--- ac97.c.diff ends here ---

--- ich.c.diff begins here ---
--- ich_28-06-2003.c	Wed Apr 16 13:16:55 2003
+++ ich.c	Sun Jun 29 16:17:17 2003
@@ -43,6 +43,7 @@

  #define SIS7012ID       0x70121039      /* SiS 7012 needs special 
handling */
  #define ICH4ID		0x24c58086	/* ICH4 needs special handling too */
+#define ICH5ID		0x24d58086	/* ICH5 special handling */

  /* buffer descriptor */
  struct ich_desc {
@@ -577,8 +578,8 @@
  	stat = ich_rd(sc, ICH_REG_GLOB_STA, 4);

  	if ((stat & ICH_GLOB_STA_PCR) == 0) {
-		/* ICH4 may fail when busmastering is enabled. Continue */
-		if (pci_get_devid(sc->dev) != ICH4ID) {
+		/* ICH4/ICH5 may fail when busmastering is enabled. Continue */
+		if (pci_get_devid(sc->dev) != ICH4ID && pci_get_devid(sc->dev) != 
ICH5ID) {
  			return ENXIO;
  		}
  	}
@@ -630,6 +631,10 @@
  		device_set_desc(dev, "Intel 82801DB (ICH4)");
  		return 0;

+	case ICH5ID:
+		device_set_desc(dev, "Intel 82801EB (ICH5/ICH5R)");
+		return 0;
+
  	case SIS7012ID:
  		device_set_desc(dev, "SiS 7012");
  		return 0;
@@ -681,7 +686,7 @@
  	 * but doing so will mess things up here.  ich4 has enough new
  	 * features it warrants it's own driver.
  	 */
-	if (pci_get_devid(dev) == ICH4ID) {
+	if (pci_get_devid(dev) == ICH4ID || pci_get_devid(dev) == ICH5ID) {
  		pci_write_config(dev, PCIR_ICH_LEGACY, ICH_LEGACY_ENABLE, 1);
  	}

--- ich.c.diff ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list