From owner-svn-src-all@FreeBSD.ORG Sun Jun 7 19:12:09 2009 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F168E1065673; Sun, 7 Jun 2009 19:12:09 +0000 (UTC) (envelope-from ariff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DA8898FC1A; Sun, 7 Jun 2009 19:12:09 +0000 (UTC) (envelope-from ariff@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n57JC9lM002437; Sun, 7 Jun 2009 19:12:09 GMT (envelope-from ariff@svn.freebsd.org) Received: (from ariff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n57JC9GZ002423; Sun, 7 Jun 2009 19:12:09 GMT (envelope-from ariff@svn.freebsd.org) Message-Id: <200906071912.n57JC9GZ002423@svn.freebsd.org> From: Ariff Abdullah Date: Sun, 7 Jun 2009 19:12:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r193640 - in head/sys: conf dev/sound dev/sound/isa dev/sound/macio dev/sound/midi dev/sound/pci dev/sound/pci/hda dev/sound/pcm dev/sound/sbus dev/sound/usb modules/sound/sound sys tools X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2009 19:12:10 -0000 Author: ariff Date: Sun Jun 7 19:12:08 2009 New Revision: 193640 URL: http://svn.freebsd.org/changeset/base/193640 Log: Sound Mega-commit. Expect further cleanup until code freeze. For a slightly thorough explaination, please refer to [1] http://people.freebsd.org/~ariff/SOUND_4.TXT.html . Summary of changes includes: 1 Volume Per-Channel (vpc). Provides private / standalone volume control unique per-stream pcm channel without touching master volume / pcm. Applications can directly use SNDCTL_DSP_[GET|SET][PLAY|REC]VOL, or for backwards compatibility, SOUND_MIXER_PCM through the opened dsp device instead of /dev/mixer. Special "bypass" mode is enabled through /dev/mixer which will automatically detect if the adjustment is made through /dev/mixer and forward its request to this private volume controller. Changes to this volume object will not interfere with other channels. Requirements: - SNDCTL_DSP_[GET|SET][PLAY|REC]_VOL are newer ioctls (OSSv4) which require specific application modifications (preferred). - No modifications required for using bypass mode, so applications like mplayer or xmms should work out of the box. Kernel hints: - hint.pcm.%d.vpc (0 = disable vpc). Kernel sysctls: - hw.snd.vpc_mixer_bypass (default: 1). Enable or disable /dev/mixer bypass mode. - hw.snd.vpc_autoreset (default: 1). By default, closing/opening /dev/dsp will reset the volume back to 0 db gain/attenuation. Setting this to 0 will preserve its settings across device closing/opening. - hw.snd.vpc_reset (default: 0). Panic/reset button to reset all volume settings back to 0 db. - hw.snd.vpc_0db (default: 45). 0 db relative to linear mixer value. 2 High quality fixed-point Bandlimited SINC sampling rate converter, based on Julius O'Smith's Digital Audio Resampling - http://ccrma.stanford.edu/~jos/resample/. It includes a filter design script written in awk (the clumsiest joke I've ever written) - 100% 32bit fixed-point, 64bit accumulator. - Possibly among the fastest (if not fastest) of its kind. - Resampling quality is tunable, either runtime or during kernel compilation (FEEDER_RATE_PRESETS). - Quality can be further customized during kernel compilation by defining FEEDER_RATE_PRESETS in /etc/make.conf. Kernel sysctls: - hw.snd.feeder_rate_quality. 0 - Zero-order Hold (ZOH). Fastest, bad quality. 1 - Linear Interpolation (LINEAR). Slightly slower than ZOH, better quality but still does not eliminate aliasing. 2 - (and above) - Sinc Interpolation(SINC). Best quality. SINC quality always start from 2 and above. Rough quality comparisons: - http://people.freebsd.org/~ariff/z_comparison/ 3 Bit-perfect mode. Bypasses all feeder/dsp effects. Pure sound will be directly fed into the hardware. 4 Parametric (compile time) Software Equalizer (Bass/Treble mixer). Can be customized by defining FEEDER_EQ_PRESETS in /etc/make.conf. 5 Transparent/Adaptive Virtual Channel. Now you don't have to disable vchans in order to make digital format pass through. It also makes vchans more dynamic by choosing a better format/rate among all the concurrent streams, which means that dev.pcm.X.play.vchanformat/rate becomes sort of optional. 6 Exclusive Stream, with special open() mode O_EXCL. This will "mute" other concurrent vchan streams and only allow a single channel with O_EXCL set to keep producing sound. Other Changes: * most feeder_* stuffs are compilable in userland. Let's not speculate whether we should go all out for it (save that for FreeBSD 16.0-RELEASE). * kobj signature fixups, thanks to Andriy Gapon * pull out channel mixing logic out of vchan.c and create its own feeder_mixer for world justice. * various refactoring here and there, for good or bad. * activation of few more OSSv4 ioctls() (see [1] above). * opt_snd.h for possible compile time configuration: (mostly for debugging purposes, don't try these at home) SND_DEBUG SND_DIAGNOSTIC SND_FEEDER_MULTIFORMAT SND_FEEDER_FULL_MULTIFORMAT SND_FEEDER_RATE_HP SND_PCM_64 SND_OLDSTEREO Manual page updates are on the way. Tested by: joel, Olivier SMEDTS , too many unsung / unnamed heroes. Added: head/sys/dev/sound/pcm/feeder_chain.c (contents, props changed) head/sys/dev/sound/pcm/feeder_eq.c (contents, props changed) head/sys/dev/sound/pcm/feeder_format.c (contents, props changed) head/sys/dev/sound/pcm/feeder_matrix.c (contents, props changed) head/sys/dev/sound/pcm/feeder_mixer.c (contents, props changed) head/sys/dev/sound/pcm/g711.h (contents, props changed) head/sys/dev/sound/pcm/intpcm.h (contents, props changed) head/sys/dev/sound/pcm/matrix.h (contents, props changed) head/sys/dev/sound/pcm/matrix_map.h (contents, props changed) head/sys/dev/sound/pcm/pcm.h (contents, props changed) head/sys/dev/sound/pcm/sndstat.h (contents, props changed) head/sys/tools/feeder_eq_mkfilter.awk (contents, props changed) head/sys/tools/feeder_rate_mkfilter.awk (contents, props changed) head/sys/tools/snd_fxdiv_gen.awk (contents, props changed) Deleted: head/sys/dev/sound/pcm/fake.c head/sys/dev/sound/pcm/feeder_fmt.c Modified: head/sys/conf/files head/sys/conf/options head/sys/dev/sound/clone.c head/sys/dev/sound/driver.c head/sys/dev/sound/isa/ad1816.c head/sys/dev/sound/isa/ess.c head/sys/dev/sound/isa/gusc.c head/sys/dev/sound/isa/mss.c head/sys/dev/sound/isa/sb16.c head/sys/dev/sound/isa/sb8.c head/sys/dev/sound/isa/sbc.c head/sys/dev/sound/isa/sndbuf_dma.c head/sys/dev/sound/macio/aoa.c head/sys/dev/sound/macio/davbus.c head/sys/dev/sound/macio/i2s.c head/sys/dev/sound/macio/snapper.c head/sys/dev/sound/macio/tumbler.c head/sys/dev/sound/midi/midi.c head/sys/dev/sound/midi/mpu401.c head/sys/dev/sound/midi/sequencer.c head/sys/dev/sound/midi/sequencer.h head/sys/dev/sound/pci/als4000.c head/sys/dev/sound/pci/atiixp.c head/sys/dev/sound/pci/aureal.c head/sys/dev/sound/pci/cmi.c head/sys/dev/sound/pci/cs4281.c head/sys/dev/sound/pci/csa.c head/sys/dev/sound/pci/csapcm.c head/sys/dev/sound/pci/ds1.c head/sys/dev/sound/pci/emu10k1.c head/sys/dev/sound/pci/emu10kx-midi.c head/sys/dev/sound/pci/emu10kx-pcm.c head/sys/dev/sound/pci/emu10kx.c head/sys/dev/sound/pci/envy24.c head/sys/dev/sound/pci/envy24ht.c head/sys/dev/sound/pci/es137x.c head/sys/dev/sound/pci/fm801.c head/sys/dev/sound/pci/hda/hdac.c head/sys/dev/sound/pci/ich.c head/sys/dev/sound/pci/maestro.c head/sys/dev/sound/pci/maestro3.c head/sys/dev/sound/pci/neomagic.c head/sys/dev/sound/pci/solo.c head/sys/dev/sound/pci/spicds.c head/sys/dev/sound/pci/t4dwave.c head/sys/dev/sound/pci/via8233.c head/sys/dev/sound/pci/via82c686.c head/sys/dev/sound/pci/vibes.c head/sys/dev/sound/pcm/ac97.c head/sys/dev/sound/pcm/ac97_patch.c head/sys/dev/sound/pcm/buffer.c head/sys/dev/sound/pcm/buffer.h head/sys/dev/sound/pcm/channel.c head/sys/dev/sound/pcm/channel.h head/sys/dev/sound/pcm/channel_if.m head/sys/dev/sound/pcm/dsp.c head/sys/dev/sound/pcm/dsp.h head/sys/dev/sound/pcm/feeder.c head/sys/dev/sound/pcm/feeder.h head/sys/dev/sound/pcm/feeder_rate.c head/sys/dev/sound/pcm/feeder_volume.c head/sys/dev/sound/pcm/mixer.c head/sys/dev/sound/pcm/mixer.h head/sys/dev/sound/pcm/sndstat.c head/sys/dev/sound/pcm/sound.c head/sys/dev/sound/pcm/sound.h head/sys/dev/sound/pcm/vchan.c head/sys/dev/sound/pcm/vchan.h head/sys/dev/sound/sbus/cs4231.c head/sys/dev/sound/unit.c head/sys/dev/sound/usb/uaudio.c head/sys/dev/sound/usb/uaudio.h head/sys/dev/sound/usb/uaudio_pcm.c head/sys/dev/sound/version.h head/sys/modules/sound/sound/Makefile head/sys/sys/soundcard.h Modified: head/sys/conf/files ============================================================================== --- head/sys/conf/files Sun Jun 7 18:53:25 2009 (r193639) +++ head/sys/conf/files Sun Jun 7 19:12:08 2009 (r193640) @@ -65,6 +65,21 @@ p17v-alsa%diked.h optional snd_emu10kx compile-with "CC='${CC}' AWK=${AWK} sh $S/tools/emu10k1-mkalsa.sh $S/gnu/dev/sound/pci/p17v-alsa.h p17v-alsa%diked.h" \ no-obj no-implicit-rule before-depend \ clean "p17v-alsa%diked.h" +feeder_eq_gen.h optional sound \ + dependency "$S/tools/feeder_eq_mkfilter.awk" \ + compile-with "${AWK} -f $S/tools/feeder_eq_mkfilter.awk -- ${FEEDER_EQ_PRESETS} > feeder_eq_gen.h" \ + no-obj no-implicit-rule before-depend \ + clean "feeder_eq_gen.h" +feeder_rate_gen.h optional sound \ + dependency "$S/tools/feeder_rate_mkfilter.awk" \ + compile-with "${AWK} -f $S/tools/feeder_rate_mkfilter.awk -- ${FEEDER_RATE_PRESETS} > feeder_rate_gen.h" \ + no-obj no-implicit-rule before-depend \ + clean "feeder_rate_gen.h" +snd_fxdiv_gen.h optional sound \ + dependency "$S/tools/snd_fxdiv_gen.awk" \ + compile-with "${AWK} -f $S/tools/snd_fxdiv_gen.awk -- > snd_fxdiv_gen.h" \ + no-obj no-implicit-rule before-depend \ + clean "snd_fxdiv_gen.h" miidevs.h optional miibus | mii \ dependency "$S/tools/miidevs2h.awk $S/dev/mii/miidevs" \ compile-with "${AWK} -f $S/tools/miidevs2h.awk $S/dev/mii/miidevs" \ @@ -1433,16 +1448,28 @@ dev/sound/pci/hda/hdac.c optional snd_hd dev/sound/pcm/ac97.c optional sound dev/sound/pcm/ac97_if.m optional sound dev/sound/pcm/ac97_patch.c optional sound -dev/sound/pcm/buffer.c optional sound +dev/sound/pcm/buffer.c optional sound \ + dependency "snd_fxdiv_gen.h" dev/sound/pcm/channel.c optional sound dev/sound/pcm/channel_if.m optional sound dev/sound/pcm/dsp.c optional sound -dev/sound/pcm/fake.c optional sound dev/sound/pcm/feeder.c optional sound -dev/sound/pcm/feeder_fmt.c optional sound +dev/sound/pcm/feeder_chain.c optional sound +dev/sound/pcm/feeder_eq.c optional sound \ + dependency "feeder_eq_gen.h" \ + dependency "snd_fxdiv_gen.h" dev/sound/pcm/feeder_if.m optional sound -dev/sound/pcm/feeder_rate.c optional sound -dev/sound/pcm/feeder_volume.c optional sound +dev/sound/pcm/feeder_format.c optional sound \ + dependency "snd_fxdiv_gen.h" +dev/sound/pcm/feeder_matrix.c optional sound \ + dependency "snd_fxdiv_gen.h" +dev/sound/pcm/feeder_mixer.c optional sound \ + dependency "snd_fxdiv_gen.h" +dev/sound/pcm/feeder_rate.c optional sound \ + dependency "feeder_rate_gen.h" \ + dependency "snd_fxdiv_gen.h" +dev/sound/pcm/feeder_volume.c optional sound \ + dependency "snd_fxdiv_gen.h" dev/sound/pcm/mixer.c optional sound dev/sound/pcm/mixer_if.m optional sound dev/sound/pcm/sndstat.c optional sound Modified: head/sys/conf/options ============================================================================== --- head/sys/conf/options Sun Jun 7 18:53:25 2009 (r193639) +++ head/sys/conf/options Sun Jun 7 19:12:08 2009 (r193640) @@ -830,3 +830,12 @@ VIMAGE_GLOBALS opt_global.h # Common Flash Interface (CFI) options CFI_SUPPORT_STRATAFLASH opt_cfi.h CFI_ARMEDANDDANGEROUS opt_cfi.h + +# Sound options +SND_DEBUG opt_snd.h +SND_DIAGNOSTIC opt_snd.h +SND_FEEDER_MULTIFORMAT opt_snd.h +SND_FEEDER_FULL_MULTIFORMAT opt_snd.h +SND_FEEDER_RATE_HP opt_snd.h +SND_PCM_64 opt_snd.h +SND_OLDSTEREO opt_snd.h Modified: head/sys/dev/sound/clone.c ============================================================================== --- head/sys/dev/sound/clone.c Sun Jun 7 18:53:25 2009 (r193639) +++ head/sys/dev/sound/clone.c Sun Jun 7 19:12:08 2009 (r193640) @@ -33,6 +33,10 @@ #include #include +#ifdef HAVE_KERNEL_OPTION_HEADERS +#include "opt_snd.h" +#endif + #if defined(SND_DIAGNOSTIC) || defined(SND_DEBUG) #include #endif @@ -88,9 +92,9 @@ struct snd_clone { #define SND_CLONE_ASSERT(x, y) do { \ if (!(x)) \ panic y; \ -} while(0) +} while (0) #else -#define SND_CLONE_ASSERT(x...) KASSERT(x) +#define SND_CLONE_ASSERT(...) KASSERT(__VA_ARGS__) #endif /* Modified: head/sys/dev/sound/driver.c ============================================================================== --- head/sys/dev/sound/driver.c Sun Jun 7 18:53:25 2009 (r193639) +++ head/sys/dev/sound/driver.c Sun Jun 7 19:12:08 2009 (r193640) @@ -26,6 +26,10 @@ * $FreeBSD$ */ +#ifdef HAVE_KERNEL_OPTION_HEADERS +#include "opt_snd.h" +#endif + #include static int @@ -38,7 +42,7 @@ snd_modevent(module_t mod, int type, voi case MOD_UNLOAD: break; default: - return (EOPNOTSUPP); + return (ENOTSUP); break; } return 0; Modified: head/sys/dev/sound/isa/ad1816.c ============================================================================== --- head/sys/dev/sound/isa/ad1816.c Sun Jun 7 18:53:25 2009 (r193639) +++ head/sys/dev/sound/isa/ad1816.c Sun Jun 7 19:12:08 2009 (r193640) @@ -26,6 +26,10 @@ * SUCH DAMAGE. */ +#ifdef HAVE_KERNEL_OPTION_HEADERS +#include "opt_snd.h" +#endif + #include #include @@ -62,14 +66,14 @@ struct ad1816_info { }; static u_int32_t ad1816_fmt[] = { - AFMT_U8, - AFMT_STEREO | AFMT_U8, - AFMT_S16_LE, - AFMT_STEREO | AFMT_S16_LE, - AFMT_MU_LAW, - AFMT_STEREO | AFMT_MU_LAW, - AFMT_A_LAW, - AFMT_STEREO | AFMT_A_LAW, + SND_FORMAT(AFMT_U8, 1, 0), + SND_FORMAT(AFMT_U8, 2, 0), + SND_FORMAT(AFMT_S16_LE, 1, 0), + SND_FORMAT(AFMT_S16_LE, 2, 0), + SND_FORMAT(AFMT_MU_LAW, 1, 0), + SND_FORMAT(AFMT_MU_LAW, 2, 0), + SND_FORMAT(AFMT_A_LAW, 1, 0), + SND_FORMAT(AFMT_A_LAW, 2, 0), 0 }; @@ -269,7 +273,7 @@ ad1816mix_set(struct snd_mixer *m, unsig return left | (right << 8); } -static int +static u_int32_t ad1816mix_setrecsrc(struct snd_mixer *m, u_int32_t src) { struct ad1816_info *ad1816 = mix_getdevinfo(m); @@ -303,7 +307,7 @@ static kobj_method_t ad1816mixer_methods KOBJMETHOD(mixer_init, ad1816mix_init), KOBJMETHOD(mixer_set, ad1816mix_set), KOBJMETHOD(mixer_setrecsrc, ad1816mix_setrecsrc), - { 0, 0 } + KOBJMETHOD_END }; MIXER_DECLARE(ad1816mixer); @@ -315,23 +319,19 @@ ad1816chan_init(kobj_t obj, void *devinf struct ad1816_info *ad1816 = devinfo; struct ad1816_chinfo *ch = (dir == PCMDIR_PLAY)? &ad1816->pch : &ad1816->rch; + ch->dir = dir; ch->parent = ad1816; ch->channel = c; ch->buffer = b; if (sndbuf_alloc(ch->buffer, ad1816->parent_dmat, 0, ad1816->bufsize) != 0) return NULL; - return ch; -} -static int -ad1816chan_setdir(kobj_t obj, void *data, int dir) -{ - struct ad1816_chinfo *ch = data; - struct ad1816_info *ad1816 = ch->parent; + sndbuf_dmasetup(ch->buffer, (dir == PCMDIR_PLAY) ? ad1816->drq1 : + ad1816->drq2); + if (SND_DMA(ch->buffer)) + sndbuf_dmasetdir(ch->buffer, dir); - sndbuf_dmasetup(ch->buffer, (dir == PCMDIR_PLAY)? ad1816->drq1 : ad1816->drq2); - ch->dir = dir; - return 0; + return ch; } static int @@ -351,7 +351,7 @@ ad1816chan_setformat(kobj_t obj, void *d ad1816_write(ad1816, 10, 0x0000); ad1816_write(ad1816, 11, 0x0000); } - switch (format & ~AFMT_STEREO) { + switch (AFMT_ENCODING(format)) { case AFMT_A_LAW: fmt = AD1816_ALAW; break; @@ -372,7 +372,7 @@ ad1816chan_setformat(kobj_t obj, void *d fmt = AD1816_U8; break; } - if (format & AFMT_STEREO) fmt |= AD1816_STEREO; + if (AFMT_CHANNEL(format) > 1) fmt |= AD1816_STEREO; io_wr(ad1816, reg, fmt); ad1816_unlock(ad1816); #if 0 @@ -382,7 +382,7 @@ ad1816chan_setformat(kobj_t obj, void *d #endif } -static int +static u_int32_t ad1816chan_setspeed(kobj_t obj, void *data, u_int32_t speed) { struct ad1816_chinfo *ch = data; @@ -395,7 +395,7 @@ ad1816chan_setspeed(kobj_t obj, void *da return speed; } -static int +static u_int32_t ad1816chan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize) { struct ad1816_chinfo *ch = data; @@ -456,7 +456,7 @@ ad1816chan_trigger(kobj_t obj, void *dat return 0; } -static int +static u_int32_t ad1816chan_getptr(kobj_t obj, void *data) { struct ad1816_chinfo *ch = data; @@ -471,14 +471,13 @@ ad1816chan_getcaps(kobj_t obj, void *dat static kobj_method_t ad1816chan_methods[] = { KOBJMETHOD(channel_init, ad1816chan_init), - KOBJMETHOD(channel_setdir, ad1816chan_setdir), KOBJMETHOD(channel_setformat, ad1816chan_setformat), KOBJMETHOD(channel_setspeed, ad1816chan_setspeed), KOBJMETHOD(channel_setblocksize, ad1816chan_setblocksize), KOBJMETHOD(channel_trigger, ad1816chan_trigger), KOBJMETHOD(channel_getptr, ad1816chan_getptr), KOBJMETHOD(channel_getcaps, ad1816chan_getcaps), - { 0, 0 } + KOBJMETHOD_END }; CHANNEL_DECLARE(ad1816chan); Modified: head/sys/dev/sound/isa/ess.c ============================================================================== --- head/sys/dev/sound/isa/ess.c Sun Jun 7 18:53:25 2009 (r193639) +++ head/sys/dev/sound/isa/ess.c Sun Jun 7 19:12:08 2009 (r193640) @@ -29,6 +29,10 @@ * SUCH DAMAGE. */ +#ifdef HAVE_KERNEL_OPTION_HEADERS +#include "opt_snd.h" +#endif + #include #include @@ -50,28 +54,28 @@ SND_DECLARE_FILE("$FreeBSD$"); #define ESS18XX_NEWSPEED static u_int32_t ess_pfmt[] = { - AFMT_U8, - AFMT_STEREO | AFMT_U8, - AFMT_S8, - AFMT_STEREO | AFMT_S8, - AFMT_S16_LE, - AFMT_STEREO | AFMT_S16_LE, - AFMT_U16_LE, - AFMT_STEREO | AFMT_U16_LE, + SND_FORMAT(AFMT_U8, 1, 0), + SND_FORMAT(AFMT_U8, 2, 0), + SND_FORMAT(AFMT_S8, 1, 0), + SND_FORMAT(AFMT_S8, 2, 0), + SND_FORMAT(AFMT_S16_LE, 1, 0), + SND_FORMAT(AFMT_S16_LE, 2, 0), + SND_FORMAT(AFMT_U16_LE, 1, 0), + SND_FORMAT(AFMT_U16_LE, 2, 0), 0 }; static struct pcmchan_caps ess_playcaps = {6000, 48000, ess_pfmt, 0}; static u_int32_t ess_rfmt[] = { - AFMT_U8, - AFMT_STEREO | AFMT_U8, - AFMT_S8, - AFMT_STEREO | AFMT_S8, - AFMT_S16_LE, - AFMT_STEREO | AFMT_S16_LE, - AFMT_U16_LE, - AFMT_STEREO | AFMT_U16_LE, + SND_FORMAT(AFMT_U8, 1, 0), + SND_FORMAT(AFMT_U8, 2, 0), + SND_FORMAT(AFMT_S8, 1, 0), + SND_FORMAT(AFMT_S8, 2, 0), + SND_FORMAT(AFMT_S16_LE, 1, 0), + SND_FORMAT(AFMT_S16_LE, 2, 0), + SND_FORMAT(AFMT_U16_LE, 1, 0), + SND_FORMAT(AFMT_U16_LE, 2, 0), 0 }; @@ -458,7 +462,7 @@ ess_setupch(struct ess_info *sc, int ch, { int play = (dir == PCMDIR_PLAY)? 1 : 0; int b16 = (fmt & AFMT_16BIT)? 1 : 0; - int stereo = (fmt & AFMT_STEREO)? 1 : 0; + int stereo = (AFMT_CHANNEL(fmt) > 1)? 1 : 0; int unsign = (fmt == AFMT_U8 || fmt == AFMT_U16_LE)? 1 : 0; u_int8_t spdval, fmtval; @@ -583,7 +587,7 @@ esschan_setformat(kobj_t obj, void *data return 0; } -static int +static u_int32_t esschan_setspeed(kobj_t obj, void *data, u_int32_t speed) { struct ess_chinfo *ch = data; @@ -597,7 +601,7 @@ esschan_setspeed(kobj_t obj, void *data, return ch->spd; } -static int +static u_int32_t esschan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize) { struct ess_chinfo *ch = data; @@ -630,7 +634,7 @@ esschan_trigger(kobj_t obj, void *data, return 0; } -static int +static u_int32_t esschan_getptr(kobj_t obj, void *data) { struct ess_chinfo *ch = data; @@ -654,7 +658,7 @@ static kobj_method_t esschan_methods[] = KOBJMETHOD(channel_trigger, esschan_trigger), KOBJMETHOD(channel_getptr, esschan_getptr), KOBJMETHOD(channel_getcaps, esschan_getcaps), - { 0, 0 } + KOBJMETHOD_END }; CHANNEL_DECLARE(esschan); @@ -741,7 +745,7 @@ essmix_set(struct snd_mixer *m, unsigned return left | (right << 8); } -static int +static u_int32_t essmix_setrecsrc(struct snd_mixer *m, u_int32_t src) { struct ess_info *sc = mix_getdevinfo(m); @@ -776,7 +780,7 @@ static kobj_method_t essmixer_methods[] KOBJMETHOD(mixer_init, essmix_init), KOBJMETHOD(mixer_set, essmix_set), KOBJMETHOD(mixer_setrecsrc, essmix_setrecsrc), - { 0, 0 } + KOBJMETHOD_END }; MIXER_DECLARE(essmixer); Modified: head/sys/dev/sound/isa/gusc.c ============================================================================== --- head/sys/dev/sound/isa/gusc.c Sun Jun 7 18:53:25 2009 (r193639) +++ head/sys/dev/sound/isa/gusc.c Sun Jun 7 19:12:08 2009 (r193640) @@ -34,7 +34,11 @@ #include #include #include -#include + +#ifdef HAVE_KERNEL_OPTION_HEADERS +#include "opt_snd.h" +#endif + #include #include #include "bus_if.h" @@ -301,11 +305,9 @@ static int gusc_attach(device_t dev) { sc_p scp; - int unit; void *ih; scp = device_get_softc(dev); - unit = device_get_unit(dev); bzero(scp, sizeof(*scp)); @@ -580,16 +582,14 @@ alloc_resource(sc_p scp) static int release_resource(sc_p scp) { - int i, lid, flags; + int i, lid; device_t dev; - flags = 0; if (isa_get_vendorid(scp->dev)) lid = isa_get_logicalid(scp->dev); - else { + else lid = LOGICALID_NOPNP; - flags = device_get_flags(scp->dev); - } + switch(lid) { case LOGICALID_PCM: case LOGICALID_NOPNP: /* XXX Non-PnP */ Modified: head/sys/dev/sound/isa/mss.c ============================================================================== --- head/sys/dev/sound/isa/mss.c Sun Jun 7 18:53:25 2009 (r193639) +++ head/sys/dev/sound/isa/mss.c Sun Jun 7 19:12:08 2009 (r193640) @@ -27,6 +27,10 @@ * SUCH DAMAGE. */ +#ifdef HAVE_KERNEL_OPTION_HEADERS +#include "opt_snd.h" +#endif + #include SND_DECLARE_FILE("$FreeBSD$"); @@ -128,34 +132,34 @@ static int pnpmss_attach(device_t dev) static driver_intr_t opti931_intr; static u_int32_t mss_fmt[] = { - AFMT_U8, - AFMT_STEREO | AFMT_U8, - AFMT_S16_LE, - AFMT_STEREO | AFMT_S16_LE, - AFMT_MU_LAW, - AFMT_STEREO | AFMT_MU_LAW, - AFMT_A_LAW, - AFMT_STEREO | AFMT_A_LAW, + SND_FORMAT(AFMT_U8, 1, 0), + SND_FORMAT(AFMT_U8, 2, 0), + SND_FORMAT(AFMT_S16_LE, 1, 0), + SND_FORMAT(AFMT_S16_LE, 2, 0), + SND_FORMAT(AFMT_MU_LAW, 1, 0), + SND_FORMAT(AFMT_MU_LAW, 2, 0), + SND_FORMAT(AFMT_A_LAW, 1, 0), + SND_FORMAT(AFMT_A_LAW, 2, 0), 0 }; static struct pcmchan_caps mss_caps = {4000, 48000, mss_fmt, 0}; static u_int32_t guspnp_fmt[] = { - AFMT_U8, - AFMT_STEREO | AFMT_U8, - AFMT_S16_LE, - AFMT_STEREO | AFMT_S16_LE, - AFMT_A_LAW, - AFMT_STEREO | AFMT_A_LAW, + SND_FORMAT(AFMT_U8, 1, 0), + SND_FORMAT(AFMT_U8, 2, 0), + SND_FORMAT(AFMT_S16_LE, 1, 0), + SND_FORMAT(AFMT_S16_LE, 2, 0), + SND_FORMAT(AFMT_A_LAW, 1, 0), + SND_FORMAT(AFMT_A_LAW, 2, 0), 0 }; static struct pcmchan_caps guspnp_caps = {4000, 48000, guspnp_fmt, 0}; static u_int32_t opti931_fmt[] = { - AFMT_U8, - AFMT_STEREO | AFMT_U8, - AFMT_S16_LE, - AFMT_STEREO | AFMT_S16_LE, + SND_FORMAT(AFMT_U8, 1, 0), + SND_FORMAT(AFMT_U8, 2, 0), + SND_FORMAT(AFMT_S16_LE, 1, 0), + SND_FORMAT(AFMT_S16_LE, 2, 0), 0 }; static struct pcmchan_caps opti931_caps = {4000, 48000, opti931_fmt, 0}; @@ -520,7 +524,7 @@ mssmix_set(struct snd_mixer *m, unsigned return left | (right << 8); } -static int +static u_int32_t mssmix_setrecsrc(struct snd_mixer *m, u_int32_t src) { struct mss_info *mss = mix_getdevinfo(m); @@ -535,7 +539,7 @@ static kobj_method_t mssmix_mixer_method KOBJMETHOD(mixer_init, mssmix_init), KOBJMETHOD(mixer_set, mssmix_set), KOBJMETHOD(mixer_setrecsrc, mssmix_setrecsrc), - { 0, 0 } + KOBJMETHOD_END }; MIXER_DECLARE(mssmix_mixer); @@ -604,7 +608,7 @@ ymmix_set(struct snd_mixer *m, unsigned return left | (right << 8); } -static int +static u_int32_t ymmix_setrecsrc(struct snd_mixer *m, u_int32_t src) { struct mss_info *mss = mix_getdevinfo(m); @@ -618,7 +622,7 @@ static kobj_method_t ymmix_mixer_methods KOBJMETHOD(mixer_init, ymmix_init), KOBJMETHOD(mixer_set, ymmix_set), KOBJMETHOD(mixer_setrecsrc, ymmix_setrecsrc), - { 0, 0 } + KOBJMETHOD_END }; MIXER_DECLARE(ymmix_mixer); @@ -997,7 +1001,7 @@ static int mss_format(struct mss_chinfo *ch, u_int32_t format) { struct mss_info *mss = ch->parent; - int i, arg = format & ~AFMT_STEREO; + int i, arg = AFMT_ENCODING(format); /* * The data format uses 3 bits (just 2 on the 1848). For each @@ -1014,7 +1018,7 @@ mss_format(struct mss_chinfo *ch, u_int3 ch->fmt = format; for (i = 0; i < 8; i++) if (arg == fmts[i]) break; arg = i << 1; - if (format & AFMT_STEREO) arg |= 1; + if (AFMT_CHANNEL(format) > 1) arg |= 1; arg <<= 4; ad_enter_MCE(mss); ad_write(mss, 8, (ad_read(mss, 8) & 0x0f) | arg); @@ -1035,7 +1039,7 @@ mss_trigger(struct mss_chinfo *ch, int g int retry, wr, cnt, ss; ss = 1; - ss <<= (ch->fmt & AFMT_STEREO)? 1 : 0; + ss <<= (AFMT_CHANNEL(ch->fmt) > 1)? 1 : 0; ss <<= (ch->fmt & AFMT_16BIT)? 1 : 0; wr = (ch->dir == PCMDIR_PLAY)? 1 : 0; @@ -1170,12 +1174,12 @@ msschan_setformat(kobj_t obj, void *data return 0; } -static int +static u_int32_t msschan_setspeed(kobj_t obj, void *data, u_int32_t speed) { struct mss_chinfo *ch = data; struct mss_info *mss = ch->parent; - int r; + u_int32_t r; mss_lock(mss); r = mss_speed(ch, speed); @@ -1184,7 +1188,7 @@ msschan_setspeed(kobj_t obj, void *data, return r; } -static int +static u_int32_t msschan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize) { struct mss_chinfo *ch = data; @@ -1211,7 +1215,7 @@ msschan_trigger(kobj_t obj, void *data, return 0; } -static int +static u_int32_t msschan_getptr(kobj_t obj, void *data) { struct mss_chinfo *ch = data; @@ -1247,7 +1251,7 @@ static kobj_method_t msschan_methods[] = KOBJMETHOD(channel_trigger, msschan_trigger), KOBJMETHOD(channel_getptr, msschan_getptr), KOBJMETHOD(channel_getcaps, msschan_getcaps), - { 0, 0 } + KOBJMETHOD_END }; CHANNEL_DECLARE(msschan); Modified: head/sys/dev/sound/isa/sb16.c ============================================================================== --- head/sys/dev/sound/isa/sb16.c Sun Jun 7 18:53:25 2009 (r193639) +++ head/sys/dev/sound/isa/sb16.c Sun Jun 7 19:12:08 2009 (r193640) @@ -29,6 +29,10 @@ * SUCH DAMAGE. */ +#ifdef HAVE_KERNEL_OPTION_HEADERS +#include "opt_snd.h" +#endif + #include #include @@ -44,24 +48,24 @@ SND_DECLARE_FILE("$FreeBSD$"); #define PLAIN_SB16(x) ((((x)->bd_flags) & (BD_F_SB16|BD_F_SB16X)) == BD_F_SB16) static u_int32_t sb16_fmt8[] = { - AFMT_U8, - AFMT_STEREO | AFMT_U8, + SND_FORMAT(AFMT_U8, 1, 0), + SND_FORMAT(AFMT_U8, 2, 0), 0 }; static struct pcmchan_caps sb16_caps8 = {5000, 45000, sb16_fmt8, 0}; static u_int32_t sb16_fmt16[] = { - AFMT_S16_LE, - AFMT_STEREO | AFMT_S16_LE, + SND_FORMAT(AFMT_S16_LE, 1, 0), + SND_FORMAT(AFMT_S16_LE, 2, 0), 0 }; static struct pcmchan_caps sb16_caps16 = {5000, 45000, sb16_fmt16, 0}; static u_int32_t sb16x_fmt[] = { - AFMT_U8, - AFMT_STEREO | AFMT_U8, - AFMT_S16_LE, - AFMT_STEREO | AFMT_S16_LE, + SND_FORMAT(AFMT_U8, 1, 0), + SND_FORMAT(AFMT_U8, 2, 0), + SND_FORMAT(AFMT_S16_LE, 1, 0), + SND_FORMAT(AFMT_S16_LE, 2, 0), 0 }; static struct pcmchan_caps sb16x_caps = {5000, 49000, sb16x_fmt, 0}; @@ -366,7 +370,7 @@ sb16mix_set(struct snd_mixer *m, unsigne return left | (right << 8); } -static int +static u_int32_t sb16mix_setrecsrc(struct snd_mixer *m, u_int32_t src) { struct sb_info *sb = mix_getdevinfo(m); @@ -420,7 +424,7 @@ static kobj_method_t sb16mix_mixer_metho KOBJMETHOD(mixer_init, sb16mix_init), KOBJMETHOD(mixer_set, sb16mix_set), KOBJMETHOD(mixer_setrecsrc, sb16mix_setrecsrc), - { 0, 0 } + KOBJMETHOD_END }; MIXER_DECLARE(sb16mix_mixer); @@ -633,7 +637,7 @@ sb_setup(struct sb_info *sb) v |= (ch->fmt & AFMT_16BIT)? DSP_DMA16 : DSP_DMA8; sb_cmd(sb, v); - v = (ch->fmt & AFMT_STEREO)? DSP_F16_STEREO : 0; + v = (AFMT_CHANNEL(ch->fmt) > 1)? DSP_F16_STEREO : 0; v |= (ch->fmt & AFMT_SIGNED)? DSP_F16_SIGNED : 0; sb_cmd2(sb, v, l); sndbuf_dma(ch->buffer, PCMTRIG_START); @@ -658,7 +662,7 @@ sb_setup(struct sb_info *sb) v |= (ch->fmt & AFMT_16BIT)? DSP_DMA16 : DSP_DMA8; sb_cmd(sb, v); - v = (ch->fmt & AFMT_STEREO)? DSP_F16_STEREO : 0; + v = (AFMT_CHANNEL(ch->fmt) > 1)? DSP_F16_STEREO : 0; v |= (ch->fmt & AFMT_SIGNED)? DSP_F16_SIGNED : 0; sb_cmd2(sb, v, l); sndbuf_dma(ch->buffer, PCMTRIG_START); @@ -700,7 +704,7 @@ sb16chan_setformat(kobj_t obj, void *dat return 0; } -static int +static u_int32_t sb16chan_setspeed(kobj_t obj, void *data, u_int32_t speed) { struct sb_chinfo *ch = data; @@ -709,7 +713,7 @@ sb16chan_setspeed(kobj_t obj, void *data return speed; } -static int +static u_int32_t sb16chan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize) { struct sb_chinfo *ch = data; @@ -737,7 +741,7 @@ sb16chan_trigger(kobj_t obj, void *data, return 0; } -static int +static u_int32_t sb16chan_getptr(kobj_t obj, void *data) { struct sb_chinfo *ch = data; @@ -777,7 +781,7 @@ static kobj_method_t sb16chan_methods[] KOBJMETHOD(channel_trigger, sb16chan_trigger), KOBJMETHOD(channel_getptr, sb16chan_getptr), KOBJMETHOD(channel_getcaps, sb16chan_getcaps), - { 0, 0 } + KOBJMETHOD_END }; CHANNEL_DECLARE(sb16chan); Modified: head/sys/dev/sound/isa/sb8.c ============================================================================== --- head/sys/dev/sound/isa/sb8.c Sun Jun 7 18:53:25 2009 (r193639) +++ head/sys/dev/sound/isa/sb8.c Sun Jun 7 19:12:08 2009 (r193640) @@ -29,6 +29,10 @@ * SUCH DAMAGE. */ +#ifdef HAVE_KERNEL_OPTION_HEADERS +#include "opt_snd.h" +#endif + #include #include @@ -43,7 +47,7 @@ SND_DECLARE_FILE("$FreeBSD$"); #define SB_DEFAULT_BUFSZ 4096 static u_int32_t sb_fmt[] = { - AFMT_U8, + SND_FORMAT(AFMT_U8, 1, 0), 0 }; static struct pcmchan_caps sb200_playcaps = {4000, 23000, sb_fmt, 0}; @@ -52,8 +56,8 @@ static struct pcmchan_caps sb201_playcap static struct pcmchan_caps sb201_reccaps = {4000, 15000, sb_fmt, 0}; static u_int32_t sbpro_fmt[] = { - AFMT_U8, - AFMT_STEREO | AFMT_U8, + SND_FORMAT(AFMT_U8, 1, 0), + SND_FORMAT(AFMT_U8, 2, 0), 0 }; static struct pcmchan_caps sbpro_playcaps = {4000, 44100, sbpro_fmt, 0}; @@ -372,7 +376,7 @@ sbpromix_set(struct snd_mixer *m, unsign return left | (right << 8); } -static int +static u_int32_t sbpromix_setrecsrc(struct snd_mixer *m, u_int32_t src) { struct sb_info *sb = mix_getdevinfo(m); @@ -395,7 +399,7 @@ static kobj_method_t sbpromix_mixer_meth KOBJMETHOD(mixer_init, sbpromix_init), KOBJMETHOD(mixer_set, sbpromix_set), KOBJMETHOD(mixer_setrecsrc, sbpromix_setrecsrc), - { 0, 0 } + KOBJMETHOD_END }; MIXER_DECLARE(sbpromix_mixer); @@ -453,7 +457,7 @@ sbmix_set(struct snd_mixer *m, unsigned return left | (left << 8); } -static int +static u_int32_t sbmix_setrecsrc(struct snd_mixer *m, u_int32_t src) { return 0; @@ -463,7 +467,7 @@ static kobj_method_t sbmix_mixer_methods KOBJMETHOD(mixer_init, sbmix_init), KOBJMETHOD(mixer_set, sbmix_set), KOBJMETHOD(mixer_setrecsrc, sbmix_setrecsrc), - { 0, 0 } + KOBJMETHOD_END }; MIXER_DECLARE(sbmix_mixer); @@ -496,7 +500,7 @@ sb_speed(struct sb_chinfo *ch) { struct sb_info *sb = ch->parent; int play = (ch->dir == PCMDIR_PLAY)? 1 : 0; - int stereo = (ch->fmt & AFMT_STEREO)? 1 : 0; + int stereo = (AFMT_CHANNEL(ch->fmt) > 1)? 1 : 0; int speed, tmp, thresh, max; u_char tconst; @@ -537,7 +541,7 @@ sb_start(struct sb_chinfo *ch) { struct sb_info *sb = ch->parent; int play = (ch->dir == PCMDIR_PLAY)? 1 : 0; - int stereo = (ch->fmt & AFMT_STEREO)? 1 : 0; + int stereo = (AFMT_CHANNEL(ch->fmt) > 1)? 1 : 0; int l = ch->blksz; u_char i; @@ -614,7 +618,7 @@ sbchan_setformat(kobj_t obj, void *data, return 0; } -static int +static u_int32_t sbchan_setspeed(kobj_t obj, void *data, u_int32_t speed) { struct sb_chinfo *ch = data; @@ -623,7 +627,7 @@ sbchan_setspeed(kobj_t obj, void *data, return sb_speed(ch); } -static int +static u_int32_t sbchan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize) { struct sb_chinfo *ch = data; @@ -648,7 +652,7 @@ sbchan_trigger(kobj_t obj, void *data, i return 0; } -static int +static u_int32_t sbchan_getptr(kobj_t obj, void *data) { struct sb_chinfo *ch = data; @@ -677,7 +681,7 @@ static kobj_method_t sbchan_methods[] = KOBJMETHOD(channel_trigger, sbchan_trigger), KOBJMETHOD(channel_getptr, sbchan_getptr), KOBJMETHOD(channel_getcaps, sbchan_getcaps), - { 0, 0 } + KOBJMETHOD_END }; CHANNEL_DECLARE(sbchan); Modified: head/sys/dev/sound/isa/sbc.c ============================================================================== --- head/sys/dev/sound/isa/sbc.c Sun Jun 7 18:53:25 2009 (r193639) +++ head/sys/dev/sound/isa/sbc.c Sun Jun 7 19:12:08 2009 (r193640) @@ -24,6 +24,10 @@ * SUCH DAMAGE. */ +#ifdef HAVE_KERNEL_OPTION_HEADERS +#include "opt_snd.h" +#endif + #include #include #include Modified: head/sys/dev/sound/isa/sndbuf_dma.c ============================================================================== --- head/sys/dev/sound/isa/sndbuf_dma.c Sun Jun 7 18:53:25 2009 (r193639) +++ head/sys/dev/sound/isa/sndbuf_dma.c Sun Jun 7 19:12:08 2009 (r193640) @@ -24,6 +24,10 @@ * SUCH DAMAGE. */ +#ifdef HAVE_KERNEL_OPTION_HEADERS +#include "opt_snd.h" +#endif + #include #include Modified: head/sys/dev/sound/macio/aoa.c ============================================================================== --- head/sys/dev/sound/macio/aoa.c Sun Jun 7 18:53:25 2009 (r193639) +++ head/sys/dev/sound/macio/aoa.c Sun Jun 7 19:12:08 2009 (r193640) @@ -43,8 +43,14 @@ #include #include #include + +#ifdef HAVE_KERNEL_OPTION_HEADERS +#include "opt_snd.h" +#endif + #include #include + #include "mixer_if.h" struct aoa_dma { @@ -138,7 +144,7 @@ aoa_dma_delete(struct aoa_dma *dma) free(dma, M_DEVBUF); } -static int +static u_int32_t aoa_chan_setblocksize(kobj_t obj, void *data, u_int32_t blocksz) { struct aoa_dma *dma = data; @@ -186,13 +192,13 @@ aoa_chan_setformat(kobj_t obj, void *dat { DPRINTF(("aoa_chan_setformat: format = %u\n", format)); - if (format != (AFMT_STEREO | AFMT_S16_BE)) + if (format != SND_FORMAT(AFMT_S16_BE, 2, 0)) return (EINVAL); return (0); } -static int +static u_int32_t aoa_chan_setspeed(kobj_t obj, void *data, u_int32_t speed) { DPRINTF(("aoa_chan_setspeed: speed = %u\n", speed)); @@ -200,7 +206,7 @@ aoa_chan_setspeed(kobj_t obj, void *data return (44100); } -static int +static u_int32_t aoa_chan_getptr(kobj_t obj, void *data) { struct aoa_dma *dma = data; @@ -332,7 +338,7 @@ aoa_interrupt(void *xsc) } static u_int32_t sc_fmt[] = { - AFMT_S16_BE | AFMT_STEREO, + SND_FORMAT(AFMT_S16_BE, 2, 0), 0 }; static struct pcmchan_caps aoa_caps = {44100, 44100, sc_fmt, 0}; @@ -352,7 +358,7 @@ static kobj_method_t aoa_chan_methods[] KOBJMETHOD(channel_trigger, aoa_chan_trigger), KOBJMETHOD(channel_getptr, aoa_chan_getptr), KOBJMETHOD(channel_getcaps, aoa_chan_getcaps), - { 0, 0 } + KOBJMETHOD_END }; CHANNEL_DECLARE(aoa_chan); Modified: head/sys/dev/sound/macio/davbus.c ============================================================================== --- head/sys/dev/sound/macio/davbus.c Sun Jun 7 18:53:25 2009 (r193639) +++ head/sys/dev/sound/macio/davbus.c Sun Jun 7 19:12:08 2009 (r193640) @@ -40,7 +40,13 @@ #include #include + +#ifdef HAVE_KERNEL_OPTION_HEADERS +#include "opt_snd.h" +#endif + #include + #include #include @@ -115,7 +121,7 @@ static void burgundy_set_outputs(struct static u_int burgundy_read_status(struct davbus_softc *d, u_int status); static int burgundy_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right); -static int burgundy_setrecsrc(struct snd_mixer *m, u_int32_t src); +static u_int32_t burgundy_setrecsrc(struct snd_mixer *m, u_int32_t src); static kobj_method_t burgundy_mixer_methods[] = { KOBJMETHOD(mixer_init, burgundy_init), @@ -123,7 +129,7 @@ static kobj_method_t burgundy_mixer_meth KOBJMETHOD(mixer_reinit, burgundy_reinit), KOBJMETHOD(mixer_set, burgundy_set), KOBJMETHOD(mixer_setrecsrc, burgundy_setrecsrc), - { 0, 0 } + KOBJMETHOD_END }; MIXER_DECLARE(burgundy_mixer); @@ -293,7 +299,7 @@ burgundy_set(struct snd_mixer *m, unsign return (0); } -static int +static u_int32_t burgundy_setrecsrc(struct snd_mixer *m, u_int32_t src) { return (0); @@ -311,7 +317,7 @@ static void screamer_set_outputs(struct static u_int screamer_read_status(struct davbus_softc *d, u_int status); static int screamer_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right); -static int screamer_setrecsrc(struct snd_mixer *m, u_int32_t src); +static u_int32_t screamer_setrecsrc(struct snd_mixer *m, u_int32_t src); static kobj_method_t screamer_mixer_methods[] = { KOBJMETHOD(mixer_init, screamer_init), @@ -319,7 +325,7 @@ static kobj_method_t screamer_mixer_meth KOBJMETHOD(mixer_reinit, screamer_reinit), KOBJMETHOD(mixer_set, screamer_set), KOBJMETHOD(mixer_setrecsrc, screamer_setrecsrc), - { 0, 0 } + KOBJMETHOD_END }; *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***