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 --- |