[OpenBIOS] r374 - dev/geode/ac97

svn at openbios.org svn at openbios.org
Sat May 12 03:19:38 CEST 2007


Author: wmb
Date: 2007-05-12 03:19:37 +0200 (Sat, 12 May 2007)
New Revision: 374

Modified:
   dev/geode/ac97/ac97.fth
Log:
OPLC Audio driver - better detection of problems communicating
with the CODEC.



Modified: dev/geode/ac97/ac97.fth
===================================================================
--- dev/geode/ac97/ac97.fth	2007-05-12 01:17:47 UTC (rev 373)
+++ dev/geode/ac97/ac97.fth	2007-05-12 01:19:37 UTC (rev 374)
@@ -111,23 +111,25 @@
 : cmd!  ( l -- )  cmd-wait  au h# c +  rl! ;
 \ : 1us  ( -- )  ms-factor d# 1000 / spins  ;
 \ : rst  ( -- )  h# 40.0000 stat!  1us  0 stat!  ;
+: codec-ready?  ( -- flag )  stat@ h# 80.0000 and 0<>  ;
+
 : codec!  ( value reg# -- )
    d# 24 << or  h# 1.0000 or  cmd!
    begin  cmd@ h# 1.0000 and  0=  until
 ;
 : codec@  ( reg# -- value )
    \ 192 is a ~60us delay to wait until the status tag is cleared.
-   d# 192  0  do
-      stat@  h# 3.0000 and  h# 1.0000 =  if  leave  then
-   loop
+
+   stat@ drop   ( reg# )    \ Clear old status
    d# 24 <<  h# 8001.0000 or  cmd!
-   \ wait until status valid and status tag is set.
-   true  d# 192  0  do
-      stat@  h# 3.0000 and  h# 3.0000 =
-      if  drop false leave  then
+
+   \ wait until status new
+   true                      ( error? )
+   d# 192  0  do             ( error? )
+      stat@  h# 2.0000 and  if  0= leave  then
    loop
    to fatal-error?
-   stat@ ffff and
+   stat@  h# ffff and
 ;
 
 : iand  ( n1 mask -- n2 )  invert and  ;
@@ -336,9 +338,10 @@
 : default ( -- )  48khz disable-playback  ;
 
 : open  ( -- ok? )
-\   fatal-error?  if  false exit  then
    map-regs
+   codec-ready?  0=  if  false exit  then
    get-device-id
+   fatal-error?  if  false exit  then
    default
    1  h# 2a codec-set   \ Enable variable rate
    parse-args  0=  if  unmap-regs false exit  then




More information about the OpenBIOS mailing list