 1da177e4c3
			
		
	
	
	1da177e4c3
	
	
	
		
			
			Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
		
			
				
	
	
		
			138 lines
		
	
	
	
		
			5.6 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
	
		
			5.6 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
| 
 | |
| Documentation for the Cirrus Logic/Crystal SoundFusion cs46xx/cs4280 audio 
 | |
| controller chips (2001/05/11)
 | |
| 
 | |
| The cs46xx audio driver supports the DSP line of Cirrus controllers. 
 | |
| Specifically, the cs4610, cs4612, cs4614, cs4622, cs4624, cs4630 and the cs4280
 | |
| products.  This driver uses the generic ac97_codec driver for AC97 codec
 | |
| support.  
 | |
| 
 | |
| 
 | |
| Features:
 | |
| 
 | |
| Full Duplex Playback/Capture supported from 8k-48k.
 | |
| 16Bit Signed LE & 8Bit Unsigned, with Mono or Stereo supported.
 | |
| 
 | |
| APM/PM - 2.2.x PM is enabled and functional. APM can also
 | |
| be enabled for 2.4.x by modifying the CS46XX_ACPI_SUPPORT macro
 | |
| definition.
 | |
| 
 | |
| DMA playback buffer size is configurable from 16k (defaultorder=2) up to 2Meg 
 | |
| (defaultorder=11).  DMA capture buffer size is fixed at a single 4k page as
 | |
| two 2k fragments.
 | |
| 
 | |
| MMAP seems to work well with QuakeIII, and test XMMS plugin.
 | |
| 
 | |
| Myth2 works, but the polling logic is not fully correct, but is functional.
 | |
| 
 | |
| The 2.4.4-ac6 gameport code in the cs461x joystick driver has been tested 
 | |
| with a Microsoft Sidewinder joystick (cs461x.o and sidewinder.o).  This 
 | |
| audio driver must be loaded prior to the joystick driver to enable the
 | |
| DSP task image supporting the joystick device.
 | |
| 
 | |
| 
 | |
| Limitations:
 | |
| 
 | |
| SPDIF is currently not supported.
 | |
| 
 | |
| Primary codec support only.  No secondary codec support is implemented.
 | |
| 
 | |
| 
 | |
| 
 | |
| NOTES:
 | |
| 
 | |
| Hercules Game Theatre XP - the EGPIO2 pin controls the external Amp,
 | |
| and has been tested.
 | |
| Module parameter hercules_egpio_disable set to 1, will force a 0 to EGPIODR
 | |
| to disable the external amplifier.
 | |
| 
 | |
| VTB Santa Cruz - the GPIO7/GPIO8 on the Secondary Codec control
 | |
| the external amplifier for the "back" speakers, since we do not
 | |
| support the secondary codec then this external amp is not
 | |
| turned on.  The primary codec external amplifier is supported but
 | |
| note that the AC97 EAPD bit is inverted logic (amp_voyetra()).
 | |
| 
 | |
| DMA buffer size - there are issues with many of the Linux applications
 | |
| concerning the optimal buffer size.  Several applications request a 
 | |
| certain fragment size and number and then do not verify that the driver
 | |
| has the ability to support the requested configuration.  
 | |
| SNDCTL_DSP_SETFRAGMENT ioctl is used to request a fragment size and
 | |
| number of fragments.  Some applications exit if an error is returned
 | |
| on this particular ioctl. Therefore, in alignment with the other OSS audio 
 | |
| drivers, no error is returned when a SETFRAGs IOCTL is received, but the 
 | |
| values passed from the app are not used in any buffer calculation 
 | |
| (ossfragshift/ossmaxfrags are not used).
 | |
| Use the "defaultorder=N" module parameter to change the buffer size if
 | |
| you have an application that requires a specific number of fragments
 | |
| or a specific buffer size (see below).
 | |
| 
 | |
| Debug Interface
 | |
| ---------------
 | |
| There is an ioctl debug interface to allow runtime modification of the 
 | |
| debug print levels.  This debug interface code can be disabled from the 
 | |
| compilation process with commenting the following define:
 | |
| #define CSDEBUG_INTERFACE 1
 | |
| There is also a debug print methodolgy to select printf statements from
 | |
| different areas of the driver.  A debug print level is also used to allow
 | |
| additional printfs to be active.  Comment out the following line in the
 | |
| driver to disable compilation of the CS_DBGOUT print statements:
 | |
| #define CSDEBUG 1
 | |
|  
 | |
| Please see the definitions for cs_debuglevel and cs_debugmask for additional
 | |
| information on the debug levels and sections.
 | |
| 
 | |
| There is also a csdbg executable to allow runtime manipulation of these 
 | |
| parameters.  for a copy email: twoller@crystal.cirrus.com
 | |
| 
 | |
| 
 | |
| 
 | |
| MODULE_PARMS definitions
 | |
| ------------------------
 | |
| MODULE_PARM(defaultorder, "i");
 | |
| defaultorder=N
 | |
| where N is a value from 1 to 12
 | |
| The buffer order determines the size of the dma buffer for the driver.
 | |
| under Linux, a smaller buffer allows more responsiveness from many of the 
 | |
| applications (e.g. games).  A larger buffer allows some of the apps (esound) 
 | |
| to not underrun the dma buffer as easily.  As default, use 32k (order=3)
 | |
| rather than 64k as some of the games work more responsively.
 | |
| (2^N) * PAGE_SIZE = allocated buffer size
 | |
| 
 | |
| MODULE_PARM(cs_debuglevel, "i");
 | |
| MODULE_PARM(cs_debugmask, "i");
 | |
| cs_debuglevel=N
 | |
| cs_debugmask=0xMMMMMMMM
 | |
| where N is a value from 0 (no debug printfs), to 9 (maximum)
 | |
| 0xMMMMMMMM is a debug mask corresponding to the CS_xxx bits (see driver source).
 | |
| 
 | |
| MODULE_PARM(hercules_egpio_disable, "i");
 | |
| hercules_egpio_disable=N
 | |
| where N is a 0 (enable egpio), or a 1 (disable egpio support)
 | |
| 
 | |
| MODULE_PARM(initdelay, "i");
 | |
| initdelay=N
 | |
| This value is used to determine the millescond delay during the initialization
 | |
| code prior to powering up the PLL.  On laptops this value can be used to
 | |
| assist with errors on resume, mostly with IBM laptops.  Basically, if the 
 | |
| system is booted under battery power then the mdelay()/udelay() functions fail to 
 | |
| properly delay the required time.  Also, if the system is booted under AC power
 | |
| and then the power removed, the mdelay()/udelay() functions will not delay properly.
 | |
|  
 | |
| MODULE_PARM(powerdown, "i");
 | |
| powerdown=N
 | |
| where N is 0 (disable any powerdown of the internal blocks) or 1 (enable powerdown)
 | |
| 
 | |
| 
 | |
| MODULE_PARM(external_amp, "i");
 | |
| external_amp=1
 | |
| if N is set to 1, then force enabling the EAPD support in the primary AC97 codec.
 | |
| override the detection logic and force the external amp bit in the AC97 0x26 register
 | |
| to be reset (0).  EAPD should be 0 for powerup, and 1 for powerdown.  The VTB Santa Cruz
 | |
| card has inverted logic, so there is a special function for these cards.
 | |
| 
 | |
| MODULE_PARM(thinkpad, "i");
 | |
| thinkpad=1
 | |
| if N is set to 1, then force enabling the clkrun functionality.
 | |
| Currently, when the part is being used, then clkrun is disabled for the entire system,
 | |
| but re-enabled when the driver is released or there is no outstanding open count.
 | |
| 
 |