[openfirmware] [commit] r2660 - in cpu/arm: mmp2 olpc/1.75

repository service svn at openfirmware.info
Tue Nov 1 06:32:03 CET 2011


Author: quozl
Date: Tue Nov  1 06:32:03 2011
New Revision: 2660
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2660

Log:
OLPC XO-1.75 - use fast mode (400 kHz i2c) to communicate with new accelerometer.

Modified:
   cpu/arm/mmp2/twsi.fth
   cpu/arm/olpc/1.75/accelerometer.fth

Modified: cpu/arm/mmp2/twsi.fth
==============================================================================
--- cpu/arm/mmp2/twsi.fth	Tue Nov  1 06:29:32 2011	(r2659)
+++ cpu/arm/mmp2/twsi.fth	Tue Nov  1 06:32:03 2011	(r2660)
@@ -58,13 +58,13 @@
 
 h# 1000 constant BBU_TWSI_TimeOut          \ TWSI bus timeout loop counter value
 
-bbu_ICR_IUE bbu_ICR_SCLE or constant iue+scle
+bbu_ICR_IUE bbu_ICR_SCLE or value cr-set   \ bits to maintain as set
 : init-twsi-channel  ( channel# -- )
    set-twsi-channel
    7 clock-reg io!  3 clock-reg io!  \ Set then clear reset bit
    1 us
-   iue+scle  bbu_ICR_UR or  cr!  \ Reset the unit
-   iue+scle cr!                  \ Release the reset
+   cr-set  bbu_ICR_UR or  cr!    \ Reset the unit
+   cr-set cr!                    \ Release the reset
    0 sar!                        \ Set host slave address
    0 cr!                         \ Disable interrupts
 ;
@@ -73,7 +73,7 @@
 ;
 
 : twsi-run  ( extra-flags -- )
-   iue+scle or  bbu_ICR_TB or  cr!    ( )
+   cr-set or  bbu_ICR_TB or  cr!      ( )
 
    h# 1000  0  do
       cr@ bbu_ICR_TB and 0=  if   unloop exit  then
@@ -94,7 +94,7 @@
    bbu_ICR_START  twsi-putbyte        ( )
    sr@  bbu_ISR_BED and  if           ( )
       bbu_ISR_BED sr!                 ( )
-      iue+scle bbu_ICR_MA or  cr!     ( )
+      cr-set  bbu_ICR_MA or  cr!      ( )
       true abort" TWSI bus error"
    then                               ( )
 ;
@@ -111,7 +111,7 @@
       \ If no result data requested, quit now
       r@ 0=  if                          ( r: #data-bytes )
          r> drop                         ( )
-         iue+scle bbu_ICR_STOP or  cr!   ( )
+         cr-set  bbu_ICR_STOP or  cr!    ( )
          exit
       then                               ( r: #data-bytes )
    then                                  ( r: #data-bytes )
@@ -177,10 +177,19 @@
    twsi-out
 ;
 
-d# 12,600,000 constant numerator
-: set-bus-speed  ( hz -- )  \ Useful range is currently 25,000 .. 100,000
-   child-address set-twsi-target
-   numerator swap /  h# 1ff min  h# 7e max  lcr!
+: set-bus-standard  cr-set  h# fffe7fff and              to cr-set  ;
+: set-bus-fast      cr-set  h# fffe7fff and  h# 8000 or  to cr-set  ;
+: set-bus-speed  ( hz -- )  \ Useful range is 25,000 .. 100,000, or 400,000
+    child-address set-twsi-target
+    dup 1- d# 100,000 < if
+        set-bus-standard
+        d# 12,600,000  swap /  h# 1ff min  h# 7e max
+        lcr@ h# ffff.ff00 and  or  lcr!
+    else
+        set-bus-fast
+        lcr@ h# ffff.00ff and  h# 0000.1d00 or  lcr!
+    then
+
 ;
 : decode-unit  ( adr len -- low high )  parse-2int  ;
 : encode-unit  ( low high -- adr len )  >r <# u#s drop [char] , hold r> u#s u#>  ;

Modified: cpu/arm/olpc/1.75/accelerometer.fth
==============================================================================
--- cpu/arm/olpc/1.75/accelerometer.fth	Tue Nov  1 06:29:32 2011	(r2659)
+++ cpu/arm/olpc/1.75/accelerometer.fth	Tue Nov  1 06:32:03 2011	(r2660)
@@ -13,7 +13,6 @@
 : ctl4!  ( b -- )  h# 23 acc-reg!  ;
 : accelerometer-on  ( -- )  h# 47 ctl1!  ;
 : accelerometer-off  ( -- )  h# 07 ctl1!  ;
-
 : wext  ( b -- n )  dup h# 8000 and  if  h# ffff0000 or  then  ;
 : acceleration@  ( -- x y z )
    h# 28 acc-reg@ h# 29 acc-reg@ bwjoin wext 5 >>a
@@ -49,7 +48,7 @@
 : open  ( -- flag )
    my-unit " set-address" $call-parent
    bus-speed " set-bus-speed" $call-parent
-   ['] accelerometer-on catch 0=   
+   ['] accelerometer-on catch 0=
 ;
 : close  ( -- )
    accelerometer-off
@@ -122,7 +121,7 @@
    average-acceleration@ t-  ( dx dy dz )
    h# 08 ctl4!               ( x y z )     \ High res, Normal mode
    error?  if  accelerometer-off  true exit  then
-   
+
    accelerometer-off
    false
 ;
@@ -141,22 +140,22 @@
    ['] accelerometer-on catch  if
       \ The attempt to talk at the old address failed, so we assume the new chip
       \ Support for new LIS3DHTR chip
-      d# 100,000 to bus-speed
-      d#  50 to min-x  d#  50 to min-y  d#  50 to min-z 
-      d# 150 to max-x  d# 150 to max-y  d# 450 to max-z 
+      d# 400,000 to bus-speed
+      d#  50 to min-x  d#  50 to min-y  d#  50 to min-z
+      d# 150 to max-x  d# 150 to max-y  d# 450 to max-z
       h# 32 6 encode-phys " reg" property
       ['] lis3dhtr-selftest to lis-selftest
    else
       accelerometer-off
       \ Something responded to the old address, so we assume it's the old chip
       \ Support for old LIS33DE chip
-      d# 25,000 to bus-speed
-      d#  20 to min-x  d#  20 to min-y  d#  20 to min-z 
-      d# 400 to max-x  d# 400 to max-y  d# 400 to max-z 
+      d#  25,000 to bus-speed
+      d#  20 to min-x  d#  20 to min-y  d#  20 to min-z
+      d# 400 to max-x  d# 400 to max-y  d# 400 to max-z
       h# 3a 6 encode-phys " reg" property
       ['] lis33de-selftest to lis-selftest
    then
-;   
+;
 
 end-package
 



More information about the openfirmware mailing list