Changeset 3468


Ignore:
Timestamp:
Dec 3, 2012, 8:07:43 AM (23 months ago)
Author:
wmb
Message:

OLPC XO-4 - Improved access methods for HDMI EDID info.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpu/arm/olpc/gpio-i2c.fth

    r3456 r3468  
    4343      0 0 encode-bytes 
    4444         cam-sda-gpio# 0 encode-gpio 
    45           cam-scl-gpio# 0 encode-gpio 
     45         cam-scl-gpio# 0 encode-gpio 
    4646      " gpios" property 
    4747 
     
    145145         h# 50 1 reg 
    146146         : close  ( -- )  ; 
    147          h# 100 buffer: hdmi-edid 
    148  
    149          : get-edid  ( -- adr len ) 
    150             hdmi-edid h# 100 0  " i2c-read" $call-parent 
    151             hdmi-edid h# 100 
     147         h# 80 constant /edid-chunk 
     148         0 value edid 
     149         0 value /edid 
     150 
     151         : release-edid  ( -- )   
     152            edid /edid free-mem    ( ) 
     153            0 to /edid  0 to edid  ( ) 
    152154         ; 
     155 
    153156         : open  ( -- okay? ) 
    154157            my-unit " set-address" $call-parent 
    155             hdmi-edid h# 100 0  " i2c-read" ['] $call-parent catch  if 
    156                2drop 3drop false 
    157             else 
    158                true 
     158            /edid-chunk to /edid 
     159            /edid alloc-mem to edid 
     160 
     161            edid /edid 0  " i2c-read" ['] $call-parent catch  if  ( x x x x x ) 
     162               2drop 3drop                          ( ) 
     163               release-edid  false  exit            ( -- false ) 
    159164            then 
     165 
     166            \ Basic sanity check to make sure it's an EDID 
     167            edid  " "(00ffffffffffff00)" comp  if   ( ) 
     168               release-edid  false  exit            ( -- false ) 
     169            then 
     170 
     171            \ We could (should) do a checksum here... 
     172 
     173            \ If there are no extensions, exit now, successfully 
     174            edid d# 126 + c@  dup 0= over h# ff = or  if  ( #exts ) 
     175               drop true exit                       ( -- true ) 
     176            then                                    ( #exts ) 
     177 
     178            \ Otherwise make the buffer larger to accomodate the extensions ... 
     179            1+ /edid-chunk * to /edid               ( ) 
     180            edid /edid  resize-memory  if           ( adr' ) 
     181               drop                                 ( ) 
     182               0 to /edid  0 to edid                ( ) 
     183               false exit                           ( ) 
     184            then                                    ( adr ) 
     185            to edid                                 ( ) 
     186 
     187            \ ... and read the extensions 
     188            edid /edid /edid-chunk /string  /edid-chunk   ( adr len offset ) 
     189            " i2c-read" ['] $call-parent catch  if  ( x x x x x ) 
     190               2drop 3drop                          ( ) 
     191               release-edid  false  exit            ( -- false ) 
     192            then 
     193 
     194            true 
    160195         ; 
    161          : edid$  ( -- adr len )  hdmi-edid h# 100  ; 
     196         : edid$  ( -- adr len )  edid /edid  ; 
    162197      finish-device 
    163198   finish-device 
    164199[then] 
    165200device-end 
     201 
     202devalias i2c6 /hdmi-i2c 
Note: See TracChangeset for help on using the changeset viewer.