Author: wmb Date: Thu May 26 01:56:39 2011 New Revision: 2226 URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2226
Log: OLPC trac #10896 - Implement persistent volume control for XO-1.75 (in the process, I moved the relevant code, which was duplicated between XO-1 and XO-1.5, into a common file that is used by all versions).
Modified: cpu/arm/olpc/1.75/fw.bth cpu/arm/olpc/1.75/sound.fth cpu/x86/pc/olpc/fw.bth cpu/x86/pc/olpc/sound.fth cpu/x86/pc/olpc/via/fw.bth
Modified: cpu/arm/olpc/1.75/fw.bth ============================================================================== --- cpu/arm/olpc/1.75/fw.bth Thu May 26 01:13:22 2011 (r2225) +++ cpu/arm/olpc/1.75/fw.bth Thu May 26 01:56:39 2011 (r2226) @@ -231,6 +231,10 @@ ['] $call-method catch if 2drop 3drop then ; code halt ( -- ) wfi c; + +: dimmer ( -- ) screen-ih if " dimmer" screen-ih $call-method then ; +: brighter ( -- ) screen-ih if " brighter" screen-ih $call-method then ; + fload ${BP}/cpu/x86/pc/olpc/sound.fth fload ${BP}/cpu/x86/pc/olpc/guardrtc.fth fload ${BP}/cpu/x86/pc/olpc/security.fth
Modified: cpu/arm/olpc/1.75/sound.fth ============================================================================== --- cpu/arm/olpc/1.75/sound.fth Thu May 26 01:13:22 2011 (r2225) +++ cpu/arm/olpc/1.75/sound.fth Thu May 26 01:56:39 2011 (r2226) @@ -1,9 +1,9 @@ -0 0 " d42a0c00" " /" begin-package +0 0 " d42a0800" " /" begin-package " audio" name -my-space h# 40 reg +my-space h# 800 reg
-h# d42a.0c00 constant sspa-base -h# d42a.0800 constant adma-base +0 value sspa-base \ E.g. h# d42a.0c00 +0 value adma-base \ E.g. h# d42a.0800 : sspa! ( n offset -- ) sspa-base + l! ; \ Write a register in SSPA1 : sspa@ ( offset -- n ) sspa-base + l@ ; \ Read a register in SSPA1 : adma! ( n offset -- ) adma-base + l! ; @@ -170,11 +170,17 @@ my-in-desc 3 la+ l@ to my-in-desc ;
+[ifdef] cl2-a1 +: choose-smbus ( -- ) h# 30 1 set-twsi-target ; +[else] +: choose-smbus ( -- ) h# 34 1 set-twsi-target ; +[then] + \ Reset is unconnected on current boards \ : audio-reset ( -- ) 8 gpio-clr ; \ : audio-unreset ( -- ) 8 gpio-set ; -: codec@ ( reg# -- w ) 1 2 twsi-get swap bwjoin ; -: codec! ( w reg# -- ) >r wbsplit r> 3 twsi-write ; +: codec@ ( reg# -- w ) choose-smbus 1 2 twsi-get swap bwjoin ; +: codec! ( w reg# -- ) choose-smbus >r wbsplit r> 3 twsi-write ; : codec-i@ ( index# -- w ) h# 6a codec! h# 6c codec@ ; : codec-i! ( w index# -- ) h# 6a codec! h# 6c codec! ;
@@ -346,12 +352,8 @@ [then]
[ifdef] cl2-a1 -: init-smbus ( -- ) h# 30 1 set-twsi-target ; - fload ${BP}/cpu/arm/olpc/1.75/alc5624.fth \ Realtek ALC5624 CODEC [else] -: init-smbus ( -- ) h# 34 1 set-twsi-target ; - : headphones-inserted? ( -- flag ) d# 97 gpio-pin@ ; : microphone-inserted? ( -- flag ) d# 96 gpio-pin@ ;
@@ -378,20 +380,25 @@ : mono ;
: init-codec ( -- ) - init-smbus codec-on set-default-gains d# 48000 set-sample-rate ; 0 value open-count : open ( -- flag ) - open-count 0= if audio-clock-on init-codec then + open-count 0= if + my-space h# 800 " map-in" $call-parent to adma-base + adma-base h# 400 + to sspa-base + audio-clock-on init-codec + then open-count 1+ to open-count true ; : close ( -- ) open-count 1 = if uninstall-playback-alarm codec-off ( audio-clock-off ) + adma-base h# 800 " map-out" $call-parent + 0 to adma-base 0 to sspa-base then open-count 1- 0 max to open-count ;
Modified: cpu/x86/pc/olpc/fw.bth ============================================================================== --- cpu/x86/pc/olpc/fw.bth Thu May 26 01:13:22 2011 (r2225) +++ cpu/x86/pc/olpc/fw.bth Thu May 26 01:56:39 2011 (r2226) @@ -359,6 +359,9 @@ fload ${BP}/cpu/x86/pc/biosints.fth fload ${BP}/cpu/x86/pc/olpc/biosresume.fth
+: dimmer ( -- ) screen-ih if " dimmer" screen-ih $call-method then ; +: brighter ( -- ) screen-ih if " brighter" screen-ih $call-method then ; + fload ${BP}/cpu/x86/pc/olpc/setwp.fth fload ${BP}/cpu/x86/pc/olpc/sound.fth fload ${BP}/cpu/x86/pc/olpc/guardrtc.fth @@ -388,39 +391,6 @@ \needs ramdisk " " d# 128 config-string ramdisk " " ' boot-file set-config-string-default \ Let the boot script set the cmdline
-: dimmer ( -- ) screen-ih if " dimmer" screen-ih $call-method then ; -: brighter ( -- ) screen-ih if " brighter" screen-ih $call-method then ; - -dev /8042/keyboard -0 value waiting-up? -: olpc-check-abort ( scan-code -- abort? ) \ Square pressed? - last-scan over to last-scan ( scan-code old-scan-code ) - h# e0 <> if drop false exit then ( scan-code ) - - check-abort? 0= if drop false exit then ( scan-code ) - - dup h# 7f and h# 5d <> if drop false exit then ( scan-code ) - - h# 80 and if \ Up - false to waiting-up? - false ( abort? ) - else - secure? if false else waiting-up? 0= then ( abort? ) - true to waiting-up? - then -; -patch olpc-check-abort check-abort get-scan - -: handle-volume? ( scan-code -- scan-code flag ) - dup h# 43 = if dimmer true exit then - dup h# 44 = if brighter true exit then - dup h# 57 = if softer true exit then - dup h# 58 = if louder true exit then - false -; -' handle-volume? to scan-handled? -dend - \ Eliminate 4 second delay in install console for the case where \ there is no keyboard. The delay is unnecessary because the screen \ does not go blank when the device is closed.
Modified: cpu/x86/pc/olpc/sound.fth ============================================================================== --- cpu/x86/pc/olpc/sound.fth Thu May 26 01:13:22 2011 (r2225) +++ cpu/x86/pc/olpc/sound.fth Thu May 26 01:56:39 2011 (r2226) @@ -54,6 +54,36 @@ close-audio ;
+dev /keyboard +0 value waiting-up? +: olpc-check-abort ( scan-code -- abort? ) \ Square pressed? + last-scan over to last-scan ( scan-code old-scan-code ) + h# e0 <> if drop false exit then ( scan-code ) + + check-abort? 0= if drop false exit then ( scan-code ) + + dup h# 7f and h# 5d <> if drop false exit then ( scan-code ) + + h# 80 and if \ Up + false to waiting-up? + false ( abort? ) + else + secure? if false else waiting-up? 0= then ( abort? ) + true to waiting-up? + then +; +patch olpc-check-abort check-abort get-scan + +: handle-volume? ( scan-code -- scan-code flag ) + dup h# 43 = if dimmer true exit then + dup h# 44 = if brighter true exit then + dup h# 57 = if softer true exit then + dup h# 58 = if louder true exit then + false +; +' handle-volume? to scan-handled? +dend + \ LICENSE_BEGIN \ Copyright (c) 2006 FirmWorks \
Modified: cpu/x86/pc/olpc/via/fw.bth ============================================================================== --- cpu/x86/pc/olpc/via/fw.bth Thu May 26 01:13:22 2011 (r2225) +++ cpu/x86/pc/olpc/via/fw.bth Thu May 26 01:56:39 2011 (r2226) @@ -403,6 +403,9 @@ fload ${BP}/cpu/x86/pc/olpc/biosresume.fth [then]
+: dimmer ( -- ) screen-ih if " dimmer" screen-ih $call-method then ; +: brighter ( -- ) screen-ih if " brighter" screen-ih $call-method then ; + fload ${BP}/cpu/x86/firfilter.fth fload ${BP}/cpu/x86/pc/olpc/sound.fth fload ${BP}/cpu/x86/pc/olpc/via/sound.fth @@ -422,39 +425,6 @@ \needs ramdisk " " d# 128 config-string ramdisk " " ' boot-file set-config-string-default \ Let the boot script set the cmdline
-: dimmer ( -- ) screen-ih if " dimmer" screen-ih $call-method then ; -: brighter ( -- ) screen-ih if " brighter" screen-ih $call-method then ; - -dev /8042/keyboard -0 value waiting-up? -: olpc-check-abort ( scan-code -- abort? ) \ Square pressed? - last-scan over to last-scan ( scan-code old-scan-code ) - h# e0 <> if drop false exit then ( scan-code ) - - check-abort? 0= if drop false exit then ( scan-code ) - - dup h# 7f and h# 5d <> if drop false exit then ( scan-code ) - - h# 80 and if \ Up - false to waiting-up? - false ( abort? ) - else - secure? if false else waiting-up? 0= then ( abort? ) - true to waiting-up? - then -; -patch olpc-check-abort check-abort get-scan - -: handle-volume? ( scan-code -- scan-code flag ) - dup h# 43 = if dimmer true exit then - dup h# 44 = if brighter true exit then - dup h# 57 = if softer true exit then - dup h# 58 = if louder true exit then - false -; -' handle-volume? to scan-handled? -dend - \ Eliminate 4 second delay in install console for the case where \ there is no keyboard. The delay is unnecessary because the screen \ does not go blank when the device is closed.
openfirmware@openfirmware.info