aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAriff Abdullah <ariff@FreeBSD.org>2007-12-15 04:07:25 +0000
committerAriff Abdullah <ariff@FreeBSD.org>2007-12-15 04:07:25 +0000
commit88d01e1652f1f20533ce6a6243505a1242f4f416 (patch)
tree5320773a2547567f521e76395199ec67fee340e6
parentf197b674c8ff1526871e38de1a0aa310b85acd83 (diff)
Notes
-rw-r--r--sys/dev/sound/pci/maestro.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/sys/dev/sound/pci/maestro.c b/sys/dev/sound/pci/maestro.c
index 10e7acd3cf63..cec690a94014 100644
--- a/sys/dev/sound/pci/maestro.c
+++ b/sys/dev/sound/pci/maestro.c
@@ -1771,7 +1771,7 @@ agg_attach(device_t dev)
struct resource *irq = NULL;
void *ih = NULL;
char status[SND_STATUSLEN];
- int ret = 0;
+ int dacn, ret = 0;
ess = malloc(sizeof(*ess), M_DEVBUF, M_WAITOK | M_ZERO);
ess->dev = dev;
@@ -1786,6 +1786,15 @@ agg_attach(device_t dev)
}
#endif
+ if (resource_int_value(device_get_name(dev), device_get_unit(dev),
+ "dac", &dacn) == 0) {
+ if (dacn < 1)
+ dacn = 1;
+ else if (dacn > AGG_MAXPLAYCH)
+ dacn = AGG_MAXPLAYCH;
+ } else
+ dacn = AGG_MAXPLAYCH;
+
ess->bufsz = pcm_getbuffersize(dev, 4096, AGG_DEFAULT_BUFSZ, 65536);
if (bus_dma_tag_create(/*parent*/ bus_get_dma_tag(dev),
/*align */ 4, 1 << (16+1),
@@ -1895,7 +1904,7 @@ agg_attach(device_t dev)
}
ess->codec = codec;
- ret = pcm_register(dev, ess, AGG_MAXPLAYCH, 1);
+ ret = pcm_register(dev, ess, dacn, 1);
if (ret)
goto bad;
@@ -1903,7 +1912,7 @@ agg_attach(device_t dev)
agg_lock(ess);
agg_power(ess, powerstate_init);
agg_unlock(ess);
- for (data = 0; data < AGG_MAXPLAYCH; data++)
+ for (data = 0; data < dacn; data++)
pcm_addchan(dev, PCMDIR_PLAY, &aggpch_class, ess);
pcm_addchan(dev, PCMDIR_REC, &aggrch_class, ess);
adjust_pchbase(ess->pch, ess->playchns, ess->bufsz);