On Sat, Jun 15, 2013 at 01:40:55PM +0200, Alexandre Ratchov wrote: > This is a small diff to enable mavb(4) 24-bit native format. To > test it, first check that audio works without the diff. Then, apply > the diff, kill sndiod, and run it as: > > sndiod -dd -e s24be4lsb > > then play any audio file; sndiod should log something like: > > snd0: 48000Hz, s24be4lsb, play 0:1, rec 0:1, 9 blocks of 960 frames
mavb0 at macebus0 base 0x00300000 irq 6: AD1843 rev 1 audio0 at mavb0 o2:~$ sndiod -dd -e s24be4lsb snd0.default: rec=0:1 play=0:1 vol=23170 dup snd0: 48000Hz, s24be4lsb, play 0:1, rec 0:1, 8 blocks of 1024 frames mpg0: 48000Hz, s16be, play 0:15, 8 blocks of 1024 frames snd0: device started > > does it? if so, does it sound right? Sounds alright, no problems. > > Thanks! > > -- Alexandre > > Index: mavb.c > =================================================================== > RCS file: /cvs/src/sys/arch/sgi/dev/mavb.c,v > retrieving revision 1.15 > diff -u -p -r1.15 mavb.c > --- mavb.c 15 May 2013 08:29:23 -0000 1.15 > +++ mavb.c 15 Jun 2013 11:29:10 -0000 > @@ -522,7 +522,10 @@ mavb_set_params(void *hdl, int setmode, > return (EINVAL); > } > } else { > - return (EINVAL); > + play->factor = 1; > + play->sw_code = NULL; > + play->channels = 2; > + play->precision = 24; > } > break; > default: > @@ -538,7 +541,7 @@ mavb_set_params(void *hdl, int setmode, > return (error); > > play->bps = AUDIO_BPS(play->precision); > - play->msb = 1; > + play->msb = 0; > } > > if (setmode & AUMODE_RECORD) { > @@ -556,7 +559,11 @@ mavb_set_params(void *hdl, int setmode, > rec->factor = 2; > rec->sw_code = linear24_to_linear16_be; > } else { > - return (EINVAL); > + rec->factor = 1; > + rec->sw_code = NULL; > + rec->channels = 2; > + rec->precision = 24; > + break; > } > break; > default: > @@ -575,7 +582,7 @@ mavb_set_params(void *hdl, int setmode, > return (error); > > rec->bps = AUDIO_BPS(rec->precision); > - rec->msb = 1; > + rec->msb = 0; > } > > return (0); >