Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/isaki-audio2]: src/sys/dev/pci Adapt to audio2.



details:   https://anonhg.NetBSD.org/src/rev/7fa5ffa3b0c1
branches:  isaki-audio2
changeset: 840853:7fa5ffa3b0c1
user:      isaki <isaki%NetBSD.org@localhost>
date:      Sun Apr 21 07:55:25 2019 +0000

description:
Adapt to audio2.
- Drop INDEPENDENT property from es1370 which has only one clock.

diffstat:

 sys/dev/pci/eap.c |  133 ++++++-----------------------------------------------
 1 files changed, 17 insertions(+), 116 deletions(-)

diffs (246 lines):

diff -r 64583a94bab5 -r 7fa5ffa3b0c1 sys/dev/pci/eap.c
--- a/sys/dev/pci/eap.c Sun Apr 21 07:49:16 2019 +0000
+++ b/sys/dev/pci/eap.c Sun Apr 21 07:55:25 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: eap.c,v 1.99.2.1 2019/04/21 05:11:22 isaki Exp $       */
+/*     $NetBSD: eap.c,v 1.99.2.2 2019/04/21 07:55:25 isaki Exp $       */
 /*      $OpenBSD: eap.c,v 1.6 1999/10/05 19:24:42 csapuntz Exp $ */
 
 /*
@@ -51,7 +51,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: eap.c,v 1.99.2.1 2019/04/21 05:11:22 isaki Exp $");
+__KERNEL_RCSID(0, "$NetBSD: eap.c,v 1.99.2.2 2019/04/21 07:55:25 isaki Exp $");
 
 #include "midi.h"
 #include "joy_eap.h"
@@ -69,10 +69,8 @@
 #include <sys/audioio.h>
 
 #include <dev/audio_if.h>
+#include <dev/auconv.h>
 #include <dev/midi_if.h>
-#include <dev/audiovar.h>
-#include <dev/mulaw.h>
-#include <dev/auconv.h>
 
 #include <dev/pci/pcidevs.h>
 #include <dev/pci/eapreg.h>
@@ -110,11 +108,10 @@
     eap_match, eap_attach, eap_detach, NULL);
 
 static int     eap_open(void *, int);
-static int     eap_query_encoding(void *, struct audio_encoding *);
+static int     eap_query_format(void *, struct audio_format_query *);
 static int     eap_set_params(void *, int, int, audio_params_t *,
                               audio_params_t *, stream_filter_list_t *,
                               stream_filter_list_t *);
-static int     eap_round_blocksize(void *, int, int, const audio_params_t *);
 static int     eap_trigger_output(void *, void *, void *, int,
                                   void (*)(void *), void *,
                                   const audio_params_t *);
@@ -133,7 +130,6 @@
 static void    *eap_malloc(void *, int, size_t);
 static void    eap_free(void *, void *, size_t);
 static size_t  eap_round_buffersize(void *, int, size_t);
-static paddr_t eap_mappage(void *, void *, off_t, int);
 static int     eap_get_props(void *);
 static void    eap1370_set_mixer(struct eap_softc *, int, int);
 static uint32_t eap1371_src_wait(struct eap_softc *);
@@ -160,9 +156,8 @@
 
 static const struct audio_hw_if eap1370_hw_if = {
        .open                   = eap_open,
-       .query_encoding         = eap_query_encoding,
+       .query_format           = eap_query_format,
        .set_params             = eap_set_params,
-       .round_blocksize        = eap_round_blocksize,
        .halt_output            = eap_halt_output,
        .halt_input             = eap_halt_input,
        .getdev                 = eap_getdev,
@@ -172,7 +167,6 @@
        .allocm                 = eap_malloc,
        .freem                  = eap_free,
        .round_buffersize       = eap_round_buffersize,
-       .mappage                = eap_mappage,
        .get_props              = eap_get_props,
        .trigger_output         = eap_trigger_output,
        .trigger_input          = eap_trigger_input,
@@ -181,9 +175,8 @@
 
 static const struct audio_hw_if eap1371_hw_if = {
        .open                   = eap_open,
-       .query_encoding         = eap_query_encoding,
+       .query_format           = eap_query_format,
        .set_params             = eap_set_params,
-       .round_blocksize        = eap_round_blocksize,
        .halt_output            = eap_halt_output,
        .halt_input             = eap_halt_input,
        .getdev                 = eap_getdev,
@@ -193,7 +186,6 @@
        .allocm                 = eap_malloc,
        .freem                  = eap_free,
        .round_buffersize       = eap_round_buffersize,
-       .mappage                = eap_mappage,
        .get_props              = eap_get_props,
        .trigger_output         = eap_trigger_output,
        .trigger_input          = eap_trigger_input,
@@ -945,61 +937,10 @@
 }
 
 static int
-eap_query_encoding(void *addr, struct audio_encoding *fp)
+eap_query_format(void *addr, struct audio_format_query *afp)
 {
 
-       switch (fp->index) {
-       case 0:
-               strcpy(fp->name, AudioEulinear);
-               fp->encoding = AUDIO_ENCODING_ULINEAR;
-               fp->precision = 8;
-               fp->flags = 0;
-               return 0;
-       case 1:
-               strcpy(fp->name, AudioEmulaw);
-               fp->encoding = AUDIO_ENCODING_ULAW;
-               fp->precision = 8;
-               fp->flags = AUDIO_ENCODINGFLAG_EMULATED;
-               return 0;
-       case 2:
-               strcpy(fp->name, AudioEalaw);
-               fp->encoding = AUDIO_ENCODING_ALAW;
-               fp->precision = 8;
-               fp->flags = AUDIO_ENCODINGFLAG_EMULATED;
-               return 0;
-       case 3:
-               strcpy(fp->name, AudioEslinear);
-               fp->encoding = AUDIO_ENCODING_SLINEAR;
-               fp->precision = 8;
-               fp->flags = AUDIO_ENCODINGFLAG_EMULATED;
-               return 0;
-       case 4:
-               strcpy(fp->name, AudioEslinear_le);
-               fp->encoding = AUDIO_ENCODING_SLINEAR_LE;
-               fp->precision = 16;
-               fp->flags = 0;
-               return 0;
-       case 5:
-               strcpy(fp->name, AudioEulinear_le);
-               fp->encoding = AUDIO_ENCODING_ULINEAR_LE;
-               fp->precision = 16;
-               fp->flags = AUDIO_ENCODINGFLAG_EMULATED;
-               return 0;
-       case 6:
-               strcpy(fp->name, AudioEslinear_be);
-               fp->encoding = AUDIO_ENCODING_SLINEAR_BE;
-               fp->precision = 16;
-               fp->flags = AUDIO_ENCODINGFLAG_EMULATED;
-               return 0;
-       case 7:
-               strcpy(fp->name, AudioEulinear_be);
-               fp->encoding = AUDIO_ENCODING_ULINEAR_BE;
-               fp->precision = 16;
-               fp->flags = AUDIO_ENCODINGFLAG_EMULATED;
-               return 0;
-       default:
-               return EINVAL;
-       }
+       return audio_query_format(eap_formats, EAP_NFORMATS, afp);
 }
 
 static int
@@ -1016,23 +957,6 @@
 
        ei = addr;
        sc = device_private(ei->parent);
-       /*
-        * The es1370 only has one clock, so make the sample rates match.
-        * This only applies for ADC/DAC2. The FM DAC is handled below.
-        */
-       if (!sc->sc_1371 && ei->index == EAP_DAC2) {
-               if (play->sample_rate != rec->sample_rate &&
-                   usemode == (AUMODE_PLAY | AUMODE_RECORD)) {
-                       if (setmode == AUMODE_PLAY) {
-                               rec->sample_rate = play->sample_rate;
-                               setmode |= AUMODE_RECORD;
-                       } else if (setmode == AUMODE_RECORD) {
-                               play->sample_rate = rec->sample_rate;
-                               setmode |= AUMODE_PLAY;
-                       } else
-                               return EINVAL;
-               }
-       }
 
        for (mode = AUMODE_RECORD; mode != -1;
             mode = mode == AUMODE_RECORD ? AUMODE_PLAY : -1) {
@@ -1041,11 +965,6 @@
 
                p = mode == AUMODE_PLAY ? play : rec;
 
-               if (p->sample_rate < 4000 || p->sample_rate > 48000 ||
-                   (p->precision != 8 && p->precision != 16) ||
-                   (p->channels != 1 && p->channels != 2))
-                       return EINVAL;
-
                fil = mode == AUMODE_PLAY ? pfil : rfil;
                i = auconv_set_converter(eap_formats, EAP_NFORMATS,
                                         mode, p, FALSE, fil);
@@ -1109,14 +1028,6 @@
 }
 
 static int
-eap_round_blocksize(void *addr, int blk, int mode,
-    const audio_params_t *param)
-{
-
-       return blk & -32;       /* keep good alignment */
-}
-
-static int
 eap_trigger_output(
        void *addr,
        void *start,
@@ -1755,32 +1666,22 @@
        return size;
 }
 
-static paddr_t
-eap_mappage(void *addr, void *mem, off_t off, int prot)
+static int
+eap_get_props(void *addr)
 {
        struct eap_instance *ei;
        struct eap_softc *sc;
-       struct eap_dma *p;
+       int prop;
 
-       if (off < 0)
-               return -1;
        ei = addr;
        sc = device_private(ei->parent);
-       for (p = sc->sc_dmas; p && KERNADDR(p) != mem; p = p->next)
-               continue;
-       if (!p)
-               return -1;
+       prop = AUDIO_PROP_MMAP | AUDIO_PROP_FULLDUPLEX |
+           AUDIO_PROP_INDEPENDENT;
+       /* The es1370 only has one clock, so it's not independent */
+       if (!sc->sc_1371 && ei->index == EAP_DAC2)
+               prop &= ~AUDIO_PROP_INDEPENDENT;
 
-       return bus_dmamem_mmap(sc->sc_dmatag, p->segs, p->nsegs,
-                              off, prot, BUS_DMA_WAITOK);
-}
-
-static int
-eap_get_props(void *addr)
-{
-
-       return AUDIO_PROP_MMAP | AUDIO_PROP_INDEPENDENT |
-           AUDIO_PROP_FULLDUPLEX;
+       return prop;
 }
 
 static void



Home | Main Index | Thread Index | Old Index