[openfirmware] [commit] r2011 - cpu/arm/olpc/1.75 dev/olpc/mmp2camera

repository service svn at openfirmware.info
Fri Nov 5 04:54:21 CET 2010


Author: wmb
Date: Fri Nov  5 04:54:21 2010
New Revision: 2011
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2011

Log:
OLPC XO-1.75 - Camera test now uses display video port instead of CPU copying into frame buffer.

Modified:
   cpu/arm/olpc/1.75/devices.fth
   cpu/arm/olpc/1.75/fw.bth
   cpu/arm/olpc/1.75/lcd.fth
   dev/olpc/mmp2camera/ccic.fth

Modified: cpu/arm/olpc/1.75/devices.fth
==============================================================================
--- cpu/arm/olpc/1.75/devices.fth	Fri Nov  5 02:44:07 2010	(r2010)
+++ cpu/arm/olpc/1.75/devices.fth	Fri Nov  5 04:54:21 2010	(r2011)
@@ -27,7 +27,6 @@
 fload ${BP}/forth/lib/sysuart.fth	\ Set console I/O vectors to UART
 
 0 value keyboard-ih
-0 value screen-ih
 
 fload ${BP}/ofw/core/muxdev.fth          \ I/O collection/distribution device
 
@@ -86,6 +85,7 @@
 
 \needs md5init  fload ${BP}/ofw/ppp/md5.fth                \ MD5 hash
 
+
 [ifdef] notyet
 fload ${BP}/dev/olpc/confirm.fth             \ Selftest interaction modalities
 fload ${BP}/cpu/x86/pc/olpc/mfgdata.fth      \ Manufacturing data
@@ -94,6 +94,7 @@
 
 fload ${BP}/dev/olpc/kb3700/battery.fth      \ Battery status reports
 [else]
+: confirm-selftest?  ( -- flag )  false  ;  \ XXX implement me
 : find-tag  ( adr len -- false | value$ true )  2drop false  ;
 [then]
 

Modified: cpu/arm/olpc/1.75/fw.bth
==============================================================================
--- cpu/arm/olpc/1.75/fw.bth	Fri Nov  5 02:44:07 2010	(r2010)
+++ cpu/arm/olpc/1.75/fw.bth	Fri Nov  5 04:54:21 2010	(r2011)
@@ -11,8 +11,6 @@
 \ ' $report-name is include-hook
 \ ' noop is include-hook
 
-: confirm-selftest?  ( -- flag )  true  ;  \ XXX implement me
-
 fload ${BP}/cpu/arm/olpc/1.75/devices.fth
 
 [ifndef] virtual-mode

Modified: cpu/arm/olpc/1.75/lcd.fth
==============================================================================
--- cpu/arm/olpc/1.75/lcd.fth	Fri Nov  5 02:44:07 2010	(r2010)
+++ cpu/arm/olpc/1.75/lcd.fth	Fri Nov  5 04:54:21 2010	(r2011)
@@ -28,3 +28,74 @@
    clkdiv      h# 1a8 lcd!  \ Clock divider
    h# 08021100 h# 190 lcd!  \ DMA CTRL 0 - enable DMA, 24 bpp mode
 ;
+
+: normal-hsv  ( -- )
+   \ The brightness range is from ffff (-255) to 00ff (255) - 8 bits sign-extended
+   \ 0 is the median value
+   h# 0000.4000 h# 1ac lcd!  \ Brightness.contrast  0 is normal brightness, 4000 is 1.0 contrast
+   h# 2000.4000 h# 1b0 lcd!  \ Multiplier(1).Saturation(1)
+   h# 0000.4000 h# 1b4 lcd!  \ HueSine(0).HueCosine(1)
+;
+: clear-unused-regs  ( -- )
+   0 h# 0c4 lcd!   \ Frame 0 U
+   0 h# 0c8 lcd!   \ Frame 0 V
+   0 h# 0cc lcd!   \ Frame 0 Command
+   0 h# 0d0 lcd!   \ Frame 1 Y
+   0 h# 0d4 lcd!   \ Frame 1 U
+   0 h# 0d8 lcd!   \ Frame 1 V
+   0 h# 0dc lcd!   \ Frame 1 Command
+   0 h# 0e4 lcd!   \ U and V pitch
+   0 h# 130 lcd!   \ Color key Y
+   0 h# 134 lcd!   \ Color key U
+   0 h# 138 lcd!   \ Color key V
+;
+
+: centered  ( w h -- )
+   hdisp third - 2/               ( w h x )    \ X centering offset
+   vdisp third - 2/               ( w h x y )  \ Y centering offset
+   wljoin h# 0e8 lcd!             ( w h )
+
+   wljoin dup h# 0ec lcd!         ( h.w )  \ Source size
+   h# 0f0 lcd!                    ( )      \ Zoomed size
+;
+: zoomed  ( w h -- )
+   0 h# 0e8 lcd!                   ( w h )  \ No offset when zooming
+   wljoin h# 0ec lcd!              ( )      \ Source size
+   hdisp vdisp wljoin h# 0f0 lcd!  ( )      \ Zoom to fill screen
+;
+
+defer placement ' zoomed is placement
+
+: set-video-alpha  ( 0..ff -- )
+   8 lshift                ( xx00 )
+   h# 194 lcd@             ( xx00 regval )
+   h# ff00 invert and      ( xx00 regval' )
+   or                      ( regval' )
+   h# 194 lcd!             ( )
+;
+
+\ 0:RBG565 1:RGB1555 2:RGB888packed 3:RGB888unpacked 4:RGBA888
+\ 5:YUV422packed 6:YUV422planar 7:YUV420planar 8:SmartPanelCmd
+\ 9:Palette4bpp  A:Palette8bpp  B:RGB888A
+: set-video-mode  ( mode -- )
+   d# 20 lshift            ( x00000 )
+   h# 190 lcd@             ( x00000 regval )
+   h# f00000 invert and    ( x00000 regval' )
+   or                      ( regval' )
+   h# 190 lcd!             ( )
+;
+: video-on  ( -- )  h# 190 lcd@ 1 or h# 190 lcd!  ;
+: video-off  ( -- )  h# 190 lcd@ 1 invert and h# 190 lcd!  ;
+: set-video-dma-adr  ( adr -- )  h# 0c0 lcd!  ;
+
+\ Assumes RGB565
+: start-video  ( adr w h -- )
+   clear-unused-regs  normal-hsv  ( adr w h )
+   over 2* h# 0e0 lcd!            ( adr w h )  \ Pitch - width * 2 bytes/pixel
+   placement                      ( adr )
+   set-video-dma-adr              ( )  \ Video buffer
+   0 set-video-mode               ( )  \ RGB565
+   d# 255 set-video-alpha         ( )  \ Opaque video
+   video-on
+;
+: stop-video  ( -- )  video-off  ;

Modified: dev/olpc/mmp2camera/ccic.fth
==============================================================================
--- dev/olpc/mmp2camera/ccic.fth	Fri Nov  5 02:44:07 2010	(r2010)
+++ dev/olpc/mmp2camera/ccic.fth	Fri Nov  5 04:54:21 2010	(r2011)
@@ -18,7 +18,7 @@
    then
 ;
 : free-dma-bufs  ( -- )
-   dma-bufs  dma-bufs-phys  /dma-buf #dma-bufs *  " free-capture-buffer" $call-parent
+   dma-bufs  dma-bufs-phys  /dma-buf #dma-bufs *  free-capture-buffer
    0 to dma-bufs 0 to dma-bufs-phys
 ;
 
@@ -105,21 +105,20 @@
 
 0 value buf-act
 : /string  ( adr len n -- adr' len' )  tuck - -rot + swap  ;
-: buf-done?  ( -- false | buf-adr true )
+: buf-done?  ( -- false | buf# true )
    h# 30 cl@  dup 1 next-buf lshift  and   if  ( value )
       h# 30 cl!                ( )
-      next-buf 'dma-buf        ( buf-adr )
-      true                     ( buf-adr true )
+      next-buf true            ( buf# true )
    else                        ( value )
       drop false               ( false )
    then
 ;
 
 
-: snap  ( timeout -- true | adr false )
+: snap  ( timeout -- true | buf# false )
    0  do
-      buf-done?  if   ( buf-adr )
-         false  unloop exit  ( -- buf-adr false )
+      buf-done?  if   ( buf# )
+         false  unloop exit  ( -- buf# false )
       then
       1 ms
    loop
@@ -129,11 +128,12 @@
 external
 
 : read   ( adr len -- actual )
-   buf-done?  if          ( adr len buf-adr )
-      -rot /dma-buf min   ( buf-adr adr actual )
+   buf-done?  if          ( adr len buf# )
+      'dma-buf -rot       ( buf-adr adr len )
+      /dma-buf min        ( buf-adr adr actual )
       dup >r  move  r>    ( actual )
    else
-      2drop 0
+      2drop -2
    then
 ;
 
@@ -145,7 +145,15 @@
    true
 ;
 
+: start-display  ( -- )
+   0 'dma-buf-phys VGA_WIDTH VGA_HEIGHT " start-video" $call-screen
+;
+: stop-display  ( -- )
+   " stop-video" $call-screen
+;
+
 : close  ( -- )
+   stop-display
    ctlr-stop
    interrupts-off
    power-off
@@ -210,8 +218,9 @@
    2drop                ( )
 ;
 
-: display-frame  ( adr -- )
-   fb-pa copy16>24
+: display-frame  ( buf# -- )
+   'dma-buf-phys " set-video-dma-adr" $call-screen
+\  'dma-buf fb-pa copy16>24
 \   autobright
 ;
 
@@ -223,7 +232,7 @@
 ;
 
 : shoot-still  ( -- error? )
-   d# 1000 snap  if  true exit  then   ( adr )
+   d# 1000 snap  if  true exit  then   ( buf# )
    display-frame
    false
 ;
@@ -243,6 +252,7 @@
 : selftest  ( -- error? )
    open 0=  if  true exit  then
    d# 300 ms
+   start-display
    unmirrored  shoot-still  ?dup  if  close exit  then	( error? )
    d# 1,000 ms
    mirrored   shoot-movie  full-brightness		( error? )



More information about the openfirmware mailing list