Deleted Added
full compact
es137x.c (170721) es137x.c (170815)
1/*-
2 * Support the ENSONIQ AudioPCI board and Creative Labs SoundBlaster PCI
3 * boards based on the ES1370, ES1371 and ES1373 chips.
4 *
5 * Copyright (c) 1999 Russell Cattelan <cattelan@thebarn.com>
6 * Copyright (c) 1999 Cameron Grant <cg@freebsd.org>
7 * Copyright (c) 1998 by Joachim Kuebart. All rights reserved.
8 *

--- 45 unchanged lines hidden (view full) ---

54
55#include <dev/pci/pcireg.h>
56#include <dev/pci/pcivar.h>
57
58#include <sys/sysctl.h>
59
60#include "mixer_if.h"
61
1/*-
2 * Support the ENSONIQ AudioPCI board and Creative Labs SoundBlaster PCI
3 * boards based on the ES1370, ES1371 and ES1373 chips.
4 *
5 * Copyright (c) 1999 Russell Cattelan <cattelan@thebarn.com>
6 * Copyright (c) 1999 Cameron Grant <cg@freebsd.org>
7 * Copyright (c) 1998 by Joachim Kuebart. All rights reserved.
8 *

--- 45 unchanged lines hidden (view full) ---

54
55#include <dev/pci/pcireg.h>
56#include <dev/pci/pcivar.h>
57
58#include <sys/sysctl.h>
59
60#include "mixer_if.h"
61
62SND_DECLARE_FILE("$FreeBSD: head/sys/dev/sound/pci/es137x.c 170721 2007-06-14 11:13:38Z ariff $");
62SND_DECLARE_FILE("$FreeBSD: head/sys/dev/sound/pci/es137x.c 170815 2007-06-16 03:37:28Z ariff $");
63
64#define MEM_MAP_REG 0x14
65
66/* PCI IDs of supported chips */
67#define ES1370_PCI_ID 0x50001274
68#define ES1371_PCI_ID 0x13711274
69#define ES1371_PCI_ID2 0x13713274
70#define CT5880_PCI_ID 0x58801274

--- 1404 unchanged lines hidden (view full) ---

1475}
1476
1477static int
1478sysctl_es137x_single_pcm_mixer(SYSCTL_HANDLER_ARGS)
1479{
1480 struct es_info *es;
1481 struct snddev_info *d;
1482 struct snd_mixer *m;
63
64#define MEM_MAP_REG 0x14
65
66/* PCI IDs of supported chips */
67#define ES1370_PCI_ID 0x50001274
68#define ES1371_PCI_ID 0x13711274
69#define ES1371_PCI_ID2 0x13713274
70#define CT5880_PCI_ID 0x58801274

--- 1404 unchanged lines hidden (view full) ---

1475}
1476
1477static int
1478sysctl_es137x_single_pcm_mixer(SYSCTL_HANDLER_ARGS)
1479{
1480 struct es_info *es;
1481 struct snddev_info *d;
1482 struct snd_mixer *m;
1483 struct cdev *i_dev;
1484 device_t dev;
1485 uint32_t val, set;
1486 int recsrc, level, err;
1487
1488 dev = oidp->oid_arg1;
1489 d = device_get_softc(dev);
1483 device_t dev;
1484 uint32_t val, set;
1485 int recsrc, level, err;
1486
1487 dev = oidp->oid_arg1;
1488 d = device_get_softc(dev);
1490 if (d == NULL || d->mixer_dev == NULL || d->mixer_dev->si_drv1 == NULL)
1489 if (!PCM_REGISTERED(d) || d->mixer_dev == NULL ||
1490 d->mixer_dev->si_drv1 == NULL)
1491 return (EINVAL);
1492 es = d->devinfo;
1493 if (es == NULL)
1494 return (EINVAL);
1495 ES_LOCK(es);
1496 set = ES_SINGLE_PCM_MIX(es->escfg);
1497 val = set;
1498 ES_UNLOCK(es);
1499 err = sysctl_handle_int(oidp, &val, 0, req);
1500
1501 if (err || req->newptr == NULL)
1502 return (err);
1503 if (!(val == 0 || val == 1))
1504 return (EINVAL);
1505 if (val == set)
1506 return (0);
1491 return (EINVAL);
1492 es = d->devinfo;
1493 if (es == NULL)
1494 return (EINVAL);
1495 ES_LOCK(es);
1496 set = ES_SINGLE_PCM_MIX(es->escfg);
1497 val = set;
1498 ES_UNLOCK(es);
1499 err = sysctl_handle_int(oidp, &val, 0, req);
1500
1501 if (err || req->newptr == NULL)
1502 return (err);
1503 if (!(val == 0 || val == 1))
1504 return (EINVAL);
1505 if (val == set)
1506 return (0);
1507 i_dev = d->mixer_dev;
1508 if (mixer_ioctl(i_dev, 0, (caddr_t)&recsrc, 0, NULL) != EBADF)
1507 PCM_ACQUIRE_QUICK(d);
1508 m = (d->mixer_dev != NULL) ? d->mixer_dev->si_drv1 : NULL;
1509 if (m == NULL) {
1510 PCM_RELEASE_QUICK(d);
1511 return (ENODEV);
1512 }
1513 if (mixer_busy(m) != 0) {
1514 PCM_RELEASE_QUICK(d);
1509 return (EBUSY);
1515 return (EBUSY);
1510 err = mixer_ioctl(i_dev, MIXER_READ(SOUND_MIXER_PCM), (caddr_t)&level,
1511 -1, NULL);
1512 if (!err)
1513 err = mixer_ioctl(i_dev, MIXER_READ(SOUND_MIXER_RECSRC),
1514 (caddr_t)&recsrc, -1, NULL);
1515 if (err)
1516 return (err);
1517 if (level < 0)
1518 return (EINVAL);
1516 }
1517 level = mix_get(m, SOUND_MIXER_PCM);
1518 recsrc = mix_getrecsrc(m);
1519 if (level < 0 || recsrc < 0) {
1520 PCM_RELEASE_QUICK(d);
1521 return (ENXIO);
1522 }
1519
1520 ES_LOCK(es);
1521 if (es->ctrl & (CTRL_ADC_EN | CTRL_DAC1_EN | CTRL_DAC2_EN)) {
1522 ES_UNLOCK(es);
1523
1524 ES_LOCK(es);
1525 if (es->ctrl & (CTRL_ADC_EN | CTRL_DAC1_EN | CTRL_DAC2_EN)) {
1526 ES_UNLOCK(es);
1527 PCM_RELEASE_QUICK(d);
1523 return (EBUSY);
1524 }
1525 if (val)
1526 es->escfg = ES_SET_SINGLE_PCM_MIX(es->escfg, 1);
1527 else
1528 es->escfg = ES_SET_SINGLE_PCM_MIX(es->escfg, 0);
1529 ES_UNLOCK(es);
1528 return (EBUSY);
1529 }
1530 if (val)
1531 es->escfg = ES_SET_SINGLE_PCM_MIX(es->escfg, 1);
1532 else
1533 es->escfg = ES_SET_SINGLE_PCM_MIX(es->escfg, 0);
1534 ES_UNLOCK(es);
1530 m = i_dev->si_drv1;
1531 if (!val) {
1535 if (!val) {
1532 mix_setdevs(m, mix_getdevs(d->mixer_dev->si_drv1) |
1533 (1 << SOUND_MIXER_SYNTH));
1534 mix_setrecdevs(m, mix_getrecdevs(d->mixer_dev->si_drv1) |
1535 (1 << SOUND_MIXER_SYNTH));
1536 err = mixer_ioctl(i_dev, MIXER_WRITE(SOUND_MIXER_SYNTH),
1537 (caddr_t)&level, -1, NULL);
1536 mix_setdevs(m, mix_getdevs(m) | (1 << SOUND_MIXER_SYNTH));
1537 mix_setrecdevs(m, mix_getrecdevs(m) | (1 << SOUND_MIXER_SYNTH));
1538 err = mix_set(m, SOUND_MIXER_SYNTH, level & 0x7f,
1539 (level >> 8) & 0x7f);
1538 } else {
1540 } else {
1539 err = mixer_ioctl(i_dev, MIXER_WRITE(SOUND_MIXER_SYNTH),
1540 (caddr_t)&level, -1, NULL);
1541 mix_setdevs(m, mix_getdevs(d->mixer_dev->si_drv1) &
1541 err = mix_set(m, SOUND_MIXER_SYNTH, level & 0x7f,
1542 (level >> 8) & 0x7f);
1543 mix_setdevs(m, mix_getdevs(m) & ~(1 << SOUND_MIXER_SYNTH));
1544 mix_setrecdevs(m, mix_getrecdevs(m) &
1542 ~(1 << SOUND_MIXER_SYNTH));
1545 ~(1 << SOUND_MIXER_SYNTH));
1543 mix_setrecdevs(m, mix_getrecdevs(d->mixer_dev->si_drv1) &
1544 ~(1 << SOUND_MIXER_SYNTH));
1545 }
1546 if (!err) {
1547 level = recsrc;
1548 if (recsrc & (1 << SOUND_MIXER_PCM))
1549 recsrc |= 1 << SOUND_MIXER_SYNTH;
1550 else if (recsrc & (1 << SOUND_MIXER_SYNTH))
1551 recsrc |= 1 << SOUND_MIXER_PCM;
1552 if (level != recsrc)
1546 }
1547 if (!err) {
1548 level = recsrc;
1549 if (recsrc & (1 << SOUND_MIXER_PCM))
1550 recsrc |= 1 << SOUND_MIXER_SYNTH;
1551 else if (recsrc & (1 << SOUND_MIXER_SYNTH))
1552 recsrc |= 1 << SOUND_MIXER_PCM;
1553 if (level != recsrc)
1553 err = mixer_ioctl(i_dev,
1554 MIXER_WRITE(SOUND_MIXER_RECSRC),
1555 (caddr_t)&recsrc, -1, NULL);
1554 err = mix_setrecsrc(m, recsrc);
1556 }
1555 }
1556
1557 PCM_RELEASE_QUICK(d);
1558
1557 return (err);
1558}
1559
1560static int
1561sysctl_es_polling(SYSCTL_HANDLER_ARGS)
1562{
1563 struct es_info *es;
1564 device_t dev;

--- 360 unchanged lines hidden ---
1559 return (err);
1560}
1561
1562static int
1563sysctl_es_polling(SYSCTL_HANDLER_ARGS)
1564{
1565 struct es_info *es;
1566 device_t dev;

--- 360 unchanged lines hidden ---