Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/pci Enable auvia_reset_codec's code and wait until t...



details:   https://anonhg.NetBSD.org/src/rev/bed9fdc7b74f
branches:  trunk
changeset: 551957:bed9fdc7b74f
user:      jmmv <jmmv%NetBSD.org@localhost>
date:      Sun Sep 14 14:48:17 2003 +0000

description:
Enable auvia_reset_codec's code and wait until the card is available.
Fixes 'invalid codec' problems (at least with AD1980).  Ok'ed by tsarna@.

diffstat:

 sys/dev/pci/auvia.c |  14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)

diffs (49 lines):

diff -r 49dc4b4874f1 -r bed9fdc7b74f sys/dev/pci/auvia.c
--- a/sys/dev/pci/auvia.c       Sun Sep 14 13:51:16 2003 +0000
+++ b/sys/dev/pci/auvia.c       Sun Sep 14 14:48:17 2003 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: auvia.c,v 1.31 2003/05/03 18:11:32 wiz Exp $   */
+/*     $NetBSD: auvia.c,v 1.32 2003/09/14 14:48:17 jmmv Exp $  */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -47,7 +47,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: auvia.c,v 1.31 2003/05/03 18:11:32 wiz Exp $");
+__KERNEL_RCSID(0, "$NetBSD: auvia.c,v 1.32 2003/09/14 14:48:17 jmmv Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -128,6 +128,7 @@
 #define                AUVIA_PCICONF_ACSGD      0x00000400     /* SGD enab */
 #define                AUVIA_PCICONF_ACFM       0x00000200     /* FM enab */
 #define                AUVIA_PCICONF_ACSB       0x00000100     /* SB enab */
+#define                AUVIA_PCICONF_PRIVALID   0x00000001     /* primary codec rdy */
 
 #define        AUVIA_PLAY_BASE                 0x00
 #define        AUVIA_RECORD_BASE               0x10
@@ -364,7 +365,7 @@
 void
 auvia_reset_codec(void *addr)
 {
-#ifdef notyet /* XXX seems to make codec become unready... ??? */
+       int i;
        struct auvia_softc *sc = addr;
        pcireg_t r;
 
@@ -380,8 +381,11 @@
        pci_conf_write(sc->sc_pc, sc->sc_pt, AUVIA_PCICONF_JUNK, r);
        delay(200);
 
-       auvia_waitready_codec(sc);
-#endif
+       for (i = 500000; i != 0 && !(pci_conf_read(sc->sc_pc, sc->sc_pt,
+               AUVIA_PCICONF_JUNK) & AUVIA_PCICONF_PRIVALID); i--)
+               DELAY(1);
+       if (i == 0)
+               printf("%s: codec reset timed out\n", sc->sc_dev.dv_xname);
 }
 
 



Home | Main Index | Thread Index | Old Index