Author: wmb
Date: Sat Oct 15 01:53:00 2011
New Revision: 2606
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2606
Log:
OLPC XO-1.75 - trac #11314 - suppress CForth complaint when using early serial interaction with OFW. The fix also requires a corresponding change to CForth.
Modified:
cpu/arm/olpc/1.75/fw.bth
Modified: cpu/arm/olpc/1.75/fw.bth
==============================================================================
--- cpu/arm/olpc/1.75/fw.bth Fri Oct 14 04:21:56 2011 (r2605)
+++ cpu/arm/olpc/1.75/fw.bth Sat Oct 15 01:53:00 2011 (r2606)
@@ -120,6 +120,8 @@
\ d# 1000 i-key-wait if
rotate-button? if
protect-fw
+ \ Make the frame buffer visible so CForth won't complain about OFW not starting
+ h# 8009.1100 h# 20.b190 io!
." Interacting" cr hex interact
then
\ Turn on USB power here to overlap the time with other startup actions
Author: quozl
Date: Fri Oct 14 04:21:56 2011
New Revision: 2605
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2605
Log:
Q2E48
(note that this version was not svn head at this point, but rather svn 2393 with svn 2585, 2589, 2603 and 2604)
Modified:
cpu/x86/pc/olpc/versions.fth
Modified: cpu/x86/pc/olpc/versions.fth
==============================================================================
--- cpu/x86/pc/olpc/versions.fth Fri Oct 14 03:16:49 2011 (r2604)
+++ cpu/x86/pc/olpc/versions.fth Fri Oct 14 04:21:56 2011 (r2605)
@@ -2,7 +2,7 @@
\ The overall firmware revision
macro: FW_MAJOR E
-macro: FW_MINOR 47
+macro: FW_MINOR 48
\ The EC microcode
macro: EC_VERSION e35
Author: wmb
Date: Thu Oct 13 03:07:05 2011
New Revision: 2599
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2599
Log:
OLPC XO-1.75 - support for new accelerometer chip.
Modified:
cpu/arm/olpc/1.75/accelerometer.fth
cpu/arm/olpc/1.75/roller.fth
Modified: cpu/arm/olpc/1.75/accelerometer.fth
==============================================================================
--- cpu/arm/olpc/1.75/accelerometer.fth Wed Oct 12 23:49:29 2011 (r2598)
+++ cpu/arm/olpc/1.75/accelerometer.fth Thu Oct 13 03:07:05 2011 (r2599)
@@ -1,9 +1,8 @@
-
hex
-0 0 " 6,3a" " /twsi" begin-package
+0 0 " " " /twsi" begin-package
" accelerometer" name
-my-address my-space encode-phys " reg" property
+\ my-address my-space encode-phys " reg" property
\ This is for the stand-alone accelerometer chip LIS33DETR
@@ -11,15 +10,18 @@
: acc-reg@ ( reg# -- b ) 1 1 " smbus-out-in" $call-parent ;
: acc-reg! ( b reg# -- ) 2 0 " smbus-out-in" $call-parent ;
: ctl1! ( b -- ) h# 20 acc-reg! ;
+: ctl4! ( b -- ) h# 23 acc-reg! ;
: accelerometer-on ( -- ) h# 47 ctl1! ;
: accelerometer-off ( -- ) h# 07 ctl1! ;
: bext ( b -- n ) dup h# 80 and if h# ffffff00 or then ;
+: wext ( b -- n ) dup h# 8000 and if h# ffff0000 or then ;
: acceleration@ ( -- x y z )
- h# 29 acc-reg@ bext
- h# 2b acc-reg@ bext
- h# 2d acc-reg@ bext
+ h# 28 acc-reg@ h# 29 acc-reg@ bwjoin wext 5 >>a
+ h# 2a acc-reg@ h# 2b acc-reg@ bwjoin wext 5 >>a
+ h# 2c acc-reg@ h# 2d acc-reg@ bwjoin wext 5 >>a
;
+
: t+ ( x1 y1 z1 x2 y2 z2 -- x3 y3 z3 )
>r >r >r ( x1 y1 z1 r: z2 y2 x2 )
rot r> + ( y1 z1 x3 r: z2 y2 )
@@ -35,12 +37,12 @@
\ Averaging a lot of samples reduces the effect of vibration
: average-acceleration@ ( -- x y z )
acceleration@ ( x y z )
- d# 127 0 do
+ d# 64 0 do
acceleration@ t+ ( x' y' z' )
loop
- rot 7 >>a
- rot 7 >>a
- rot 7 >>a
+ rot 6 >>a
+ rot 6 >>a
+ rot 6 >>a
;
: delay ( -- ) d# 30 ms ;
@@ -60,25 +62,28 @@
\ - Mitch's unit, 32
\ - James' A3, 41 (on rubber mat on bare ground)
\ - James' A2, 39
-d# 50 value max-delta
-: out-of-range? ( delta -- error? ) 3 max-delta between 0= ;
+
+d# 50 value min-x
+d# 50 value min-y
+d# 150 value min-z
+d# 100 value max-x
+d# 100 value max-y
+d# 300 value max-z
+: range? ( delta max-delta -- error? ) between 0= ;
: error? ( dx dy dz -- error? )
- out-of-range? if ." X axis error" cr 2drop true exit then ( dx dy )
- out-of-range? if ." Y axis error" cr drop true exit then ( dx )
- out-of-range? if ." X axis error" cr true exit then ( )
+ min-z max-z range? if ." Z axis error" cr 2drop true exit then ( dx dy )
+ min-y max-y range? if ." Y axis error" cr drop true exit then ( dx )
+ min-x max-x range? if ." X axis error" cr true exit then ( )
false
;
-: selftest ( -- error? )
- open 0= if true exit then
-
- final-test? if accelerometer-off false exit then
-
+: lis33de-selftest ( -- error? )
\ Use the device's selftest function to force a change in one direction
delay ( )
average-acceleration@ ( x y z )
- h# 4f ctl1! delay ( x y z ) \ Set the STM bit
+ h# 4f ctl1! ( x y z ) \ Set the STM bit
+ delay
average-acceleration@ t- ( dx dy dz )
\ STM applies negative bias to Y, but our deltas are inverted
\ because we subtract the new measurement from the old.
@@ -89,15 +94,70 @@
\ Use the device's selftest function to force a change in the opposite direction
accelerometer-on delay ( ) \ Back to normal - STM and STP both off
average-acceleration@ ( x y z )
- h# 57 ctl1! delay ( x y z ) \ Set the STP bit
+ h# 57 ctl1! ( x y z ) \ Set the STP bit
+ delay
average-acceleration@ t- ( dx dy dz )
\ STP applies negative bias to X and Z, but our deltas are inverted
\ because we subtract the new measurement from the old.
swap negate swap ( dx dy' dz )
error? if accelerometer-off true exit then
+ false
+;
+: lis3dhtr-selftest ( -- )
+ \ Use the device's selftest function to force a change in one direction
+ delay ( )
+ average-acceleration@ ( x y z )
+ h# 0a ctl4! ( x y z ) \ High res, Selftest mode 0
+ delay
+ average-acceleration@ t- ( dx dy dz )
+ rot negate rot negate rot negate
+ h# 08 ctl4! ( x y z ) \ High res, Normal mode
+ error? if accelerometer-off true exit then
+
+ \ Use the device's selftest function to force a change in the opposite direction
+ accelerometer-on delay ( ) \ Back to normal - STM and STP both off
+ average-acceleration@ ( x y z )
+ h# 0c ctl4! ( x y z ) \ High res, Selftest mode 1
+ delay
+ 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
;
+defer lis-selftest
+: selftest ( -- error? )
+ open 0= if true exit then
+
+ final-test? if accelerometer-off false exit then
+
+ lis-selftest
+;
+
+: probe ( -- )
+ h# 3a 6 " set-address" $call-parent
+ d# 25,000 " set-bus-speed" $call-parent
+ ['] 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# 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# 300 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# 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
+
+stand-init: Accelerometer
+ " /accelerometer" " probe" execute-device-method drop
+;
Modified: cpu/arm/olpc/1.75/roller.fth
==============================================================================
--- cpu/arm/olpc/1.75/roller.fth Wed Oct 12 23:49:29 2011 (r2598)
+++ cpu/arm/olpc/1.75/roller.fth Thu Oct 13 03:07:05 2011 (r2599)
@@ -75,7 +75,7 @@
d# 19 d# 20 a/b>fraction value damping
-d# 1 d# 10 a/b>fraction value acc-scale
+d# 1 d# 80 a/b>fraction value acc-scale
d# 20 constant ball-radius
d# 40 constant ball-diameter