[openfirmware] [commit] r3260 - cpu/arm/olpc dev/olpc/dcon

repository service svn at openfirmware.info
Fri Aug 31 02:22:06 CEST 2012


Author: wmb
Date: Fri Aug 31 02:22:06 2012
New Revision: 3260
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/3260

Log:
OLPC ARM - Converted the MMP2 DCON driver to call it's I2C parent bus for I2C services, instead of using the bit-banged SMBUS driver directly.  Also added I2C methods to the parent node for the image sensor, paving the way for later conversion of that driver.

Modified:
   cpu/arm/olpc/build-fw.fth
   cpu/arm/olpc/gpio-i2c.fth
   dev/olpc/dcon/mmp2dcon.fth

Modified: cpu/arm/olpc/build-fw.fth
==============================================================================
--- cpu/arm/olpc/build-fw.fth	Fri Aug 31 01:52:44 2012	(r3259)
+++ cpu/arm/olpc/build-fw.fth	Fri Aug 31 02:22:06 2012	(r3260)
@@ -101,6 +101,8 @@
 
 fload ${BP}/cpu/arm/mmp2/watchdog.fth	\ reset-all using watchdog timer
 
+fload ${BP}/cpu/arm/olpc/smbus.fth         \ Bit-banged SMBUS (I2C) using GPIOs
+
 fload ${BP}/cpu/arm/olpc/gpio-i2c.fth
 fload ${BP}/cpu/arm/olpc/twsi-i2c.fth
 
@@ -134,8 +136,6 @@
 
 \needs md5init  fload ${BP}/ofw/ppp/md5.fth                \ MD5 hash
 
-fload ${BP}/cpu/arm/olpc/smbus.fth         \ Bit-banged SMBUS (I2C) using GPIOs
-
 fload ${BP}/dev/olpc/spiflash/flashif.fth  \ Generic FLASH interface
 
 fload ${BP}/dev/olpc/spiflash/spiif.fth    \ Generic low-level SPI bus access

Modified: cpu/arm/olpc/gpio-i2c.fth
==============================================================================
--- cpu/arm/olpc/gpio-i2c.fth	Fri Aug 31 01:52:44 2012	(r3259)
+++ cpu/arm/olpc/gpio-i2c.fth	Fri Aug 31 02:22:06 2012	(r3260)
@@ -36,14 +36,26 @@
       1 " #size-cells" integer-property
       : encode-unit  ( phys.. -- str )  push-hex (u.) pop-base  ;
       : decode-unit  ( str -- phys.. )  push-hex  $number  if  0  then  pop-base  ;
-      : open  ( -- flag )  true  ;
-      : close  ( -- )  ;
       
       0 0 encode-bytes
          cam-sda-gpio# 0 encode-gpio
           cam-scl-gpio# 0 encode-gpio
       " gpios" property
 
+      0 instance value slave-address
+      : set-address  ( slave -- )  to slave-address  ;
+      : smb-setup
+         1 to smb-dly-us cam-scl-gpio# to smb-clock-gpio#
+         cam-sda-gpio# to smb-data-gpio#
+         slave-address to smb-slave
+      ;
+      \ Since this I2C bus is dedicated to the DCON, we save space by
+      \ implementing only the methods that the DCON uses
+      : reg-b@  ( reg# -- b )  smb-setup smb-byte@  ;
+      : reg-b!  ( b reg# -- )  smb-setup smb-byte!  ;
+      : open  ( -- flag )  true  ;
+      : close  ( -- )  ;
+
       new-device
          " image-sensor" device-name    
 
@@ -56,7 +68,6 @@
             cam-pwr-gpio# 0 encode-gpio
             cam-rst-gpio# 0 encode-gpio
          " gpios" property
-
       finish-device
    finish-device
 
@@ -67,12 +78,30 @@
       1 " #size-cells" integer-property
       : encode-unit  ( phys.. -- str )  push-hex (u.) pop-base  ;
       : decode-unit  ( str -- phys.. )  push-hex  $number  if  0  then  pop-base  ;
-      : open  ( -- flag )  true  ;
-      : close  ( -- )  ;
 
       0 0 encode-bytes
          dcon-sda-gpio# 0 encode-gpio
          dcon-scl-gpio# 0 encode-gpio
       " gpios" property
+
+      0 instance value slave-address
+      : set-address  ( slave -- )  to slave-address  ;
+      : smb-setup  ( -- )
+         dcon-scl-gpio# to smb-clock-gpio#
+         dcon-sda-gpio# to smb-data-gpio#
+         slave-address to smb-slave
+      ;
+
+      \ Since this I2C bus is dedicated to the DCON, we save space by
+      \ implementing only the methods that the DCON uses
+
+      : reg-w@  ( reg# -- w )  smb-setup smb-word@  ;
+      : reg-w!  ( w reg# -- )  smb-setup smb-word!  ;
+
+      : bus-reset  ( -- )  smb-setup smb-stop 1 ms  smb-off  1 ms  smb-on  ;
+      : bus-init  ( -- )  smb-setup  smb-on  smb-pulses  ;
+
+      : open  ( -- flag )  true  ;
+      : close  ( -- )  ;
    finish-device
 device-end

Modified: dev/olpc/dcon/mmp2dcon.fth
==============================================================================
--- dev/olpc/dcon/mmp2dcon.fth	Fri Aug 31 01:52:44 2012	(r3259)
+++ dev/olpc/dcon/mmp2dcon.fth	Fri Aug 31 02:22:06 2012	(r3260)
@@ -53,18 +53,11 @@
 \ h# 4000 constant DM_DEBUG
 \ h# 8000 constant DM_SELFTEST
 
-: set-dcon-slave  ( -- )
-   dcon-scl-gpio# to smb-clock-gpio#
-   dcon-sda-gpio# to smb-data-gpio#
+: bus-init  ( -- )  " bus-init" $call-parent  ;
+: bus-reset  ( -- )  " bus-reset" $call-parent  ;
 
-   h# 0d to smb-slave
-;
-
-: smb-init    ( -- )  set-dcon-slave  smb-on  smb-pulses  ;
-: smb-reset   ( -- )  smb-stop 1 ms  smb-off  1 ms  smb-on   ;
-
-: dcon@  ( reg# -- word )  set-dcon-slave  smb-word@  ;
-: dcon!  ( word reg# -- )  set-dcon-slave  smb-word!  ;
+: dcon@  ( reg# -- word )  " reg-w@" $call-parent  ;
+: dcon!  ( word reg# -- )  " reg-w!" $call-parent  ;
 
 : dcon-load  ( -- )  dcon-load-gpio# gpio-set  ;
 : dcon-unload  ( -- )  dcon-load-gpio# gpio-clr  ;
@@ -134,7 +127,7 @@
 \ gx_configure_tft(info);
 
 : try-dcon!  ( w reg# -- )
-   ['] dcon!  catch  if  2drop  smb-reset  then
+   ['] dcon!  catch  if  2drop  bus-reset  then
 ;
 
 : mode@    ( -- mode )    1 dcon@  ;
@@ -171,14 +164,14 @@
 ;
 
 \ Setup so it can be called by execute-device-method
-: dcon-off  ( -- )  smb-init  h# 12 ['] mode!  catch  if  drop  then  ;
+: dcon-off  ( -- )  bus-init  h# 12 ['] mode!  catch  if  drop  then  ;
 
 : dcon2?  ( -- flag )
    5 0  do
       0 ['] dcon@ catch  0=  if    ( x )
          h# dc02 =  unloop exit
       then                         ( x )
-      drop   d# 50 ms  smb-init    ( )
+      drop   d# 50 ms  bus-init    ( )
    loop
    false
 ;
@@ -217,7 +210,7 @@
 
 [ifdef] old-way
 : init-dcon  ( -- )
-   smb-init
+   bus-init
 
 \ Unnecessary because CForth has already done it
 \   dcon-load  dcon-enable  ( maybe-set-cmos )
@@ -226,7 +219,8 @@
 ' init-dcon to init-panel
 [else]
 : open  ( -- flag )
-   smb-init
+   my-unit " set-address" $call-parent
+   bus-init
 \ Unnecessary because CForth has already done it
 \   dcon-load  dcon-enable  ( maybe-set-cmos )
    \ dcon-enable leaves mode set to 69 - 40:antialias, 20:swizzle, 8:backlight on, 1:passthru off



More information about the openfirmware mailing list