diff options
author | cg <cg@FreeBSD.org> | 2000-04-01 22:24:03 +0000 |
---|---|---|
committer | cg <cg@FreeBSD.org> | 2000-04-01 22:24:03 +0000 |
commit | a3c065ea56199480229fabf9848000c6be8ce2d9 (patch) | |
tree | 1a0c857b5ff57f71804e91ab4b0bb5105cd499d1 /sys | |
parent | 5bcbc0e18f73a09f1d42126e5f6baa130f605ec9 (diff) | |
download | FreeBSD-src-a3c065ea56199480229fabf9848000c6be8ce2d9.zip FreeBSD-src-a3c065ea56199480229fabf9848000c6be8ce2d9.tar.gz |
fail in attach if we seem to have no ac97 codec
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/sound/pci/aureal.c | 2 | ||||
-rw-r--r-- | sys/dev/sound/pci/csapcm.c | 3 | ||||
-rw-r--r-- | sys/dev/sound/pci/es137x.c | 2 | ||||
-rw-r--r-- | sys/dev/sound/pci/neomagic.c | 2 | ||||
-rw-r--r-- | sys/dev/sound/pci/t4dwave.c | 2 | ||||
-rw-r--r-- | sys/dev/sound/pcm/ac97.c | 11 |
6 files changed, 14 insertions, 8 deletions
diff --git a/sys/dev/sound/pci/aureal.c b/sys/dev/sound/pci/aureal.c index f6403c7..c16fffa7 100644 --- a/sys/dev/sound/pci/aureal.c +++ b/sys/dev/sound/pci/aureal.c @@ -635,7 +635,7 @@ au_pci_attach(device_t dev) codec = ac97_create(dev, au, NULL, au_rdcd, au_wrcd); if (codec == NULL) goto bad; - mixer_init(d, &ac97_mixer, codec); + if (mixer_init(d, &ac97_mixer, codec) == -1) goto bad; if (bus_dma_tag_create(/*parent*/NULL, /*alignment*/2, /*boundary*/0, /*lowaddr*/BUS_SPACE_MAXADDR_32BIT, diff --git a/sys/dev/sound/pci/csapcm.c b/sys/dev/sound/pci/csapcm.c index 42a9cde..0f56ee5 100644 --- a/sys/dev/sound/pci/csapcm.c +++ b/sys/dev/sound/pci/csapcm.c @@ -810,7 +810,8 @@ pcmcsa_attach(device_t dev) codec = ac97_create(dev, csa, NULL, csa_rdcd, csa_wrcd); if (codec == NULL) return (ENXIO); - mixer_init(devinfo, &ac97_mixer, codec); + if (mixer_init(devinfo, &ac97_mixer, codec) == -1) + return (ENXIO); snprintf(status, SND_STATUSLEN, "at irq %ld", rman_get_start(resp->irq)); diff --git a/sys/dev/sound/pci/es137x.c b/sys/dev/sound/pci/es137x.c index 1fc99c9..4bea25e 100644 --- a/sys/dev/sound/pci/es137x.c +++ b/sys/dev/sound/pci/es137x.c @@ -776,7 +776,7 @@ es_pci_attach(device_t dev) /* our init routine does everything for us */ /* set to NULL; flag mixer_init not to run the ac97_init */ /* ac97_mixer.init = NULL; */ - mixer_init(d, &ac97_mixer, codec); + if (mixer_init(d, &ac97_mixer, codec) == -1) goto bad; ct = &es1371_chantemplate; } else if (pci_get_devid(dev) == ES1370_PCI_ID) { if (-1 == es1370_init(es)) { diff --git a/sys/dev/sound/pci/neomagic.c b/sys/dev/sound/pci/neomagic.c index 9661e65..8c43d6b 100644 --- a/sys/dev/sound/pci/neomagic.c +++ b/sys/dev/sound/pci/neomagic.c @@ -625,7 +625,7 @@ nm_pci_attach(device_t dev) codec = ac97_create(dev, sc, nm_initcd, nm_rdcd, nm_wrcd); if (codec == NULL) goto bad; - mixer_init(d, &ac97_mixer, codec); + if (mixer_init(d, &ac97_mixer, codec) == -1) goto bad; sc->irqid = 0; sc->irq = bus_alloc_resource(dev, SYS_RES_IRQ, &sc->irqid, diff --git a/sys/dev/sound/pci/t4dwave.c b/sys/dev/sound/pci/t4dwave.c index 82dc4cc..1d8659a 100644 --- a/sys/dev/sound/pci/t4dwave.c +++ b/sys/dev/sound/pci/t4dwave.c @@ -630,7 +630,7 @@ tr_pci_attach(device_t dev) codec = ac97_create(dev, tr, NULL, tr_rdcd, tr_wrcd); if (codec == NULL) goto bad; - mixer_init(d, &ac97_mixer, codec); + if (mixer_init(d, &ac97_mixer, codec) == -1) goto bad; tr->irqid = 0; tr->irq = bus_alloc_resource(dev, SYS_RES_IRQ, &tr->irqid, diff --git a/sys/dev/sound/pcm/ac97.c b/sys/dev/sound/pcm/ac97.c index 757efca..a8a3a11 100644 --- a/sys/dev/sound/pcm/ac97.c +++ b/sys/dev/sound/pcm/ac97.c @@ -303,7 +303,7 @@ ac97_initmixer(struct ac97_info *codec) codec->init(codec->devinfo); wrcd(codec, AC97_REG_POWER, 0); wrcd(codec, AC97_REG_RESET, 0); - DELAY(10000); + DELAY(100000); i = rdcd(codec, AC97_REG_RESET); codec->caps = i & 0x03ff; @@ -311,6 +311,10 @@ ac97_initmixer(struct ac97_info *codec) id = (rdcd(codec, AC97_REG_ID1) << 16) | rdcd(codec, AC97_REG_ID2); codec->rev = id & 0x000000ff; + if (id == 0 || id == 0xffffffff) { + device_printf(codec->dev, "ac97 codec invalid or not present (id == %x)\n", id); + return ENODEV; + } for (i = 0; ac97codecid[i].id; i++) if (ac97codecid[i].id == id) @@ -333,7 +337,7 @@ ac97_initmixer(struct ac97_info *codec) wrcd(codec, AC97_MIX_MASTER, 0x00); if (bootverbose) { - device_printf(codec->dev, "ac97 codec id 0x%8x", id); + device_printf(codec->dev, "ac97 codec id 0x%08x", id); for (i = 0; ac97codecid[i].id; i++) if (ac97codecid[i].id == id) printf(" (%s)", ac97codecid[i].name); @@ -384,7 +388,8 @@ ac97mix_init(snd_mixer *m) struct ac97_info *codec = mix_getdevinfo(m); if (codec == NULL) return -1; - ac97_initmixer(codec); + if (ac97_initmixer(codec)) + return -1; mix_setdevs(m, ac97mixdevs | ((codec->caps & 4)? SOUND_MASK_BASS | SOUND_MASK_TREBLE : 0)); mix_setrecdevs(m, ac97recdevs); return 0; |