Merge branch 'linux-next' of git://git.infradead.org/ubifs-2.6
[pandora-kernel.git] / Documentation / sound / oss / Introduction
1 Introduction    Notes on Modular Sound Drivers and Soundcore
2 Wade Hampton 
3 2/14/2001
4
5 Purpose:  
6 ========
7 This document provides some general notes on the modular 
8 sound drivers and their configuration, along with the 
9 support modules sound.o and soundcore.o.
10
11 Note, some of this probably should be added to the Sound-HOWTO!
12
13 Note, soundlow.o was present with 2.2 kernels but is not 
14 required for 2.4.x kernels.  References have been removed
15 to this.
16
17
18 Copying:
19 ========
20 none
21
22
23 History:
24 ========
25 0.1.0  11/20/1998  First version, draft
26 1.0.0  11/1998     Alan Cox changes, incorporation in 2.2.0
27                    as Documentation/sound/oss/Introduction
28 1.1.0  6/30/1999   Second version, added notes on making the drivers,
29                    added info on multiple sound cards of similar types,]
30                    added more diagnostics info, added info about esd.
31                    added info on OSS and ALSA.
32 1.1.1  19991031    Added notes on sound-slot- and sound-service.
33                         (Alan Cox)
34 1.1.2  20000920    Modified for Kernel 2.4 (Christoph Hellwig)
35 1.1.3  20010214    Minor notes and corrections (Wade Hampton)
36                    Added examples of sound-slot-0, etc.
37
38
39 Modular Sound Drivers:
40 ======================
41
42 Thanks to the GREAT work by Alan Cox (alan@lxorguk.ukuu.org.uk),
43
44 [And Oleg Drokin, Thomas Sailer, Andrew Veliath and more than a few 
45  others - not to mention Hannu's original code being designed well
46  enough to cope with that kind of chopping up](Alan)
47
48 the standard Linux kernels support a modular sound driver.  From
49 Alan's comments in linux/drivers/sound/README.FIRST:
50
51   The modular sound driver patches were funded by Red Hat Software 
52   (www.redhat.com). The sound driver here is thus a modified version of 
53   Hannu's code. Please bear that in mind when considering the appropriate
54   forums for bug reporting.
55
56 The modular sound drivers may be loaded via insmod or modprobe.  
57 To support all the various sound modules, there are two general 
58 support modules that must be loaded first:
59  
60    soundcore.o:   Top level handler for the sound system, provides
61                   a set of functions for registration of devices
62                   by type.
63
64    sound.o:       Common sound functions required by all modules.
65
66 For the specific sound modules (e.g., sb.o for the Soundblaster), 
67 read the documentation on that module to determine what options
68 are available, for example IRQ, address, DMA.
69
70 Warning, the options for different cards sometime use different names 
71 for the same or a similar feature (dma1= versus dma16=).  As a last 
72 resort, inspect the code (search for module_param).
73
74 Notes:
75
76 1.  There is a new OpenSource sound driver called ALSA which is
77     currently under development:  http://www.alsa-project.org/
78     The ALSA drivers support some newer hardware that may not 
79     be supported by this sound driver and also provide some 
80     additional features.
81
82 2.  The commercial OSS driver may be obtained from the site:
83     http://www.opensound.com.  This may be used for cards that
84     are unsupported by the kernel driver, or may be used
85     by other operating systems.  
86
87 3.  The enlightenment sound daemon may be used for playing
88     multiple sounds at the same time via a single card, eliminating
89     some of the requirements for multiple sound card systems.  For
90     more information, see:  http://www.tux.org/~ricdude/EsounD.html  
91     The "esd" program may be used with the real-player and mpeg 
92     players like mpg123 and x11amp.  The newer real-player 
93     and some games even include built-in support for ESD!
94
95
96 Building the Modules:
97 =====================
98
99 This document does not provide full details on building the 
100 kernel, etc.  The notes below apply only to making the kernel
101 sound modules.   If this conflicts with the kernel's README,
102 the README takes precedence. 
103
104 1.  To make the kernel sound modules, cd to your /usr/src/linux
105     directory (typically) and type make config, make menuconfig, 
106     or make xconfig (to start the command line, dialog, or x-based
107     configuration tool).  
108
109 2.  Select the Sound option and a dialog will be displayed.  
110
111 3.  Select M (module) for "Sound card support".
112
113 4.  Select your sound driver(s) as a module.  For ProAudio, Sound
114     Blaster, etc., select M (module) for OSS sound modules.
115     [thanks to Marvin Stodolsky <stodolsk@erols.com>]A
116
117 5.  Make the kernel (e.g., make bzImage), and install the kernel.
118
119 6.  Make the modules and install them (make modules; make modules_install).
120
121 Note, for 2.5.x kernels, make sure you have the newer module-init-tools 
122 installed or modules will not be loaded properly.  2.5.x requires an
123 updated module-init-tools.
124
125
126 Plug and Play (PnP:
127 ===================
128
129 If the sound card is an ISA PnP card, isapnp may be used
130 to configure the card.  See the file isapnp.txt in the 
131 directory one level up (e.g., /usr/src/linux/Documentation).
132
133 Also the 2.4.x kernels provide PnP capabilities, see the 
134 file NEWS in this directory.
135
136 PCI sound cards are highly recommended, as they are far 
137 easier to configure and from what I have read, they use
138 less resources and are more CPU efficient.
139
140
141 INSMOD:
142 =======
143
144 If loading via insmod, the common modules must be loaded in the 
145 order below BEFORE loading the other sound modules.  The card-specific
146 modules may then be loaded (most require parameters).  For example,
147 I use the following via a shell script to load my SoundBlaster:
148
149 SB_BASE=0x240
150 SB_IRQ=9
151 SB_DMA=3
152 SB_DMA2=5
153 SB_MPU=0x300
154 #
155 echo Starting sound
156 /sbin/insmod soundcore
157 /sbin/insmod sound  
158 #
159 echo Starting sound blaster....
160 /sbin/insmod uart401
161 /sbin/insmod sb io=$SB_BASE irq=$SB_IRQ dma=$SB_DMA dma16=$SB_DMA2 mpu_io=$SB_MP
162
163 When using sound as a module, I typically put these commands
164 in a file such as /root/soundon.sh.
165
166
167 MODPROBE:
168 =========
169
170 If loading via modprobe, these common files are automatically loaded 
171 when requested by modprobe.  For example, my /etc/modprobe.conf contains:
172
173 alias sound sb 
174 options sb io=0x240 irq=9 dma=3 dma16=5 mpu_io=0x300
175
176 All you need to do to load the module is:
177
178         /sbin/modprobe sb
179
180
181 Sound Status:
182 =============
183
184 The status of sound may be read/checked by:
185         cat (anyfile).au >/dev/audio
186
187 [WWH:  This may not work properly for SoundBlaster PCI 128 cards
188 such as the es1370/1 (see the es1370/1 files in this directory) 
189 as they do not automatically support uLaw on /dev/audio.]
190
191 The status of the modules and which modules depend on 
192 which other modules may be checked by:
193         /sbin/lsmod
194
195 /sbin/lsmod should show something like the following:
196         sb                     26280   0 
197         uart401                 5640   0  [sb]
198         sound                  57112   0  [sb uart401]
199         soundcore               1968   8  [sb sound]
200
201
202 Removing Sound: 
203 =============== 
204
205 Sound may be removed by using /sbin/rmmod in the reverse order
206 in which you load the modules.  Note, if a program has a sound device
207 open (e.g., xmixer), that module (and the modules on which it 
208 depends) may not be unloaded.
209
210 For example, I use the following to remove my Soundblaster (rmmod
211 in the reverse order in which I loaded the modules):
212
213 /sbin/rmmod sb
214 /sbin/rmmod uart401
215 /sbin/rmmod sound
216 /sbin/rmmod soundcore
217
218 When using sound as a module, I typically put these commands
219 in a script such as /root/soundoff.sh.
220
221
222 Removing Sound for use with OSS: 
223 ================================ 
224
225 If you get really stuck or have a card that the kernel modules
226 will not support, you can get a commercial sound driver from
227 http://www.opensound.com.  Before loading the commercial sound
228 driver, you should do the following:
229
230 1.  remove sound modules (detailed above)
231 2.  remove the sound modules from /etc/modprobe.conf
232 3.  move the sound modules from /lib/modules/<kernel>/misc
233     (for example, I make a /lib/modules/<kernel>/misc/tmp
234     directory and copy the sound module files to that 
235     directory).
236
237
238 Multiple Sound Cards:
239 =====================
240
241 The sound drivers will support multiple sound cards and there
242 are some great applications like multitrack that support them.  
243 Typically, you need two sound cards of different types.  Note, this
244 uses more precious interrupts and DMA channels and sometimes 
245 can be a configuration nightmare.  I have heard reports of 3-4
246 sound cards (typically I only use 2).  You can sometimes use
247 multiple PCI sound cards of the same type.
248
249 On my machine I have two sound cards (cs4232 and Soundblaster Vibra
250 16).  By loading sound as modules, I can control which is the first
251 sound device (/dev/dsp, /dev/audio, /dev/mixer) and which is 
252 the second.  Normally, the cs4232 (Dell sound on the motherboard) 
253 would be the first sound device, but I prefer the Soundblaster.  
254 All you have to do is to load the one you want as /dev/dsp 
255 first (in my case "sb") and then load the other one
256 (in my case "cs4232").
257
258 If you have two cards of the same type that are jumpered 
259 cards or different PnP revisions, you may load the same 
260 module twice.  For example, I have a SoundBlaster vibra 16
261 and an older SoundBlaster 16 (jumpers).  To load the module
262 twice, you need to do the following:
263
264 1.  Copy the sound modules to a new name.  For example
265     sb.o could be copied (or symlinked) to sb1.o for the
266     second SoundBlaster.
267
268 2.  Make a second entry in /etc/modprobe.conf, for example,
269     sound1 or sb1.  This second entry should refer to the
270     new module names for example sb1, and should include
271     the I/O, etc. for the second sound card.
272
273 3.  Update your soundon.sh script, etc.
274
275 Warning:  I have never been able to get two PnP sound cards of the
276 same type to load at the same time.  I have tried this several times
277 with the Soundblaster Vibra 16 cards.  OSS has indicated that this
278 is a PnP problem....  If anyone has any luck doing this, please 
279 send me an E-MAIL.  PCI sound cards should not have this problem.a
280 Since this was originally release, I have received a couple of 
281 mails from people who have accomplished this!
282
283 NOTE: In Linux 2.4 the Sound Blaster driver (and only this one yet)
284 supports multiple cards with one module by default.
285 Read the file 'Soundblaster' in this directory for details.
286
287
288 Sound Problems:
289 ===============
290
291 First RTFM (including the troubleshooting section 
292 in the Sound-HOWTO). 
293
294 1)  If you are having problems loading the modules (for
295     example, if you get device conflict errors) try the
296     following:
297
298   A)  If you have Win95 or NT on the same computer,  
299       write down what addresses, IRQ, and DMA channels
300       those were using for the same hardware.  You probably 
301       can use these addresses, IRQs, and DMA channels.
302       You should really do this BEFORE attempting to get
303       sound working!
304   
305   B)  Check (cat) /proc/interrupts, /proc/ioports,
306       and /proc/dma.  Are you trying to use an address,
307       IRQ or DMA port that another device is using?
308   
309   C)  Check (cat) /proc/isapnp
310   
311   D)  Inspect your /var/log/messages file.  Often that will 
312       indicate what IRQ or IO port could not be obtained.
313   
314   E)  Try another port or IRQ.  Note this may involve 
315       using the PnP tools to move the sound card to 
316       another location.  Sometimes this is the only way 
317       and it is more or less trial and error.
318
319 2)  If you get motor-boating (the same sound or part of a 
320     sound clip repeated), you probably have either an IRQ
321     or DMA conflict.  Move the card to another IRQ or DMA
322     port.  This has happened to me when playing long files 
323     when I had an IRQ conflict.
324
325 3.  If you get dropouts or pauses when playing high sample
326     rate files such as using mpg123 or x11amp/xmms, you may 
327     have too slow of a CPU and may have to use the options to 
328     play the files at 1/2 speed.  For example, you may use
329     the -2 or -4 option on mpg123.  You may also get this
330     when trying to play mpeg files stored on a CD-ROM
331     (my Toshiba T8000 PII/366 sometimes has this problem).
332
333 4.  If you get "cannot access device" errors, your /dev/dsp
334     files, etc. may be set to owner root, mode 600.  You 
335     may have to use the command:
336       chmod 666 /dev/dsp /dev/mixer /dev/audio
337
338 5.  If you get "device busy" errors, another program has the
339     sound device open.  For example, if using the Enlightenment
340     sound daemon "esd", the "esd" program has the sound device.
341     If using "esd", please RTFM the docs on ESD.  For example,
342     esddsp <program> may be used to play files via a non-esd
343     aware program.
344
345 6)  Ask for help on the sound list or send E-MAIL to the
346     sound driver author/maintainer.
347
348 7)  Turn on debug in drivers/sound/sound_config.h (DEB, DDB, MDB).
349
350 8)  If the system reports insufficient DMA memory then you may want to
351     load sound with the "dmabufs=1" option. Or in /etc/conf.modules add
352         
353         preinstall sound dmabufs=1
354
355     This makes the sound system allocate its buffers and hang onto them.
356
357     You may also set persistent DMA when building a 2.4.x kernel.
358
359
360 Configuring Sound:
361 ==================
362
363 There are several ways of configuring your sound:
364
365 1)  On the kernel command line (when using the sound driver(s)
366     compiled in the kernel). Check the driver source and
367     documentation for details.
368
369 2)  On the command line when using insmod or in a bash script
370     using command line calls to load sound.
371
372 3)  In /etc/modprobe.conf when using modprobe.
373
374 4)  Via Red Hat's GPL'd /usr/sbin/sndconfig program (text based).
375
376 5)  Via the OSS soundconf program (with the commercial version
377     of the OSS driver.
378
379 6)  By just loading the module and let isapnp do everything relevant
380     for you. This works only with a few drivers yet and - of course -
381     only with isapnp hardware.
382
383 And I am sure, several other ways.  
384
385 Anyone want to write a linuxconf module for configuring sound?
386
387
388 Module Loading:
389 ===============
390
391 When a sound card is first referenced and sound is modular, the sound system
392 will ask for the sound devices to be loaded. Initially it requests that
393 the driver for the sound system is loaded. It then will ask for 
394 sound-slot-0, where 0 is the first sound card. (sound-slot-1 the second and
395 so on). Thus you can do
396
397 alias sound-slot-0 sb
398
399 To load a soundblaster at this point. If the slot loading does not provide
400 the desired device - for example a soundblaster does not directly provide
401 a midi synth in all cases then it will request "sound-service-0-n" where n
402 is
403
404   0     Mixer
405
406   2     MIDI
407
408   3, 4  DSP audio
409
410
411 For example, I use the following to load my Soundblaster PCI 128
412 (ES 1371) card first, followed by my SoundBlaster Vibra 16 card,
413 then by my TV card:
414
415 # Load the Soundblaster PCI 128 as /dev/dsp, /dev/dsp1, /dev/mixer
416 alias sound-slot-0 es1371
417
418 # Load the Soundblaster Vibra 16 as /dev/dsp2, /dev/mixer1
419 alias sound-slot-1 sb
420 options sb io=0x240 irq=5 dma=1 dma16=5 mpu_io=0x330
421
422 # Load the BTTV (TV card) as /dev/mixer2
423 alias sound-slot-2 bttv
424 alias sound-service-2-0 tvmixer
425
426 pre-install bttv  modprobe tuner ; modprobe tvmixer
427 pre-install tvmixer modprobe msp3400; modprobe tvaudio 
428 options tuner debug=0 type=8 
429 options bttv  card=0 radio=0 pll=0
430
431
432 For More Information (RTFM):
433 ============================
434 1)  Information on kernel modules: manual pages for insmod and modprobe.
435
436 2)  Information on PnP, RTFM manual pages for isapnp.
437
438 3)  Sound-HOWTO and Sound-Playing-HOWTO.
439
440 4)  OSS's WWW site at http://www.opensound.com.
441
442 5)  All the files in Documentation/sound.
443
444 6)  The comments and code in linux/drivers/sound.
445
446 7)  The sndconfig and rhsound documentation from Red Hat.
447
448 8)  The Linux-sound mailing list:  sound-list@redhat.com.
449
450 9)  Enlightenment documentation (for info on esd)
451     http://www.tux.org/~ricdude/EsounD.html.
452
453 10) ALSA home page:  http://www.alsa-project.org/
454
455
456 Contact Information:
457 ====================
458 Wade Hampton:  (whampton@staffnet.com)
459