cs46xx
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:6k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. Documentation for the Cirrus Logic/Crystal SoundFusion cs46xx/cs4280 audio 
  2. controller chips (2001/05/11)
  3. The cs46xx audio driver supports the DSP line of Cirrus controllers. 
  4. Specifically, the cs4610, cs4612, cs4614, cs4622, cs4624, cs4630 and the cs4280
  5. products.  This driver uses the generic ac97_codec driver for AC97 codec
  6. support.  
  7. Features:
  8. Full Duplex Playback/Capture supported from 8k-48k.
  9. 16Bit Signed LE & 8Bit Unsigned, with Mono or Stereo supported.
  10. APM/PM - 2.2.x PM is enabled and functional. APM can also
  11. be enabled for 2.4.x by modifying the CS46XX_ACPI_SUPPORT macro
  12. definition.
  13. DMA playback buffer size is configurable from 16k (defaultorder=2) up to 2Meg 
  14. (defaultorder=11).  DMA capture buffer size is fixed at a single 4k page as
  15. two 2k fragments.
  16. MMAP seems to work well with QuakeIII, and test XMMS plugin.
  17. Myth2 works, but the polling logic is not fully correct, but is functional.
  18. The 2.4.4-ac6 gameport code in the cs461x joystick driver has been tested 
  19. with a Microsoft Sidewinder joystick (cs461x.o and sidewinder.o).  This 
  20. audio driver must be loaded prior to the joystick driver to enable the
  21. DSP task image supporting the joystick device.
  22. Limitations:
  23. SPDIF is currently not supported.
  24. Primary codec support only.  No secondary codec support is implemented.
  25. NOTES:
  26. Hercules Game Theatre XP - the EGPIO2 pin controls the external Amp,
  27. and has been tested.
  28. Module parameter hercules_egpio_disable set to 1, will force a 0 to EGPIODR
  29. to disable the external amplifier.
  30. VTB Santa Cruz - the GPIO7/GPIO8 on the Secondary Codec control
  31. the external amplifier for the "back" speakers, since we do not
  32. support the secondary codec then this external amp is not
  33. turned on.  The primary codec external amplifier is supported but
  34. note that the AC97 EAPD bit is inverted logic (amp_voyetra()).
  35. DMA buffer size - there are issues with many of the Linux applications
  36. concerning the optimal buffer size.  Several applications request a 
  37. certain fragment size and number and then do not verify that the driver
  38. has the ability to support the requested configuration.  
  39. SNDCTL_DSP_SETFRAGMENT ioctl is used to request a fragment size and
  40. number of fragments.  Some applications exit if an error is returned
  41. on this particular ioctl. Therefore, in alignment with the other OSS audio 
  42. drivers, no error is returned when a SETFRAGs IOCTL is received, but the 
  43. values passed from the app are not used in any buffer calculation 
  44. (ossfragshift/ossmaxfrags are not used).
  45. Use the "defaultorder=N" module parameter to change the buffer size if
  46. you have an application that requires a specific number of fragments
  47. or a specific buffer size (see below).
  48. Debug Interface
  49. ---------------
  50. There is an ioctl debug interface to allow runtime modification of the 
  51. debug print levels.  This debug interface code can be disabled from the 
  52. compilation process with commenting the following define:
  53. #define CSDEBUG_INTERFACE 1
  54. There is also a debug print methodolgy to select printf statements from
  55. different areas of the driver.  A debug print level is also used to allow
  56. additional printfs to be active.  Comment out the following line in the
  57. driver to disable compilation of the CS_DBGOUT print statements:
  58. #define CSDEBUG 1
  59.  
  60. Please see the defintions for cs_debuglevel and cs_debugmask for additional
  61. information on the debug levels and sections.
  62. There is also a csdbg executable to allow runtime manipulation of these 
  63. parameters.  for a copy email: twoller@crystal.cirrus.com
  64. MODULE_PARMS definitions
  65. ------------------------
  66. MODULE_PARM(defaultorder, "i");
  67. defaultorder=N
  68. where N is a value from 1 to 12
  69. The buffer order determines the size of the dma buffer for the driver.
  70. under Linux, a smaller buffer allows more responsiveness from many of the 
  71. applications (e.g. games).  A larger buffer allows some of the apps (esound) 
  72. to not underrun the dma buffer as easily.  As default, use 32k (order=3)
  73. rather than 64k as some of the games work more responsively.
  74. (2^N) * PAGE_SIZE = allocated buffer size
  75. MODULE_PARM(cs_debuglevel, "i");
  76. MODULE_PARM(cs_debugmask, "i");
  77. cs_debuglevel=N
  78. cs_debugmask=0xMMMMMMMM
  79. where N is a value from 0 (no debug printfs), to 9 (maximum)
  80. 0xMMMMMMMM is a debug mask corresponding to the CS_xxx bits (see driver source).
  81. MODULE_PARM(hercules_egpio_disable, "i");
  82. hercules_egpio_disable=N
  83. where N is a 0 (enable egpio), or a 1 (disable egpio support)
  84. MODULE_PARM(initdelay, "i");
  85. initdelay=N
  86. This value is used to determine the millescond delay during the initialization
  87. code prior to powering up the PLL.  On laptops this value can be used to
  88. assist with errors on resume, mostly with IBM laptops.  Basically, if the 
  89. system is booted under battery power then the mdelay()/udelay() functions fail to 
  90. properly delay the required time.  Also, if the system is booted under AC power
  91. and then the power removed, the mdelay()/udelay() functions will not delay properly.
  92.  
  93. MODULE_PARM(powerdown, "i");
  94. powerdown=N
  95. where N is 0 (disable any powerdown of the internal blocks) or 1 (enable powerdown)
  96. MODULE_PARM(external_amp, "i");
  97. external_amp=1
  98. if N is set to 1, then force enabling the EAPD support in the primary AC97 codec.
  99. override the detection logic and force the external amp bit in the AC97 0x26 register
  100. to be reset (0).  EAPD should be 0 for powerup, and 1 for powerdown.  The VTB Santa Cruz
  101. card has inverted logic, so there is a special function for these cards.
  102. MODULE_PARM(thinkpad, "i");
  103. thinkpad=1
  104. if N is set to 1, then force enabling the clkrun functionality.
  105. Currently, when the part is being used, then clkrun is disabled for the entire system,
  106. but re-enabled when the driver is released or there is no outstanding open count.