[OpenBIOS] r431 - dev/olpc/kb3700

svn at openbios.org svn at openbios.org
Thu May 31 22:15:17 CEST 2007


Author: wmb
Date: 2007-05-31 22:15:17 +0200 (Thu, 31 May 2007)
New Revision: 431

Modified:
   dev/olpc/kb3700/ecio.fth
Log:
Support new EC command protocol.


Modified: dev/olpc/kb3700/ecio.fth
===================================================================
--- dev/olpc/kb3700/ecio.fth	2007-05-31 00:05:36 UTC (rev 430)
+++ dev/olpc/kb3700/ecio.fth	2007-05-31 20:15:17 UTC (rev 431)
@@ -27,12 +27,25 @@
 
 : flash-write-protect-off  ( -- )  GPIO5 ec@  h# 80 or  GPIO5 ec!  ;
 
-
-: ec-cmd  ( cmd -- response )
-   h# 6c pc!  begin  1 ms  h# 6c pc@  3 and  1 =  until  1 ms  h# 68 pc@
-   h# ff h# 6c pc!   \ Release ownership
+: wait-ib-empty  ( -- )
+   d# 1000 0  do  h# 6c pc@  2 and  0=  if  unloop exit  then  1 ms  loop
+   true abort" EC port 6c input buffer timeout"
 ;
+: ec-cmd-out  ( cmd -- )  wait-ib-empty  h# 6c pc!  ;
+: ec-wb  (  -- )  wait-ib-empty  h# 68 pc!  ;
+: ec-rb  ( -- b )
+   d# 1000 0  do
+      h# 6c pc@  3 and  1 =  if
+         h# 68 pc@
+         unloop exit
+      then
+      1 ms
+   loop
+   true abort" EC port 6c output buffer timeout"
+;
 
+: ec-cmd  ( cmd -- response )  ec-cmd-out  ec-rb  ;
+
 : ec-cmd66  ( byte -- )
    h# 66  pc! 
    \ It typically requires about 200 polls
@@ -40,53 +53,13 @@
    true abort" EC didn't respond to port 66 command"
 ;
 
-: ec-cmd@  ( -- b )  h# 6c pc@  ;
-
-: ec-release  ( -- )  h# ff h# 6c pc!  1 ms  h# 68 pc@  drop  ;
-: ec-wait-wr  ( -- )
-   d# 140 0  do
-      ec-cmd@ 2 and  0=  if  unloop exit  then
-      5 ms
-   loop
-   ." EC write timed out" cr
-;
-\ Empirically, it can take a long time for the EC to sense the game
-\ keys when several are down at once.  500 mS is not enough.
-: ec-wait-rd  ( -- )
-   d# 700 0  do
-      ec-cmd@ 1 and  if  unloop exit  then
-      d# 1 ms
-   loop
-   ." EC read timed out" cr
-;
-: flush-ec  ( -- )
-   begin  ec-cmd@  dup h# 80 and  while
-      drop  ." EC release" cr  ec-release  d# 10 ms
-   repeat  ( 6c-val )
-
-   begin  1 and  while            ( )
-      h# 68 pc@ drop              ( )
-      d# 200 us                   ( )
-      ec-cmd@                     ( 6c-val )
-   repeat                         ( 6c-val )
-;
-: ec-cmd!  ( b -- )  ec-wait-wr  h# 6c pc!  ec-wait-wr  ;
-
-: ec-dat@  ( -- b )  ec-wait-rd  h# 68 pc@  ;
-: ec-dat!  ( b -- )  ec-wait-wr  h# 68 pc!  ec-wait-wr  ;
-
-: ec-rb    ( -- b )  0 ec-dat!  ec-dat@  ;
 : ec-rw    ( -- w )  ec-rb ec-rb swap bwjoin  ;
-: ec-wb    ( -- w )  ec-dat!  ;
 : ec-ww    ( -- w )  wbsplit ec-wb ec-wb  ;
 
-: ec-cmda  ( b -- )  flush-ec  ec-cmd!  ec-dat@ drop  ;
-: ec-cmd0  ( -- )  ec-cmda ec-release  ;
+: ec-cmd-w@  ( cmd -- w )  ec-cmd-out  ec-rw  ;
+: ec-cmd-b@  ( cmd -- b )  ec-cmd  ;
+: ec-cmd-b!  ( b cmd -- )  ec-cmd-out  ec-wb  ;
 
-: ec-cmd-w@  ( cmd -- w )  ec-cmda  ec-rw  ec-release  ;
-: ec-cmd-b@  ( cmd -- w )  ec-cmda  ec-rb  ec-release  ;
-: ec-cmd-b!  ( b cmd -- )  ec-cmda  ec-wb  ec-release  ;
-
 : bat-voltage@   ( -- w )  h# 10 ec-cmd-w@  ;
 : bat-current@   ( -- w )  h# 11 ec-cmd-w@  ;
 : bat-acr@       ( -- w )  h# 12 ec-cmd-w@  ;
@@ -94,51 +67,48 @@
 : ambient-temp@  ( -- w )  h# 14 ec-cmd-w@  ;
 : bat-status@    ( -- b )  h# 15 ec-cmd-b@  ;
 : bat-soc@       ( -- b )  h# 16 ec-cmd-b@  ;
-: bat-gauge-id@  ( -- sn0 .. sn7 )
-   h# 17 ec-cmda
-   8 0  do ec-rb  loop
-   ec-release
-;
-: bat-gauge@     ( -- b )  h# 18 ec-cmda  h# 31 ec-wb  ec-dat@  ec-release  ;  \ 31 is the EEPROM address
+: bat-gauge-id@  ( -- sn0 .. sn7 )  h# 17 ec-cmd-out  8 0  do ec-rb  loop  ;
+: bat-gauge@     ( -- b )  h# 18 ec-cmd-out  h# 31 ec-wb  ec-rb  ;  \ 31 is the EEPROM address
 : board-id@      ( -- b )  h# 19 ec-cmd-b@  ;
 : sci-source@    ( -- b )  h# 1a ec-cmd-w@  ;
 : sci-mask!      ( b -- )  h# 1b ec-cmd-b!  ;
 : sci-mask@      ( -- b )  h# 1c ec-cmd-b@  ;
-: game-key@      ( -- w )  h# 1d ec-cmda  ec-rw  ec-release  ;
-: ec-date!       ( day month year -- )  h# 1e ec-cmda  ec-wb ec-wb ec-wb  ec-release  ;
+: game-key@      ( -- w )  h# 1d ec-cmd-out  ec-rw  ;
+: ec-date!       ( day month year -- )  h# 1e ec-cmd-out  ec-wb ec-wb ec-wb  ;
 : ec-abnormal@   ( -- b )  h# 1f ec-cmd-b@  ;  \ XXX is this byte or word?
 
-: bat-init-lifepo4 ( -- )  h# 21 ec-cmd0  ;
-: bat-init-nimh    ( -- )  h# 22 ec-cmd0  ;
+: bat-init-lifepo4 ( -- )  h# 21 ec-cmd-out  ;
+: bat-init-nimh    ( -- )  h# 22 ec-cmd-out  ;
 : wlan-off         ( -- )  0 h# 23 ec-cmd-b!  ;
 : wlan-on          ( -- )  1 h# 23 ec-cmd-b!  ;
-: wlan-wake        ( -- )  h# 24 ec-cmd0  ;
-: wlan-rst         ( -- )  h# 25 ec-cmd0  ;
+: wlan-wake        ( -- )  h# 24 ec-cmd-out  ;
+: wlan-rst         ( -- )  h# 25 ec-cmd-out  ;
 : dcon-disable     ( -- )  0 h# 26 ec-cmd-b!  ;
 : dcon-enable      ( -- )  1 h# 26 ec-cmd-b!  ;
-: reset-ec-warm    ( -- )  h# 27 ec-cmd0  ;
-: reset-ec         ( -- )  h# 28 ec-cmd0  ;
-: write-protect-fw ( -- )  h# 29 ec-cmd0  ;
-\ : disable-ec-io    ( -- )  h# 2a ec-cmd0  ;  \ ???
+: reset-ec-warm    ( -- )  h# 27 ec-cmd-out  ;
+: reset-ec         ( -- )  h# 28 ec-cmd-out  ;
+: write-protect-fw ( -- )  h# 29 ec-cmd-out  ;
+: ebook-mode?      ( -- )  h# 2a ec-cmd-b@  ;
 
 \ EC mailbox access words
 
-: ec-mb-adr@   ( -- w )  h# 80 ec-cmda  ec-rw  ;
-: ec-mb-adr!   ( w -- )  h# 81 ec-cmda  ec-ww  ;
-: ec-mb-setup  ( cmd w -- )  ec-mb-adr!  ec-cmda  ;
+: ec-mb-adr@   ( -- w )  h# 80 ec-cmd-out  ec-rw  ;
+: ec-mb-adr!   ( w -- )  h# 81 ec-cmd-out  ec-ww  ;
+: ec-mb-setup  ( cmd w -- )  ec-mb-adr!  ec-cmd-out  ;
 
 : ec-mb-b@    ( adr -- b )  h# 8a ec-mb-setup  h# 84 ec-cmd-b@  ;
 : ec-mb-w@    ( adr -- w )  h# 88 ec-mb-setup  h# 82 ec-cmd-w@  ;
-: ec-mb-b!    ( b adr -- )  h# 85 ec-mb-setup  ec-wb  h# 8b ec-cmda  ec-release  ;
-: ec-mb-w!    ( w adr -- )  h# 83 ec-mb-setup  ec-ww  h# 89 ec-cmda  ec-release  ;
+: ec-mb-b!    ( b adr -- )  h# 85 ec-mb-setup  ec-wb  h# 8b ec-cmd-out  ;
+: ec-mb-w!    ( w adr -- )  h# 83 ec-mb-setup  ec-ww  h# 89 ec-cmd-out  ;
 
 \ SCI source codes:
 \ SCI_WAKEUP_EVENT             0x01   // Game button,
 \ SCI_BATTERY_STATUS_CHANGE    0x02   // AC plugged/unplugged, ...
 \    Battery inserted/remove, Battery Low, Battery full, Battery destroy
 \ SCI_SOC_CHANGE               0x04   // SOC Change
-\ SCI_ABNORMAL_EVENT           0x08                              
+\ SCI_ABNORMAL_EVENT           0x08
 \ SCI_EB_MODE_CHANGE           0x10
+\ SCI_WAKEUP_WLAN_EVENT        0x20
 
 \ This command hard-resets the EC deeply enough for the SP write-protect to
 \ be off when the system is powered up again.




More information about the OpenBIOS mailing list