[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