Changeset 3496


Ignore:
Timestamp:
Dec 14, 2012, 8:32:27 AM (2 years ago)
Author:
quozl
Message:

OLPC XO-1.75 XO-4 - fix DCON unfreeze glitch in "test /display", #12394, but needs review; calling screen wake and sleep from /dcon seems ugly.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • dev/olpc/dcon/mmp2dcon.fth

    r3449 r3496  
    6060: dcon!  ( word reg# -- )  " reg-w!" $call-parent  ; 
    6161 
     62: mode@    ( -- mode )    1 dcon@  ; 
     63: mode!    ( mode -- )    1 dcon!  ; 
     64: hres!    ( hres -- )    2 dcon!  ;  \ def: h#  458 d# 1200 
     65: htotal!  ( htotal -- )  3 dcon!  ;  \ def: h#  4e8 d# 1256 
     66: hsync!   ( sync -- )    4 dcon!  ;  \ def: h# 1808 d# 24,8 
     67: vres!    ( vres -- )    5 dcon!  ;  \ def: h#  340 d# 900 
     68: vtotal!  ( htotal -- )  6 dcon!  ;  \ def: h#  390 d# 912 
     69: vsync!   ( sync -- )    7 dcon!  ;  \ def: h#  403 d# 4,3 
     70: timeout! ( to -- )      8 dcon!  ;  \ def: h# ffff 
     71: scanint! ( si -- )      9 dcon!  ;  \ def: h# 0000 
     72 
     73: scanint-on   ( -- )  mode@  h# 100 or  mode!  ; 
     74: scanint-off  ( -- )  mode@  h# 100 invert and  mode!  ; 
     75 
    6276: dcon-load  ( -- )  dcon-load-gpio# gpio-set  ; 
    6377: dcon-unload  ( -- )  dcon-load-gpio# gpio-clr  ; 
     
    73870 value color? \ COLOUR 
    7488 
    75 d# 905 value resumeline  \ Configurable; should be set from args 
    76  
    77 : wait-output  ( -- )  d# 40 ms  ; 
    78  
     89d# 850 value resumeline 
    7990: mark-time  ( -- start-time )  get-msecs  ; 
    8091: delta-ms  ( start-time -- elapsed-ms )  mark-time  swap -   ; 
     92 
     93: wait-output  ( -- ) 
     94   mark-time                                            ( start-time ) 
     95   resumeline scanint!  setup-dcon-irq  scanint-on      ( ) 
     96   begin                                                ( start-time ) 
     97      dcon-irq?  if                                     ( start-time ) 
     98         setup-dcon-irq                                 ( start-time ) 
     99         begin                                          ( start-time ) 
     100            dcon-irq?  if                               ( start-time ) 
     101               drop scanint-off exit                    ( ) 
     102            then                                        ( start-time ) 
     103            dup delta-ms  d# 100 >                      ( start-time ) 
     104         until                                          ( start-time ) 
     105      then                                              ( start-time ) 
     106      dup delta-ms  d# 100 >                            ( start-time reached? ) 
     107   until                                                ( start-time ) 
     108   drop                                                 ( ) 
     109   ." Timeout leaving DCON mode" cr                     ( ) 
     110   scanint-off                                          ( ) 
     111; 
     112 
    81113: wait-dcon-mode  ( -- retry? ) 
    82114   mark-time                            ( start-time ) 
     
    104136   dup to vga?                      ( source ) 
    105137   if 
    106 \      unblank-display 
    107       d# 50 ms 
    108       wait-output 
    109       dcon-load  \ Put the DCON in VGA-refreshed mode 
    110       d# 25 ms   \ Ensure that that DCON sees the DCONLOAD high 
    111 \      display-on 
     138      wait-output               \ Wait for the DCON to reach the scan line 
     139      " wake" $call-screen      \ Enable video signal from SoC 
     140      d# 5 ms 
     141      dcon-load                 \ Put the DCON in VGA-refreshed mode 
     142      d# 25 ms                  \ Ensure that that DCON sees the DCONLOAD high 
    112143   else 
    113144      has-dcon-ram?  if 
     
    116147            dcon-unload  \ Put the DCON in self-refresh mode 
    117148            wait-dcon-mode                 ( retry? ) 
    118             \        display-off           ( retry? ) 
    119149         while                             ( ) 
    120150            \ We got a false ack from the DCON so start over from LOAD state 
    121151            dcon-load  d# 25 ms            ( ) 
    122152         repeat                            ( ) 
     153         " sleep" $call-screen 
    123154      then 
    124155   then 
     
    133164; 
    134165 
    135 : mode@    ( -- mode )    1 dcon@  ; 
    136 : mode!    ( mode -- )    1 dcon!  ; 
    137 : hres!    ( hres -- )    2 dcon!  ;  \ def: h#  458 d# 1200 
    138 : htotal!  ( htotal -- )  3 dcon!  ;  \ def: h#  4e8 d# 1256 
    139 : hsync!   ( sync -- )    4 dcon!  ;  \ def: h# 1808 d# 24,8 
    140 : vres!    ( vres -- )    5 dcon!  ;  \ def: h#  340 d# 900 
    141 : vtotal!  ( htotal -- )  6 dcon!  ;  \ def: h#  390 d# 912 
    142 : vsync!   ( sync -- )    7 dcon!  ;  \ def: h#  403 d# 4,3 
    143 : timeout! ( to -- )      8 dcon!  ;  \ def: h# ffff 
    144 : scanint! ( si -- )      9 dcon!  ;  \ def: h# 0000 
    145166[ifdef] old-way 
    146167: dcon-bright!  ( level -- ) d# 10 dcon! ; \ def: h# xxxF 
     
    261282   then 
    262283; 
     284 
     285[ifdef] notdef 
     286: test-dcon-freeze-glitch 
     287   screen-ih remove-output 
     288   " gvsr" $call-screen 
     289   begin  dcon-freeze  dcon-unfreeze  key?  until  key drop 
     290   screen-ih add-output 
     291   page 
     292; 
     293[then] 
    263294 
    264295\ LICENSE_BEGIN 
Note: See TracChangeset for help on using the changeset viewer.