Ollivier Robert wrote:

> According to Kenneth Wayne Culver:
> > This is the patch to make my soundcard, a Creative Ensoniq AudioPCI (an
> > es1371 chip, device id 0x58801274 rev 0x02). Can someone commit it please?
>
> Done.

There is a problem with that patch.
I'm not sure if there are older 1371 rev 2 boards out there, but they would
be incorrectly inited.
Test this patch first, but it should be more definitive.


Index: es137x.c
===================================================================
RCS file: /usr/FreeBSD-CVS/src/sys/dev/sound/pci/es137x.c,v
retrieving revision 1.21
diff -u -r1.21 es137x.c
--- es137x.c    2000/07/03 20:52:26     1.21
+++ es137x.c    2000/07/07 05:05:48
@@ -107,7 +107,7 @@
 static void    es1371_src_write(struct es_info *, u_short, unsigned short);
 static u_int   es1371_adc_rate(struct es_info *, u_int, int);
 static u_int   es1371_dac_rate(struct es_info *, u_int, int);
-static int     es1371_init(struct es_info *es, int);
+static int     es1371_init(struct es_info *es, device_t);
 static int      es1370_init(struct es_info *);
 static int      es1370_wrcodec(struct es_info *, u_char, u_char);
 
@@ -484,9 +484,11 @@
 
 /* ES1371 specific */
 int
-es1371_init(struct es_info *es, int rev)
+es1371_init(struct es_info *es, device_t dev)
 {
        int idx;
+       int devid =  pci_get_devid(dev);
+       int rev  = pci_get_revid(dev);
 
        if (debug > 0) printf("es_init\n");
 
@@ -494,7 +496,7 @@
        es->ctrl = 0;
        es->sctrl = 0;
        /* initialize the chips */
-       if (rev == 7 || rev >= 9 || rev == 2) {
+       if (rev == 7 || rev >= 9 || (devid == ES1371_PCI_ID3 && rev == 2)) {
 #define ES1371_BINTSUMM_OFF 0x07
                bus_space_write_4(es->st, es->sh, ES1371_BINTSUMM_OFF, 0x20);
                if (debug > 0) printf("es_init rev == 7 || rev >= 9\n");
@@ -793,7 +795,7 @@
        if (pci_get_devid(dev) == ES1371_PCI_ID ||
            pci_get_devid(dev) == ES1371_PCI_ID2 || 
            pci_get_devid(dev) == ES1371_PCI_ID3) {
-               if(-1 == es1371_init(es, pci_get_revid(dev))) {
+               if(-1 == es1371_init(es, dev)) {
                        device_printf(dev, "unable to initialize the card\n");
                        goto bad;
                }

Reply via email to