[openfirmware] [commit] r2246 - cpu/arm cpu/arm/olpc/1.75 dev/hdaudio
repository service
svn at openfirmware.info
Sat Jun 4 22:40:53 CEST 2011
Author: wmb
Date: Sat Jun 4 22:40:52 2011
New Revision: 2246
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2246
Log:
OLPC XO-1.75 - checkin audio changes in support of trac #10886. Autocorrelation has not been tested yet, but the changes are in place and compile cleanly.
Modified:
cpu/arm/muldiv.fth
cpu/arm/olpc/1.75/alc5631.fth
cpu/arm/olpc/1.75/fw.bth
cpu/arm/olpc/1.75/sound.fth
dev/hdaudio/noiseburst.fth
dev/hdaudio/test.fth
Modified: cpu/arm/muldiv.fth
==============================================================================
--- cpu/arm/muldiv.fth Sat Jun 4 22:25:49 2011 (r2245)
+++ cpu/arm/muldiv.fth Sat Jun 4 22:40:52 2011 (r2246)
@@ -336,6 +336,15 @@
mov tos,r5
c;
+: m/mod (s d# n1 -- rem quot )
+ dup >r 2dup xor >r >r dabs r@ abs um/mod
+ swap r> 0< if negate then
+ swap r> 0< if
+ negate over if 1- r@ rot - swap then
+ then
+ r> drop
+;
+
: / ( dividend divisor -- quotient ) /mod nip ;
: mod ( dividend divisor -- modulus ) /mod drop ;
: */mod ( n1 n2 n3 -- n.mod n.quot ) >r m* r> fm/mod ;
Modified: cpu/arm/olpc/1.75/alc5631.fth
==============================================================================
--- cpu/arm/olpc/1.75/alc5631.fth Sat Jun 4 22:25:49 2011 (r2245)
+++ cpu/arm/olpc/1.75/alc5631.fth Sat Jun 4 22:40:52 2011 (r2246)
@@ -92,8 +92,10 @@
: set-headphone-volume ( n -- ) \ DONE
gain>lr if h# 8080 then h# 9f9f 4 codec-field
;
+
+false value force-speakers?
: set-volume ( n -- )
- headphones-inserted? if
+ headphones-inserted? force-speakers? 0= and if
set-headphone-volume
else
set-speaker-volume
@@ -105,6 +107,11 @@
d# 0 constant default-speaker-volume \ 0 dB - range is -46.5 to +12
d# -10 constant default-headphone-volume \ -10 dB - range is -46.5 to 0
+: speakers-on ( -- ) default-speaker-volume set-speaker-volume ;
+: speakers-off ( -- ) d# -100 set-speaker-volume ;
+: headphones-on ( -- ) default-headphone-volume set-headphone-volume ;
+: headphones-off ( -- ) d# -100 set-headphone-volume ;
+
: adc-mute-all ( -- ) h# f0f0 h# 14 codec! ;
: adc-mute-mic ( -- ) h# 4040 h# 14 codec-set ;
: adc-unmute-mic ( -- ) h# 4040 h# 14 codec-clr ;
@@ -172,12 +179,12 @@
: mic+20db ( -- ) d# 20 set-mic-gain ;
: set-default-gains ( -- )
output-config
- headphones-inserted? if
- default-headphone-volume set-headphone-volume
- mute-speakers
+ headphones-inserted? force-speakers? 0= and if
+ headphones-on
+ speakers-off
else
- default-speaker-volume set-speaker-volume
- mute-headphones
+ speakers-on
+ headphones-off
then
default-dac-gain set-dac-gain
default-mic-gain set-mic-gain
Modified: cpu/arm/olpc/1.75/fw.bth
==============================================================================
--- cpu/arm/olpc/1.75/fw.bth Sat Jun 4 22:25:49 2011 (r2245)
+++ cpu/arm/olpc/1.75/fw.bth Sat Jun 4 22:40:52 2011 (r2246)
@@ -81,8 +81,7 @@
standalone? if
disable-interrupts
- d# 1000
-\ i-key-wait if
+\ d# 1000 i-key-wait if
rotate-button? if
protect-fw
." Interacting" cr hex interact
@@ -300,7 +299,7 @@
fload ${BP}/ofw/core/countdwn.fth \ Startup countdown
-\ fload ${BP}/dev/hdaudio/noiseburst.fth \ audio-test support package
+fload ${BP}/dev/hdaudio/noiseburst.fth \ audio-test support package
: console-start ( -- )
install-mux-io
Modified: cpu/arm/olpc/1.75/sound.fth
==============================================================================
--- cpu/arm/olpc/1.75/sound.fth Sat Jun 4 22:25:49 2011 (r2245)
+++ cpu/arm/olpc/1.75/sound.fth Sat Jun 4 22:40:52 2011 (r2246)
@@ -206,8 +206,11 @@
[ifdef] cl2-a1
fload ${BP}/cpu/arm/olpc/1.75/alc5624.fth \ Realtek ALC5624 CODEC
[else]
-: headphones-inserted? ( -- flag ) d# 97 gpio-pin@ ;
-: microphone-inserted? ( -- flag ) d# 96 gpio-pin@ ;
+d# 97 constant headphone-jack
+d# 96 constant external-mic
+: pin-sense? ( gpio# -- flag ) gpio-pin@ ;
+: headphones-inserted? ( -- flag ) headphone-jack pin-sense? ;
+: microphone-inserted? ( -- flag ) external-mic pin-sense? ;
fload ${BP}/cpu/arm/olpc/1.75/alc5631.fth \ Realtek ALC5631Q CODEC
[then]
@@ -480,6 +483,10 @@
fload ${BP}/forth/lib/tones.fth
fload ${BP}/dev/geode/ac97/selftest.fth
+false value force-internal-mic? \ Can't be implemented on XO-1.75
+2 value #channels
+fload ${BP}/dev/hdaudio/test.fth
+
end-package
\ LICENSE_BEGIN
Modified: dev/hdaudio/noiseburst.fth
==============================================================================
--- dev/hdaudio/noiseburst.fth Sat Jun 4 22:25:49 2011 (r2245)
+++ dev/hdaudio/noiseburst.fth Sat Jun 4 22:40:52 2011 (r2246)
@@ -3,6 +3,122 @@
support-package: audio-test
+[ifdef] arm-assembler
+code mono-covar ( adr1 adr2 #samples -- d.sum )
+ ldmia sp!,{r1,r2} \ tos: #samples, r1: adr2, r2: adr1
+
+ adds tos,tos,tos \ #bytes
+
+ psheq tos,sp \ Return 0. if #samples is 0
+ nxteq
+
+ mov r3,#0 \ Zero accumulator
+ mov r4,#0
+
+ dec tos,#2
+ begin
+ ldrsh r5,[r1,tos]
+ ldrsh r6,[r2,tos]
+ smlal r3,r4,r5,r6
+ decs tos,#2
+ 0< until
+
+ psh r3,sp
+ mov tos,r4
+c;
+code stereo-mono-covar ( stereo-adr1 mono-adr2 #samples -- d.sum )
+ ldmia sp!,{r1,r2} \ tos: #samples, r1: adr2, r2: adr1
+
+ adds tos,tos,tos \ #bytes for mono samples
+ add r8,tos,tos \ Index for stereo samples
+
+ psheq tos,sp \ Return 0. if #samples is 0
+ nxteq
+
+ mov r3,#0 \ Zero accumulator
+ mov r4,#0
+
+ dec tos,#2
+ dec r8,#4
+ begin
+ ldrsh r5,[r1,tos] \ Mono
+ ldrsh r6,[r2,r8] \ Stereo sample
+ dec r8,#4
+ smlal r3,r4,r5,r6
+ decs tos,#2
+ 0< until
+
+ psh r3,sp
+ mov tos,r4
+c;
+code stereo-covar ( stereo-adr1 stereo-adr2 #samples -- d.sum )
+ ldmia sp!,{r1,r2} \ tos: #samples, r1: adr2, r2: adr1
+
+ movs tos,tos,lsl #2 \ #bytes
+
+ psheq tos,sp \ Return 0. if #samples is 0
+ nxteq
+
+ mov r3,#0 \ Zero accumulator
+ mov r4,#0
+
+ dec tos,#4
+ begin
+ ldrsh r5,[r1,tos]
+ ldrsh r6,[r2,tos]
+ smlal r3,r4,r5,r6
+ decs tos,#4 \ Stride is 4
+ 0< until
+
+ psh r3,sp
+ mov tos,r4
+c;
+code mono-wsum ( adr #samples -- d.sum )
+ pop r1,sp \ tos: len, r1: adr
+ movs tos,tos,lsl #1
+
+ psheq tos,sp \ Return 0. if #samples is 0
+ nxteq
+
+ mov r3,#0 \ Zero accumulator
+ mov r4,#0
+
+ dec tos,#2
+ begin
+ ldrsh r5,[r1,tos]
+ mov r6,r5,asr #31 \ Sign extend long word to 64 bits
+ adds r3,r3,r5
+ adc r4,r4,r6
+ decs tos,#2
+ 0< until
+
+ psh r3,sp
+ mov tos,r4
+c;
+code stereo-wsum ( adr #samples -- d.sum )
+ pop r1,sp \ tos: len, r1: adr
+ movs tos,tos,lsl #2
+
+ psheq tos,sp \ Return 0. if #samples is 0
+ nxteq
+
+ mov r3,#0 \ Zero accumulator
+ mov r4,#0
+
+ dec tos,#4
+ begin
+ ldrsh r5,[r1,tos]
+ mov r6,r5,asr #31 \ Sign extend long word to 64 bits
+ adds r3,r3,r5
+ adc r4,r4,r6
+ decs tos,#4
+ 0< until
+
+ psh r3,sp
+ mov tos,r4
+c;
+[then]
+[ifdef] x86-assembler
code mono-covar ( adr1 adr2 #samples -- d.sum )
cx pop
@@ -39,7 +155,7 @@
bx push
ax push
c;
-code stereo-mono-covar ( stereo-adr1 stereo-adr2 #samples -- d.sum )
+code stereo-mono-covar ( stereo-adr1 mono-adr2 #samples -- d.sum )
cx pop
ax pop \ adr2 in ax
@@ -169,6 +285,7 @@
bx push
ax push
c;
+[then]
: mono-wmean ( adr len -- n )
2/ tuck mono-wsum ( d.sum len )
rot m/mod nip ( mean )
@@ -419,7 +536,7 @@
defer fix-dc
: prepare-signal ( -- out-adr, len in-adr,len )
- pb /pb bounds do random-byte i c! loop
+ pb /pb bounds do random-long i l! /l +loop
pb /pb -stereo-wmean
pb wa1+ /pb -stereo-wmean
pb /pb lose-6db
Modified: dev/hdaudio/test.fth
==============================================================================
--- dev/hdaudio/test.fth Sat Jun 4 22:25:49 2011 (r2245)
+++ dev/hdaudio/test.fth Sat Jun 4 22:40:52 2011 (r2246)
@@ -105,12 +105,20 @@
" 0 set-fg h# ffff set-bg single-drawing clear-drawing wave" evaluate
key ascii d = if debug-me then
;
-: input-common-settings ( -- )
+defer input-common-settings
+defer output-common-settings
+[ifdef] with-adc
+\ XXX this is hd-audio specific. Factore it out
+: (input-common-settings) ( -- )
open-in 48kHz 16bit with-adc d# 73 input-gain
;
-: output-common-settings ( -- )
+' (input-common-settings) to input-common-settings
+: (output-common-settings) ( -- )
open-out 48kHz 16bit stereo
;
+' (output-common-settings) to output-common-settings
+[then]
+
: test-with-case ( -- )
" setup-case" $call-analyzer
\ xxx - this needs to use the internal speakers and mic even though the loopback cable is attached
More information about the openfirmware
mailing list