diff options
| author | Ariff Abdullah <ariff@FreeBSD.org> | 2007-11-10 04:32:50 +0000 |
|---|---|---|
| committer | Ariff Abdullah <ariff@FreeBSD.org> | 2007-11-10 04:32:50 +0000 |
| commit | 8b18769048f8d58ff91f36f5ce63142496000fb5 (patch) | |
| tree | c846c54df0c39e0b932e81011e861d1f01777bca /sys/dev | |
| parent | 6361ff6de9c9c729c9c8c5ba0d6e9f806e25f449 (diff) | |
Notes
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/sound/pci/t4dwave.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/sys/dev/sound/pci/t4dwave.c b/sys/dev/sound/pci/t4dwave.c index 8b5ca6b192e9..39ce02e81561 100644 --- a/sys/dev/sound/pci/t4dwave.c +++ b/sys/dev/sound/pci/t4dwave.c @@ -811,7 +811,7 @@ tr_pci_attach(device_t dev) u_int32_t data; struct tr_info *tr; struct ac97_info *codec = 0; - int i; + int i, dacn; char status[SND_STATUSLEN]; tr = malloc(sizeof(*tr), M_DEVBUF, M_WAITOK | M_ZERO); @@ -819,6 +819,25 @@ tr_pci_attach(device_t dev) tr->rev = pci_get_revid(dev); tr->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_t4dwave softc"); + if (resource_int_value(device_get_name(dev), device_get_unit(dev), + "dac", &i) == 0) { + if (i < 1) + dacn = 1; + else if (i > TR_MAXPLAYCH) + dacn = TR_MAXPLAYCH; + else + dacn = i; + } else { + switch (tr->type) { + case ALI_PCI_ID: + dacn = 1; + break; + default: + dacn = TR_MAXPLAYCH; + break; + } + } + data = pci_read_config(dev, PCIR_COMMAND, 2); data |= (PCIM_CMD_PORTEN|PCIM_CMD_MEMEN|PCIM_CMD_BUSMASTEREN); pci_write_config(dev, PCIR_COMMAND, data, 2); @@ -871,9 +890,10 @@ tr_pci_attach(device_t dev) snprintf(status, 64, "at io 0x%lx irq %ld %s", rman_get_start(tr->reg), rman_get_start(tr->irq),PCM_KLDSTRING(snd_t4dwave)); - if (pcm_register(dev, tr, TR_MAXPLAYCH, 1)) goto bad; + if (pcm_register(dev, tr, dacn, 1)) + goto bad; pcm_addchan(dev, PCMDIR_REC, &trrchan_class, tr); - for (i = 0; i < TR_MAXPLAYCH; i++) + for (i = 0; i < dacn; i++) pcm_addchan(dev, PCMDIR_PLAY, &trpchan_class, tr); pcm_setstatus(dev, status); |
