Deleted Added
full compact
mixer.c (70680) mixer.c (70944)
1/*
2 * Copyright (c) 1999 Cameron Grant <gandalf@vilnya.demon.co.uk>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

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

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
1/*
2 * Copyright (c) 1999 Cameron Grant <gandalf@vilnya.demon.co.uk>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

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

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD: head/sys/dev/sound/pcm/mixer.c 70680 2001-01-05 07:07:03Z jhb $
26 * $FreeBSD: head/sys/dev/sound/pcm/mixer.c 70944 2001-01-11 23:26:16Z jhb $
27 */
28
29#include <dev/sound/pcm/sound.h>
30
31#include "mixer_if.h"
32
33MALLOC_DEFINE(M_MIXER, "mixer", "mixer");
34

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

277
278 m = oidp->oid_arg1;
279 strncpy(devname, snd_mixernames[m->hwvol_mixer], sizeof(devname));
280 error = sysctl_handle_string(oidp, &devname[0], sizeof(devname), req);
281 if (error == 0 && req->newptr != NULL) {
282 dev = mixer_lookup(devname);
283 if (dev == -1)
284 return EINVAL;
27 */
28
29#include <dev/sound/pcm/sound.h>
30
31#include "mixer_if.h"
32
33MALLOC_DEFINE(M_MIXER, "mixer", "mixer");
34

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

277
278 m = oidp->oid_arg1;
279 strncpy(devname, snd_mixernames[m->hwvol_mixer], sizeof(devname));
280 error = sysctl_handle_string(oidp, &devname[0], sizeof(devname), req);
281 if (error == 0 && req->newptr != NULL) {
282 dev = mixer_lookup(devname);
283 if (dev == -1)
284 return EINVAL;
285 else
285 else if (dev != m->hwvol_mixer) {
286 m->hwvol_mixer = dev;
286 m->hwvol_mixer = dev;
287 m->hwvol_muted = 0;
288 }
287 }
288 return error;
289}
290
291int
289 }
290 return error;
291}
292
293int
292mixer_hwinit(device_t dev)
294mixer_hwvol_init(device_t dev)
293{
294 snddev_info *d;
295 snd_mixer *m;
296
297 d = device_get_softc(dev);
298 m = d->mixer;
299 m->hwvol_mixer = SOUND_MIXER_VOLUME;
300 m->hwvol_step = 5;
301 SYSCTL_ADD_INT(&d->sysctl_tree, SYSCTL_CHILDREN(d->sysctl_tree_top),
302 OID_AUTO, "hwvol_step", CTLFLAG_RW, &m->hwvol_step, 0, "");
303 SYSCTL_ADD_PROC(&d->sysctl_tree, SYSCTL_CHILDREN(d->sysctl_tree_top),
304 OID_AUTO, "hwvol_mixer", CTLTYPE_STRING | CTLFLAG_RW, m, 0,
305 sysctl_hw_snd_hwvol_mixer, "A", "")
306 return 0;
307}
308
309void
295{
296 snddev_info *d;
297 snd_mixer *m;
298
299 d = device_get_softc(dev);
300 m = d->mixer;
301 m->hwvol_mixer = SOUND_MIXER_VOLUME;
302 m->hwvol_step = 5;
303 SYSCTL_ADD_INT(&d->sysctl_tree, SYSCTL_CHILDREN(d->sysctl_tree_top),
304 OID_AUTO, "hwvol_step", CTLFLAG_RW, &m->hwvol_step, 0, "");
305 SYSCTL_ADD_PROC(&d->sysctl_tree, SYSCTL_CHILDREN(d->sysctl_tree_top),
306 OID_AUTO, "hwvol_mixer", CTLTYPE_STRING | CTLFLAG_RW, m, 0,
307 sysctl_hw_snd_hwvol_mixer, "A", "")
308 return 0;
309}
310
311void
310mixer_hwmute(device_t dev)
312mixer_hwvol_mute(device_t dev)
311{
312 snddev_info *d;
313 snd_mixer *m;
314
315 d = device_get_softc(dev);
316 m = d->mixer;
313{
314 snddev_info *d;
315 snd_mixer *m;
316
317 d = device_get_softc(dev);
318 m = d->mixer;
317 if (m->muted) {
318 m->muted = 0;
319 mixer_set(m, m->hwvol_mixer, m->mute_level);
319 if (m->hwvol_muted) {
320 m->hwvol_muted = 0;
321 mixer_set(m, m->hwvol_mixer, m->hwvol_mute_level);
320 } else {
322 } else {
321 m->muted++;
322 m->mute_level = mixer_get(m, m->hwvol_mixer);
323 m->hwvol_muted++;
324 m->hwvol_mute_level = mixer_get(m, m->hwvol_mixer);
323 mixer_set(m, m->hwvol_mixer, 0);
324 }
325}
326
327void
325 mixer_set(m, m->hwvol_mixer, 0);
326 }
327}
328
329void
328mixer_hwstep(device_t dev, int left_step, int right_step)
330mixer_hwvol_step(device_t dev, int left_step, int right_step)
329{
330 snddev_info *d;
331 snd_mixer *m;
332 int level, left, right;
333
334 d = device_get_softc(dev);
335 m = d->mixer;
331{
332 snddev_info *d;
333 snd_mixer *m;
334 int level, left, right;
335
336 d = device_get_softc(dev);
337 m = d->mixer;
336 level = mixer_get(m, m->hwvol_mixer);
338 if (m->hwvol_muted) {
339 m->hwvol_muted = 0;
340 level = m->hwvol_mute_level;
341 } else
342 level = mixer_get(m, m->hwvol_mixer);
337 if (level != -1) {
338 left = level & 0xff;
339 right = level >> 8;
340 left += left_step * m->hwvol_step;
341 if (left < 0)
342 left = 0;
343 right += right_step * m->hwvol_step;
344 if (right < 0)

--- 36 unchanged lines hidden ---
343 if (level != -1) {
344 left = level & 0xff;
345 right = level >> 8;
346 left += left_step * m->hwvol_step;
347 if (left < 0)
348 left = 0;
349 right += right_step * m->hwvol_step;
350 if (right < 0)

--- 36 unchanged lines hidden ---