cs4281m.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:133k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*******************************************************************************
  2. *
  3. *      "cs4281m.c" --  Cirrus Logic-Crystal CS4281 linux audio driver.
  4. *
  5. *      Copyright (C) 2000,2001  Cirrus Logic Corp.  
  6. *            -- adapted from drivers by Thomas Sailer, 
  7. *            -- but don't bug him; Problems should go to:
  8. *            -- tom woller (twoller@crystal.cirrus.com) or
  9. *               (pcaudio@crystal.cirrus.com).
  10. *
  11. *      This program is free software; you can redistribute it and/or modify
  12. *      it under the terms of the GNU General Public License as published by
  13. *      the Free Software Foundation; either version 2 of the License, or
  14. *      (at your option) any later version.
  15. *
  16. *      This program is distributed in the hope that it will be useful,
  17. *      but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19. *      GNU General Public License for more details.
  20. *
  21. *      You should have received a copy of the GNU General Public License
  22. *      along with this program; if not, write to the Free Software
  23. *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  24. *
  25. * Module command line parameters:
  26. *   none
  27. *
  28. *  Supported devices:
  29. *  /dev/dsp    standard /dev/dsp device, (mostly) OSS compatible
  30. *  /dev/mixer  standard /dev/mixer device, (mostly) OSS compatible
  31. *  /dev/midi   simple MIDI UART interface, no ioctl
  32. *
  33. * Modification History
  34. * 08/20/00 trw - silence and no stopping DAC until release
  35. * 08/23/00 trw - added CS_DBG statements, fix interrupt hang issue on DAC stop.
  36. * 09/18/00 trw - added 16bit only record with conversion 
  37. * 09/24/00 trw - added Enhanced Full duplex (separate simultaneous 
  38. *                capture/playback rates)
  39. * 10/03/00 trw - fixed mmap (fixed GRECORD and the XMMS mmap test plugin  
  40. *                libOSSm.so)
  41. * 10/11/00 trw - modified for 2.4.0-test9 kernel enhancements (NR_MAP removal)
  42. * 11/03/00 trw - fixed interrupt loss/stutter, added debug.
  43. * 11/10/00 bkz - added __devinit to cs4281_hw_init()
  44. * 11/10/00 trw - fixed SMP and capture spinlock hang.
  45. * 12/04/00 trw - cleaned up CSDEBUG flags and added "defaultorder" moduleparm.
  46. * 12/05/00 trw - fixed polling (myth2), and added underrun swptr fix.
  47. * 12/08/00 trw - added PM support. 
  48. * 12/14/00 trw - added wrapper code, builds under 2.4.0, 2.2.17-20, 2.2.17-8 
  49. *  (RH/Dell base), 2.2.18, 2.2.12.  cleaned up code mods by ident.
  50. * 12/19/00 trw - added PM support for 2.2 base (apm_callback). other PM cleanup.
  51. * 12/21/00 trw - added fractional "defaultorder" inputs. if >100 then use 
  52. *  defaultorder-100 as power of 2 for the buffer size. example:
  53. *  106 = 2^(106-100) = 2^6 = 64 bytes for the buffer size.
  54. * 04/02/01 trw - reworked the includes, so kgdb wouldn't get confused.
  55. * 04/17/01 trw - added ifdef CONFIG_PM for 2.4.x non-pm kernels. static pmprint.
  56. * 04/19/01 trw - reworked all of the wrapper macros to keep native 2.4.x code
  57. *  predominate in the driver.
  58. * 07/01/01 trw - added ability to modify the record source mask to alleviate
  59. *  problems with toshiba systems.  also, check for toshiba 
  60. *  system to set default up properly.
  61. * 11/12/01 trw - removed cs4281_update_ptr() in the polling interface code.
  62. *  returning with only a few bytes available in the write buffer
  63. *  seems to cause some problems with some apps (xmms OSS plugin).
  64. *  Also, fixed bug in cs4281_update_ptr() code to wakeup when
  65. *    1/2 buffer is empty, not when completely full.
  66. *
  67. *******************************************************************************/
  68. /* uncomment the following line to disable building PM support into the driver */
  69. //#define NOT_CS4281_PM 1 
  70. #include <linux/list.h>
  71. #include <linux/version.h>
  72. #include <linux/module.h>
  73. #include <linux/string.h>
  74. #include <linux/ioport.h>
  75. #include <linux/sched.h>
  76. #include <linux/delay.h>
  77. #include <linux/sound.h>
  78. #include <linux/slab.h>
  79. #include <linux/soundcard.h>
  80. #include <linux/pci.h>
  81. #include <linux/bitops.h>
  82. #include <asm/io.h>
  83. #include <asm/dma.h>
  84. #include <linux/init.h>
  85. #include <linux/poll.h>
  86. #include <linux/smp_lock.h>
  87. #include <linux/wrapper.h>
  88. #include <asm/uaccess.h>
  89. #include <asm/hardirq.h>
  90. #include "cs4281_hwdefs.h"
  91. EXPORT_NO_SYMBOLS;
  92. struct cs4281_state;
  93. int cs4281_suspend(struct cs4281_state *s);
  94. int cs4281_resume(struct cs4281_state *s);
  95. #include "cs4281_wrapper.h"
  96. #include "cs4281pm-24.h"
  97. static void stop_dac(struct cs4281_state *s);
  98. static void stop_adc(struct cs4281_state *s);
  99. static void start_dac(struct cs4281_state *s);
  100. static void start_adc(struct cs4281_state *s);
  101. #undef OSS_DOCUMENTED_MIXER_SEMANTICS
  102. // --------------------------------------------------------------------- 
  103. #ifndef PCI_VENDOR_ID_CIRRUS
  104. #define PCI_VENDOR_ID_CIRRUS          0x1013
  105. #endif
  106. #ifndef PCI_DEVICE_ID_CRYSTAL_CS4281
  107. #define PCI_DEVICE_ID_CRYSTAL_CS4281  0x6005
  108. #endif
  109. #ifndef SS_ID_TOSHIBA_1640CDT
  110. #define SS_ID_TOSHIBA_1640CDT 0xff00
  111. #endif
  112. #ifndef PCI_VENDOR_ID_TOSHIBA
  113. #define PCI_VENDOR_ID_TOSHIBA  0x1179
  114. #endif
  115. #define CS4281_MAGIC  ((PCI_DEVICE_ID_CRYSTAL_CS4281<<16) | PCI_VENDOR_ID_CIRRUS)
  116. #define CS4281_CFLR_DEFAULT 0x00000001  /* CFLR must be in AC97 link mode */
  117. #define CS4281_BA0_CPWR_DEFAULT 0x4281
  118. /* buffer order determines the size of the dma buffer for the driver.
  119. * under Linux, a smaller buffer allows more responsiveness from many of the 
  120. * applications (e.g. games).  A larger buffer allows some of the apps (esound) 
  121. * to not underrun the dma buffer as easily.  As default, use 32k (order=3)
  122. * rather than 64k as some of the games work more responsively.
  123. * (2^N) * PAGE_SIZE = allocated buffer size
  124. *
  125. * also added fractional "defaultorder" inputs. if >100 then use 
  126. * defaultorder-100 as power of 2 for the buffer size. example:
  127. * 106 = 2^(106-100) = 2^6 = 64 bytes for the buffer size.
  128. * games are even MORE responsive now, but prone to underruns.
  129. */
  130. static unsigned long defaultorder = 3;
  131. MODULE_PARM(defaultorder, "i");
  132. /*
  133. * use this module parm to invalidate recording sources 
  134. * as on some machines (Toshiba Satellites... again) setting to LINE
  135. * causes an error and some of the mixers (gmix) to not load.
  136. */
  137. static unsigned long recsrc_invalid = 0;
  138. MODULE_PARM(recsrc_invalid, "i");
  139. //
  140. // Turn on/off debugging compilation by commenting out "#define CSDEBUG"
  141. //
  142. #define CSDEBUG 1
  143. #if CSDEBUG
  144. #define CSDEBUG_INTERFACE 1
  145. #else
  146. #undef CSDEBUG_INTERFACE
  147. #endif
  148. //
  149. // cs_debugmask areas
  150. //
  151. #define CS_INIT   0x00000001 // initialization and probe functions
  152. #define CS_ERROR  0x00000002 // tmp debugging bit placeholder
  153. #define CS_INTERRUPT 0x00000004 // interrupt handler (separate from all other)
  154. #define CS_FUNCTION  0x00000008 // enter/leave functions
  155. #define CS_WAVE_WRITE  0x00000010 // write information for wave
  156. #define CS_WAVE_READ  0x00000020 // read information for wave
  157. #define CS_MIDI_WRITE  0x00000040 // write information for midi
  158. #define CS_MIDI_READ  0x00000080 // read information for midi
  159. #define CS_MPU401_WRITE 0x00000100 // write information for mpu401
  160. #define CS_MPU401_READ  0x00000200 // read information for mpu401
  161. #define CS_OPEN 0x00000400 // all open functions in the driver
  162. #define CS_RELEASE 0x00000800 // all release functions in the driver
  163. #define CS_PARMS 0x00001000 // functional and operational parameters
  164. #define CS_IOCTL 0x00002000 // ioctl (non-mixer)
  165. #define CS_PM 0x00004000 // power management 
  166. #define CS_TMP 0x10000000 // tmp debug mask bit
  167. #define CS_IOCTL_CMD_SUSPEND 0x1 // suspend
  168. #define CS_IOCTL_CMD_RESUME 0x2 // resume
  169. //
  170. // CSDEBUG is usual mode is set to 1, then use the
  171. // cs_debuglevel and cs_debugmask to turn on or off debugging.
  172. // Debug level of 1 has been defined to be kernel errors and info
  173. // that should be printed on any released driver.
  174. //
  175. #if CSDEBUG
  176. #define CS_DBGOUT(mask,level,x) if((cs_debuglevel >= (level)) && ((mask) & cs_debugmask) ) {x;}
  177. #else
  178. #define CS_DBGOUT(mask,level,x)
  179. #endif
  180. #if CSDEBUG
  181. static unsigned long cs_debuglevel = 1; // levels range from 1-9
  182. static unsigned long cs_debugmask = CS_INIT | CS_ERROR; // use CS_DBGOUT with various mask values
  183. MODULE_PARM(cs_debuglevel, "i");
  184. MODULE_PARM(cs_debugmask, "i");
  185. #endif
  186. #define CS_TRUE  1
  187. #define CS_FALSE  0
  188. // MIDI buffer sizes 
  189. #define MIDIINBUF  500
  190. #define MIDIOUTBUF 500
  191. #define FMODE_MIDI_SHIFT 3
  192. #define FMODE_MIDI_READ  (FMODE_READ << FMODE_MIDI_SHIFT)
  193. #define FMODE_MIDI_WRITE (FMODE_WRITE << FMODE_MIDI_SHIFT)
  194. #define CS4281_MAJOR_VERSION  1
  195. #define CS4281_MINOR_VERSION  30
  196. #ifdef __ia64__
  197. #define CS4281_ARCH       64 //architecture key
  198. #else
  199. #define CS4281_ARCH       32 //architecture key
  200. #endif
  201. #define CS_TYPE_ADC 0
  202. #define CS_TYPE_DAC 1
  203. static const char invalid_magic[] =
  204.     KERN_CRIT "cs4281: invalid magic valuen";
  205. #define VALIDATE_STATE(s)                         
  206. ({                                                
  207.         if (!(s) || (s)->magic != CS4281_MAGIC) { 
  208.                 printk(invalid_magic);            
  209.                 return -ENXIO;                    
  210.         }                                         
  211. })
  212. struct list_head cs4281_devs = { &cs4281_devs, &cs4281_devs };
  213. struct cs4281_state {
  214. // magic 
  215. unsigned int magic;
  216. u16 ss_id, ss_vendor;  /* subsystem and vendor IDs from pci space */
  217. // we keep the cards in a linked list 
  218. struct cs4281_state *next;
  219. // pcidev is needed to turn off the DDMA controller at driver shutdown 
  220. struct pci_dev *pcidev;
  221. struct list_head list;
  222. // soundcore stuff 
  223. int dev_audio;
  224. int dev_mixer;
  225. int dev_midi;
  226. // hardware resources 
  227. unsigned int pBA0phys, pBA1phys;
  228. char *pBA0, *pBA1;
  229. unsigned int irq;
  230. unsigned recsrc;
  231. // mixer registers 
  232. struct {
  233. unsigned short vol[10];
  234. unsigned int recsrc;
  235. unsigned int modcnt;
  236. unsigned short micpreamp;
  237. } mix;
  238. // wave stuff   
  239. struct properties {
  240. unsigned fmt;
  241. unsigned fmt_original; // original requested format
  242. unsigned channels;
  243. unsigned rate;
  244. unsigned char clkdiv;
  245. } prop_dac, prop_adc;
  246. unsigned conversion:1; // conversion from 16 to 8 bit in progress
  247. void *tmpbuff; // tmp buffer for sample conversions
  248. unsigned ena;
  249. spinlock_t lock;
  250. struct semaphore open_sem;
  251. struct semaphore open_sem_adc;
  252. struct semaphore open_sem_dac;
  253. mode_t open_mode;
  254. wait_queue_head_t open_wait;
  255. wait_queue_head_t open_wait_adc;
  256. wait_queue_head_t open_wait_dac;
  257. dma_addr_t dmaaddr_tmpbuff;
  258. unsigned buforder_tmpbuff; // Log base 2 of 'rawbuf' size in bytes..
  259. struct dmabuf {
  260. void *rawbuf; // Physical address of  
  261. dma_addr_t dmaaddr;
  262. unsigned buforder; // Log base 2 of 'rawbuf' size in bytes..
  263. unsigned numfrag; // # of 'fragments' in the buffer.
  264. unsigned fragshift; // Log base 2 of fragment size.
  265. unsigned hwptr, swptr;
  266. unsigned total_bytes; // # bytes process since open.
  267. unsigned blocks; // last returned blocks value GETOPTR
  268. unsigned wakeup; // interrupt occurred on block 
  269. int count;
  270. unsigned underrun; // underrun flag
  271. unsigned error; // over/underrun 
  272. wait_queue_head_t wait;
  273. // redundant, but makes calculations easier 
  274. unsigned fragsize; // 2**fragshift..
  275. unsigned dmasize; // 2**buforder.
  276. unsigned fragsamples;
  277. // OSS stuff 
  278. unsigned mapped:1; // Buffer mapped in cs4281_mmap()?
  279. unsigned ready:1; // prog_dmabuf_dac()/adc() successful?
  280. unsigned endcleared:1;
  281. unsigned type:1; // adc or dac buffer (CS_TYPE_XXX)
  282. unsigned ossfragshift;
  283. int ossmaxfrags;
  284. unsigned subdivision;
  285. } dma_dac, dma_adc;
  286. // midi stuff 
  287. struct {
  288. unsigned ird, iwr, icnt;
  289. unsigned ord, owr, ocnt;
  290. wait_queue_head_t iwait;
  291. wait_queue_head_t owait;
  292. struct timer_list timer;
  293. unsigned char ibuf[MIDIINBUF];
  294. unsigned char obuf[MIDIOUTBUF];
  295. } midi;
  296. #ifndef NOT_CS4281_PM
  297. struct cs4281_pm pm;
  298. struct cs4281_pipeline pl[CS4281_NUMBER_OF_PIPELINES];
  299. #endif
  300. };
  301. #if CSDEBUG
  302. // DEBUG ROUTINES
  303. #define SOUND_MIXER_CS_GETDBGLEVEL  _SIOWR('M',120, int)
  304. #define SOUND_MIXER_CS_SETDBGLEVEL  _SIOWR('M',121, int)
  305. #define SOUND_MIXER_CS_GETDBGMASK  _SIOWR('M',122, int)
  306. #define SOUND_MIXER_CS_SETDBGMASK  _SIOWR('M',123, int)
  307. #define SOUND_MIXER_CS_APM   _SIOWR('M',124, int)
  308. static void cs_printioctl(unsigned int x)
  309. {
  310. unsigned int i;
  311. unsigned char vidx;
  312. // Index of mixtable1[] member is Device ID 
  313. // and must be <= SOUND_MIXER_NRDEVICES.
  314. // Value of array member is index into s->mix.vol[]
  315. static const unsigned char mixtable1[SOUND_MIXER_NRDEVICES] = {
  316. [SOUND_MIXER_PCM] = 1, // voice 
  317. [SOUND_MIXER_LINE1] = 2, // AUX
  318. [SOUND_MIXER_CD] = 3, // CD 
  319. [SOUND_MIXER_LINE] = 4, // Line 
  320. [SOUND_MIXER_SYNTH] = 5, // FM
  321. [SOUND_MIXER_MIC] = 6, // Mic 
  322. [SOUND_MIXER_SPEAKER] = 7, // Speaker 
  323. [SOUND_MIXER_RECLEV] = 8, // Recording level 
  324. [SOUND_MIXER_VOLUME] = 9 // Master Volume 
  325. };
  326. switch (x) {
  327. case SOUND_MIXER_CS_GETDBGMASK:
  328. CS_DBGOUT(CS_IOCTL, 4,
  329.   printk("SOUND_MIXER_CS_GETDBGMASK:n"));
  330. break;
  331. case SOUND_MIXER_CS_GETDBGLEVEL:
  332. CS_DBGOUT(CS_IOCTL, 4,
  333.   printk("SOUND_MIXER_CS_GETDBGLEVEL:n"));
  334. break;
  335. case SOUND_MIXER_CS_SETDBGMASK:
  336. CS_DBGOUT(CS_IOCTL, 4,
  337.   printk("SOUND_MIXER_CS_SETDBGMASK:n"));
  338. break;
  339. case SOUND_MIXER_CS_SETDBGLEVEL:
  340. CS_DBGOUT(CS_IOCTL, 4,
  341.   printk("SOUND_MIXER_CS_SETDBGLEVEL:n"));
  342. break;
  343. case OSS_GETVERSION:
  344. CS_DBGOUT(CS_IOCTL, 4, printk("OSS_GETVERSION:n"));
  345. break;
  346. case SNDCTL_DSP_SYNC:
  347. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_SYNC:n"));
  348. break;
  349. case SNDCTL_DSP_SETDUPLEX:
  350. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_SETDUPLEX:n"));
  351. break;
  352. case SNDCTL_DSP_GETCAPS:
  353. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETCAPS:n"));
  354. break;
  355. case SNDCTL_DSP_RESET:
  356. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_RESET:n"));
  357. break;
  358. case SNDCTL_DSP_SPEED:
  359. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_SPEED:n"));
  360. break;
  361. case SNDCTL_DSP_STEREO:
  362. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_STEREO:n"));
  363. break;
  364. case SNDCTL_DSP_CHANNELS:
  365. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_CHANNELS:n"));
  366. break;
  367. case SNDCTL_DSP_GETFMTS:
  368. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETFMTS:n"));
  369. break;
  370. case SNDCTL_DSP_SETFMT:
  371. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_SETFMT:n"));
  372. break;
  373. case SNDCTL_DSP_POST:
  374. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_POST:n"));
  375. break;
  376. case SNDCTL_DSP_GETTRIGGER:
  377. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETTRIGGER:n"));
  378. break;
  379. case SNDCTL_DSP_SETTRIGGER:
  380. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_SETTRIGGER:n"));
  381. break;
  382. case SNDCTL_DSP_GETOSPACE:
  383. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETOSPACE:n"));
  384. break;
  385. case SNDCTL_DSP_GETISPACE:
  386. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETISPACE:n"));
  387. break;
  388. case SNDCTL_DSP_NONBLOCK:
  389. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_NONBLOCK:n"));
  390. break;
  391. case SNDCTL_DSP_GETODELAY:
  392. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETODELAY:n"));
  393. break;
  394. case SNDCTL_DSP_GETIPTR:
  395. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETIPTR:n"));
  396. break;
  397. case SNDCTL_DSP_GETOPTR:
  398. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETOPTR:n"));
  399. break;
  400. case SNDCTL_DSP_GETBLKSIZE:
  401. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETBLKSIZE:n"));
  402. break;
  403. case SNDCTL_DSP_SETFRAGMENT:
  404. CS_DBGOUT(CS_IOCTL, 4,
  405.   printk("SNDCTL_DSP_SETFRAGMENT:n"));
  406. break;
  407. case SNDCTL_DSP_SUBDIVIDE:
  408. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_SUBDIVIDE:n"));
  409. break;
  410. case SOUND_PCM_READ_RATE:
  411. CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_PCM_READ_RATE:n"));
  412. break;
  413. case SOUND_PCM_READ_CHANNELS:
  414. CS_DBGOUT(CS_IOCTL, 4,
  415.   printk("SOUND_PCM_READ_CHANNELS:n"));
  416. break;
  417. case SOUND_PCM_READ_BITS:
  418. CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_PCM_READ_BITS:n"));
  419. break;
  420. case SOUND_PCM_WRITE_FILTER:
  421. CS_DBGOUT(CS_IOCTL, 4,
  422.   printk("SOUND_PCM_WRITE_FILTER:n"));
  423. break;
  424. case SNDCTL_DSP_SETSYNCRO:
  425. CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_SETSYNCRO:n"));
  426. break;
  427. case SOUND_PCM_READ_FILTER:
  428. CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_PCM_READ_FILTER:n"));
  429. break;
  430. case SOUND_MIXER_PRIVATE1:
  431. CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_PRIVATE1:n"));
  432. break;
  433. case SOUND_MIXER_PRIVATE2:
  434. CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_PRIVATE2:n"));
  435. break;
  436. case SOUND_MIXER_PRIVATE3:
  437. CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_PRIVATE3:n"));
  438. break;
  439. case SOUND_MIXER_PRIVATE4:
  440. CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_PRIVATE4:n"));
  441. break;
  442. case SOUND_MIXER_PRIVATE5:
  443. CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_PRIVATE5:n"));
  444. break;
  445. case SOUND_MIXER_INFO:
  446. CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_INFO:n"));
  447. break;
  448. case SOUND_OLD_MIXER_INFO:
  449. CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_OLD_MIXER_INFO:n"));
  450. break;
  451. default:
  452. switch (_IOC_NR(x)) {
  453. case SOUND_MIXER_VOLUME:
  454. CS_DBGOUT(CS_IOCTL, 4,
  455.   printk("SOUND_MIXER_VOLUME:n"));
  456. break;
  457. case SOUND_MIXER_SPEAKER:
  458. CS_DBGOUT(CS_IOCTL, 4,
  459.   printk("SOUND_MIXER_SPEAKER:n"));
  460. break;
  461. case SOUND_MIXER_RECLEV:
  462. CS_DBGOUT(CS_IOCTL, 4,
  463.   printk("SOUND_MIXER_RECLEV:n"));
  464. break;
  465. case SOUND_MIXER_MIC:
  466. CS_DBGOUT(CS_IOCTL, 4,
  467.   printk("SOUND_MIXER_MIC:n"));
  468. break;
  469. case SOUND_MIXER_SYNTH:
  470. CS_DBGOUT(CS_IOCTL, 4,
  471.   printk("SOUND_MIXER_SYNTH:n"));
  472. break;
  473. case SOUND_MIXER_RECSRC:
  474. CS_DBGOUT(CS_IOCTL, 4,
  475.   printk("SOUND_MIXER_RECSRC:n"));
  476. break;
  477. case SOUND_MIXER_DEVMASK:
  478. CS_DBGOUT(CS_IOCTL, 4,
  479.   printk("SOUND_MIXER_DEVMASK:n"));
  480. break;
  481. case SOUND_MIXER_RECMASK:
  482. CS_DBGOUT(CS_IOCTL, 4,
  483.   printk("SOUND_MIXER_RECMASK:n"));
  484. break;
  485. case SOUND_MIXER_STEREODEVS:
  486. CS_DBGOUT(CS_IOCTL, 4,
  487.   printk("SOUND_MIXER_STEREODEVS:n"));
  488. break;
  489. case SOUND_MIXER_CAPS:
  490. CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_CAPS:n"));
  491. break;
  492. default:
  493. i = _IOC_NR(x);
  494. if (i >= SOUND_MIXER_NRDEVICES
  495.     || !(vidx = mixtable1[i])) {
  496. CS_DBGOUT(CS_IOCTL, 4, printk
  497. ("UNKNOWN IOCTL: 0x%.8x NR=%dn",
  498. x, i));
  499. } else {
  500. CS_DBGOUT(CS_IOCTL, 4, printk
  501. ("SOUND_MIXER_IOCTL AC9x: 0x%.8x NR=%dn",
  502. x, i));
  503. }
  504. break;
  505. }
  506. }
  507. }
  508. #endif
  509. static int prog_dmabuf_adc(struct cs4281_state *s);
  510. static void prog_codec(struct cs4281_state *s, unsigned type);
  511. // --------------------------------------------------------------------- 
  512. //
  513. //              Hardware Interfaces For the CS4281
  514. //
  515. //******************************************************************************
  516. // "delayus()-- Delay for the specified # of microseconds.
  517. //******************************************************************************
  518. static void delayus(struct cs4281_state *s, u32 delay)
  519. {
  520. u32 j;
  521. if ((delay > 9999) 
  522. #ifndef NOT_CS4281_PM
  523. && (s->pm.flags & CS4281_PM_IDLE))
  524. #else
  525. )
  526. #endif
  527. {
  528. j = (delay * HZ) / 1000000; /* calculate delay in jiffies  */
  529. if (j < 1)
  530. j = 1; /* minimum one jiffy. */
  531. current->state = TASK_UNINTERRUPTIBLE;
  532. schedule_timeout(j);
  533. } else
  534. udelay(delay);
  535. return;
  536. }
  537. //******************************************************************************
  538. // "cs4281_read_ac97" -- Reads a word from the specified location in the
  539. //               CS4281's address space(based on the BA0 register).
  540. //
  541. // 1. Write ACCAD = Command Address Register = 46Ch for AC97 register address
  542. // 2. Write ACCDA = Command Data Register = 470h for data to write to AC97 register,
  543. //                                            0h for reads.
  544. // 3. Write ACCTL = Control Register = 460h for initiating the write
  545. // 4. Read ACCTL = 460h, DCV should be reset by now and 460h = 17h
  546. // 5. if DCV not cleared, break and return error
  547. // 6. Read ACSTS = Status Register = 464h, check VSTS bit
  548. //****************************************************************************
  549. static int cs4281_read_ac97(struct cs4281_state *card, u32 offset,
  550.     u32 * value)
  551. {
  552. u32 count, status;
  553. // Make sure that there is not data sitting
  554. // around from a previous uncompleted access.
  555. // ACSDA = Status Data Register = 47Ch
  556. status = readl(card->pBA0 + BA0_ACSDA);
  557. // Setup the AC97 control registers on the CS4281 to send the
  558. // appropriate command to the AC97 to perform the read.
  559. // ACCAD = Command Address Register = 46Ch
  560. // ACCDA = Command Data Register = 470h
  561. // ACCTL = Control Register = 460h
  562. // bit DCV - will clear when process completed
  563. // bit CRW - Read command
  564. // bit VFRM - valid frame enabled
  565. // bit ESYN - ASYNC generation enabled
  566. // Get the actual AC97 register from the offset
  567. writel(offset - BA0_AC97_RESET, card->pBA0 + BA0_ACCAD);
  568. writel(0, card->pBA0 + BA0_ACCDA);
  569. writel(ACCTL_DCV | ACCTL_CRW | ACCTL_VFRM | ACCTL_ESYN,
  570.        card->pBA0 + BA0_ACCTL);
  571. // Wait for the read to occur.
  572. for (count = 0; count < 100; count++) {
  573. // First, we want to wait for a short time.
  574. udelay(25);
  575. // Now, check to see if the read has completed.
  576. // ACCTL = 460h, DCV should be reset by now and 460h = 17h
  577. if (!(readl(card->pBA0 + BA0_ACCTL) & ACCTL_DCV))
  578. break;
  579. }
  580. // Make sure the read completed.
  581. if (readl(card->pBA0 + BA0_ACCTL) & ACCTL_DCV)
  582. return 1;
  583. // Wait for the valid status bit to go active.
  584. for (count = 0; count < 100; count++) {
  585. // Read the AC97 status register.
  586. // ACSTS = Status Register = 464h
  587. status = readl(card->pBA0 + BA0_ACSTS);
  588. // See if we have valid status.
  589. // VSTS - Valid Status
  590. if (status & ACSTS_VSTS)
  591. break;
  592. // Wait for a short while.
  593. udelay(25);
  594. }
  595. // Make sure we got valid status.
  596. if (!(status & ACSTS_VSTS))
  597. return 1;
  598. // Read the data returned from the AC97 register.
  599. // ACSDA = Status Data Register = 474h
  600. *value = readl(card->pBA0 + BA0_ACSDA);
  601. // Success.
  602. return (0);
  603. }
  604. //****************************************************************************
  605. //
  606. // "cs4281_write_ac97()"-- writes a word to the specified location in the
  607. // CS461x's address space (based on the part's base address zero register).
  608. //
  609. // 1. Write ACCAD = Command Address Register = 46Ch for AC97 register address
  610. // 2. Write ACCDA = Command Data Register = 470h for data to write to AC97 reg.
  611. // 3. Write ACCTL = Control Register = 460h for initiating the write
  612. // 4. Read ACCTL = 460h, DCV should be reset by now and 460h = 07h
  613. // 5. if DCV not cleared, break and return error
  614. //
  615. //****************************************************************************
  616. static int cs4281_write_ac97(struct cs4281_state *card, u32 offset,
  617.      u32 value)
  618. {
  619. u32 count, status=0;
  620. CS_DBGOUT(CS_FUNCTION, 2,
  621.   printk(KERN_INFO "cs4281: cs_4281_write_ac97()+ n"));
  622. // Setup the AC97 control registers on the CS4281 to send the
  623. // appropriate command to the AC97 to perform the read.
  624. // ACCAD = Command Address Register = 46Ch
  625. // ACCDA = Command Data Register = 470h
  626. // ACCTL = Control Register = 460h
  627. // set DCV - will clear when process completed
  628. // reset CRW - Write command
  629. // set VFRM - valid frame enabled
  630. // set ESYN - ASYNC generation enabled
  631. // set RSTN - ARST# inactive, AC97 codec not reset
  632. // Get the actual AC97 register from the offset
  633. writel(offset - BA0_AC97_RESET, card->pBA0 + BA0_ACCAD);
  634. writel(value, card->pBA0 + BA0_ACCDA);
  635. writel(ACCTL_DCV | ACCTL_VFRM | ACCTL_ESYN,
  636.        card->pBA0 + BA0_ACCTL);
  637. // Wait for the write to occur.
  638. for (count = 0; count < 100; count++) {
  639. // First, we want to wait for a short time.
  640. udelay(25);
  641. // Now, check to see if the write has completed.
  642. // ACCTL = 460h, DCV should be reset by now and 460h = 07h
  643. status = readl(card->pBA0 + BA0_ACCTL);
  644. if (!(status & ACCTL_DCV))
  645. break;
  646. }
  647. // Make sure the write completed.
  648. if (status & ACCTL_DCV) {
  649. CS_DBGOUT(CS_ERROR, 1, printk(KERN_INFO
  650.        "cs4281: cs_4281_write_ac97()- unable to write. ACCTL_DCV activen"));
  651. return 1;
  652. }
  653. CS_DBGOUT(CS_FUNCTION, 2,
  654.   printk(KERN_INFO "cs4281: cs_4281_write_ac97()- 0n"));
  655. // Success.
  656. return 0;
  657. }
  658. //******************************************************************************
  659. // "Init4281()" -- Bring up the part.
  660. //******************************************************************************
  661. static __devinit int cs4281_hw_init(struct cs4281_state *card)
  662. {
  663. u32 ac97_slotid;
  664. u32 temp1, temp2;
  665. CS_DBGOUT(CS_FUNCTION, 2,
  666.   printk(KERN_INFO "cs4281: cs4281_hw_init()+ n"));
  667. #ifndef NOT_CS4281_PM
  668. if(!card)
  669. return 1;
  670. #endif
  671. temp2 = readl(card->pBA0 + BA0_CFLR);
  672. CS_DBGOUT(CS_INIT | CS_ERROR | CS_PARMS, 4, printk(KERN_INFO 
  673. "cs4281: cs4281_hw_init() CFLR 0x%xn", temp2));
  674. if(temp2 != CS4281_CFLR_DEFAULT)
  675. {
  676. CS_DBGOUT(CS_INIT | CS_ERROR, 1, printk(KERN_INFO 
  677. "cs4281: cs4281_hw_init() CFLR invalid - resetting from 0x%x to 0x%xn",
  678. temp2,CS4281_CFLR_DEFAULT));
  679. temp2 = readl(card->pBA0 + BA0_CWPR);
  680. if(temp2 != CS4281_BA0_CPWR_DEFAULT)
  681. {
  682. writel(CS4281_BA0_CPWR_DEFAULT, card->pBA0 + BA0_CWPR);
  683. temp2 = readl(card->pBA0 + BA0_CWPR);
  684. if(temp2 != CS4281_BA0_CPWR_DEFAULT)
  685. {
  686.   CS_DBGOUT(CS_INIT | CS_ERROR, 1, printk(KERN_INFO 
  687. "cs4281: cs4281_hw_init() Invalid hardware - unable to configure CPWR (0x%x)n",
  688. temp2));
  689.   return 1;
  690. }
  691. }
  692. writel(CS4281_CFLR_DEFAULT, card->pBA0 + BA0_CFLR);
  693. temp2 = readl(card->pBA0 + BA0_CFLR);
  694. if(temp2 != CS4281_CFLR_DEFAULT)
  695. {
  696. CS_DBGOUT(CS_INIT | CS_ERROR, 1, printk(KERN_INFO 
  697. "cs4281: cs4281_hw_init() Invalid hardware - unable to configure CFLR (0x%x)n",
  698. temp2));
  699. return 1;
  700. }
  701. }
  702. //***************************************7
  703. //  Set up the Sound System Configuration
  704. //***************************************
  705. // Set the 'Configuration Write Protect' register
  706. // to 4281h.  Allows vendor-defined configuration
  707. // space between 0e4h and 0ffh to be written.
  708. writel(0x4281, card->pBA0 + BA0_CWPR); // (3e0h)
  709. // (0), Blast the clock control register to zero so that the
  710. // PLL starts out in a known state, and blast the master serial
  711. // port control register to zero so that the serial ports also
  712. // start out in a known state.
  713. writel(0, card->pBA0 + BA0_CLKCR1); // (400h)
  714. writel(0, card->pBA0 + BA0_SERMC); // (420h)
  715. // (1), Make ESYN go to zero to turn off
  716. // the Sync pulse on the AC97 link.
  717. writel(0, card->pBA0 + BA0_ACCTL);
  718. udelay(50);
  719. // (2) Drive the ARST# pin low for a minimum of 1uS (as defined in
  720. // the AC97 spec) and then drive it high.  This is done for non
  721. // AC97 modes since there might be logic external to the CS461x
  722. // that uses the ARST# line for a reset.
  723. writel(0, card->pBA0 + BA0_SPMC); // (3ech)
  724. udelay(100);
  725. writel(SPMC_RSTN, card->pBA0 + BA0_SPMC);
  726. delayus(card,50000); // Wait 50 ms for ABITCLK to become stable.
  727. // (3) Turn on the Sound System Clocks.
  728. writel(CLKCR1_PLLP, card->pBA0 + BA0_CLKCR1); // (400h)
  729. delayus(card,50000); // Wait for the PLL to stabilize.
  730. // Turn on clocking of the core (CLKCR1(400h) = 0x00000030)
  731. writel(CLKCR1_PLLP | CLKCR1_SWCE, card->pBA0 + BA0_CLKCR1);
  732. // (4) Power on everything for now..
  733. writel(0x7E, card->pBA0 + BA0_SSPM); // (740h)
  734. // (5) Wait for clock stabilization.
  735. for (temp1 = 0; temp1 < 1000; temp1++) {
  736. udelay(1000);
  737. if (readl(card->pBA0 + BA0_CLKCR1) & CLKCR1_DLLRDY)
  738. break;
  739. }
  740. if (!(readl(card->pBA0 + BA0_CLKCR1) & CLKCR1_DLLRDY)) {
  741. CS_DBGOUT(CS_ERROR, 1, printk(KERN_ERR 
  742. "cs4281: DLLRDY failed!n"));
  743. return -EIO;
  744. }
  745. // (6) Enable ASYNC generation.
  746. writel(ACCTL_ESYN, card->pBA0 + BA0_ACCTL); // (460h)
  747. // Now wait 'for a short while' to allow the  AC97
  748. // part to start generating bit clock. (so we don't
  749. // Try to start the PLL without an input clock.)
  750. delayus(card,50000);
  751. // Set the serial port timing configuration, so that the
  752. // clock control circuit gets its clock from the right place.
  753. writel(SERMC_PTC_AC97, card->pBA0 + BA0_SERMC); // (420h)=2.
  754. // (7) Wait for the codec ready signal from the AC97 codec.
  755. for (temp1 = 0; temp1 < 1000; temp1++) {
  756. // Delay a mil to let things settle out and
  757. // to prevent retrying the read too quickly.
  758. udelay(1000);
  759. if (readl(card->pBA0 + BA0_ACSTS) & ACSTS_CRDY) // If ready,  (464h)
  760. break; //   exit the 'for' loop.
  761. }
  762. if (!(readl(card->pBA0 + BA0_ACSTS) & ACSTS_CRDY)) // If never came ready,
  763. {
  764. CS_DBGOUT(CS_FUNCTION, 2, printk(KERN_ERR
  765.  "cs4281: ACSTS never came ready!n"));
  766. return -EIO; //   exit initialization.
  767. }
  768. // (8) Assert the 'valid frame' signal so we can
  769. // begin sending commands to the AC97 codec.
  770. writel(ACCTL_VFRM | ACCTL_ESYN, card->pBA0 + BA0_ACCTL); // (460h)
  771. // (9), Wait until CODEC calibration is finished.
  772. // Print an error message if it doesn't.
  773. for (temp1 = 0; temp1 < 1000; temp1++) {
  774. delayus(card,10000);
  775. // Read the AC97 Powerdown Control/Status Register.
  776. cs4281_read_ac97(card, BA0_AC97_POWERDOWN, &temp2);
  777. if ((temp2 & 0x0000000F) == 0x0000000F)
  778. break;
  779. }
  780. if ((temp2 & 0x0000000F) != 0x0000000F) {
  781. CS_DBGOUT(CS_FUNCTION, 2, printk(KERN_ERR
  782. "cs4281: Codec failed to calibrate.  Status = %.8x.n",
  783. temp2));
  784. return -EIO;
  785. }
  786. // (10), Set the serial port timing configuration, so that the
  787. // clock control circuit gets its clock from the right place.
  788. writel(SERMC_PTC_AC97, card->pBA0 + BA0_SERMC); // (420h)=2.
  789. // (11) Wait until we've sampled input slots 3 & 4 as valid, meaning
  790. // that the codec is pumping ADC data across the AC link.
  791. for (temp1 = 0; temp1 < 1000; temp1++) {
  792. // Delay a mil to let things settle out and
  793. // to prevent retrying the read too quickly.
  794. delayus(card,1000); //(test)
  795. // Read the input slot valid register;  See
  796. // if input slots 3 and 4 are valid yet.
  797. if (
  798.     (readl(card->pBA0 + BA0_ACISV) &
  799.      (ACISV_ISV3 | ACISV_ISV4)) ==
  800.     (ACISV_ISV3 | ACISV_ISV4)) break; // Exit the 'for' if slots are valid.
  801. }
  802. // If we never got valid data, exit initialization.
  803. if ((readl(card->pBA0 + BA0_ACISV) & (ACISV_ISV3 | ACISV_ISV4))
  804.     != (ACISV_ISV3 | ACISV_ISV4)) {
  805. CS_DBGOUT(CS_FUNCTION, 2,
  806.   printk(KERN_ERR
  807.  "cs4281: Never got valid data!n"));
  808. return -EIO; // If no valid data, exit initialization.
  809. }
  810. // (12), Start digital data transfer of audio data to the codec.
  811. writel(ACOSV_SLV3 | ACOSV_SLV4, card->pBA0 + BA0_ACOSV); // (468h)
  812. //**************************************
  813. // Unmute the Master and Alternate
  814. // (headphone) volumes.  Set to max.
  815. //**************************************
  816. cs4281_write_ac97(card, BA0_AC97_HEADPHONE_VOLUME, 0);
  817. cs4281_write_ac97(card, BA0_AC97_MASTER_VOLUME, 0);
  818. //******************************************
  819. // Power on the DAC(AddDACUser()from main())
  820. //******************************************
  821. cs4281_read_ac97(card, BA0_AC97_POWERDOWN, &temp1);
  822. cs4281_write_ac97(card, BA0_AC97_POWERDOWN, temp1 &= 0xfdff);
  823. // Wait until we sample a DAC ready state.
  824. for (temp2 = 0; temp2 < 32; temp2++) {
  825. // Let's wait a mil to let things settle.
  826. delayus(card,1000);
  827. // Read the current state of the power control reg.
  828. cs4281_read_ac97(card, BA0_AC97_POWERDOWN, &temp1);
  829. // If the DAC ready state bit is set, stop waiting.
  830. if (temp1 & 0x2)
  831. break;
  832. }
  833. //******************************************
  834. // Power on the ADC(AddADCUser()from main())
  835. //******************************************
  836. cs4281_read_ac97(card, BA0_AC97_POWERDOWN, &temp1);
  837. cs4281_write_ac97(card, BA0_AC97_POWERDOWN, temp1 &= 0xfeff);
  838. // Wait until we sample ADC ready state.
  839. for (temp2 = 0; temp2 < 32; temp2++) {
  840. // Let's wait a mil to let things settle.
  841. delayus(card,1000);
  842. // Read the current state of the power control reg.
  843. cs4281_read_ac97(card, BA0_AC97_POWERDOWN, &temp1);
  844. // If the ADC ready state bit is set, stop waiting.
  845. if (temp1 & 0x1)
  846. break;
  847. }
  848. // Set up 4281 Register contents that
  849. // don't change for boot duration.
  850. // For playback, we map AC97 slot 3 and 4(Left
  851. // & Right PCM playback) to DMA Channel 0.
  852. // Set the fifo to be 15 bytes at offset zero.
  853. ac97_slotid = 0x01000f00; // FCR0.RS[4:0]=1(=>slot4, right PCM playback).
  854. // FCR0.LS[4:0]=0(=>slot3, left PCM playback).
  855. // FCR0.SZ[6-0]=15; FCR0.OF[6-0]=0.
  856. writel(ac97_slotid, card->pBA0 + BA0_FCR0); // (180h)
  857. writel(ac97_slotid | FCRn_FEN, card->pBA0 + BA0_FCR0); // Turn on FIFO Enable.
  858. // For capture, we map AC97 slot 10 and 11(Left
  859. // and Right PCM Record) to DMA Channel 1.
  860. // Set the fifo to be 15 bytes at offset sixteen.
  861. ac97_slotid = 0x0B0A0f10; // FCR1.RS[4:0]=11(=>slot11, right PCM record).
  862. // FCR1.LS[4:0]=10(=>slot10, left PCM record).
  863. // FCR1.SZ[6-0]=15; FCR1.OF[6-0]=16.
  864. writel(ac97_slotid | FCRn_PSH, card->pBA0 + BA0_FCR1); // (184h)
  865. writel(ac97_slotid | FCRn_FEN, card->pBA0 + BA0_FCR1); // Turn on FIFO Enable.
  866. // Map the Playback SRC to the same AC97 slots(3 & 4--
  867. // --Playback left & right)as DMA channel 0.
  868. // Map the record SRC to the same AC97 slots(10 & 11--
  869. // -- Record left & right) as DMA channel 1.
  870. ac97_slotid = 0x0b0a0100; // SCRSA.PRSS[4:0]=1(=>slot4, right PCM playback).
  871. // SCRSA.PLSS[4:0]=0(=>slot3, left PCM playback).
  872. // SCRSA.CRSS[4:0]=11(=>slot11, right PCM record)
  873. // SCRSA.CLSS[4:0]=10(=>slot10, left PCM record).
  874. writel(ac97_slotid, card->pBA0 + BA0_SRCSA); // (75ch)
  875. // Set 'Half Terminal Count Interrupt Enable' and 'Terminal
  876. // Count Interrupt Enable' in DMA Control Registers 0 & 1.
  877. // Set 'MSK' flag to 1 to keep the DMA engines paused.
  878. temp1 = (DCRn_HTCIE | DCRn_TCIE | DCRn_MSK); // (00030001h)
  879. writel(temp1, card->pBA0 + BA0_DCR0); // (154h
  880. writel(temp1, card->pBA0 + BA0_DCR1); // (15ch)
  881. // Set 'Auto-Initialize Control' to 'enabled'; For playback,
  882. // set 'Transfer Type Control'(TR[1:0]) to 'read transfer',
  883. // for record, set Transfer Type Control to 'write transfer'.
  884. // All other bits set to zero;  Some will be changed @ transfer start.
  885. temp1 = (DMRn_DMA | DMRn_AUTO | DMRn_TR_READ); // (20000018h)
  886. writel(temp1, card->pBA0 + BA0_DMR0); // (150h)
  887. temp1 = (DMRn_DMA | DMRn_AUTO | DMRn_TR_WRITE); // (20000014h)
  888. writel(temp1, card->pBA0 + BA0_DMR1); // (158h)
  889. // Enable DMA interrupts generally, and
  890. // DMA0 & DMA1 interrupts specifically.
  891. temp1 = readl(card->pBA0 + BA0_HIMR) & 0xfffbfcff;
  892. writel(temp1, card->pBA0 + BA0_HIMR);
  893. CS_DBGOUT(CS_FUNCTION, 2,
  894.   printk(KERN_INFO "cs4281: cs4281_hw_init()- 0n"));
  895. return 0;
  896. }
  897. #ifndef NOT_CS4281_PM
  898. static void printpm(struct cs4281_state *s)
  899. {
  900. CS_DBGOUT(CS_PM, 9, printk("pm struct:n"));
  901. CS_DBGOUT(CS_PM, 9, printk("flags:0x%x u32CLKCR1_SAVE: 0%x u32SSPMValue: 0x%xn",
  902. (unsigned)s->pm.flags,s->pm.u32CLKCR1_SAVE,s->pm.u32SSPMValue));
  903. CS_DBGOUT(CS_PM, 9, printk("u32PPLVCvalue: 0x%x u32PPRVCvalue: 0x%xn",
  904. s->pm.u32PPLVCvalue,s->pm.u32PPRVCvalue));
  905. CS_DBGOUT(CS_PM, 9, printk("u32FMLVCvalue: 0x%x u32FMRVCvalue: 0x%xn",
  906. s->pm.u32FMLVCvalue,s->pm.u32FMRVCvalue));
  907. CS_DBGOUT(CS_PM, 9, printk("u32GPIORvalue: 0x%x u32JSCTLvalue: 0x%xn",
  908. s->pm.u32GPIORvalue,s->pm.u32JSCTLvalue));
  909. CS_DBGOUT(CS_PM, 9, printk("u32SSCR: 0x%x u32SRCSA: 0x%xn",
  910. s->pm.u32SSCR,s->pm.u32SRCSA));
  911. CS_DBGOUT(CS_PM, 9, printk("u32DacASR: 0x%x u32AdcASR: 0x%xn",
  912. s->pm.u32DacASR,s->pm.u32AdcASR));
  913. CS_DBGOUT(CS_PM, 9, printk("u32DacSR: 0x%x u32AdcSR: 0x%xn",
  914. s->pm.u32DacSR,s->pm.u32AdcSR));
  915. CS_DBGOUT(CS_PM, 9, printk("u32MIDCR_Save: 0x%xn",
  916. s->pm.u32MIDCR_Save));
  917. }
  918. static void printpipe(struct cs4281_pipeline *pl)
  919. {
  920. CS_DBGOUT(CS_PM, 9, printk("pm struct:n"));
  921. CS_DBGOUT(CS_PM, 9, printk("flags:0x%x number: 0%xn",
  922. (unsigned)pl->flags,pl->number));
  923. CS_DBGOUT(CS_PM, 9, printk("u32DBAnValue: 0%x u32DBCnValue: 0x%xn",
  924. pl->u32DBAnValue,pl->u32DBCnValue));
  925. CS_DBGOUT(CS_PM, 9, printk("u32DMRnValue: 0x%x u32DCRnValue: 0x%xn",
  926. pl->u32DMRnValue,pl->u32DCRnValue));
  927. CS_DBGOUT(CS_PM, 9, printk("u32DBAnAddress: 0x%x u32DBCnAddress: 0x%xn",
  928. pl->u32DBAnAddress,pl->u32DBCnAddress));
  929. CS_DBGOUT(CS_PM, 9, printk("u32DCAnAddress: 0x%x u32DCCnAddress: 0x%xn",
  930. pl->u32DCCnAddress,pl->u32DCCnAddress));
  931. CS_DBGOUT(CS_PM, 9, printk("u32DMRnAddress: 0x%x u32DCRnAddress: 0x%xn",
  932. pl->u32DMRnAddress,pl->u32DCRnAddress));
  933. CS_DBGOUT(CS_PM, 9, printk("u32HDSRnAddress: 0x%x u32DBAn_Save: 0x%xn",
  934. pl->u32HDSRnAddress,pl->u32DBAn_Save));
  935. CS_DBGOUT(CS_PM, 9, printk("u32DBCn_Save: 0x%x u32DMRn_Save: 0x%xn",
  936. pl->u32DBCn_Save,pl->u32DMRn_Save));
  937. CS_DBGOUT(CS_PM, 9, printk("u32DCRn_Save: 0x%x u32DCCn_Save: 0x%xn",
  938. pl->u32DCRn_Save,pl->u32DCCn_Save));
  939. CS_DBGOUT(CS_PM, 9, printk("u32DCAn_Save: 0x%xn",
  940. pl->u32DCAn_Save));
  941. CS_DBGOUT(CS_PM, 9, printk("u32FCRn_Save: 0x%x u32FSICn_Save: 0x%xn",
  942. pl->u32FCRn_Save,pl->u32FSICn_Save));
  943. CS_DBGOUT(CS_PM, 9, printk("u32FCRnValue: 0x%x u32FSICnValue: 0x%xn",
  944. pl->u32FCRnValue,pl->u32FSICnValue));
  945. CS_DBGOUT(CS_PM, 9, printk("u32FCRnAddress: 0x%x u32FSICnAddress: 0x%xn",
  946. pl->u32FCRnAddress,pl->u32FSICnAddress));
  947. CS_DBGOUT(CS_PM, 9, printk("u32FPDRnValue: 0x%x u32FPDRnAddress: 0x%xn",
  948. pl->u32FPDRnValue,pl->u32FPDRnAddress));
  949. }
  950. static void printpipelines(struct cs4281_state *s)
  951. {
  952. int i;
  953. for(i=0;i<CS4281_NUMBER_OF_PIPELINES;i++)
  954. {
  955. if(s->pl[i].flags & CS4281_PIPELINE_VALID)
  956. {
  957. printpipe(&s->pl[i]);
  958. }
  959. }
  960. }
  961. /****************************************************************************
  962. *
  963. *  Suspend - save the ac97 regs, mute the outputs and power down the part.  
  964. *
  965. ****************************************************************************/
  966. void cs4281_ac97_suspend(struct cs4281_state *s)
  967. {
  968. int Count,i;
  969. CS_DBGOUT(CS_PM, 9, printk("cs4281: cs4281_ac97_suspend()+n"));
  970. for(Count = 0x2, i=0; (Count <= CS4281_AC97_HIGHESTREGTORESTORE)
  971. && (i < CS4281_AC97_NUMBER_RESTORE_REGS); 
  972. Count += 2, i++)
  973. {
  974. cs4281_read_ac97(s, BA0_AC97_RESET + Count, &s->pm.ac97[i]);
  975. }
  976. /*
  977. * Save the ac97 volume registers as well as the current powerdown state.
  978. * Now, mute the all the outputs (master, headphone, and mono), as well
  979. * as the PCM volume, in preparation for powering down the entire part.
  980. */ 
  981. cs4281_read_ac97(s, BA0_AC97_MASTER_VOLUME, &s->pm.u32AC97_master_volume);
  982. cs4281_read_ac97(s, BA0_AC97_HEADPHONE_VOLUME, &s->pm.u32AC97_headphone_volume);
  983. cs4281_read_ac97(s, BA0_AC97_MASTER_VOLUME_MONO, &s->pm.u32AC97_master_volume_mono);
  984. cs4281_read_ac97(s, BA0_AC97_PCM_OUT_VOLUME, &s->pm.u32AC97_pcm_out_volume);
  985. cs4281_write_ac97(s, BA0_AC97_MASTER_VOLUME, 0x8000);
  986. cs4281_write_ac97(s, BA0_AC97_HEADPHONE_VOLUME, 0x8000);
  987. cs4281_write_ac97(s, BA0_AC97_MASTER_VOLUME_MONO, 0x8000);
  988. cs4281_write_ac97(s, BA0_AC97_PCM_OUT_VOLUME, 0x8000);
  989. cs4281_read_ac97(s, BA0_AC97_POWERDOWN, &s->pm.u32AC97_powerdown);
  990. cs4281_read_ac97(s, BA0_AC97_GENERAL_PURPOSE, &s->pm.u32AC97_general_purpose);
  991. /*
  992. * And power down everything on the AC97 codec.
  993. */
  994. cs4281_write_ac97(s, BA0_AC97_POWERDOWN, 0xff00);
  995. CS_DBGOUT(CS_PM, 9, printk("cs4281: cs4281_ac97_suspend()-n"));
  996. }
  997. /****************************************************************************
  998. *
  999. *  Resume - power up the part and restore its registers..  
  1000. *
  1001. ****************************************************************************/
  1002. void cs4281_ac97_resume(struct cs4281_state *s)
  1003. {
  1004. int Count,i;
  1005. CS_DBGOUT(CS_PM, 9, printk("cs4281: cs4281_ac97_resume()+n"));
  1006. /* do not save the power state registers at this time
  1007.     //
  1008.     // If we saved away the power control registers, write them into the
  1009.     // shadows so those saved values get restored instead of the current
  1010.     // shadowed value.
  1011.     //
  1012.     if( bPowerStateSaved )
  1013.     {
  1014.         PokeShadow( 0x26, ulSaveReg0x26 );
  1015.         bPowerStateSaved = FALSE;
  1016.     }
  1017. */
  1018. //
  1019. // First, we restore the state of the general purpose register.  This
  1020. // contains the mic select (mic1 or mic2) and if we restore this after
  1021. // we restore the mic volume/boost state and mic2 was selected at
  1022. // suspend time, we will end up with a brief period of time where mic1
  1023. // is selected with the volume/boost settings for mic2, causing
  1024. // acoustic feedback.  So we restore the general purpose register
  1025. // first, thereby getting the correct mic selected before we restore
  1026. // the mic volume/boost.
  1027. //
  1028. cs4281_write_ac97(s, BA0_AC97_GENERAL_PURPOSE, s->pm.u32AC97_general_purpose);
  1029. //
  1030. // Now, while the outputs are still muted, restore the state of power
  1031. // on the AC97 part.
  1032. //
  1033. cs4281_write_ac97(s, BA0_AC97_POWERDOWN, s->pm.u32AC97_powerdown);
  1034. /*
  1035. * Restore just the first set of registers, from register number
  1036. * 0x02 to the register number that ulHighestRegToRestore specifies.
  1037. */
  1038. for( Count = 0x2, i=0; 
  1039. (Count <= CS4281_AC97_HIGHESTREGTORESTORE)
  1040. && (i < CS4281_AC97_NUMBER_RESTORE_REGS); 
  1041. Count += 2, i++)
  1042. {
  1043. cs4281_write_ac97(s, BA0_AC97_RESET + Count, s->pm.ac97[i]);
  1044. }
  1045. CS_DBGOUT(CS_PM, 9, printk("cs4281: cs4281_ac97_resume()-n"));
  1046. }
  1047. /* do not save the power state registers at this time
  1048. ****************************************************************************
  1049. *
  1050. *  SavePowerState - Save the power registers away. 
  1051. *
  1052. ****************************************************************************
  1053. void 
  1054. HWAC97codec::SavePowerState(void)
  1055. {
  1056.     ENTRY(TM_OBJECTCALLS, "HWAC97codec::SavePowerState()rn");
  1057.     ulSaveReg0x26 = PeekShadow(0x26);
  1058.     //
  1059.     // Note that we have saved registers that need to be restored during a
  1060.     // resume instead of ulAC97Regs[].
  1061.     //
  1062.     bPowerStateSaved = TRUE;
  1063. } // SavePowerState
  1064. */
  1065. void cs4281_SuspendFIFO(struct cs4281_state *s, struct cs4281_pipeline *pl)
  1066. {
  1067.  /*
  1068.  * We need to save the contents of the BASIC FIFO Registers.
  1069.  */
  1070. pl->u32FCRn_Save = readl(s->pBA0 + pl->u32FCRnAddress);
  1071. pl->u32FSICn_Save = readl(s->pBA0 + pl->u32FSICnAddress);
  1072. }
  1073. void cs4281_ResumeFIFO(struct cs4281_state *s, struct cs4281_pipeline *pl)
  1074. {
  1075.  /*
  1076.  * We need to restore the contents of the BASIC FIFO Registers.
  1077.  */
  1078. writel(pl->u32FCRn_Save,s->pBA0 + pl->u32FCRnAddress);
  1079. writel(pl->u32FSICn_Save,s->pBA0 + pl->u32FSICnAddress);
  1080. }
  1081. void cs4281_SuspendDMAengine(struct cs4281_state *s, struct cs4281_pipeline *pl)
  1082. {
  1083. //
  1084. // We need to save the contents of the BASIC DMA Registers.
  1085. //
  1086. pl->u32DBAn_Save = readl(s->pBA0 + pl->u32DBAnAddress);
  1087. pl->u32DBCn_Save = readl(s->pBA0 + pl->u32DBCnAddress);
  1088. pl->u32DMRn_Save = readl(s->pBA0 + pl->u32DMRnAddress);
  1089. pl->u32DCRn_Save = readl(s->pBA0 + pl->u32DCRnAddress);
  1090. pl->u32DCCn_Save = readl(s->pBA0 + pl->u32DCCnAddress);
  1091. pl->u32DCAn_Save = readl(s->pBA0 + pl->u32DCAnAddress);
  1092. }
  1093. void cs4281_ResumeDMAengine(struct cs4281_state *s, struct cs4281_pipeline *pl)
  1094. {
  1095. //
  1096. // We need to save the contents of the BASIC DMA Registers.
  1097. //
  1098. writel( pl->u32DBAn_Save, s->pBA0 + pl->u32DBAnAddress);
  1099. writel( pl->u32DBCn_Save, s->pBA0 + pl->u32DBCnAddress);
  1100. writel( pl->u32DMRn_Save, s->pBA0 + pl->u32DMRnAddress);
  1101. writel( pl->u32DCRn_Save, s->pBA0 + pl->u32DCRnAddress);
  1102. writel( pl->u32DCCn_Save, s->pBA0 + pl->u32DCCnAddress);
  1103. writel( pl->u32DCAn_Save, s->pBA0 + pl->u32DCAnAddress);
  1104. }
  1105. int cs4281_suspend(struct cs4281_state *s)
  1106. {
  1107. int i;
  1108. u32 u32CLKCR1;
  1109. struct cs4281_pm *pm = &s->pm;
  1110. CS_DBGOUT(CS_PM | CS_FUNCTION, 9, 
  1111. printk("cs4281: cs4281_suspend()+ flags=%dn",
  1112. (unsigned)s->pm.flags));
  1113. /*
  1114. * check the current state, only suspend if IDLE
  1115. */
  1116. if(!(s->pm.flags & CS4281_PM_IDLE))
  1117. {
  1118. CS_DBGOUT(CS_PM | CS_ERROR, 2, 
  1119. printk("cs4281: cs4281_suspend() unable to suspend, not IDLEn"));
  1120. return 1;
  1121. }
  1122. s->pm.flags &= ~CS4281_PM_IDLE;
  1123. s->pm.flags |= CS4281_PM_SUSPENDING;
  1124. //
  1125. // Gershwin CLKRUN - Set CKRA
  1126. //
  1127. u32CLKCR1 = readl(s->pBA0 + BA0_CLKCR1);
  1128. pm->u32CLKCR1_SAVE = u32CLKCR1;
  1129. if(!(u32CLKCR1 & 0x00010000 ) )
  1130. writel(u32CLKCR1 | 0x00010000, s->pBA0 + BA0_CLKCR1);
  1131. //
  1132. // First, turn on the clocks (yikes) to the devices, so that they will
  1133. // respond when we try to save their state.
  1134. //
  1135. if(!(u32CLKCR1 & CLKCR1_SWCE))
  1136. {
  1137. writel(u32CLKCR1 | CLKCR1_SWCE , s->pBA0 + BA0_CLKCR1);
  1138. }
  1139.     
  1140. //
  1141. // Save the power state
  1142. //
  1143. pm->u32SSPMValue = readl(s->pBA0 + BA0_SSPM);
  1144. //
  1145. // Disable interrupts.
  1146. //
  1147. writel(HICR_CHGM, s->pBA0 + BA0_HICR);
  1148. //
  1149. // Save the PCM Playback Left and Right Volume Control.
  1150. //
  1151. pm->u32PPLVCvalue = readl(s->pBA0 + BA0_PPLVC);
  1152. pm->u32PPRVCvalue = readl(s->pBA0 + BA0_PPRVC);
  1153. //
  1154. // Save the FM Synthesis Left and Right Volume Control.
  1155. //
  1156. pm->u32FMLVCvalue = readl(s->pBA0 + BA0_FMLVC);
  1157. pm->u32FMRVCvalue = readl(s->pBA0 + BA0_FMRVC);
  1158. //
  1159. // Save the GPIOR value.
  1160. //
  1161. pm->u32GPIORvalue = readl(s->pBA0 + BA0_GPIOR);
  1162. //
  1163. // Save the JSCTL value.
  1164. //
  1165. pm->u32JSCTLvalue = readl(s->pBA0 + BA0_GPIOR);
  1166. //
  1167. // Save Sound System Control Register
  1168. //
  1169. pm->u32SSCR = readl(s->pBA0 + BA0_SSCR);
  1170. //
  1171. // Save SRC Slot Assinment register
  1172. //
  1173. pm->u32SRCSA = readl(s->pBA0 + BA0_SRCSA);
  1174. //
  1175. // Save sample rate
  1176. //
  1177. pm->u32DacASR = readl(s->pBA0 + BA0_PASR);
  1178. pm->u32AdcASR = readl(s->pBA0 + BA0_CASR);
  1179. pm->u32DacSR = readl(s->pBA0 + BA0_DACSR);
  1180. pm->u32AdcSR = readl(s->pBA0 + BA0_ADCSR);
  1181. /*
  1182. * save the current hwptr, then stop the dac/adc
  1183. */
  1184. pm->u32hwptr_playback = readl(s->pBA0 + BA0_DCA0);
  1185. pm->u32hwptr_capture = readl(s->pBA0 + BA0_DCA1);
  1186. stop_dac(s);
  1187. stop_adc(s);
  1188. //
  1189. // Loop through all of the PipeLines 
  1190. //
  1191. for(i = 0; i < CS4281_NUMBER_OF_PIPELINES; i++)
  1192.         {
  1193. if(s->pl[i].flags & CS4281_PIPELINE_VALID)
  1194. {
  1195. //
  1196. // Ask the DMAengines and FIFOs to Suspend.
  1197. //
  1198. cs4281_SuspendDMAengine(s,&s->pl[i]);
  1199. cs4281_SuspendFIFO(s,&s->pl[i]);
  1200. }
  1201. }
  1202. //
  1203. // We need to save the contents of the Midi Control Register.
  1204. //
  1205. pm->u32MIDCR_Save = readl(s->pBA0 + BA0_MIDCR);
  1206. /*
  1207. * save off the AC97 part information
  1208. */
  1209. cs4281_ac97_suspend(s);
  1210.     
  1211. //
  1212. // Turn off the serial ports.
  1213. //
  1214. writel(0, s->pBA0 + BA0_SERMC);
  1215. //
  1216. // Power off FM, Joystick, AC link, 
  1217. //
  1218. writel(0, s->pBA0 + BA0_SSPM);
  1219. //
  1220. // DLL off.
  1221. //
  1222. writel(0, s->pBA0 + BA0_CLKCR1);
  1223. //
  1224. // AC link off.
  1225. //
  1226. writel(0, s->pBA0 + BA0_SPMC);
  1227. //
  1228. // Put the chip into D3(hot) state.
  1229. //
  1230. // PokeBA0(BA0_PMCS, 0x00000003);
  1231. //
  1232. // Gershwin CLKRUN - Clear CKRA
  1233. //
  1234. u32CLKCR1 = readl(s->pBA0 + BA0_CLKCR1);
  1235. writel(u32CLKCR1 & 0xFFFEFFFF, s->pBA0 + BA0_CLKCR1);
  1236. #ifdef CSDEBUG
  1237. printpm(s);
  1238. printpipelines(s);
  1239. #endif
  1240. s->pm.flags &= ~CS4281_PM_SUSPENDING;
  1241. s->pm.flags |= CS4281_PM_SUSPENDED;
  1242. CS_DBGOUT(CS_PM | CS_FUNCTION, 9, 
  1243. printk("cs4281: cs4281_suspend()- flags=%dn",
  1244. (unsigned)s->pm.flags));
  1245. return 0;
  1246. }
  1247. int cs4281_resume(struct cs4281_state *s)
  1248. {
  1249. int i;
  1250. unsigned temp1;
  1251. u32 u32CLKCR1;
  1252. struct cs4281_pm *pm = &s->pm;
  1253. CS_DBGOUT(CS_PM | CS_FUNCTION, 4, 
  1254. printk( "cs4281: cs4281_resume()+ flags=%dn",
  1255. (unsigned)s->pm.flags));
  1256. if(!(s->pm.flags & CS4281_PM_SUSPENDED))
  1257. {
  1258. CS_DBGOUT(CS_PM | CS_ERROR, 2, 
  1259. printk("cs4281: cs4281_resume() unable to resume, not SUSPENDEDn"));
  1260. return 1;
  1261. }
  1262. s->pm.flags &= ~CS4281_PM_SUSPENDED;
  1263. s->pm.flags |= CS4281_PM_RESUMING;
  1264. //
  1265. // Gershwin CLKRUN - Set CKRA
  1266. //
  1267. u32CLKCR1 = readl(s->pBA0 + BA0_CLKCR1);
  1268. writel(u32CLKCR1 | 0x00010000, s->pBA0 + BA0_CLKCR1);
  1269. //
  1270. // set the power state.
  1271. //
  1272. //old PokeBA0(BA0_PMCS, 0);
  1273. //
  1274. // Program the clock circuit and serial ports.
  1275. //
  1276. temp1 = cs4281_hw_init(s);
  1277. if (temp1) {
  1278. CS_DBGOUT(CS_ERROR | CS_INIT, 1,
  1279.     printk(KERN_ERR
  1280. "cs4281: resume cs4281_hw_init() error.n"));
  1281. return -1;
  1282. }
  1283. //
  1284. // restore the Power state
  1285. //
  1286. writel(pm->u32SSPMValue, s->pBA0 + BA0_SSPM);
  1287. //
  1288. // Set post SRC mix setting (FM or ALT48K)
  1289. //
  1290. writel(pm->u32SSPM_BITS, s->pBA0 + BA0_SSPM);
  1291. //
  1292. // Loop through all of the PipeLines 
  1293. //
  1294. for(i = 0; i < CS4281_NUMBER_OF_PIPELINES; i++)
  1295.         {
  1296. if(s->pl[i].flags & CS4281_PIPELINE_VALID)
  1297. {
  1298. //
  1299. // Ask the DMAengines and FIFOs to Resume.
  1300. //
  1301. cs4281_ResumeDMAengine(s,&s->pl[i]);
  1302. cs4281_ResumeFIFO(s,&s->pl[i]);
  1303. }
  1304. }
  1305. //
  1306. // We need to restore the contents of the Midi Control Register.
  1307. //
  1308. writel(pm->u32MIDCR_Save, s->pBA0 + BA0_MIDCR);
  1309. cs4281_ac97_resume(s);
  1310. //
  1311. // Restore the PCM Playback Left and Right Volume Control.
  1312. //
  1313. writel(pm->u32PPLVCvalue, s->pBA0 + BA0_PPLVC);
  1314. writel(pm->u32PPRVCvalue, s->pBA0 + BA0_PPRVC);
  1315. //
  1316. // Restore the FM Synthesis Left and Right Volume Control.
  1317. //
  1318. writel(pm->u32FMLVCvalue, s->pBA0 + BA0_FMLVC);
  1319. writel(pm->u32FMRVCvalue, s->pBA0 + BA0_FMRVC);
  1320. //
  1321. // Restore the JSCTL value.
  1322. //
  1323. writel(pm->u32JSCTLvalue, s->pBA0 + BA0_JSCTL);
  1324. //
  1325. // Restore the GPIOR register value.
  1326. //
  1327. writel(pm->u32GPIORvalue, s->pBA0 + BA0_GPIOR);
  1328. //
  1329. // Restore Sound System Control Register
  1330. //
  1331. writel(pm->u32SSCR, s->pBA0 + BA0_SSCR);
  1332. //
  1333. // Restore SRC Slot Assignment register
  1334. //
  1335. writel(pm->u32SRCSA, s->pBA0 + BA0_SRCSA);
  1336. //
  1337. // Restore sample rate
  1338. //
  1339. writel(pm->u32DacASR, s->pBA0 + BA0_PASR);
  1340. writel(pm->u32AdcASR, s->pBA0 + BA0_CASR);
  1341. writel(pm->u32DacSR, s->pBA0 + BA0_DACSR);
  1342. writel(pm->u32AdcSR, s->pBA0 + BA0_ADCSR);
  1343. // 
  1344. // Restore CFL1/2 registers we saved to compensate for OEM bugs.
  1345. //
  1346. // PokeBA0(BA0_CFLR, ulConfig);
  1347. //
  1348. // Gershwin CLKRUN - Clear CKRA
  1349. //
  1350. writel(pm->u32CLKCR1_SAVE, s->pBA0 + BA0_CLKCR1);
  1351. //
  1352. // Enable interrupts on the part.
  1353. //
  1354. writel(HICR_IEV | HICR_CHGM, s->pBA0 + BA0_HICR);
  1355. #ifdef CSDEBUG
  1356. printpm(s);
  1357. printpipelines(s);
  1358. #endif
  1359. /*
  1360. * change the state, restore the current hwptrs, then stop the dac/adc
  1361. */
  1362. s->pm.flags |= CS4281_PM_IDLE;
  1363. s->pm.flags &= ~(CS4281_PM_SUSPENDING | CS4281_PM_SUSPENDED 
  1364. | CS4281_PM_RESUMING | CS4281_PM_RESUMED);
  1365. writel(s->pm.u32hwptr_playback, s->pBA0 + BA0_DCA0);
  1366. writel(s->pm.u32hwptr_capture, s->pBA0 + BA0_DCA1);
  1367. start_dac(s);
  1368. start_adc(s);
  1369. CS_DBGOUT(CS_PM | CS_FUNCTION, 9, printk("cs4281: cs4281_resume()- flags=%dn",
  1370. (unsigned)s->pm.flags));
  1371. return 0;
  1372. }
  1373. #endif
  1374. //******************************************************************************
  1375. // "cs4281_play_rate()" --
  1376. //******************************************************************************
  1377. static void cs4281_play_rate(struct cs4281_state *card, u32 playrate)
  1378. {
  1379. u32 DACSRvalue = 1;
  1380. // Based on the sample rate, program the DACSR register.
  1381. if (playrate == 8000)
  1382. DACSRvalue = 5;
  1383. if (playrate == 11025)
  1384. DACSRvalue = 4;
  1385. else if (playrate == 22050)
  1386. DACSRvalue = 2;
  1387. else if (playrate == 44100)
  1388. DACSRvalue = 1;
  1389. else if ((playrate <= 48000) && (playrate >= 6023))
  1390. DACSRvalue = 24576000 / (playrate * 16);
  1391. else if (playrate < 6023)
  1392. // Not allowed by open.
  1393. return;
  1394. else if (playrate > 48000)
  1395. // Not allowed by open.
  1396. return;
  1397. CS_DBGOUT(CS_WAVE_WRITE | CS_PARMS, 2, printk(KERN_INFO
  1398. "cs4281: cs4281_play_rate(): DACSRvalue=0x%.8x playrate=%dn",
  1399. DACSRvalue, playrate));
  1400. //  Write the 'sample rate select code'
  1401. //  to the 'DAC Sample Rate' register.
  1402. writel(DACSRvalue, card->pBA0 + BA0_DACSR); // (744h)
  1403. }
  1404. //******************************************************************************
  1405. // "cs4281_record_rate()" -- Initialize the record sample rate converter.
  1406. //******************************************************************************
  1407. static void cs4281_record_rate(struct cs4281_state *card, u32 outrate)
  1408. {
  1409. u32 ADCSRvalue = 1;
  1410. //
  1411. // Based on the sample rate, program the ADCSR register
  1412. //
  1413. if (outrate == 8000)
  1414. ADCSRvalue = 5;
  1415. if (outrate == 11025)
  1416. ADCSRvalue = 4;
  1417. else if (outrate == 22050)
  1418. ADCSRvalue = 2;
  1419. else if (outrate == 44100)
  1420. ADCSRvalue = 1;
  1421. else if ((outrate <= 48000) && (outrate >= 6023))
  1422. ADCSRvalue = 24576000 / (outrate * 16);
  1423. else if (outrate < 6023) {
  1424. // Not allowed by open.
  1425. return;
  1426. } else if (outrate > 48000) {
  1427. // Not allowed by open.
  1428. return;
  1429. }
  1430. CS_DBGOUT(CS_WAVE_READ | CS_PARMS, 2, printk(KERN_INFO
  1431. "cs4281: cs4281_record_rate(): ADCSRvalue=0x%.8x outrate=%dn",
  1432. ADCSRvalue, outrate));
  1433. //  Write the 'sample rate select code
  1434. //  to the 'ADC Sample Rate' register.
  1435. writel(ADCSRvalue, card->pBA0 + BA0_ADCSR); // (748h)
  1436. }
  1437. static void stop_dac(struct cs4281_state *s)
  1438. {
  1439. unsigned long flags;
  1440. unsigned temp1;
  1441. CS_DBGOUT(CS_WAVE_WRITE, 3, printk(KERN_INFO "cs4281: stop_dac():n"));
  1442. spin_lock_irqsave(&s->lock, flags);
  1443. s->ena &= ~FMODE_WRITE;
  1444. temp1 = readl(s->pBA0 + BA0_DCR0) | DCRn_MSK;
  1445. writel(temp1, s->pBA0 + BA0_DCR0);
  1446. spin_unlock_irqrestore(&s->lock, flags);
  1447. }
  1448. static void start_dac(struct cs4281_state *s)
  1449. {
  1450. unsigned long flags;
  1451. unsigned temp1;
  1452. CS_DBGOUT(CS_FUNCTION, 3, printk(KERN_INFO "cs4281: start_dac()+n"));
  1453. spin_lock_irqsave(&s->lock, flags);
  1454. if (!(s->ena & FMODE_WRITE) && (s->dma_dac.mapped ||
  1455. (s->dma_dac.count > 0
  1456.      && s->dma_dac.ready))
  1457. #ifndef NOT_CS4281_PM
  1458. && (s->pm.flags & CS4281_PM_IDLE))
  1459. #else
  1460. )
  1461. #endif
  1462. {
  1463. s->ena |= FMODE_WRITE;
  1464. temp1 = readl(s->pBA0 + BA0_DCR0) & ~DCRn_MSK; // Clear DMA0 channel mask.
  1465. writel(temp1, s->pBA0 + BA0_DCR0); // Start DMA'ing.
  1466. writel(HICR_IEV | HICR_CHGM, s->pBA0 + BA0_HICR); // Enable interrupts.              
  1467. writel(7, s->pBA0 + BA0_PPRVC);
  1468. writel(7, s->pBA0 + BA0_PPLVC);
  1469. CS_DBGOUT(CS_WAVE_WRITE | CS_PARMS, 8, printk(KERN_INFO
  1470. "cs4281: start_dac(): writel 0x%x start dman", temp1));
  1471. }
  1472. spin_unlock_irqrestore(&s->lock, flags);
  1473. CS_DBGOUT(CS_FUNCTION, 3,
  1474.   printk(KERN_INFO "cs4281: start_dac()-n"));
  1475. }
  1476. static void stop_adc(struct cs4281_state *s)
  1477. {
  1478. unsigned long flags;
  1479. unsigned temp1;
  1480. CS_DBGOUT(CS_FUNCTION, 3,
  1481.   printk(KERN_INFO "cs4281: stop_adc()+n"));
  1482. spin_lock_irqsave(&s->lock, flags);
  1483. s->ena &= ~FMODE_READ;
  1484. if (s->conversion == 1) {
  1485. s->conversion = 0;
  1486. s->prop_adc.fmt = s->prop_adc.fmt_original;
  1487. }
  1488. temp1 = readl(s->pBA0 + BA0_DCR1) | DCRn_MSK;
  1489. writel(temp1, s->pBA0 + BA0_DCR1);
  1490. spin_unlock_irqrestore(&s->lock, flags);
  1491. CS_DBGOUT(CS_FUNCTION, 3,
  1492.   printk(KERN_INFO "cs4281: stop_adc()-n"));
  1493. }
  1494. static void start_adc(struct cs4281_state *s)
  1495. {
  1496. unsigned long flags;
  1497. unsigned temp1;
  1498. CS_DBGOUT(CS_FUNCTION, 2,
  1499.   printk(KERN_INFO "cs4281: start_adc()+n"));
  1500. if (!(s->ena & FMODE_READ) &&
  1501.     (s->dma_adc.mapped || s->dma_adc.count <=
  1502.      (signed) (s->dma_adc.dmasize - 2 * s->dma_adc.fragsize))
  1503.     && s->dma_adc.ready
  1504. #ifndef NOT_CS4281_PM
  1505. && (s->pm.flags & CS4281_PM_IDLE))
  1506. #else
  1507. #endif
  1508. {
  1509. if (s->prop_adc.fmt & AFMT_S8 || s->prop_adc.fmt & AFMT_U8) {
  1510. // 
  1511. // now only use 16 bit capture, due to truncation issue
  1512. // in the chip, noticable distortion occurs.
  1513. // allocate buffer and then convert from 16 bit to 
  1514. // 8 bit for the user buffer.
  1515. //
  1516. s->prop_adc.fmt_original = s->prop_adc.fmt;
  1517. if (s->prop_adc.fmt & AFMT_S8) {
  1518. s->prop_adc.fmt &= ~AFMT_S8;
  1519. s->prop_adc.fmt |= AFMT_S16_LE;
  1520. }
  1521. if (s->prop_adc.fmt & AFMT_U8) {
  1522. s->prop_adc.fmt &= ~AFMT_U8;
  1523. s->prop_adc.fmt |= AFMT_U16_LE;
  1524. }
  1525. //
  1526. // prog_dmabuf_adc performs a stop_adc() but that is
  1527. // ok since we really haven't started the DMA yet.
  1528. //
  1529. prog_codec(s, CS_TYPE_ADC);
  1530. if (prog_dmabuf_adc(s) != 0) {
  1531. CS_DBGOUT(CS_ERROR, 2, printk(KERN_INFO
  1532.  "cs4281: start_adc(): error in prog_dmabuf_adcn"));
  1533. }
  1534. s->conversion = 1;
  1535. }
  1536. spin_lock_irqsave(&s->lock, flags);
  1537. s->ena |= FMODE_READ;
  1538. temp1 = readl(s->pBA0 + BA0_DCR1) & ~DCRn_MSK; // Clear DMA1 channel mask bit.
  1539. writel(temp1, s->pBA0 + BA0_DCR1); // Start recording
  1540. writel(HICR_IEV | HICR_CHGM, s->pBA0 + BA0_HICR); // Enable interrupts.
  1541. spin_unlock_irqrestore(&s->lock, flags);
  1542. CS_DBGOUT(CS_PARMS, 6, printk(KERN_INFO
  1543.  "cs4281: start_adc(): writel 0x%x n", temp1));
  1544. }
  1545. CS_DBGOUT(CS_FUNCTION, 2,
  1546.   printk(KERN_INFO "cs4281: start_adc()-n"));
  1547. }
  1548. // --------------------------------------------------------------------- 
  1549. #define DMABUF_MINORDER 0 // ==> min buffer size = 8K.
  1550. extern void dealloc_dmabuf(struct cs4281_state *s, struct dmabuf *db)
  1551. {
  1552. struct page *map, *mapend;
  1553. if (db->rawbuf) {
  1554. // Undo prog_dmabuf()'s marking the pages as reserved 
  1555. mapend = virt_to_page(db->rawbuf + 
  1556. (PAGE_SIZE << db->buforder) - 1);
  1557. for (map = virt_to_page(db->rawbuf); map <= mapend; map++)
  1558. cs4x_mem_map_unreserve(map);
  1559. pci_free_consistent(s->pcidev, PAGE_SIZE << db->buforder, 
  1560.     db->rawbuf, db->dmaaddr);
  1561. }
  1562. if (s->tmpbuff && (db->type == CS_TYPE_ADC)) {
  1563. // Undo prog_dmabuf()'s marking the pages as reserved 
  1564. mapend = virt_to_page(s->tmpbuff +
  1565.  (PAGE_SIZE << s->buforder_tmpbuff) - 1);
  1566. for (map = virt_to_page(s->tmpbuff); map <= mapend; map++)
  1567. cs4x_mem_map_unreserve(map);
  1568. pci_free_consistent(s->pcidev, PAGE_SIZE << s->buforder_tmpbuff,
  1569.     s->tmpbuff, s->dmaaddr_tmpbuff);
  1570. }
  1571. s->tmpbuff = NULL;
  1572. db->rawbuf = NULL;
  1573. db->mapped = db->ready = 0;
  1574. }
  1575. static int prog_dmabuf(struct cs4281_state *s, struct dmabuf *db)
  1576. {
  1577. int order;
  1578. unsigned bytespersec, temp1;
  1579. unsigned bufs, sample_shift = 0;
  1580. struct page *map, *mapend;
  1581. unsigned long df;
  1582. CS_DBGOUT(CS_FUNCTION, 2,
  1583.   printk(KERN_INFO "cs4281: prog_dmabuf()+n"));
  1584. db->hwptr = db->swptr = db->total_bytes = db->count = db->error =
  1585.     db->endcleared = db->blocks = db->wakeup = db->underrun = 0;
  1586. /*
  1587. * check for order within limits, but do not overwrite value, check
  1588. * later for a fractional defaultorder (i.e. 100+).
  1589. */
  1590. if((defaultorder >= 0) && (defaultorder < 12))
  1591. df = defaultorder;
  1592. else
  1593. df = 1;
  1594. if (!db->rawbuf) {
  1595. db->ready = db->mapped = 0;
  1596. for (order = df; order >= DMABUF_MINORDER; order--)
  1597. if ( (db->rawbuf = (void *) pci_alloc_consistent(
  1598. s->pcidev, PAGE_SIZE << order, &db->dmaaddr)))
  1599.     break;
  1600. if (!db->rawbuf) {
  1601. CS_DBGOUT(CS_ERROR, 1, printk(KERN_ERR
  1602. "cs4281: prog_dmabuf(): unable to allocate rawbufn"));
  1603. return -ENOMEM;
  1604. }
  1605. db->buforder = order;
  1606. // Now mark the pages as reserved; otherwise the 
  1607. // remap_page_range() in cs4281_mmap doesn't work.
  1608. // 1. get index to last page in mem_map array for rawbuf.
  1609. mapend = virt_to_page(db->rawbuf + 
  1610. (PAGE_SIZE << db->buforder) - 1);
  1611. // 2. mark each physical page in range as 'reserved'.
  1612. for (map = virt_to_page(db->rawbuf); map <= mapend; map++)
  1613. cs4x_mem_map_reserve(map);
  1614. }
  1615. if (!s->tmpbuff && (db->type == CS_TYPE_ADC)) {
  1616. for (order = df; order >= DMABUF_MINORDER;
  1617.      order--)
  1618. if ( (s->tmpbuff = (void *) pci_alloc_consistent(
  1619. s->pcidev, PAGE_SIZE << order, 
  1620. &s->dmaaddr_tmpbuff)))
  1621.     break;
  1622. if (!s->tmpbuff) {
  1623. CS_DBGOUT(CS_ERROR, 1, printk(KERN_ERR
  1624. "cs4281: prog_dmabuf(): unable to allocate tmpbuffn"));
  1625. return -ENOMEM;
  1626. }
  1627. s->buforder_tmpbuff = order;
  1628. // Now mark the pages as reserved; otherwise the 
  1629. // remap_page_range() in cs4281_mmap doesn't work.
  1630. // 1. get index to last page in mem_map array for rawbuf.
  1631. mapend = virt_to_page(s->tmpbuff + 
  1632. (PAGE_SIZE << s->buforder_tmpbuff) - 1);
  1633. // 2. mark each physical page in range as 'reserved'.
  1634. for (map = virt_to_page(s->tmpbuff); map <= mapend; map++)
  1635. cs4x_mem_map_reserve(map);
  1636. }
  1637. if (db->type == CS_TYPE_DAC) {
  1638. if (s->prop_dac.fmt & (AFMT_S16_LE | AFMT_U16_LE))
  1639. sample_shift++;
  1640. if (s->prop_dac.channels > 1)
  1641. sample_shift++;
  1642. bytespersec = s->prop_dac.rate << sample_shift;
  1643. } else // CS_TYPE_ADC
  1644. {
  1645. if (s->prop_adc.fmt & (AFMT_S16_LE | AFMT_U16_LE))
  1646. sample_shift++;
  1647. if (s->prop_adc.channels > 1)
  1648. sample_shift++;
  1649. bytespersec = s->prop_adc.rate << sample_shift;
  1650. }
  1651. bufs = PAGE_SIZE << db->buforder;
  1652. /*
  1653. * added fractional "defaultorder" inputs. if >100 then use 
  1654. * defaultorder-100 as power of 2 for the buffer size. example:
  1655. * 106 = 2^(106-100) = 2^6 = 64 bytes for the buffer size.
  1656. */
  1657. if(defaultorder >= 100)
  1658. {
  1659. bufs = 1 << (defaultorder-100);
  1660. }
  1661. #define INTERRUPT_RATE_MS       100 // Interrupt rate in milliseconds.
  1662. db->numfrag = 2;
  1663. /* 
  1664. * Nominal frag size(bytes/interrupt)
  1665. */
  1666. temp1 = bytespersec / (1000 / INTERRUPT_RATE_MS);
  1667. db->fragshift = 8; // Min 256 bytes.
  1668. while (1 << db->fragshift < temp1) // Calc power of 2 frag size.
  1669. db->fragshift += 1;
  1670. db->fragsize = 1 << db->fragshift;
  1671. db->dmasize = db->fragsize * 2;
  1672. db->fragsamples = db->fragsize >> sample_shift; // # samples/fragment.
  1673. // If the calculated size is larger than the allocated
  1674. //  buffer, divide the allocated buffer into 2 fragments.
  1675. if (db->dmasize > bufs) {
  1676. db->numfrag = 2; // Two fragments.
  1677. db->fragsize = bufs >> 1; // Each 1/2 the alloc'ed buffer.
  1678. db->fragsamples = db->fragsize >> sample_shift; // # samples/fragment.
  1679. db->dmasize = bufs; // Use all the alloc'ed buffer.
  1680. db->fragshift = 0; // Calculate 'fragshift'.
  1681. temp1 = db->fragsize; // update_ptr() uses it 
  1682. while ((temp1 >>= 1) > 1) // to calc 'total-bytes'
  1683. db->fragshift += 1; // returned in DSP_GETI/OPTR. 
  1684. }
  1685. CS_DBGOUT(CS_PARMS, 3, printk(KERN_INFO
  1686. "cs4281: prog_dmabuf(): numfrag=%d fragsize=%d fragsamples=%d fragshift=%d bufs=%d fmt=0x%x ch=%dn",
  1687. db->numfrag, db->fragsize, db->fragsamples, 
  1688. db->fragshift, bufs, 
  1689. (db->type == CS_TYPE_DAC) ? s->prop_dac.fmt : 
  1690. s->prop_adc.fmt, 
  1691. (db->type == CS_TYPE_DAC) ? s->prop_dac.channels : 
  1692. s->prop_adc.channels));
  1693. CS_DBGOUT(CS_FUNCTION, 2,
  1694.   printk(KERN_INFO "cs4281: prog_dmabuf()-n"));
  1695. return 0;
  1696. }
  1697. static int prog_dmabuf_adc(struct cs4281_state *s)
  1698. {
  1699. unsigned long va;
  1700. unsigned count;
  1701. int c;
  1702. stop_adc(s);
  1703. s->dma_adc.type = CS_TYPE_ADC;
  1704. if ((c = prog_dmabuf(s, &s->dma_adc)))
  1705. return c;
  1706. if (s->dma_adc.rawbuf) {
  1707. memset(s->dma_adc.rawbuf,
  1708.        (s->prop_adc.
  1709. fmt & (AFMT_U8 | AFMT_U16_LE)) ? 0x80 : 0,
  1710.        s->dma_adc.dmasize);
  1711. }
  1712. if (s->tmpbuff) {
  1713. memset(s->tmpbuff,
  1714.        (s->prop_adc.
  1715. fmt & (AFMT_U8 | AFMT_U16_LE)) ? 0x80 : 0,
  1716.        PAGE_SIZE << s->buforder_tmpbuff);
  1717. }
  1718. va = virt_to_bus(s->dma_adc.rawbuf);
  1719. count = s->dma_adc.dmasize;
  1720. if (s->prop_adc.
  1721.     fmt & (AFMT_S16_LE | AFMT_U16_LE | AFMT_S16_BE | AFMT_U16_BE))
  1722.     count /= 2; // 16-bit.
  1723. if (s->prop_adc.channels > 1)
  1724. count /= 2; // Assume stereo.
  1725. CS_DBGOUT(CS_WAVE_READ, 3, printk(KERN_INFO
  1726. "cs4281: prog_dmabuf_adc(): count=%d va=0x%.8xn",
  1727. count, (unsigned) va));
  1728. writel(va, s->pBA0 + BA0_DBA1); // Set buffer start address.
  1729. writel(count - 1, s->pBA0 + BA0_DBC1); // Set count. 
  1730. s->dma_adc.ready = 1;
  1731. return 0;
  1732. }
  1733. static int prog_dmabuf_dac(struct cs4281_state *s)
  1734. {
  1735. unsigned long va;
  1736. unsigned count;
  1737. int c;
  1738. stop_dac(s);
  1739. s->dma_dac.type = CS_TYPE_DAC;
  1740. if ((c = prog_dmabuf(s, &s->dma_dac)))
  1741. return c;
  1742. memset(s->dma_dac.rawbuf,
  1743.        (s->prop_dac.fmt & (AFMT_U8 | AFMT_U16_LE)) ? 0x80 : 0,
  1744.        s->dma_dac.dmasize);
  1745. va = virt_to_bus(s->dma_dac.rawbuf);
  1746. count = s->dma_dac.dmasize;
  1747. if (s->prop_dac.
  1748.     fmt & (AFMT_S16_LE | AFMT_U16_LE | AFMT_S16_BE | AFMT_U16_BE))
  1749.     count /= 2; // 16-bit.
  1750. if (s->prop_dac.channels > 1)
  1751. count /= 2; // Assume stereo.
  1752. writel(va, s->pBA0 + BA0_DBA0); // Set buffer start address.
  1753. writel(count - 1, s->pBA0 + BA0_DBC0); // Set count.             
  1754. CS_DBGOUT(CS_WAVE_WRITE, 3, printk(KERN_INFO
  1755. "cs4281: prog_dmabuf_dac(): count=%d va=0x%.8xn",
  1756. count, (unsigned) va));
  1757. s->dma_dac.ready = 1;
  1758. return 0;
  1759. }
  1760. static void clear_advance(void *buf, unsigned bsize, unsigned bptr,
  1761.   unsigned len, unsigned char c)
  1762. {
  1763. if (bptr + len > bsize) {
  1764. unsigned x = bsize - bptr;
  1765. memset(((char *) buf) + bptr, c, x);
  1766. bptr = 0;
  1767. len -= x;
  1768. }
  1769. CS_DBGOUT(CS_WAVE_WRITE, 4, printk(KERN_INFO
  1770. "cs4281: clear_advance(): memset %d at 0x%.8x for %d size n",
  1771. (unsigned)c, (unsigned)((char *) buf) + bptr, len));
  1772. memset(((char *) buf) + bptr, c, len);
  1773. }
  1774. // call with spinlock held! 
  1775. static void cs4281_update_ptr(struct cs4281_state *s, int intflag)
  1776. {
  1777. int diff;
  1778. unsigned hwptr, va;
  1779. // update ADC pointer 
  1780. if (s->ena & FMODE_READ) {
  1781. hwptr = readl(s->pBA0 + BA0_DCA1); // Read capture DMA address.
  1782. va = virt_to_bus(s->dma_adc.rawbuf);
  1783. hwptr -= (unsigned) va;
  1784. diff =
  1785.     (s->dma_adc.dmasize + hwptr -
  1786.      s->dma_adc.hwptr) % s->dma_adc.dmasize;
  1787. s->dma_adc.hwptr = hwptr;
  1788. s->dma_adc.total_bytes += diff;
  1789. s->dma_adc.count += diff;
  1790. if (s->dma_adc.count > s->dma_adc.dmasize)
  1791. s->dma_adc.count = s->dma_adc.dmasize;
  1792. if (s->dma_adc.mapped) {
  1793. if (s->dma_adc.count >= (signed) s->dma_adc.fragsize) 
  1794. wake_up(&s->dma_adc.wait);
  1795. } else {
  1796. if (s->dma_adc.count > 0)
  1797. wake_up(&s->dma_adc.wait);
  1798. }
  1799. CS_DBGOUT(CS_PARMS, 8, printk(KERN_INFO
  1800. "cs4281: cs4281_update_ptr(): s=0x%.8x hwptr=%d total_bytes=%d count=%d n",
  1801. (unsigned)s, s->dma_adc.hwptr, 
  1802. s->dma_adc.total_bytes, s->dma_adc.count));
  1803. }
  1804. // update DAC pointer 
  1805. //
  1806. // check for end of buffer, means that we are going to wait for another interrupt
  1807. // to allow silence to fill the fifos on the part, to keep pops down to a minimum.
  1808. //
  1809. if (s->ena & FMODE_WRITE) {
  1810. hwptr = readl(s->pBA0 + BA0_DCA0); // Read play DMA address.
  1811. va = virt_to_bus(s->dma_dac.rawbuf);
  1812. hwptr -= (unsigned) va;
  1813. diff = (s->dma_dac.dmasize + hwptr -
  1814.      s->dma_dac.hwptr) % s->dma_dac.dmasize;
  1815. s->dma_dac.hwptr = hwptr;
  1816. s->dma_dac.total_bytes += diff;
  1817. if (s->dma_dac.mapped) {
  1818. s->dma_dac.count += diff;
  1819. if (s->dma_dac.count >= s->dma_dac.fragsize) {
  1820. s->dma_dac.wakeup = 1;
  1821. wake_up(&s->dma_dac.wait);
  1822. if (s->dma_dac.count > s->dma_dac.dmasize)
  1823. s->dma_dac.count &=
  1824.     s->dma_dac.dmasize - 1;
  1825. }
  1826. } else {
  1827. s->dma_dac.count -= diff;
  1828. if (s->dma_dac.count <= 0) {
  1829. //
  1830. // fill with silence, and do not shut down the DAC.
  1831. // Continue to play silence until the _release.
  1832. //
  1833. CS_DBGOUT(CS_WAVE_WRITE, 6, printk(KERN_INFO
  1834. "cs4281: cs4281_update_ptr(): memset %d at 0x%.8x for %d size n",
  1835. (unsigned)(s->prop_dac.fmt & 
  1836. (AFMT_U8 | AFMT_U16_LE)) ? 0x80 : 0, 
  1837. (unsigned)s->dma_dac.rawbuf, 
  1838. s->dma_dac.dmasize));
  1839. memset(s->dma_dac.rawbuf,
  1840.        (s->prop_dac.
  1841. fmt & (AFMT_U8 | AFMT_U16_LE)) ?
  1842.        0x80 : 0, s->dma_dac.dmasize);
  1843. if (s->dma_dac.count < 0) {
  1844. s->dma_dac.underrun = 1;
  1845. s->dma_dac.count = 0;
  1846. CS_DBGOUT(CS_ERROR, 9, printk(KERN_INFO
  1847.  "cs4281: cs4281_update_ptr(): underrunn"));
  1848. }
  1849. } else if (s->dma_dac.count <=
  1850.    (signed) s->dma_dac.fragsize
  1851.    && !s->dma_dac.endcleared) {
  1852. clear_advance(s->dma_dac.rawbuf,
  1853.       s->dma_dac.dmasize,
  1854.       s->dma_dac.swptr,
  1855.       s->dma_dac.fragsize,
  1856.       (s->prop_dac.
  1857.        fmt & (AFMT_U8 |
  1858.       AFMT_U16_LE)) ? 0x80
  1859.       : 0);
  1860. s->dma_dac.endcleared = 1;
  1861. }
  1862. if ( (s->dma_dac.count <= (signed) s->dma_dac.dmasize/2) ||
  1863. intflag)
  1864. {
  1865. wake_up(&s->dma_dac.wait);
  1866. }
  1867. }
  1868. CS_DBGOUT(CS_PARMS, 8, printk(KERN_INFO
  1869. "cs4281: cs4281_update_ptr(): s=0x%.8x hwptr=%d total_bytes=%d count=%d n",
  1870. (unsigned) s, s->dma_dac.hwptr, 
  1871. s->dma_dac.total_bytes, s->dma_dac.count));
  1872. }
  1873. }
  1874. // --------------------------------------------------------------------- 
  1875. static void prog_codec(struct cs4281_state *s, unsigned type)
  1876. {
  1877. unsigned long flags;
  1878. unsigned temp1, format;
  1879. CS_DBGOUT(CS_FUNCTION, 2,
  1880.   printk(KERN_INFO "cs4281: prog_codec()+ n"));
  1881. spin_lock_irqsave(&s->lock, flags);
  1882. if (type == CS_TYPE_ADC) {
  1883. temp1 = readl(s->pBA0 + BA0_DCR1);
  1884. writel(temp1 | DCRn_MSK, s->pBA0 + BA0_DCR1); // Stop capture DMA, if active.
  1885. // program sampling rates  
  1886. // Note, for CS4281, capture & play rates can be set independently.
  1887. cs4281_record_rate(s, s->prop_adc.rate);
  1888. // program ADC parameters 
  1889. format = DMRn_DMA | DMRn_AUTO | DMRn_TR_WRITE;
  1890. if (s->prop_adc.
  1891.     fmt & (AFMT_S16_LE | AFMT_U16_LE | AFMT_S16_BE | AFMT_U16_BE)) { // 16-bit
  1892. if (s->prop_adc.fmt & (AFMT_S16_BE | AFMT_U16_BE)) // Big-endian?
  1893. format |= DMRn_BEND;
  1894. if (s->prop_adc.fmt & (AFMT_U16_LE | AFMT_U16_BE))
  1895. format |= DMRn_USIGN; // Unsigned.      
  1896. } else
  1897. format |= DMRn_SIZE8 | DMRn_USIGN; // 8-bit, unsigned
  1898. if (s->prop_adc.channels < 2)
  1899. format |= DMRn_MONO;
  1900. writel(format, s->pBA0 + BA0_DMR1);
  1901. CS_DBGOUT(CS_PARMS, 2, printk(KERN_INFO
  1902. "cs4281: prog_codec(): adc %s %s %s rate=%d DMR0 format=0x%.8xn",
  1903. (format & DMRn_SIZE8) ? "8" : "16",
  1904. (format & DMRn_USIGN) ?  "Unsigned" : "Signed", 
  1905. (format & DMRn_MONO) ? "Mono" : "Stereo", 
  1906. s->prop_adc.rate, format));
  1907. s->ena &= ~FMODE_READ; // not capturing data yet
  1908. }
  1909. if (type == CS_TYPE_DAC) {
  1910. temp1 = readl(s->pBA0 + BA0_DCR0);
  1911. writel(temp1 | DCRn_MSK, s->pBA0 + BA0_DCR0); // Stop play DMA, if active.
  1912. // program sampling rates  
  1913. // Note, for CS4281, capture & play rates can be set independently.
  1914. cs4281_play_rate(s, s->prop_dac.rate);
  1915. // program DAC parameters 
  1916. format = DMRn_DMA | DMRn_AUTO | DMRn_TR_READ;
  1917. if (s->prop_dac.
  1918.     fmt & (AFMT_S16_LE | AFMT_U16_LE | AFMT_S16_BE | AFMT_U16_BE)) { // 16-bit
  1919. if (s->prop_dac.fmt & (AFMT_S16_BE | AFMT_U16_BE))
  1920. format |= DMRn_BEND; // Big Endian.
  1921. if (s->prop_dac.fmt & (AFMT_U16_LE | AFMT_U16_BE))
  1922. format |= DMRn_USIGN; // Unsigned.      
  1923. } else
  1924. format |= DMRn_SIZE8 | DMRn_USIGN; // 8-bit, unsigned
  1925. if (s->prop_dac.channels < 2)
  1926. format |= DMRn_MONO;
  1927. writel(format, s->pBA0 + BA0_DMR0);
  1928. CS_DBGOUT(CS_PARMS, 2, printk(KERN_INFO
  1929. "cs4281: prog_codec(): dac %s %s %s rate=%d DMR0 format=0x%.8xn",
  1930. (format & DMRn_SIZE8) ? "8" : "16",
  1931. (format & DMRn_USIGN) ?  "Unsigned" : "Signed",
  1932. (format & DMRn_MONO) ? "Mono" : "Stereo", 
  1933. s->prop_dac.rate, format));
  1934. s->ena &= ~FMODE_WRITE; // not capturing data yet
  1935. }
  1936. spin_unlock_irqrestore(&s->lock, flags);
  1937. CS_DBGOUT(CS_FUNCTION, 2,
  1938.   printk(KERN_INFO "cs4281: prog_codec()- n"));
  1939. }
  1940. static int mixer_ioctl(struct cs4281_state *s, unsigned int cmd,
  1941.        unsigned long arg)
  1942. {
  1943. int return_mask=0;
  1944. // Index to mixer_src[] is value of AC97 Input Mux Select Reg.
  1945. // Value of array member is recording source Device ID Mask.
  1946. static const unsigned int mixer_src[8] = {
  1947. SOUND_MASK_MIC, SOUND_MASK_CD, 0, SOUND_MASK_LINE1,
  1948. SOUND_MASK_LINE, SOUND_MASK_VOLUME, 0, 0
  1949. };
  1950. // Index of mixtable1[] member is Device ID 
  1951. // and must be <= SOUND_MIXER_NRDEVICES.
  1952. // Value of array member is index into s->mix.vol[]
  1953. static const unsigned char mixtable1[SOUND_MIXER_NRDEVICES] = {
  1954. [SOUND_MIXER_PCM] = 1, // voice 
  1955. [SOUND_MIXER_LINE1] = 2, // AUX
  1956. [SOUND_MIXER_CD] = 3, // CD 
  1957. [SOUND_MIXER_LINE] = 4, // Line 
  1958. [SOUND_MIXER_SYNTH] = 5, // FM
  1959. [SOUND_MIXER_MIC] = 6, // Mic 
  1960. [SOUND_MIXER_SPEAKER] = 7, // Speaker 
  1961. [SOUND_MIXER_RECLEV] = 8, // Recording level 
  1962. [SOUND_MIXER_VOLUME] = 9 // Master Volume 
  1963. };
  1964. static const unsigned mixreg[] = {
  1965. BA0_AC97_PCM_OUT_VOLUME,
  1966. BA0_AC97_AUX_VOLUME,
  1967. BA0_AC97_CD_VOLUME,
  1968. BA0_AC97_LINE_IN_VOLUME
  1969. };
  1970. unsigned char l, r, rl, rr, vidx;
  1971. unsigned char attentbl[11] =
  1972.     { 63, 42, 26, 17, 14, 11, 8, 6, 4, 2, 0 };
  1973. unsigned temp1;
  1974. int i, val;
  1975. VALIDATE_STATE(s);
  1976. CS_DBGOUT(CS_FUNCTION, 4, printk(KERN_INFO
  1977.  "cs4281: mixer_ioctl(): s=0x%.8x cmd=0x%.8xn",
  1978.  (unsigned) s, cmd));
  1979. #if CSDEBUG
  1980. cs_printioctl(cmd);
  1981. #endif
  1982. #if CSDEBUG_INTERFACE
  1983. if ((cmd == SOUND_MIXER_CS_GETDBGMASK) ||
  1984.     (cmd == SOUND_MIXER_CS_SETDBGMASK) ||
  1985.     (cmd == SOUND_MIXER_CS_GETDBGLEVEL) ||
  1986.     (cmd == SOUND_MIXER_CS_SETDBGLEVEL) ||
  1987.     (cmd == SOUND_MIXER_CS_APM))
  1988. {
  1989. switch (cmd) {
  1990. case SOUND_MIXER_CS_GETDBGMASK:
  1991. return put_user(cs_debugmask,
  1992. (unsigned long *) arg);
  1993. case SOUND_MIXER_CS_GETDBGLEVEL:
  1994. return put_user(cs_debuglevel,
  1995. (unsigned long *) arg);
  1996. case SOUND_MIXER_CS_SETDBGMASK:
  1997. if (get_user(val, (unsigned long *) arg))
  1998. return -EFAULT;
  1999. cs_debugmask = val;
  2000. return 0;
  2001. case SOUND_MIXER_CS_SETDBGLEVEL:
  2002. if (get_user(val, (unsigned long *) arg))
  2003. return -EFAULT;
  2004. cs_debuglevel = val;
  2005. return 0;
  2006. #ifndef NOT_CS4281_PM
  2007. case SOUND_MIXER_CS_APM:
  2008. if (get_user(val, (unsigned long *) arg))
  2009. return -EFAULT;
  2010. if(val == CS_IOCTL_CMD_SUSPEND)
  2011. cs4281_suspend(s);
  2012. else if(val == CS_IOCTL_CMD_RESUME)
  2013. cs4281_resume(s);
  2014. else
  2015. {
  2016. CS_DBGOUT(CS_ERROR, 1, printk(KERN_INFO
  2017.     "cs4281: mixer_ioctl(): invalid APM cmd (%d)n",
  2018. val));
  2019. }
  2020. return 0;
  2021. #endif
  2022. default:
  2023. CS_DBGOUT(CS_ERROR, 1, printk(KERN_INFO
  2024. "cs4281: mixer_ioctl(): ERROR unknown debug cmdn"));
  2025. return 0;
  2026. }
  2027. }
  2028. #endif
  2029. if (cmd == SOUND_MIXER_PRIVATE1) {
  2030. // enable/disable/query mixer preamp 
  2031. if (get_user(val, (int *) arg))
  2032. return -EFAULT;
  2033. if (val != -1) {
  2034. cs4281_read_ac97(s, BA0_AC97_MIC_VOLUME, &temp1);
  2035. temp1 = val ? (temp1 | 0x40) : (temp1 & 0xffbf);
  2036. cs4281_write_ac97(s, BA0_AC97_MIC_VOLUME, temp1);
  2037. }
  2038. cs4281_read_ac97(s, BA0_AC97_MIC_VOLUME, &temp1);
  2039. val = (temp1 & 0x40) ? 1 : 0;
  2040. return put_user(val, (int *) arg);
  2041. }
  2042. if (cmd == SOUND_MIXER_PRIVATE2) {
  2043. // enable/disable/query spatializer 
  2044. if (get_user(val, (int *) arg))
  2045. return -EFAULT;
  2046. if (val != -1) {
  2047. temp1 = (val & 0x3f) >> 2;
  2048. cs4281_write_ac97(s, BA0_AC97_3D_CONTROL, temp1);
  2049. cs4281_read_ac97(s, BA0_AC97_GENERAL_PURPOSE,
  2050.  &temp1);
  2051. cs4281_write_ac97(s, BA0_AC97_GENERAL_PURPOSE,
  2052.   temp1 | 0x2000);
  2053. }
  2054. cs4281_read_ac97(s, BA0_AC97_3D_CONTROL, &temp1);
  2055. return put_user((temp1 << 2) | 3, (int *) arg);
  2056. }
  2057. if (cmd == SOUND_MIXER_INFO) {
  2058. mixer_info info;
  2059. strncpy(info.id, "CS4281", sizeof(info.id));
  2060. strncpy(info.name, "Crystal CS4281", sizeof(info.name));
  2061. info.modify_counter = s->mix.modcnt;
  2062. if (copy_to_user((void *) arg, &info, sizeof(info)))
  2063. return -EFAULT;
  2064. return 0;
  2065. }
  2066. if (cmd == SOUND_OLD_MIXER_INFO) {
  2067. _old_mixer_info info;
  2068. strncpy(info.id, "CS4281", sizeof(info.id));
  2069. strncpy(info.name, "Crystal CS4281", sizeof(info.name));
  2070. if (copy_to_user((void *) arg, &info, sizeof(info)))