Module Name: src
Committed By: kiyohara
Date: Mon Jul 13 12:54:11 UTC 2009
Modified Files:
src/sys/dev/ic: ac97.c
Log Message:
Support UCB1400.
It tested on GUMSTIX with audiostix. However GUMSTIX needs more ad-hoc patch.
To generate a diff of this commit:
cvs rdiff -u -r1.90 -r1.91 src/sys/dev/ic/ac97.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/ic/ac97.c
diff -u src/sys/dev/ic/ac97.c:1.90 src/sys/dev/ic/ac97.c:1.91
--- src/sys/dev/ic/ac97.c:1.90 Tue May 12 14:25:17 2009
+++ src/sys/dev/ic/ac97.c Mon Jul 13 12:54:11 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: ac97.c,v 1.90 2009/05/12 14:25:17 cegger Exp $ */
+/* $NetBSD: ac97.c,v 1.91 2009/07/13 12:54:11 kiyohara Exp $ */
/* $OpenBSD: ac97.c,v 1.8 2000/07/19 09:01:35 csapuntz Exp $ */
/*
@@ -63,7 +63,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ac97.c,v 1.90 2009/05/12 14:25:17 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ac97.c,v 1.91 2009/07/13 12:54:11 kiyohara Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -103,6 +103,7 @@
static void ac97_ad198x_init(struct ac97_softc *);
static void ac97_alc650_init(struct ac97_softc *);
+static void ac97_ucb1400_init(struct ac97_softc *);
static void ac97_vt1616_init(struct ac97_softc *);
static int ac97_modem_offhook_set(struct ac97_softc *, int, int);
@@ -719,7 +720,7 @@
AC97_VENDOR_ID_MASK, "National Semiconductor unknown", NULL, },
{ AC97_CODEC_ID('P', 'S', 'C', 4),
- 0xffffffff, "Philips Semiconductor UCB1400", NULL, },
+ 0xffffffff, "Philips Semiconductor UCB1400", ac97_ucb1400_init, },
{ AC97_CODEC_ID('P', 'S', 'C', 0),
AC97_VENDOR_ID_MASK, "Philips Semiconductor unknown", NULL, },
@@ -2131,6 +2132,42 @@
ac97_add_port(as, &sources[5]);
}
+#define UCB1400_REG_FEATURE_CSR1 0x6a
+#define UCB1400_BB(bb) (((bb) & 0xf) << 11)
+#define UCB1400_TR(tr) (((tr) & 0x3) << 9)
+#define UCB1400_M_MAXIMUM (3 << 7)
+#define UCB1400_M_MINIMUM (1 << 7)
+#define UCB1400_M_FLAT (0 << 7)
+#define UCB1400_HPEN (1 << 6)
+#define UCB1400_DE (1 << 5)
+#define UCB1400_DC (1 << 4)
+#define UCB1400_HIPS (1 << 3)
+#define UCB1400_GIEN (1 << 2)
+#define UCB1400_OVFL (1 << 0)
+#define UCB1400_REG_FEATURE_CSR2 0x6c
+#define UCB1400_SMT (1 << 15) /* Must be 0 */
+#define UCB1400_SUEV1 (1 << 14) /* Must be 0 */
+#define UCB1400_SUEV0 (1 << 13) /* Must be 0 */
+#define UCB1400_AVE (1 << 12)
+#define UCB1400_AVEN1 (1 << 11) /* Must be 0 */
+#define UCB1400_AVEN0 (1 << 10) /* Must be 0 */
+#define UCB1400_SLP_ON \
+ (UCB1400_SLP_PLL | UCB1400_SLP_CODEC)
+#define UCB1400_SLP_PLL (2 << 4)
+#define UCB1400_SLP_CODEC (1 << 4)
+#define UCB1400_SLP_NO (0 << 4)
+#define UCB1400_EV2 (1 << 2) /* Must be 0 */
+#define UCB1400_EV1 (1 << 1) /* Must be 0 */
+#define UCB1400_EV0 (1 << 0) /* Must be 0 */
+static void
+ac97_ucb1400_init(struct ac97_softc *as)
+{
+
+ ac97_write(as, UCB1400_REG_FEATURE_CSR1,
+ UCB1400_HPEN | UCB1400_DC | UCB1400_HIPS | UCB1400_OVFL);
+ ac97_write(as, UCB1400_REG_FEATURE_CSR2, UCB1400_AVE | UCB1400_SLP_ON);
+}
+
#define VT1616_REG_IO_CONTROL 0x5a
#define VT1616_IC_LVL (1 << 15)
#define VT1616_IC_LFECENTER_TO_FRONT (1 << 12)