| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | Support for the OPTi 82C931 chip | 
					
						
							|  |  |  | -------------------------------- | 
					
						
							|  |  |  | Note: parts of this README file apply also to other | 
					
						
							|  |  |  | cards that use the mad16 driver. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Some items in this README file are based on features | 
					
						
							|  |  |  | added to the sound driver after Linux-2.1.91 was out. | 
					
						
							|  |  |  | By the time of writing this I do not know which official | 
					
						
							|  |  |  | kernel release will include these features. | 
					
						
							|  |  |  | Please do not report inconsistencies on older Linux | 
					
						
							|  |  |  | kernels. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The OPTi 82C931 is supported in its non-PnP mode. | 
					
						
							|  |  |  | Usually you do not need to set jumpers, etc. The sound driver | 
					
						
							|  |  |  | will check the card status and if it is required it will | 
					
						
							|  |  |  | force the card into a mode in which it can be programmed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you have another OS installed on your computer it is recommended | 
					
						
							|  |  |  | that Linux and the other OS use the same resources. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-30 13:37:16 -07:00
										 |  |  | Also, it is recommended that resources specified in /etc/modprobe.d/*.conf | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | and resources specified in /etc/isapnp.conf agree. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Compiling the sound driver | 
					
						
							|  |  |  | -------------------------- | 
					
						
							|  |  |  | I highly recommend that you build a modularized sound driver. | 
					
						
							|  |  |  | This document does not cover a sound-driver which is built in | 
					
						
							|  |  |  | the kernel. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Sound card support should be enabled as a module (chose m). | 
					
						
							|  |  |  | Answer 'm' for  these items: | 
					
						
							|  |  |  |   Generic OPL2/OPL3 FM synthesizer support		(CONFIG_SOUND_ADLIB) | 
					
						
							|  |  |  |   Microsoft Sound System support			(CONFIG_SOUND_MSS) | 
					
						
							|  |  |  |   Support for OPTi MAD16 and/or Mozart based cards	(CONFIG_SOUND_MAD16) | 
					
						
							|  |  |  |   FM synthesizer (YM3812/OPL-3) support			(CONFIG_SOUND_YM3812) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The configuration menu may ask for addresses, IRQ lines or DMA | 
					
						
							|  |  |  | channels. If the card is used as a module the module loading | 
					
						
							|  |  |  | options will override these values. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For the OPTi 931 you can answer 'n' to: | 
					
						
							|  |  |  |   Support MIDI in older MAD16 based cards (requires SB)	(CONFIG_SOUND_MAD16_OLDCARD) | 
					
						
							|  |  |  | If you do need MIDI support in a Mozart or C928 based card you | 
					
						
							|  |  |  | need to answer 'm' to the above question. In that case you will | 
					
						
							|  |  |  | also need to answer 'm' to: | 
					
						
							|  |  |  |   '100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support' (CONFIG_SOUND_SB) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Go on and compile your kernel and modules. Install the modules. Run depmod -a. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Using isapnptools | 
					
						
							|  |  |  | ----------------- | 
					
						
							|  |  |  | In most systems with a PnP BIOS you do not need to use isapnp. The | 
					
						
							|  |  |  | initialization provided by the BIOS is sufficient for the driver | 
					
						
							|  |  |  | to pick up the card and continue initialization. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If that fails, or if you have other PnP cards, you need to use isapnp | 
					
						
							|  |  |  | to initialize the card. | 
					
						
							|  |  |  | This was tested with isapnptools-1.11 but I recommend that you use | 
					
						
							|  |  |  | isapnptools-1.13 (or newer). Run pnpdump to dump the information | 
					
						
							|  |  |  | about your PnP cards. Then edit the resulting file and select | 
					
						
							|  |  |  | the options of your choice. This file is normally installed as | 
					
						
							|  |  |  | /etc/isapnp.conf. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The driver has one limitation with respect to I/O port resources: | 
					
						
							|  |  |  | IO3 base must be 0x0E0C.  Although isapnp allows other ports, this | 
					
						
							|  |  |  | address is hard-coded into the driver. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Using kmod and autoloading the sound driver | 
					
						
							|  |  |  | ------------------------------------------- | 
					
						
							| 
									
										
										
										
											2012-03-30 13:37:16 -07:00
										 |  |  | Config files in '/etc/modprobe.d/' are used as below: | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | alias mixer0 mad16 | 
					
						
							|  |  |  | alias audio0 mad16 | 
					
						
							|  |  |  | alias midi0  mad16 | 
					
						
							|  |  |  | alias synth0 opl3 | 
					
						
							|  |  |  | options sb mad16=1 | 
					
						
							|  |  |  | options mad16 irq=10 dma=0 dma16=1 io=0x530 joystick=1 cdtype=0 | 
					
						
							|  |  |  | options opl3 io=0x388 | 
					
						
							|  |  |  | install mad16 /sbin/modprobe -i mad16 && /sbin/ad1848_mixer_reroute 14 8 15 3 16 6 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you have an MPU daughtercard or onboard MPU you will want to add to the | 
					
						
							|  |  |  | "options mad16" line - eg  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | options mad16 irq=5 dma=0 dma16=3 io=0x530 mpu_io=0x330 mpu_irq=9 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | To set the I/O and IRQ of the MPU. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Explain: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | alias mixer0 mad16 | 
					
						
							|  |  |  | alias audio0 mad16 | 
					
						
							|  |  |  | alias midi0  mad16 | 
					
						
							|  |  |  | alias synth0 opl3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When any sound device is opened the kernel requests auto-loading | 
					
						
							|  |  |  | of char-major-14. There is a built-in alias that translates this | 
					
						
							|  |  |  | request to loading the main sound module. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The sound module in its turn will request loading of a sub-driver | 
					
						
							|  |  |  | for mixer, audio, midi or synthesizer device. The first 3 are | 
					
						
							|  |  |  | supported by the mad16 driver. The synth device is supported | 
					
						
							|  |  |  | by the opl3 driver. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | There is currently no way to autoload the sound device driver | 
					
						
							|  |  |  | if more than one card is installed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | options sb mad16=1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This is left for historical reasons. If you enable the | 
					
						
							|  |  |  | config option 'Support MIDI in older MAD16 based cards (requires SB)' | 
					
						
							|  |  |  | or if you use an older mad16 driver it will force loading of the | 
					
						
							|  |  |  | SoundBlaster driver. This option tells the SB driver not to look | 
					
						
							|  |  |  | for a SB card but to wait for the mad16 driver. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | options mad16 irq=10 dma=0 dma16=1 io=0x530 joystick=1 cdtype=0 | 
					
						
							|  |  |  | options opl3 io=0x388 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | post-install mad16 /sbin/ad1848_mixer_reroute 14 8 15 3 16 6 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This sets resources and options for the mad16 and opl3 drivers. | 
					
						
							|  |  |  | I use two DMA channels (only one is required) to enable full duplex. | 
					
						
							|  |  |  | joystick=1 enables the joystick port. cdtype=0 disables the cd port. | 
					
						
							|  |  |  | You can also set mpu_io and mpu_irq in the mad16 options for the | 
					
						
							|  |  |  | uart401 driver. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This tells modprobe to run /sbin/ad1848_mixer_reroute after | 
					
						
							|  |  |  | mad16 is successfully loaded and initialized. The source | 
					
						
							|  |  |  | for ad1848_mixer_reroute is appended to the end of this readme | 
					
						
							|  |  |  | file. It is impossible for the sound driver to know the actual | 
					
						
							|  |  |  | connections to the mixer. The 3 inputs intended for cd, synth | 
					
						
							|  |  |  | and line-in are mapped to the generic inputs line1, line2 and | 
					
						
							|  |  |  | line3. This program reroutes these mixer channels to their | 
					
						
							|  |  |  | right names (note the right mapping depends on the actual sound | 
					
						
							|  |  |  | card that you use). | 
					
						
							|  |  |  | The numeric parameters mean: | 
					
						
							|  |  |  |  14=line1 8=cd    - reroute line1 to the CD input. | 
					
						
							|  |  |  |  15=line2 3=synth - reroute line2 to the synthesizer input. | 
					
						
							|  |  |  |  16=line3 6=line  - reroute line3 to the line input. | 
					
						
							|  |  |  | For reference on other input names look at the file | 
					
						
							|  |  |  | /usr/include/linux/soundcard.h. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Using a joystick | 
					
						
							|  |  |  | ----------------- | 
					
						
							|  |  |  | You must enable a joystick in the mad16 options. (also | 
					
						
							|  |  |  | in /etc/isapnp.conf if you use it). | 
					
						
							|  |  |  | Tested with regular analog joysticks. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A CDROM drive connected to the sound card | 
					
						
							|  |  |  | ----------------------------------------- | 
					
						
							|  |  |  | The 82C931 chip has support only for secondary ATAPI cdrom. | 
					
						
							|  |  |  | (cdtype=8). Loading the mad16 driver resets the C931 chip | 
					
						
							|  |  |  | and if a cdrom was already mounted it may cause a complete | 
					
						
							|  |  |  | system hang. Do not use the sound card if you have an alternative. | 
					
						
							|  |  |  | If you do use the sound card it is important that you load | 
					
						
							|  |  |  | the mad16 driver (use "modprobe mad16" to prevent auto-unloading) | 
					
						
							|  |  |  | before the cdrom is accessed the first time. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Using the sound driver built-in to the kernel may help here, but... | 
					
						
							|  |  |  | Most new systems have a PnP BIOS and also two IDE controllers. | 
					
						
							|  |  |  | The IDE controller on the sound card may be needed only on older | 
					
						
							|  |  |  | systems (which have only one IDE controller) but these systems | 
					
						
							|  |  |  | also do not have a PnP BIOS - requiring isapnptools and a modularized | 
					
						
							|  |  |  | driver. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Known problems | 
					
						
							|  |  |  | -------------- | 
					
						
							|  |  |  | 1. See the section on "A CDROM drive connected to the sound card". | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 2. On my system the codec cannot capture companded sound samples. | 
					
						
							|  |  |  |    (eg., recording from /dev/audio). When any companded capture is | 
					
						
							|  |  |  |    requested I get stereo-16 bit samples instead. Playback of | 
					
						
							|  |  |  |    companded samples works well. Apparently this problem is not common | 
					
						
							|  |  |  |    to all C931 based cards. I do not know how to identify cards that | 
					
						
							|  |  |  |    have this problem. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Source for ad1848_mixer_reroute.c | 
					
						
							|  |  |  | --------------------------------- | 
					
						
							|  |  |  | #include <stdio.h> | 
					
						
							|  |  |  | #include <fcntl.h> | 
					
						
							|  |  |  | #include <linux/soundcard.h> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static char *mixer_names[SOUND_MIXER_NRDEVICES] = | 
					
						
							|  |  |  | 	SOUND_DEVICE_LABELS; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int | 
					
						
							|  |  |  | main(int argc, char **argv) { | 
					
						
							|  |  |  | 	int val, from, to; | 
					
						
							|  |  |  | 	int i, fd; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fd = open("/dev/mixer", O_RDWR); | 
					
						
							|  |  |  | 	if(fd < 0) { | 
					
						
							|  |  |  | 		perror("/dev/mixer"); | 
					
						
							|  |  |  | 		return 1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for(i = 2; i < argc; i += 2) { | 
					
						
							|  |  |  | 		from = atoi(argv[i-1]); | 
					
						
							|  |  |  | 		to = atoi(argv[i]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if(to == SOUND_MIXER_NONE) | 
					
						
							|  |  |  | 			fprintf(stderr, "%s: turning off mixer %s\n", | 
					
						
							|  |  |  | 				argv[0], mixer_names[to]); | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			fprintf(stderr, "%s: rerouting mixer %s to %s\n", | 
					
						
							|  |  |  | 				argv[0], mixer_names[from], mixer_names[to]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		val = from << 8 | to; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if(ioctl(fd, SOUND_MIXER_PRIVATE2, &val)) { | 
					
						
							|  |  |  | 			perror("AD1848 mixer reroute"); | 
					
						
							|  |  |  | 			return 1; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 |