From 4382a59d6404f1e43ac76d419d36c2dda9d42948 Mon Sep 17 00:00:00 2001 From: tsubai Date: Thu, 15 Mar 2001 19:42:42 +0000 Subject: [PATCH] Add ulinear16 support. Return EINVAL if specified rate is not available. --- sys/arch/macppc/dev/awacs.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/sys/arch/macppc/dev/awacs.c b/sys/arch/macppc/dev/awacs.c index 5b6e37a22c44..57c194571734 100644 --- a/sys/arch/macppc/dev/awacs.c +++ b/sys/arch/macppc/dev/awacs.c @@ -1,4 +1,4 @@ -/* $NetBSD: awacs.c,v 1.5 2001/03/12 15:41:52 tsubai Exp $ */ +/* $NetBSD: awacs.c,v 1.6 2001/03/15 19:42:42 tsubai Exp $ */ /*- * Copyright (c) 2000 Tsubai Masanari. All rights reserved. @@ -384,12 +384,24 @@ awacs_query_encoding(h, ae) ae->flags = 0; return 0; case 3: + strcpy(ae->name, AudioEulinear_be); + ae->encoding = AUDIO_ENCODING_ULINEAR_BE; + ae->precision = 16; + ae->flags = AUDIO_ENCODINGFLAG_EMULATED; + return 0; + case 4: + strcpy(ae->name, AudioEulinear_le); + ae->encoding = AUDIO_ENCODING_ULINEAR_LE; + ae->precision = 16; + ae->flags = AUDIO_ENCODINGFLAG_EMULATED; + return 0; + case 5: strcpy(ae->name, AudioEmulaw); ae->encoding = AUDIO_ENCODING_ULAW; ae->precision = 8; ae->flags = AUDIO_ENCODINGFLAG_EMULATED; return 0; - case 4: + case 6: strcpy(ae->name, AudioEalaw); ae->encoding = AUDIO_ENCODING_ALAW; ae->precision = 8; @@ -477,8 +489,14 @@ awacs_set_params(h, setmode, usemode, play, rec) case AUDIO_ENCODING_ULINEAR_LE: awacs_write_reg(sc, AWACS_BYTE_SWAP, 1); + if (p->channels == 2 && p->precision == 16) + p->sw_code = change_sign16_le; + else + return EINVAL; + break; + case AUDIO_ENCODING_ULINEAR_BE: - if (p->precision == 16) + if (p->channels == 2 && p->precision == 16) p->sw_code = change_sign16_be; else return EINVAL; @@ -508,7 +526,8 @@ awacs_set_params(h, setmode, usemode, play, rec) /* Set the speed */ rate = p->sample_rate; - awacs_set_rate(sc, rate); + if (awacs_set_rate(sc, rate)) + return EINVAL; return 0; }