78#ifdef HAVE_KERNEL_OPTION_HEADERS
89#include <sys/sysctl.h>
95#define MEM_MAP_REG 0x14
98#define ES1370_PCI_ID 0x50001274
99#define ES1371_PCI_ID 0x13711274
100#define ES1371_PCI_ID2 0x13713274
101#define CT5880_PCI_ID 0x58801274
102#define CT4730_PCI_ID 0x89381102
104#define ES1371REV_ES1371_A 0x02
105#define ES1371REV_ES1371_B 0x09
107#define ES1371REV_ES1373_8 0x08
108#define ES1371REV_ES1373_A 0x04
109#define ES1371REV_ES1373_B 0x06
111#define ES1371REV_CT5880_A 0x07
113#define CT5880REV_CT5880_C 0x02
114#define CT5880REV_CT5880_D 0x03
115#define CT5880REV_CT5880_E 0x04
117#define CT4730REV_CT4730_A 0x00
119#define ES_DEFAULT_BUFSZ 4096
127#define ES_DMA_SEGS_MIN 2
128#define ES_DMA_SEGS_MAX 256
130#define ES_BLK_ALIGN (~(ES_BLK_MIN - 1))
132#define ES1370_DAC1_MINSPEED 5512
133#define ES1370_DAC1_MAXSPEED 44100
161#define ES_FIXED_RATE(cfgv) \
162 (((cfgv) & 0xffff0000) >> 16)
163#define ES_SET_FIXED_RATE(cfgv, nv) \
164 (((cfgv) & ~0xffff0000) | (((nv) & 0xffff) << 16))
165#define ES_SINGLE_PCM_MIX(cfgv) \
166 (((cfgv) & 0x8000) >> 15)
167#define ES_SET_SINGLE_PCM_MIX(cfgv, nv) \
168 (((cfgv) & ~0x8000) | (((nv) ? 1 : 0) << 15))
169#define ES_DAC_FIRST(cfgv) \
170 (((cfgv) & 0x4000) >> 14)
171#define ES_SET_DAC_FIRST(cfgv, nv) \
172 (((cfgv) & ~0x4000) | (((nv) & 0x1) << 14))
173#define ES_DAC_SECOND(cfgv) \
174 (((cfgv) & 0x2000) >> 13)
175#define ES_SET_DAC_SECOND(cfgv, nv) \
176 (((cfgv) & ~0x2000) | (((nv) & 0x1) << 13))
177#define ES_NUMPLAY(cfgv) \
178 (((cfgv) & 0x1800) >> 11)
179#define ES_SET_NUMPLAY(cfgv, nv) \
180 (((cfgv) & ~0x1800) | (((nv) & 0x3) << 11))
181#define ES_NUMREC(cfgv) \
182 (((cfgv) & 0x600) >> 9)
183#define ES_SET_NUMREC(cfgv, nv) \
184 (((cfgv) & ~0x600) | (((nv) & 0x3) << 9))
185#define ES_IS_ES1370(cfgv) \
186 (((cfgv) & 0x100) >> 8)
187#define ES_SET_IS_ES1370(cfgv, nv) \
188 (((cfgv) & ~0x100) | (((nv) ? 1 : 0) << 8))
191#define ES_SET_GP(cfgv, nv) \
192 (((cfgv) & ~0xff) | ((nv) & 0xff))
194#define ES_DAC1_ENABLED(cfgv) \
195 (ES_NUMPLAY(cfgv) > 1 || \
196 (ES_NUMPLAY(cfgv) == 1 && ES_DAC_FIRST(cfgv) == ES_DAC1))
197#define ES_DAC2_ENABLED(cfgv) \
198 (ES_NUMPLAY(cfgv) > 1 || \
199 (ES_NUMPLAY(cfgv) == 1 && ES_DAC_FIRST(cfgv) == ES_DAC2))
209#define ES_DEFAULT_DAC_CFG 0
213 bus_space_handle_t
sh;
234#define ES_LOCK(sc) snd_mtxlock((sc)->lock)
235#define ES_UNLOCK(sc) snd_mtxunlock((sc)->lock)
236#define ES_LOCK_ASSERT(sc) snd_mtxassert((sc)->lock)
242 unsigned short,
unsigned short);
265}
mixtable[SOUND_MIXER_NRDEVICES] = {
266 [SOUND_MIXER_VOLUME] = { 0, 0x0, 0x1, 1, 0x1f7f, 1 },
267 [SOUND_MIXER_PCM] = { 1, 0x2, 0x3, 1, 0x0400, 1 },
268 [SOUND_MIXER_SYNTH] = { 2, 0x4, 0x5, 1, 0x0060, 1 },
269 [SOUND_MIXER_CD] = { 3, 0x6, 0x7, 1, 0x0006, 1 },
270 [SOUND_MIXER_LINE] = { 4, 0x8, 0x9, 1, 0x0018, 1 },
271 [SOUND_MIXER_LINE1] = { 5, 0xa, 0xb, 1, 0x1800, 1 },
272 [SOUND_MIXER_LINE2] = { 6, 0xc, 0x0, 0, 0x0100, 1 },
273 [SOUND_MIXER_LINE3] = { 7, 0xd, 0x0, 0, 0x0200, 1 },
274 [SOUND_MIXER_MIC] = { 8, 0xe, 0x0, 0, 0x0001, 1 },
275 [SOUND_MIXER_OGAIN] = { 9, 0xf, 0x0, 0, 0x0000, 1 }
278static __inline uint32_t
283 return (bus_space_read_1(es->
st, es->
sh,
regno));
285 return (bus_space_read_2(es->
st, es->
sh,
regno));
287 return (bus_space_read_4(es->
st, es->
sh,
regno));
322 for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
334 v &= ~(1 << SOUND_MIXER_SYNTH);
337 for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
342 v &= ~(1 << SOUND_MIXER_SYNTH);
351 int l,
r, rl, rr, set_dac1;
358 rl = (l < 2) ? 0x80 : 7 - (l - 2) / 14;
360 rl = (l < 7) ? 0x80 : 31 - (l - 7) / 3;
369 rr = (
r < 7) ? 0x80 : 31 - (
r - 7) / 3;
380 return (l | (
r << 8));
390 if (
src == 0)
src = 1 << SOUND_MIXER_MIC;
392 for (i = 0; i < SOUND_MIXER_NRDEVICES; i++)
393 if ((
src & (1 << i)) != 0) j |=
mixtable[i].recmask;
398 j |=
mixtable[SOUND_MIXER_SYNTH].recmask;
427 for (t = 0; t < 0x1000; t++) {
436 device_printf(es->
dev,
"%s: timed out\n", __func__);
461 device_printf(es->
dev,
462 "Invalid ES_GP index: %d\n",
index);
467 device_printf(es->
dev,
"Unknown DAC: %d\n",
index + 1);
472 device_printf(es->
dev,
"DAC%d already initialized!\n",
515 (ch->
bufsz >> 2) - 1, 4);
522 (ch->
bufsz >> 2) - 1, 4);
529 (ch->
bufsz >> 2) - 1, 4);
544 es->
sctrl &= ~SCTRL_P1FMT;
550 es->
sctrl &= ~SCTRL_P2FMT;
557 es->
sctrl &= ~SCTRL_R1FMT;
581 if (speed < ch->caps.minspeed)
591 es->
ctrl &= ~CTRL_WTSRSEL;
595 }
else if (
speed < 16537) {
598 }
else if (
speed < 33075) {
606 es->
ctrl &= ~CTRL_PCLKDIV;
663 device_printf(es->
dev,
"%s: failed blksz=%u blkcnt=%u\n",
684#define es_chan_active(es) ((es)->ch[ES_DAC1].active + \
685 (es)->ch[ES_DAC2].active + \
686 (es)->ch[ES_ADC].active)
708 ptr =
es_rd(es,
reg & 0x000000ff, 4) >> 16;
715 if (delta < ch->
blksz)
781 es->
sctrl &= ~SCTRL_P1INTEN;
797 es->
sctrl &= ~SCTRL_P2INTEN;
813 es->
sctrl &= ~SCTRL_R1LOOPSEL;
817 es->
sctrl &= ~SCTRL_R1INTEN;
826 es->
ctrl &= ~CTRL_ADC_EN;
873 cnt =
es_rd(es,
reg & 0x000000ff, 4) >> 16;
924 uint32_t intsrc,
sctrl;
939 sctrl &= ~SCTRL_R1INTEN;
941 sctrl &= ~SCTRL_P1INTEN;
943 sctrl &= ~SCTRL_P2INTEN;
965 if (resource_int_value(device_get_name(es->
dev),
966 device_get_unit(es->
dev),
"fixed_rate", &
r) == 0) {
977 if (resource_int_value(device_get_name(es->
dev),
978 device_get_unit(es->
dev),
"single_pcm_mixer", &
r) == 0)
979 single_pcm = (
r != 0) ? 1 : 0;
1037 subdev = (pci_get_subdevice(es->
dev) << 16) |
1038 pci_get_subvendor(es->
dev);
1054 es->
ctrl |= (1 << 16);
1077 for (idx = 0; idx < 0x80; idx++)
1114 uint32_t t, x, orig;
1117 for (t = 0; t < 0x1000; t++) {
1127 for (t = 0; t < 0x1000; t++) {
1133 for (t = 0; t < 0x1000; t++) {
1152 uint32_t t, x, orig;
1155 for (t = 0; t < 0x1000; t++) {
1166 for (t = 0; t < 0x1000; t++) {
1172 for (t = 0; t < 0x1000; t++) {
1186 for (t = 0; t < 0x1000; t++) {
1229 unsigned int n, truncm, freq, result;
1238 if ((1 <<
n) & ((1 << 15) | (1 << 13) | (1 << 11) | (1 << 9)))
1240 truncm = (21 *
n - 1) | 1;
1241 freq = ((48000UL << 15) /
rate) *
n;
1242 result = (48000UL << 15) / (freq /
n);
1244 if (
rate >= 24000) {
1248 (((239 - truncm) >> 1) << 9) | (
n << 4));
1253 0x8000 | (((119 - truncm) >> 1) << 9) | (
n << 4));
1257 0x00ff) | ((freq >> 5) & 0xfc00));
1269 unsigned int freq,
r, result, dac, dis;
1277 freq = ((
rate << 15) + 1500) / 3000;
1278 result = (freq * 3000) >> 15;
1287 ((freq >> 5) & 0xfc00));
1300 for (t = 0; t < 0x1000; t++) {
1306 device_printf(es->
dev,
"%s: timed out 0x%x [0x%x]\n", __func__,
1320 switch(pci_get_devid(
dev)) {
1322 device_set_desc(
dev,
"AudioPCI ES1370");
1323 return (BUS_PROBE_DEFAULT);
1325 switch(pci_get_revid(
dev)) {
1327 device_set_desc(
dev,
"AudioPCI ES1371-A");
1328 return (BUS_PROBE_DEFAULT);
1330 device_set_desc(
dev,
"AudioPCI ES1371-B");
1331 return (BUS_PROBE_DEFAULT);
1333 device_set_desc(
dev,
"AudioPCI ES1373-A");
1334 return (BUS_PROBE_DEFAULT);
1336 device_set_desc(
dev,
"AudioPCI ES1373-B");
1337 return (BUS_PROBE_DEFAULT);
1339 device_set_desc(
dev,
"AudioPCI ES1373-8");
1340 return (BUS_PROBE_DEFAULT);
1342 device_set_desc(
dev,
"Creative CT5880-A");
1343 return (BUS_PROBE_DEFAULT);
1345 device_set_desc(
dev,
"AudioPCI ES1371-?");
1347 "unknown revision %d -- please report to "
1348 "freebsd-multimedia@freebsd.org\n",
1349 pci_get_revid(
dev));
1350 return (BUS_PROBE_DEFAULT);
1353 device_set_desc(
dev,
"Strange AudioPCI ES1371-? (vid=3274)");
1355 "unknown revision %d -- please report to "
1356 "freebsd-multimedia@freebsd.org\n", pci_get_revid(
dev));
1357 return (BUS_PROBE_DEFAULT);
1359 switch(pci_get_revid(
dev)) {
1361 device_set_desc(
dev,
1362 "Creative SB AudioPCI CT4730/EV1938");
1363 return (BUS_PROBE_DEFAULT);
1365 device_set_desc(
dev,
"Creative SB AudioPCI CT4730-?");
1367 "unknown revision %d -- please report to "
1368 "freebsd-multimedia@freebsd.org\n",
1369 pci_get_revid(
dev));
1370 return (BUS_PROBE_DEFAULT);
1373 switch(pci_get_revid(
dev)) {
1375 device_set_desc(
dev,
"Creative CT5880-C");
1376 return (BUS_PROBE_DEFAULT);
1378 device_set_desc(
dev,
"Creative CT5880-D");
1379 return (BUS_PROBE_DEFAULT);
1381 device_set_desc(
dev,
"Creative CT5880-E");
1382 return (BUS_PROBE_DEFAULT);
1384 device_set_desc(
dev,
"Creative CT5880-?");
1386 "unknown revision %d -- please report to "
1387 "freebsd-multimedia@freebsd.org\n",
1388 pci_get_revid(
dev));
1389 return (BUS_PROBE_DEFAULT);
1404 dev = oidp->oid_arg1;
1410 err = sysctl_handle_int(oidp, &new_en, 0,
req);
1412 if (err ||
req->newptr == NULL)
1414 if (new_en < 0 || new_en > 1)
1424 es->
ctrl &= ~SPDIFEN_B;
1425 es->
ctrl &= ~RECEN_B;
1442 dev = oidp->oid_arg1;
1447 err = sysctl_handle_int(oidp, &
val, 0,
req);
1449 if (err ||
req->newptr == NULL)
1469 dev = oidp->oid_arg1;
1476 err = sysctl_handle_int(oidp, &
val, 0,
req);
1478 if (err ||
req->newptr == NULL)
1495 es->
ctrl &= ~CTRL_PCLKDIV;
1519 dev = oidp->oid_arg1;
1520 d = device_get_softc(
dev);
1531 err = sysctl_handle_int(oidp, &
val, 0,
req);
1533 if (err ||
req->newptr == NULL)
1535 if (!(
val == 0 ||
val == 1))
1571 (
level >> 8) & 0x7f);
1574 (
level >> 8) & 0x7f);
1577 ~(1 << SOUND_MIXER_SYNTH));
1581 if (
recsrc & (1 << SOUND_MIXER_PCM))
1582 recsrc |= 1 << SOUND_MIXER_SYNTH;
1583 else if (
recsrc & (1 << SOUND_MIXER_SYNTH))
1584 recsrc |= 1 << SOUND_MIXER_PCM;
1601 dev = oidp->oid_arg1;
1608 err = sysctl_handle_int(oidp, &
val, 0,
req);
1610 if (err ||
req->newptr == NULL)
1612 if (val < 0 || val > 1)
1648 SYSCTL_ADD_PROC(device_get_sysctl_ctx(
dev),
1649 SYSCTL_CHILDREN(device_get_sysctl_tree(
dev)), OID_AUTO,
1650 "spdif_enabled", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE,
1652 "Enable S/PDIF output on primary playback channel");
1664 SYSCTL_ADD_PROC(device_get_sysctl_ctx(
dev),
1665 SYSCTL_CHILDREN(device_get_sysctl_tree(
dev)),
1666 OID_AUTO,
"fixed_rate",
1667 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE,
1669 "Enable fixed rate playback/recording");
1681 SYSCTL_ADD_PROC(device_get_sysctl_ctx(
dev),
1682 SYSCTL_CHILDREN(device_get_sysctl_tree(
dev)),
1683 OID_AUTO,
"single_pcm_mixer",
1684 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE,
dev,
1686 "Single PCM mixer controller for both DAC1/DAC2");
1689 if (resource_int_value(device_get_name(
dev), device_get_unit(
dev),
1690 "latency_timer", &
r) == 0 && !(r < 0 || r > 255))
1695 SYSCTL_ADD_PROC(device_get_sysctl_ctx(
dev),
1696 SYSCTL_CHILDREN(device_get_sysctl_tree(
dev)), OID_AUTO,
1697 "latency_timer", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE,
1699 "PCI Latency Timer configuration");
1700 SYSCTL_ADD_PROC(device_get_sysctl_ctx(
dev),
1701 SYSCTL_CHILDREN(device_get_sysctl_tree(
dev)), OID_AUTO,
1702 "polling", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE,
dev,
1710 int mapped, i, numplay, dac_cfg;
1713 kobj_class_t ct = NULL;
1716 es = malloc(
sizeof *es, M_DEVBUF, M_WAITOK | M_ZERO);
1722 pci_enable_busmaster(
dev);
1740 device_printf(
dev,
"unable to map register space\n");
1744 es->
st = rman_get_bustag(es->
reg);
1745 es->
sh = rman_get_bushandle(es->
reg);
1749 if (resource_int_value(device_get_name(
dev),
1750 device_get_unit(
dev),
"polling", &i) == 0 && i != 0)
1756 if (resource_int_value(device_get_name(
dev),
1757 device_get_unit(
dev),
"blocksize", &i) == 0 && i > 0) {
1765 es->
blkcnt = 1 << (i - 1);
1774 if (resource_int_value(device_get_name(
dev), device_get_unit(
dev),
1775 "dac", &dac_cfg) == 0) {
1776 if (dac_cfg < 0 || dac_cfg > 3)
1820 ct = &eschan1371_class;
1833 ct = &eschan1370_class;
1841 es->
irq = bus_alloc_resource_any(
dev, SYS_RES_IRQ, &es->
irqid,
1842 RF_ACTIVE | RF_SHAREABLE);
1845 device_printf(
dev,
"unable to map interrupt\n");
1849 if (bus_dma_tag_create(bus_get_dma_tag(
dev),
1851 BUS_SPACE_MAXADDR_32BIT,
1854 es->
bufsz, 1, 0x3ffff,
1857 device_printf(
dev,
"unable to create dma tag\n");
1862 (es->
regtype == SYS_RES_IOPORT)?
"io" :
"memory",
1863 rman_get_start(es->
reg), rman_get_start(es->
irq),
1868 for (i = 0; i < numplay; i++)
1875 device_printf(
dev,
"<Playback: DAC%d / Record: ADC>\n",
1877 else if (numplay == 2)
1878 device_printf(
dev,
"<Playback: DAC%d,DAC%d / Record: ADC>\n",
1886 bus_teardown_intr(
dev, es->
irq, es->
ih);
1888 bus_release_resource(
dev, SYS_RES_IRQ, es->
irqid, es->
irq);
1912 if (es != NULL && es->
num != 0) {
1920 bus_teardown_intr(
dev, es->
irq, es->
ih);
1921 bus_release_resource(
dev, SYS_RES_IRQ, es->
irqid, es->
irq);
kobj_class_t ac97_getmixerclass(void)
void ac97_destroy(struct ac97_info *codec)
#define AC97_CREATE(dev, devinfo, cls)
int sndbuf_alloc(struct snd_dbuf *b, bus_dma_tag_t dmatag, int dmaflags, unsigned int size)
unsigned int sndbuf_getblkcnt(struct snd_dbuf *b)
bus_addr_t sndbuf_getbufaddr(struct snd_dbuf *buf)
unsigned int sndbuf_getalign(struct snd_dbuf *b)
unsigned int sndbuf_getblksz(struct snd_dbuf *b)
unsigned int sndbuf_getmaxsize(struct snd_dbuf *b)
unsigned int sndbuf_getsize(struct snd_dbuf *b)
int sndbuf_resize(struct snd_dbuf *b, unsigned int blkcnt, unsigned int blksz)
void chn_intr(struct pcm_channel *c)
#define PCMTRIG_COMMON(x)
struct pcmchan_matrix * m
static uint32_t eschan1371_setspeed(kobj_t obj, void *data, uint32_t speed)
#define ES_FIXED_RATE(cfgv)
#define ES1371REV_ES1373_A
static unsigned int es1371_dac_rate(struct es_info *, unsigned int, int)
#define ES_SINGLE_PCM_MIX(cfgv)
#define es_chan_active(es)
static void * eschan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *c, int dir)
static void es_init_sysctls(device_t dev)
static int sysctl_es137x_latency_timer(SYSCTL_HANDLER_ARGS)
MODULE_VERSION(snd_es137x, 1)
static int sysctl_es137x_spdif_enable(SYSCTL_HANDLER_ARGS)
#define CT5880REV_CT5880_C
static uint32_t eschan1370_setspeed(kobj_t obj, void *data, uint32_t speed)
static uint32_t eschan_setblocksize(kobj_t obj, void *data, uint32_t blksz)
static void es_intr(void *)
#define ES1371REV_CT5880_A
#define ES_LOCK_ASSERT(sc)
#define ES_SET_NUMPLAY(cfgv, nv)
static int es_pci_attach(device_t dev)
static unsigned int es1371_src_read(struct es_info *es, unsigned short reg)
MODULE_DEPEND(snd_es137x, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER)
#define ES1370_DAC1_MINSPEED
static uint32_t eschan_getptr(kobj_t obj, void *data)
#define ES_SET_GP(cfgv, nv)
CHANNEL_DECLARE(eschan1370)
#define ES_DAC1_ENABLED(cfgv)
#define ES1371REV_ES1371_B
#define ES_DEFAULT_DAC_CFG
#define ES1371REV_ES1371_A
static kobj_method_t es1371_ac97_methods[]
static kobj_method_t eschan1371_methods[]
AC97_DECLARE(es1371_ac97)
static driver_t es_driver
#define ES_SET_NUMREC(cfgv, nv)
static struct pcmchan_caps * eschan_getcaps(kobj_t obj, void *data)
static int sysctl_es137x_fixed_rate(SYSCTL_HANDLER_ARGS)
#define ES_SET_IS_ES1370(cfgv, nv)
#define ES_SET_FIXED_RATE(cfgv, nv)
static kobj_method_t eschan1370_methods[]
SND_DECLARE_FILE("$FreeBSD$")
static int es1371_rdcd(kobj_t obj, void *s, int addr)
static int es1371_wrcd(kobj_t obj, void *s, int addr, uint32_t data)
static int es1370_mixinit(struct snd_mixer *m)
static int es1370_init(struct es_info *)
static int es1371_init(struct es_info *)
static int es1370_mixset(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right)
#define ES_DAC_FIRST(cfgv)
static int es_pci_probe(device_t dev)
MIXER_DECLARE(es1370_mixer)
static __inline uint32_t es_rd(struct es_info *es, int regno, int size)
static unsigned int es1371_adc_rate(struct es_info *, unsigned int, int)
#define ES_SET_DAC_FIRST(cfgv, nv)
static int es_pci_detach(device_t dev)
static uint32_t es1370_mixsetrecsrc(struct snd_mixer *m, uint32_t src)
static __inline int es_poll_channel(struct es_chinfo *ch)
#define ES1370_DAC1_MAXSPEED
#define CT5880REV_CT5880_D
static void es1371_src_write(struct es_info *, unsigned short, unsigned short)
static int eschan_trigger(kobj_t obj, void *data, int go)
static int eschan_setfragments(kobj_t obj, void *data, uint32_t blksz, uint32_t blkcnt)
static const struct @7 mixtable[SOUND_MIXER_NRDEVICES]
static int eschan_setformat(kobj_t obj, void *data, uint32_t format)
static device_method_t es_methods[]
#define CT5880REV_CT5880_E
#define CT4730REV_CT4730_A
static __inline void es_wr(struct es_info *es, int regno, uint32_t data, int size)
#define ES_DAC_SECOND(cfgv)
#define ES1371REV_ES1373_B
#define ES_SET_SINGLE_PCM_MIX(cfgv, nv)
#define ES_IS_ES1370(cfgv)
static int sysctl_es137x_single_pcm_mixer(SYSCTL_HANDLER_ARGS)
#define ES_SET_DAC_SECOND(cfgv, nv)
static struct pcmchan_caps es_caps
static void es_poll_callback(void *arg)
static kobj_method_t es1370_mixer_methods[]
static int es1370_wrcodec(struct es_info *, unsigned char, unsigned char)
DRIVER_MODULE(snd_es137x, pci, es_driver, pcm_devclass, 0, 0)
static uint32_t es1371_wait_src_ready(struct es_info *)
#define ES_DAC2_ENABLED(cfgv)
static int sysctl_es_polling(SYSCTL_HANDLER_ARGS)
#define ES1371REV_ES1373_8
#define ES_SMPREG_VFREQ_FRAC
#define ES1370_REG_ADC_FRAMECNT
#define CODEC_PIDAT_SHIFT
#define ES1370_REG_DAC2_SCOUNT
#define ES1370_REG_SERIAL_CONTROL
#define CODEC_PODAT_SHIFT
#define ES1370_REG_ADC_SCOUNT
#define SCTRL_SH_P2ENDINC
#define ES1370_REG_MEMPAGE
#define ES1371_REG_SMPRATE
#define ES1371_SRC_RAM_WE
#define ES1371_SRC_RAM_DATAO(o)
#define CODEC_POADD_SHIFT
#define ES1370_REG_DAC2_FRAMECNT
#define ES1371_REG_LEGACY
#define ES_SMPREG_INT_REGS
#define ES_SMPREG_VOL_DAC2
#define ES1371_SRC_RAM_ADDRO(o)
#define ES_SMPREG_VOL_DAC1
#define ES1371_SRC_RAM_BUSY
#define ES1370_REG_DAC1_SCOUNT
#define ES1370_REG_DAC2_FRAMEADR
#define ES1370_REG_STATUS
#define CODEC_INDEX_SHIFT
#define ES1371_SRC_RAM_DATAI(i)
#define ES1370_REG_CONTROL
#define ES1370_REG_DAC1_FRAMECNT
#define ES_SMPREG_VOL_ADC
#define ES1370_REG_ADC_FRAMEADR
#define ES1370_REG_DAC1_FRAMEADR
#define ES_SMPREG_TRUNC_N
static int mixer_setrecsrc(struct snd_mixer *mixer, u_int32_t src)
int mixer_busy(struct snd_mixer *m)
u_int32_t mix_getrecsrc(struct snd_mixer *m)
int mixer_init(device_t dev, kobj_class_t cls, void *devinfo)
static int mixer_set(struct snd_mixer *m, u_int dev, u_int32_t muted, u_int lev)
u_int32_t mix_getdevs(struct snd_mixer *m)
void mix_setdevs(struct snd_mixer *m, u_int32_t v)
int mix_setrecsrc(struct snd_mixer *m, u_int32_t src)
u_int32_t mix_getrecdevs(struct snd_mixer *m)
int mix_set(struct snd_mixer *m, u_int dev, u_int left, u_int right)
void * mix_getdevinfo(struct snd_mixer *m)
void mix_setrecdevs(struct snd_mixer *m, u_int32_t v)
Record mask of available recording devices.
int mix_get(struct snd_mixer *m, u_int dev)
void * snd_mtxcreate(const char *desc, const char *type)
void * pcm_getdevinfo(device_t dev)
int pcm_setstatus(device_t dev, char *str)
void snd_mtxfree(void *m)
int pcm_addchan(device_t dev, int dir, kobj_class_t cls, void *devinfo)
int pcm_unregister(device_t dev)
int pcm_register(device_t dev, void *devinfo, int numplay, int numrec)
int snd_setup_intr(device_t dev, struct resource *res, int flags, driver_intr_t hand, void *param, void **cookiep)
unsigned int pcm_getbuffersize(device_t dev, unsigned int minbufsz, unsigned int deflt, unsigned int maxbufsz)
#define SND_FORMAT(f, c, e)
#define PCM_RELEASE_QUICK(x)
#define DSP_DEFAULT_SPEED
#define PCM_ACQUIRE_QUICK(x)
#define PCM_REGISTERED(x)
struct pcm_channel * channel
struct callout poll_timer
struct es_chinfo ch[ES_NCHANS]
bus_dma_tag_t parent_dmat