AD1985 microphone input (Re: Problem recording, using <SiS 7012>)

WATANABE Kazuhiro CQG00620 at nifty.ne.jp
Mon Jul 28 16:00:52 UTC 2008


Hello.

Changed the subject.

At Sun, 27 Jul 2008 11:11:38 -0700 (PDT),
DoctorD wrote:
> Hi!
> 
> I have the same problem, but I have a bit different card:
> 
> pcm0: <Intel ICH5 (82801EB)> port 0xc000-0xc0ff,0xc400-0xc43f mem
> 0xf7dff800-0xf7dff9ff,0xf7dff400-0xf7dff4ff irq 17 at device 31.5 on pci0
> pcm0: [ITHREAD]
> pcm0: <Analog Devices AD1985 AC97 Codec>
> 
> MB: ASUS P4P800 Deluxe
> 
> I tried to apply you last patch, but my card didn't work...
> Could you please, create a one more patch for my card.
> 
> Thanx.

Would you apply the patch below?  If your ICH audio controller has a
different card ID, change the value of the "case" statement in
ad1985_patch().  To settle the ID, I've referred the following mail:

 http://lists.freebsd.org/pipermail/freebsd-multimedia/2003-October/000497.html


--- sys/dev/sound/pcm/ac97.c.releng70	2007-10-30 03:47:47.000000000 +0900
+++ sys/dev/sound/pcm/ac97.c	2008-07-28 18:29:02.000000000 +0900
@@ -141,8 +141,8 @@
 	{ 0x41445370, 0x00, 0, "AD1980",	ad198x_patch },
 	{ 0x41445372, 0x00, 0, "AD1981A",	0 },
 	{ 0x41445374, 0x00, 0, "AD1981B",	ad1981b_patch },
-	{ 0x41445375, 0x00, 0, "AD1985",	ad198x_patch },
-	{ 0x41445378, 0x00, 0, "AD1986",	ad198x_patch },
+	{ 0x41445375, 0x00, 0, "AD1985",	ad1985_patch },
+	{ 0x41445378, 0x00, 0, "AD1986",	ad1986_patch },
 	{ 0x414b4d00, 0x00, 1, "AK4540", 	0 },
 	{ 0x414b4d01, 0x00, 1, "AK4542", 	0 },
 	{ 0x414b4d02, 0x00, 1, "AK4543", 	0 },
--- sys/dev/sound/pcm/ac97_patch.c.releng70	2007-10-30 03:47:27.000000000 +0900
+++ sys/dev/sound/pcm/ac97_patch.c	2008-07-28 21:33:56.000000000 +0900
@@ -69,6 +69,66 @@
 	}
 }
 
+void ad1985_patch(struct ac97_info* codec)
+{
+	/*
+	 * Disable outputs of the SURR_OUT and CENTER_OUT/LFE_OUT pins.
+	 * Select the CENTER_OUT/LFE_OUT pins as the MIC inputs.
+	 * Enable the stereo microphone mode.
+	 *
+	 * Set the voltage of the VREFOUT pin.
+	 */
+	switch (ac97_getsubvendor(codec)) {
+	case 0x80f31043:	/* ASUS P4P800 Deluxe (SE) */
+		ac97_wrcd(codec, 0x76, ac97_rdcd(codec, 0x76) | 0x1800);
+		ac97_wrcd(codec, 0x74, ac97_rdcd(codec, 0x74) | 0x0200);
+		ac97_wrcd(codec, 0x76, ac97_rdcd(codec, 0x76) | 0x0040);
+
+		/*
+		 * 0x0 = 2.25V (default)
+		 * 0x1 = High-Z
+		 * 0x2 = 3.7V
+		 * 0x3 = 0V
+		 */
+		ac97_wrcd(codec, 0x76, (ac97_rdcd(codec, 0x76) & ~0xc)
+		    | 0x0 << 2);
+		break;
+	default:
+		break;
+	}
+}
+
+void ad1986_patch(struct ac97_info* codec)
+{
+	/*
+	 * Disable outputs of the SURR_OUT and CENTER_OUT/LFE_OUT pins.
+	 * Select the SURR_OUT pins as the LINE_IN inputs.
+	 * Select the CENTER_OUT/LFE_OUT pins as the MIC inputs.
+	 * Enable the stereo microphone mode.
+	 *
+	 * Set the voltage of the C/LFE VREF_OUT pin.
+	 */
+	switch (ac97_getsubvendor(codec)) {
+	case 0x818f1043:	/* ASUS P5SD2-X (SE) */
+		ac97_wrcd(codec, 0x76, ac97_rdcd(codec, 0x76) | 0x1800);
+		ac97_wrcd(codec, 0x76, ac97_rdcd(codec, 0x76) | 0x0004);
+		ac97_wrcd(codec, 0x74, ac97_rdcd(codec, 0x74) | 0x0200);
+		ac97_wrcd(codec, 0x76, ac97_rdcd(codec, 0x76) | 0x0040);
+
+		/*
+		 * 0x0 = High-Z (default)
+		 * 0x1 = 2.25V
+		 * 0x2 = 0V
+		 * 0x4 = 3.70V
+		 */
+		ac97_wrcd(codec, 0x70, (ac97_rdcd(codec, 0x70) & ~0x1c)
+		    | 0x1 << 2);
+		break;
+	default:
+		break;
+	}
+}
+
 void cmi9739_patch(struct ac97_info* codec)
 {
 	/*
--- sys/dev/sound/pcm/ac97_patch.h.releng70	2007-04-19 22:54:22.000000000 +0900
+++ sys/dev/sound/pcm/ac97_patch.h	2008-07-28 18:29:21.000000000 +0900
@@ -31,5 +31,7 @@
 void ad1886_patch(struct ac97_info*);
 void ad198x_patch(struct ac97_info*);
 void ad1981b_patch(struct ac97_info*);
+void ad1985_patch(struct ac97_info*);
+void ad1986_patch(struct ac97_info*);
 void cmi9739_patch(struct ac97_info*);
 void alc655_patch(struct ac97_info*);

---
WATANABE Kazuhiro (CQG00620 at nifty.ne.jp)


More information about the freebsd-multimedia mailing list