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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *      ite8172.c  --  ITE IT8172G Sound Driver.
  3.  *
  4.  * Copyright 2001 MontaVista Software Inc.
  5.  * Author: MontaVista Software, Inc.
  6.  *          stevel@mvista.com or source@mvista.com
  7.  *
  8.  *  This program is free software; you can redistribute  it and/or modify it
  9.  *  under  the terms of  the GNU General  Public License as published by the
  10.  *  Free Software Foundation;  either version 2 of the  License, or (at your
  11.  *  option) any later version.
  12.  *
  13.  *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
  14.  *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
  15.  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
  16.  *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
  17.  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  18.  *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
  19.  *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  20.  *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
  21.  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  22.  *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  23.  *
  24.  *  You should have received a copy of the  GNU General Public License along
  25.  *  with this program; if not, write  to the Free Software Foundation, Inc.,
  26.  *  675 Mass Ave, Cambridge, MA 02139, USA.
  27.  *
  28.  *
  29.  * Module command line parameters:
  30.  *
  31.  *  Supported devices:
  32.  *  /dev/dsp    standard OSS /dev/dsp device
  33.  *  /dev/mixer  standard OSS /dev/mixer device
  34.  *
  35.  * Notes:
  36.  *
  37.  *  1. Much of the OSS buffer allocation, ioctl's, and mmap'ing are
  38.  *     taken, slightly modified or not at all, from the ES1371 driver,
  39.  *     so refer to the credits in es1371.c for those. The rest of the
  40.  *     code (probe, open, read, write, the ISR, etc.) is new.
  41.  *  2. The following support is untested:
  42.  *      * Memory mapping the audio buffers, and the ioctl controls that go
  43.  *        with it.
  44.  *      * S/PDIF output.
  45.  *  3. The following is not supported:
  46.  *      * I2S input.
  47.  *      * legacy audio mode.
  48.  *  4. Support for volume button interrupts is implemented but doesn't
  49.  *     work yet.
  50.  *
  51.  *  Revision history
  52.  *    02.08.2001  0.1   Initial release
  53.  */
  54. #include <linux/version.h>
  55. #include <linux/module.h>
  56. #include <linux/string.h>
  57. #include <linux/ioport.h>
  58. #include <linux/sched.h>
  59. #include <linux/delay.h>
  60. #include <linux/sound.h>
  61. #include <linux/slab.h>
  62. #include <linux/soundcard.h>
  63. #include <linux/pci.h>
  64. #include <linux/init.h>
  65. #include <linux/poll.h>
  66. #include <linux/bitops.h>
  67. #include <linux/proc_fs.h>
  68. #include <linux/spinlock.h>
  69. #include <linux/smp_lock.h>
  70. #include <linux/ac97_codec.h>
  71. #include <linux/wrapper.h>
  72. #include <asm/io.h>
  73. #include <asm/dma.h>
  74. #include <asm/uaccess.h>
  75. #include <asm/hardirq.h>
  76. #include <asm/it8172/it8172.h>
  77. /* --------------------------------------------------------------------- */
  78. #undef OSS_DOCUMENTED_MIXER_SEMANTICS
  79. #define IT8172_DEBUG
  80. #undef IT8172_VERBOSE_DEBUG
  81. #define DBG(x) {}
  82. static const unsigned sample_shift[] = { 0, 1, 1, 2 };
  83. /*
  84.  * Audio Controller register bit definitions follow. See
  85.  * include/asm/it8172/it8172.h for register offsets.
  86.  */
  87. /* PCM Out Volume Reg */
  88. #define PCMOV_PCMOM (1<<15) /* PCM Out Mute default 1: mute */
  89. #define PCMOV_PCMRCG_BIT 8 /* PCM Right channel Gain */
  90. #define PCMOV_PCMRCG_MASK (0x1f<<PCMOV_PCMRCG_BIT)
  91. #define PCMOV_PCMLCG_BIT 0 /* PCM Left channel gain  */
  92. #define PCMOV_PCMLCG_MASK 0x1f
  93. /* FM Out Volume Reg */
  94. #define FMOV_FMOM       (1<<15) /* FM Out Mute default 1: mute */
  95. #define FMOV_FMRCG_BIT 8 /* FM Right channel Gain */
  96. #define FMOV_FMRCG_MASK (0x1f<<FMOV_FMRCG_BIT)
  97. #define FMOV_FMLCG_BIT 0 /* FM Left channel gain  */
  98. #define FMOV_FMLCG_MASK 0x1f
  99. /* I2S Out Volume Reg */
  100. #define I2SV_I2SOM  (1<<15) /* I2S Out Mute default 1: mute */
  101. #define I2SV_I2SRCG_BIT  8  /* I2S Right channel Gain */
  102. #define I2SV_I2SRCG_MASK (0x1f<<I2SV_I2SRCG_BIT)
  103. #define I2SV_I2SLCG_BIT  0  /* I2S Left channel gain  */
  104. #define I2SV_I2SLCG_MASK 0x1f
  105. /* Digital Recording Source Select Reg */
  106. #define DRSS_BIT   0
  107. #define DRSS_MASK  0x07
  108. #define   DRSS_AC97_PRIM 0
  109. #define   DRSS_FM        1
  110. #define   DRSS_I2S       2
  111. #define   DRSS_PCM       3
  112. #define   DRSS_AC97_SEC  4
  113. /* Playback/Capture Channel Control Registers */
  114. #define CC_SM         (1<<15) /* Stereo, Mone 0: mono 1: stereo */
  115. #define CC_DF         (1<<14) /* Data Format 0: 8 bit 1: 16 bit */
  116. #define CC_FMT_BIT      14
  117. #define CC_FMT_MASK     (0x03<<CC_FMT_BIT)
  118. #define CC_CF_BIT       12      /* Channel format (Playback only) */
  119. #define CC_CF_MASK      (0x03<<CC_CF_BIT)
  120. #define   CC_CF_2 0
  121. #define   CC_CF_4 (1<<CC_CF_BIT)
  122. #define   CC_CF_6 (2<<CC_CF_BIT)
  123. #define CC_SR_BIT       8       /* sample Rate */
  124. #define CC_SR_MASK      (0x0f<<CC_SR_BIT)
  125. #define   CC_SR_5500 0
  126. #define   CC_SR_8000 (1<<CC_SR_BIT)
  127. #define   CC_SR_9600 (2<<CC_SR_BIT)
  128. #define   CC_SR_11025 (3<<CC_SR_BIT)
  129. #define   CC_SR_16000 (4<<CC_SR_BIT)
  130. #define   CC_SR_19200 (5<<CC_SR_BIT)
  131. #define   CC_SR_22050 (6<<CC_SR_BIT)
  132. #define   CC_SR_32000 (7<<CC_SR_BIT)
  133. #define   CC_SR_38400 (8<<CC_SR_BIT)
  134. #define   CC_SR_44100 (9<<CC_SR_BIT)
  135. #define   CC_SR_48000 (10<<CC_SR_BIT)
  136. #define CC_CSP         (1<<7) /* Channel stop 
  137.  * 0: End of Current buffer
  138.  * 1: Immediately stop when rec stop */
  139. #define CC_CP         (1<<6) /* Channel pause 0: normal, 1: pause */
  140. #define CC_CA         (1<<5) /* Channel Action 0: Stop , 1: start */
  141. #define CC_CB2L         (1<<2) /* Cur. buf. 2 xfr is last 0: No, 1: Yes */
  142. #define CC_CB1L         (1<<1) /* Cur. buf. 1 xfr is last 0: No, 1: Yes */
  143. #define CC_DE         1 /* DFC/DFIFO Data Empty 1: empty, 0: not empty
  144.  * (Playback only)
  145.  */
  146. /* Codec Control Reg */
  147. #define CODECC_GME (1<<9) /* AC97 GPIO Mode enable */
  148. #define CODECC_ATM (1<<8) /* AC97 ATE test mode 0: test 1: normal */
  149. #define CODECC_WR (1<<6) /* AC97 Warn reset 1: warm reset , 0: Normal */
  150. #define CODECC_CR (1<<5) /* AC97 Cold reset 1: Cold reset , 0: Normal */
  151. /* I2S Control Reg */
  152. #define I2SMC_SR_BIT  6 /* I2S Sampling rate 
  153.  * 00: 48KHz, 01: 44.1 KHz, 10: 32 32 KHz */
  154. #define I2SMC_SR_MASK    (0x03<<I2SMC_SR_BIT)
  155. #define   I2SMC_SR_48000 0
  156. #define   I2SMC_SR_44100 (1<<I2SMC_SR_BIT)
  157. #define   I2SMC_SR_32000 (2<<I2SMC_SR_BIT)
  158. #define I2SMC_SRSS  (1<<5) /* Sample Rate Source Select 1:S/W, 0: H/W */
  159. #define I2SMC_I2SF_BIT  0 /* I2S Format */
  160. #define I2SMC_I2SF_MASK  0x03
  161. #define   I2SMC_I2SF_DAC 0
  162. #define   I2SMC_I2SF_ADC 2
  163. #define   I2SMC_I2SF_I2S 3
  164. /* Volume up, Down, Mute */
  165. #define VS_VMP (1<<2) /* Volume mute 1: pushed, 0: not */
  166. #define VS_VDP (1<<1) /* Volume Down 1: pushed, 0: not */
  167. #define VS_VUP 1 /* Volime Up 1: pushed, 0: not */
  168. /* SRC, Mixer test control/DFC status reg */
  169. #define SRCS_DPUSC      (1<<5) /* DFC Playback underrun Status/clear */
  170. #define SRCS_DCOSC (1<<4) /* DFC Capture Overrun Status/clear */
  171. #define SRCS_SIS (1<<3) /* SRC input select 1: Mixer, 0: Codec I/F */
  172. #define SRCS_CDIS_BIT 0 /* Codec Data Input Select */
  173. #define SRCS_CDIS_MASK  0x07
  174. #define   SRCS_CDIS_MIXER 0
  175. #define   SRCS_CDIS_PCM   1
  176. #define   SRCS_CDIS_I2S   2
  177. #define   SRCS_CDIS_FM    3
  178. #define   SRCS_CDIS_DFC   4
  179. /* Codec Index Reg command Port */
  180. #define CIRCP_CID_BIT   10
  181. #define CIRCP_CID_MASK  (0x03<<CIRCP_CID_BIT)
  182. #define CIRCP_CPS (1<<9) /* Command Port Status 0: ready, 1: busy */
  183. #define CIRCP_DPVF (1<<8) /* Data Port Valid Flag 0: invalis, 1: valid */
  184. #define CIRCP_RWC (1<<7) /* Read/write command */
  185. #define CIRCP_CIA_BIT   0
  186. #define CIRCP_CIA_MASK  0x007F /* Codec Index Address */
  187. /* Test Mode Control/Test group Select Control */
  188. /* General Control Reg */
  189. #define GC_VDC_BIT 6 /* Volume Division Control */
  190. #define GC_VDC_MASK     (0x03<<GC_VDC_BIT)
  191. #define   GC_VDC_NONE   0
  192. #define   GC_VDC_DIV2   (1<<GC_VDC_BIT)
  193. #define   GC_VDC_DIV4   (2<<GC_VDC_BIT)
  194. #define GC_SOE         (1<<2) /* S/PDIF Output enable */
  195. #define GC_SWR         1 /* Software warn reset */
  196. /* Interrupt mask Control Reg */
  197. #define IMC_VCIM (1<<6) /* Volume CNTL interrupt mask */
  198. #define IMC_CCIM (1<<1) /* Capture Chan. iterrupt mask */
  199. #define IMC_PCIM 1 /* Playback Chan. interrupt mask */
  200. /* Interrupt status/clear reg */
  201. #define ISC_VCI         (1<<6) /* Volume CNTL interrupt 1: clears */
  202. #define ISC_CCI         (1<<1) /* Capture Chan. interrupt 1: clears  */
  203. #define ISC_PCI         1 /* Playback Chan. interrupt 1: clears */
  204. /* misc stuff */
  205. #define POLL_COUNT   0x5000
  206. #define IT8172_MODULE_NAME "IT8172 audio"
  207. #define PFX IT8172_MODULE_NAME ": "
  208. /* --------------------------------------------------------------------- */
  209. struct it8172_state {
  210.     /* list of it8172 devices */
  211.     struct list_head devs;
  212.     /* the corresponding pci_dev structure */
  213.     struct pci_dev *dev;
  214.     /* soundcore stuff */
  215.     int dev_audio;
  216.     /* hardware resources */
  217.     unsigned long io;
  218.     unsigned int irq;
  219.     /* PCI ID's */
  220.     u16 vendor;
  221.     u16 device;
  222.     u8 rev; /* the chip revision */
  223.     /* options */
  224.     int spdif_volume; /* S/PDIF output is enabled if != -1 */
  225. #ifdef IT8172_DEBUG
  226.     /* debug /proc entry */
  227.     struct proc_dir_entry *ps;
  228.     struct proc_dir_entry *ac97_ps;
  229. #endif /* IT8172_DEBUG */
  230.     struct ac97_codec codec;
  231.     unsigned short pcc, capcc;
  232.     unsigned dacrate, adcrate;
  233.     spinlock_t lock;
  234.     struct semaphore open_sem;
  235.     mode_t open_mode;
  236.     wait_queue_head_t open_wait;
  237.     struct dmabuf {
  238. void *rawbuf;
  239. dma_addr_t dmaaddr;
  240. unsigned buforder;
  241. unsigned numfrag;
  242. unsigned fragshift;
  243. void* nextIn;
  244. void* nextOut;
  245. int count;
  246. int curBufPtr;
  247. unsigned total_bytes;
  248. unsigned error; /* over/underrun */
  249. wait_queue_head_t wait;
  250. /* redundant, but makes calculations easier */
  251. unsigned fragsize;
  252. unsigned dmasize;
  253. unsigned fragsamples;
  254. /* OSS stuff */
  255. unsigned mapped:1;
  256. unsigned ready:1;
  257. unsigned stopped:1;
  258. unsigned ossfragshift;
  259. int ossmaxfrags;
  260. unsigned subdivision;
  261.     } dma_dac, dma_adc;
  262. };
  263. /* --------------------------------------------------------------------- */
  264. static LIST_HEAD(devs);
  265. /* --------------------------------------------------------------------- */
  266. extern inline unsigned ld2(unsigned int x)
  267. {
  268.     unsigned r = 0;
  269.     if (x >= 0x10000) {
  270. x >>= 16;
  271. r += 16;
  272.     }
  273.     if (x >= 0x100) {
  274. x >>= 8;
  275. r += 8;
  276.     }
  277.     if (x >= 0x10) {
  278. x >>= 4;
  279. r += 4;
  280.     }
  281.     if (x >= 4) {
  282. x >>= 2;
  283. r += 2;
  284.     }
  285.     if (x >= 2)
  286. r++;
  287.     return r;
  288. }
  289. /* --------------------------------------------------------------------- */
  290. static void it8172_delay(int msec)
  291. {
  292.     unsigned long tmo;
  293.     signed long tmo2;
  294.     if (in_interrupt())
  295. return;
  296.     
  297.     tmo = jiffies + (msec*HZ)/1000;
  298.     for (;;) {
  299. tmo2 = tmo - jiffies;
  300. if (tmo2 <= 0)
  301.     break;
  302. schedule_timeout(tmo2);
  303.     }
  304. }
  305. static unsigned short
  306. get_compat_rate(unsigned* rate)
  307. {
  308.     unsigned rate_out = *rate;
  309.     unsigned short sr;
  310.     
  311.     if (rate_out >= 46050) {
  312. sr = CC_SR_48000; rate_out = 48000;
  313.     } else if (rate_out >= 41250) {
  314. sr = CC_SR_44100; rate_out = 44100;
  315.     } else if (rate_out >= 35200) {
  316. sr = CC_SR_38400; rate_out = 38400;
  317.     } else if (rate_out >= 27025) {
  318. sr = CC_SR_32000; rate_out = 32000;
  319.     } else if (rate_out >= 20625) {
  320. sr = CC_SR_22050; rate_out = 22050;
  321.     } else if (rate_out >= 17600) {
  322. sr = CC_SR_19200; rate_out = 19200;
  323.     } else if (rate_out >= 13513) {
  324. sr = CC_SR_16000; rate_out = 16000;
  325.     } else if (rate_out >= 10313) {
  326. sr = CC_SR_11025; rate_out = 11025;
  327.     } else if (rate_out >= 8800) {
  328. sr = CC_SR_9600; rate_out = 9600;
  329.     } else if (rate_out >= 6750) {
  330. sr = CC_SR_8000; rate_out = 8000;
  331.     } else {
  332. sr = CC_SR_5500; rate_out = 5500;
  333.     }
  334.     *rate = rate_out;
  335.     return sr;
  336. }
  337. static void set_adc_rate(struct it8172_state *s, unsigned rate)
  338. {
  339.     unsigned long flags;
  340.     unsigned short sr;
  341.     
  342.     sr = get_compat_rate(&rate);
  343.     spin_lock_irqsave(&s->lock, flags);
  344.     s->capcc &= ~CC_SR_MASK;
  345.     s->capcc |= sr;
  346.     outw(s->capcc, s->io+IT_AC_CAPCC);
  347.     spin_unlock_irqrestore(&s->lock, flags);
  348.     s->adcrate = rate;
  349. }
  350. static void set_dac_rate(struct it8172_state *s, unsigned rate)
  351. {
  352.     unsigned long flags;
  353.     unsigned short sr;
  354.     
  355.     sr = get_compat_rate(&rate);
  356.     spin_lock_irqsave(&s->lock, flags);
  357.     s->pcc &= ~CC_SR_MASK;
  358.     s->pcc |= sr;
  359.     outw(s->pcc, s->io+IT_AC_PCC);
  360.     spin_unlock_irqrestore(&s->lock, flags);
  361.     s->dacrate = rate;
  362. }
  363. /* --------------------------------------------------------------------- */
  364. static u16 rdcodec(struct ac97_codec *codec, u8 addr)
  365. {
  366.     struct it8172_state *s = (struct it8172_state *)codec->private_data;
  367.     unsigned long flags;
  368.     unsigned short circp, data;
  369.     int i;
  370.     
  371.     spin_lock_irqsave(&s->lock, flags);
  372.     for (i = 0; i < POLL_COUNT; i++)
  373. if (!(inw(s->io+IT_AC_CIRCP) & CIRCP_CPS))
  374.     break;
  375.     if (i == POLL_COUNT)
  376. printk(KERN_INFO PFX "rdcodec: codec ready poll expired!n");
  377.     circp = addr & CIRCP_CIA_MASK;
  378.     circp |= (codec->id << CIRCP_CID_BIT);
  379.     circp |= CIRCP_RWC; // read command
  380.     outw(circp, s->io+IT_AC_CIRCP);
  381.     /* now wait for the data */
  382.     for (i = 0; i < POLL_COUNT; i++)
  383. if (inw(s->io+IT_AC_CIRCP) & CIRCP_DPVF)
  384.     break;
  385.     if (i == POLL_COUNT)
  386. printk(KERN_INFO PFX "rdcodec: read poll expired!n");
  387.     data = inw(s->io+IT_AC_CIRDP);
  388.     spin_unlock_irqrestore(&s->lock, flags);
  389.     return data;
  390. }
  391. static void wrcodec(struct ac97_codec *codec, u8 addr, u16 data)
  392. {
  393.     struct it8172_state *s = (struct it8172_state *)codec->private_data;
  394.     unsigned long flags;
  395.     unsigned short circp;
  396.     int i;
  397.     
  398.     spin_lock_irqsave(&s->lock, flags);
  399.     for (i = 0; i < POLL_COUNT; i++)
  400. if (!(inw(s->io+IT_AC_CIRCP) & CIRCP_CPS))
  401.     break;
  402.     if (i == POLL_COUNT)
  403. printk(KERN_INFO PFX "wrcodec: codec ready poll expired!n");
  404.     circp = addr & CIRCP_CIA_MASK;
  405.     circp |= (codec->id << CIRCP_CID_BIT);
  406.     circp &= ~CIRCP_RWC; // write command
  407.     outw(data,  s->io+IT_AC_CIRDP);  // send data first
  408.     outw(circp, s->io+IT_AC_CIRCP);
  409.     spin_unlock_irqrestore(&s->lock, flags);
  410. }
  411. static void waitcodec(struct ac97_codec *codec)
  412. {
  413.     unsigned short temp;
  414.     /* codec_wait is used to wait for a ready state after
  415.        an AC97_RESET. */
  416.     it8172_delay(10);
  417.     temp = rdcodec(codec, 0x26);
  418.     // If power down, power up
  419.     if (temp & 0x3f00) {
  420. // Power on
  421. wrcodec(codec, 0x26, 0);
  422. it8172_delay(100);
  423. // Reread
  424. temp = rdcodec(codec, 0x26);
  425.     }
  426.     
  427.     // Check if Codec REF,ANL,DAC,ADC ready***/
  428.     if ((temp & 0x3f0f) != 0x000f) {
  429. printk(KERN_INFO PFX "codec reg 26 status (0x%x) not ready!!n",
  430.        temp);
  431. return;
  432.     }
  433. }
  434. /* --------------------------------------------------------------------- */
  435. extern inline void stop_adc(struct it8172_state *s)
  436. {
  437.     struct dmabuf* db = &s->dma_adc;
  438.     unsigned long flags;
  439.     unsigned char imc;
  440.     
  441.     if (db->stopped)
  442. return;
  443.     spin_lock_irqsave(&s->lock, flags);
  444.     s->capcc &= ~(CC_CA | CC_CP | CC_CB2L | CC_CB1L);
  445.     s->capcc |= CC_CSP;
  446.     outw(s->capcc, s->io+IT_AC_CAPCC);
  447.     
  448.     // disable capture interrupt
  449.     imc = inb(s->io+IT_AC_IMC);
  450.     outb(imc | IMC_CCIM, s->io+IT_AC_IMC);
  451.     db->stopped = 1;
  452.     spin_unlock_irqrestore(&s->lock, flags);
  453. }
  454. extern inline void stop_dac(struct it8172_state *s)
  455. {
  456.     struct dmabuf* db = &s->dma_dac;
  457.     unsigned long flags;
  458.     unsigned char imc;
  459.     
  460.     if (db->stopped)
  461. return;
  462.     spin_lock_irqsave(&s->lock, flags);
  463.     s->pcc &= ~(CC_CA | CC_CP | CC_CB2L | CC_CB1L);
  464.     s->pcc |= CC_CSP;
  465.     outw(s->pcc, s->io+IT_AC_PCC);
  466.     
  467.     // disable playback interrupt
  468.     imc = inb(s->io+IT_AC_IMC);
  469.     outb(imc | IMC_PCIM, s->io+IT_AC_IMC);
  470.     db->stopped = 1;
  471.     
  472.     spin_unlock_irqrestore(&s->lock, flags);
  473. }
  474. static void start_dac(struct it8172_state *s)
  475. {
  476.     struct dmabuf* db = &s->dma_dac;
  477.     unsigned long flags;
  478.     unsigned char imc;
  479.     unsigned long buf1, buf2;
  480.     
  481.     if (!db->stopped)
  482. return;
  483.     
  484.     spin_lock_irqsave(&s->lock, flags);
  485.     // reset Buffer 1 and 2 pointers to nextOut and nextOut+fragsize
  486.     buf1 = virt_to_bus(db->nextOut);
  487.     buf2 = buf1 + db->fragsize;
  488.     if (buf2 >= db->dmaaddr + db->dmasize)
  489. buf2 -= db->dmasize;
  490.     
  491.     outl(buf1, s->io+IT_AC_PCB1STA);
  492.     outl(buf2, s->io+IT_AC_PCB2STA);
  493.     db->curBufPtr = IT_AC_PCB1STA;
  494.     
  495.     // enable playback interrupt
  496.     imc = inb(s->io+IT_AC_IMC);
  497.     outb(imc & ~IMC_PCIM, s->io+IT_AC_IMC);
  498.     s->pcc &= ~(CC_CSP | CC_CP | CC_CB2L | CC_CB1L);
  499.     s->pcc |= CC_CA;
  500.     outw(s->pcc, s->io+IT_AC_PCC);
  501.     
  502.     db->stopped = 0;
  503.     spin_unlock_irqrestore(&s->lock, flags);
  504. }
  505. static void start_adc(struct it8172_state *s)
  506. {
  507.     struct dmabuf* db = &s->dma_adc;
  508.     unsigned long flags;
  509.     unsigned char imc;
  510.     unsigned long buf1, buf2;
  511.     
  512.     if (!db->stopped)
  513. return;
  514.     spin_lock_irqsave(&s->lock, flags);
  515.     // reset Buffer 1 and 2 pointers to nextIn and nextIn+fragsize
  516.     buf1 = virt_to_bus(db->nextIn);
  517.     buf2 = buf1 + db->fragsize;
  518.     if (buf2 >= db->dmaaddr + db->dmasize)
  519. buf2 -= db->dmasize;
  520.     
  521.     outl(buf1, s->io+IT_AC_CAPB1STA);
  522.     outl(buf2, s->io+IT_AC_CAPB2STA);
  523.     db->curBufPtr = IT_AC_CAPB1STA;
  524.     // enable capture interrupt
  525.     imc = inb(s->io+IT_AC_IMC);
  526.     outb(imc & ~IMC_CCIM, s->io+IT_AC_IMC);
  527.     s->capcc &= ~(CC_CSP | CC_CP | CC_CB2L | CC_CB1L);
  528.     s->capcc |= CC_CA;
  529.     outw(s->capcc, s->io+IT_AC_CAPCC);
  530.     
  531.     db->stopped = 0;
  532.     spin_unlock_irqrestore(&s->lock, flags);
  533. }
  534. /* --------------------------------------------------------------------- */
  535. #define DMABUF_DEFAULTORDER (17-PAGE_SHIFT)
  536. #define DMABUF_MINORDER 1
  537. extern inline void dealloc_dmabuf(struct it8172_state *s, struct dmabuf *db)
  538. {
  539.     struct page *page, *pend;
  540.     if (db->rawbuf) {
  541. /* undo marking the pages as reserved */
  542. pend = virt_to_page(db->rawbuf + (PAGE_SIZE << db->buforder) - 1);
  543. for (page = virt_to_page(db->rawbuf); page <= pend; page++)
  544.     mem_map_unreserve(page);
  545. pci_free_consistent(s->dev, PAGE_SIZE << db->buforder,
  546.     db->rawbuf, db->dmaaddr);
  547.     }
  548.     db->rawbuf = db->nextIn = db->nextOut = NULL;
  549.     db->mapped = db->ready = 0;
  550. }
  551. static int prog_dmabuf(struct it8172_state *s, struct dmabuf *db,
  552.        unsigned rate, unsigned fmt, unsigned reg)
  553. {
  554.     int order;
  555.     unsigned bytepersec;
  556.     unsigned bufs;
  557.     struct page *page, *pend;
  558.     if (!db->rawbuf) {
  559. db->ready = db->mapped = 0;
  560. for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--)
  561.     if ((db->rawbuf = pci_alloc_consistent(s->dev,
  562.    PAGE_SIZE << order,
  563.    &db->dmaaddr)))
  564. break;
  565. if (!db->rawbuf)
  566.     return -ENOMEM;
  567. db->buforder = order;
  568. /* now mark the pages as reserved;
  569.    otherwise remap_page_range doesn't do what we want */
  570. pend = virt_to_page(db->rawbuf + (PAGE_SIZE << db->buforder) - 1);
  571. for (page = virt_to_page(db->rawbuf); page <= pend; page++)
  572.     mem_map_reserve(page);
  573.     }
  574.     db->count = 0;
  575.     db->nextIn = db->nextOut = db->rawbuf;
  576.     
  577.     bytepersec = rate << sample_shift[fmt];
  578.     bufs = PAGE_SIZE << db->buforder;
  579.     if (db->ossfragshift) {
  580. if ((1000 << db->ossfragshift) < bytepersec)
  581.     db->fragshift = ld2(bytepersec/1000);
  582. else
  583.     db->fragshift = db->ossfragshift;
  584.     } else {
  585. db->fragshift = ld2(bytepersec/100/(db->subdivision ?
  586.     db->subdivision : 1));
  587. if (db->fragshift < 3)
  588.     db->fragshift = 3;
  589.     }
  590.     db->numfrag = bufs >> db->fragshift;
  591.     while (db->numfrag < 4 && db->fragshift > 3) {
  592. db->fragshift--;
  593. db->numfrag = bufs >> db->fragshift;
  594.     }
  595.     db->fragsize = 1 << db->fragshift;
  596.     if (db->ossmaxfrags >= 4 && db->ossmaxfrags < db->numfrag)
  597. db->numfrag = db->ossmaxfrags;
  598.     db->fragsamples = db->fragsize >> sample_shift[fmt];
  599.     db->dmasize = db->numfrag << db->fragshift;
  600.     memset(db->rawbuf, (fmt & (CC_DF>>CC_FMT_BIT)) ? 0 : 0x80, db->dmasize);
  601.     
  602.     // set data length register
  603.     outw(db->fragsize, s->io+reg+2);
  604.     db->ready = 1;
  605.     return 0;
  606. }
  607. extern inline int prog_dmabuf_adc(struct it8172_state *s)
  608. {
  609.     stop_adc(s);
  610.     return prog_dmabuf(s, &s->dma_adc, s->adcrate,
  611.        (s->capcc & CC_FMT_MASK) >> CC_FMT_BIT,
  612.        IT_AC_CAPCC);
  613. }
  614. extern inline int prog_dmabuf_dac(struct it8172_state *s)
  615. {
  616.     stop_dac(s);
  617.     return prog_dmabuf(s, &s->dma_dac, s->dacrate,
  618.        (s->pcc & CC_FMT_MASK) >> CC_FMT_BIT,
  619.        IT_AC_PCC);
  620. }
  621. /* hold spinlock for the following! */
  622. static void it8172_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  623. {
  624.     struct it8172_state *s = (struct it8172_state *)dev_id;
  625.     struct dmabuf* dac = &s->dma_dac;
  626.     struct dmabuf* adc = &s->dma_adc;
  627.     unsigned char isc, vs;
  628.     unsigned short vol, mute;
  629.     unsigned long newptr;
  630.     
  631.     spin_lock(&s->lock);
  632.     isc = inb(s->io+IT_AC_ISC);
  633.     /* fastpath out, to ease interrupt sharing */
  634.     if (!(isc & (ISC_VCI | ISC_CCI | ISC_PCI)))
  635. return;
  636.     /* clear audio interrupts first */
  637.     outb(isc | ISC_VCI | ISC_CCI | ISC_PCI, s->io+IT_AC_ISC);
  638.     
  639.     /* handle volume button events */
  640.     if (isc & ISC_VCI) {
  641. vs = inb(s->io+IT_AC_VS);
  642. outb(0, s->io+IT_AC_VS);
  643. vol = inw(s->io+IT_AC_PCMOV);
  644. mute = vol & PCMOV_PCMOM;
  645. vol &= PCMOV_PCMLCG_MASK;
  646. if ((vs & VS_VUP) && vol > 0)
  647.     vol--;
  648. if ((vs & VS_VDP) && vol < 0x1f)
  649.     vol++;
  650. vol |= (vol << PCMOV_PCMRCG_BIT);
  651. if (vs & VS_VMP)
  652.     vol |= (mute ^ PCMOV_PCMOM);
  653. outw(vol, s->io+IT_AC_PCMOV);
  654.     }
  655.     
  656.     /* update capture pointers */
  657.     if (isc & ISC_CCI) {
  658. if (adc->count > adc->dmasize - adc->fragsize) {
  659.     // Overrun. Stop ADC and log the error
  660.     stop_adc(s);
  661.     adc->error++;
  662.     printk(KERN_INFO PFX "adc overrunn");
  663. } else {
  664.     newptr = virt_to_bus(adc->nextIn) + 2*adc->fragsize;
  665.     if (newptr >= adc->dmaaddr + adc->dmasize)
  666. newptr -= adc->dmasize;
  667.     
  668.     outl(newptr, s->io+adc->curBufPtr);
  669.     adc->curBufPtr = (adc->curBufPtr == IT_AC_CAPB1STA) ?
  670. IT_AC_CAPB2STA : IT_AC_CAPB1STA;
  671.     
  672.     adc->nextIn += adc->fragsize;
  673.     if (adc->nextIn >= adc->rawbuf + adc->dmasize)
  674. adc->nextIn -= adc->dmasize;
  675.     
  676.     adc->count += adc->fragsize;
  677.     adc->total_bytes += adc->fragsize;
  678.     /* wake up anybody listening */
  679.     if (waitqueue_active(&adc->wait))
  680. wake_up_interruptible(&adc->wait);
  681. }
  682.     }
  683.     
  684.     /* update playback pointers */
  685.     if (isc & ISC_PCI) {
  686. newptr = virt_to_bus(dac->nextOut) + 2*dac->fragsize;
  687. if (newptr >= dac->dmaaddr + dac->dmasize)
  688.     newptr -= dac->dmasize;
  689. outl(newptr, s->io+dac->curBufPtr);
  690. dac->curBufPtr = (dac->curBufPtr == IT_AC_PCB1STA) ?
  691.     IT_AC_PCB2STA : IT_AC_PCB1STA;
  692. dac->nextOut += dac->fragsize;
  693. if (dac->nextOut >= dac->rawbuf + dac->dmasize)
  694.     dac->nextOut -= dac->dmasize;
  695. dac->count -= dac->fragsize;
  696. dac->total_bytes += dac->fragsize;
  697. /* wake up anybody listening */
  698. if (waitqueue_active(&dac->wait))
  699.     wake_up_interruptible(&dac->wait);
  700. if (dac->count <= 0)
  701.     stop_dac(s);
  702.     }
  703.     
  704.     spin_unlock(&s->lock);
  705. }
  706. /* --------------------------------------------------------------------- */
  707. static loff_t it8172_llseek(struct file *file, loff_t offset, int origin)
  708. {
  709.     return -ESPIPE;
  710. }
  711. static int it8172_open_mixdev(struct inode *inode, struct file *file)
  712. {
  713.     int minor = MINOR(inode->i_rdev);
  714.     struct list_head *list;
  715.     struct it8172_state *s;
  716.     for (list = devs.next; ; list = list->next) {
  717. if (list == &devs)
  718.     return -ENODEV;
  719. s = list_entry(list, struct it8172_state, devs);
  720. if (s->codec.dev_mixer == minor)
  721.     break;
  722.     }
  723.     file->private_data = s;
  724.     return 0;
  725. }
  726. static int it8172_release_mixdev(struct inode *inode, struct file *file)
  727. {
  728.     return 0;
  729. }
  730. static int mixdev_ioctl(struct ac97_codec *codec, unsigned int cmd,
  731. unsigned long arg)
  732. {
  733.     return codec->mixer_ioctl(codec, cmd, arg);
  734. }
  735. static int it8172_ioctl_mixdev(struct inode *inode, struct file *file,
  736.        unsigned int cmd, unsigned long arg)
  737. {
  738.     struct it8172_state *s = (struct it8172_state *)file->private_data;
  739.     struct ac97_codec *codec = &s->codec;
  740.     return mixdev_ioctl(codec, cmd, arg);
  741. }
  742. static /*const*/ struct file_operations it8172_mixer_fops = {
  743.     owner: THIS_MODULE,
  744.     llseek: it8172_llseek,
  745.     ioctl: it8172_ioctl_mixdev,
  746.     open: it8172_open_mixdev,
  747.     release: it8172_release_mixdev,
  748. };
  749. /* --------------------------------------------------------------------- */
  750. static int drain_dac(struct it8172_state *s, int nonblock)
  751. {
  752.     unsigned long flags;
  753.     int count, tmo;
  754.     if (s->dma_dac.mapped || !s->dma_dac.ready)
  755. return 0;
  756.     for (;;) {
  757. spin_lock_irqsave(&s->lock, flags);
  758. count = s->dma_dac.count;
  759. spin_unlock_irqrestore(&s->lock, flags);
  760. if (count <= 0)
  761.     break;
  762. if (signal_pending(current))
  763.     break;
  764. if (nonblock)
  765.     return -EBUSY;
  766. tmo = 1000 * count / s->dacrate;
  767. tmo >>= sample_shift[(s->pcc & CC_FMT_MASK) >> CC_FMT_BIT];
  768. it8172_delay(tmo);
  769.     }
  770.     if (signal_pending(current))
  771. return -ERESTARTSYS;
  772.     return 0;
  773. }
  774. /* --------------------------------------------------------------------- */
  775. static ssize_t it8172_read(struct file *file, char *buffer,
  776.    size_t count, loff_t *ppos)
  777. {
  778.     struct it8172_state *s = (struct it8172_state *)file->private_data;
  779.     struct dmabuf *db = &s->dma_adc;
  780.     ssize_t ret;
  781.     unsigned long flags;
  782.     int cnt, bufcnt, avail;
  783.     if (ppos != &file->f_pos)
  784. return -ESPIPE;
  785.     if (db->mapped)
  786. return -ENXIO;
  787.     if (!access_ok(VERIFY_WRITE, buffer, count))
  788. return -EFAULT;
  789.     ret = 0;
  790.     while (count > 0) {
  791. // wait for samples in capture buffer
  792. do {
  793.     spin_lock_irqsave(&s->lock, flags);
  794.     if (db->stopped)
  795. start_adc(s);
  796.     avail = db->count;
  797.     spin_unlock_irqrestore(&s->lock, flags);
  798.     if (avail <= 0) {
  799. if (file->f_flags & O_NONBLOCK) {
  800.     if (!ret)
  801. ret = -EAGAIN;
  802.     return ret;
  803. }
  804. interruptible_sleep_on(&db->wait);
  805. if (signal_pending(current)) {
  806.     if (!ret)
  807. ret = -ERESTARTSYS;
  808.     return ret;
  809. }
  810.     }
  811. } while (avail <= 0);
  812. cnt = count > avail ? avail : count;
  813. bufcnt = cnt;
  814. if (cnt % db->fragsize) {
  815.     // round count up to nearest fragment
  816.     int newcnt = db->fragsize * ((cnt + db->fragsize) / db->fragsize);
  817.     cnt = newcnt;
  818. }
  819. // copy from nextOut to user
  820. if (copy_to_user(buffer, db->nextOut, bufcnt)) {
  821.     if (!ret)
  822. ret = -EFAULT;
  823.     return ret;
  824. }
  825. spin_lock_irqsave(&s->lock, flags);
  826. db->count -= cnt;
  827. spin_unlock_irqrestore(&s->lock, flags);
  828. db->nextOut += cnt;
  829. if (db->nextOut >= db->rawbuf + db->dmasize)
  830.     db->nextOut -= db->dmasize;
  831. count -= bufcnt;
  832. buffer += bufcnt;
  833. ret += bufcnt;
  834.     } // while (count > 0)
  835.     return ret;
  836. }
  837. static ssize_t it8172_write(struct file *file, const char *buffer,
  838.     size_t count, loff_t *ppos)
  839. {
  840.     struct it8172_state *s = (struct it8172_state *)file->private_data;
  841.     struct dmabuf *db = &s->dma_dac;
  842.     ssize_t ret;
  843.     unsigned long flags;
  844.     int cnt, bufcnt, avail;
  845.     if (ppos != &file->f_pos)
  846. return -ESPIPE;
  847.     if (db->mapped)
  848. return -ENXIO;
  849.     if (!access_ok(VERIFY_READ, buffer, count))
  850. return -EFAULT;
  851.     ret = 0;
  852.     
  853.     while (count > 0) {
  854. // wait for space in playback buffer
  855. do {
  856.     spin_lock_irqsave(&s->lock, flags);
  857.     avail = db->dmasize - db->count;
  858.     spin_unlock_irqrestore(&s->lock, flags);
  859.     if (avail <= 0) {
  860. if (file->f_flags & O_NONBLOCK) {
  861.     if (!ret)
  862. ret = -EAGAIN;
  863.     return ret;
  864. }
  865. interruptible_sleep_on(&db->wait);
  866. if (signal_pending(current)) {
  867.     if (!ret)
  868. ret = -ERESTARTSYS;
  869.     return ret;
  870. }
  871.     }
  872. } while (avail <= 0);
  873. cnt = count > avail ? avail : count;
  874. // copy to nextIn
  875. if (copy_from_user(db->nextIn, buffer, cnt)) {
  876.     if (!ret)
  877. ret = -EFAULT;
  878.     return ret;
  879. }
  880. bufcnt = cnt;
  881. if (cnt % db->fragsize) {
  882.     // round count up to nearest fragment, and fill remainder of
  883.     // fragment with silence
  884.     int newcnt = db->fragsize * ((cnt + db->fragsize) / db->fragsize);
  885.     memset(db->nextIn + cnt, (s->pcc & CC_DF) ? 0 : 0x80, newcnt - cnt);
  886.     cnt = newcnt;
  887. }
  888. spin_lock_irqsave(&s->lock, flags);
  889. db->count += cnt;
  890. if (db->stopped)
  891.     start_dac(s);
  892. spin_unlock_irqrestore(&s->lock, flags);
  893. db->nextIn += cnt;
  894. if (db->nextIn >= db->rawbuf + db->dmasize)
  895.     db->nextIn -= db->dmasize;
  896. count -= bufcnt;
  897. buffer += bufcnt;
  898. ret += bufcnt;
  899.     } // while (count > 0)
  900.     return ret;
  901. }
  902. /* No kernel lock - we have our own spinlock */
  903. static unsigned int it8172_poll(struct file *file,
  904. struct poll_table_struct *wait)
  905. {
  906.     struct it8172_state *s = (struct it8172_state *)file->private_data;
  907.     unsigned long flags;
  908.     unsigned int mask = 0;
  909.     if (file->f_mode & FMODE_WRITE)
  910. poll_wait(file, &s->dma_dac.wait, wait);
  911.     if (file->f_mode & FMODE_READ)
  912. poll_wait(file, &s->dma_adc.wait, wait);
  913.     spin_lock_irqsave(&s->lock, flags);
  914.     if (file->f_mode & FMODE_READ) {
  915. if (s->dma_adc.count >= (signed)s->dma_adc.fragsize)
  916.     mask |= POLLIN | POLLRDNORM;
  917.     }
  918.     if (file->f_mode & FMODE_WRITE) {
  919. if (s->dma_dac.mapped) {
  920.     if (s->dma_dac.count >= (signed)s->dma_dac.fragsize) 
  921. mask |= POLLOUT | POLLWRNORM;
  922. } else {
  923.     if ((signed)s->dma_dac.dmasize >=
  924. s->dma_dac.count + (signed)s->dma_dac.fragsize)
  925. mask |= POLLOUT | POLLWRNORM;
  926. }
  927.     }
  928.     spin_unlock_irqrestore(&s->lock, flags);
  929.     return mask;
  930. }
  931. static int it8172_mmap(struct file *file, struct vm_area_struct *vma)
  932. {
  933.     struct it8172_state *s = (struct it8172_state *)file->private_data;
  934.     struct dmabuf *db;
  935.     unsigned long size;
  936.     lock_kernel();
  937.     if (vma->vm_flags & VM_WRITE)
  938. db = &s->dma_dac;
  939.     else if (vma->vm_flags & VM_READ)
  940. db = &s->dma_adc;
  941.     else {
  942. unlock_kernel();
  943. return -EINVAL;
  944.     }
  945.     if (vma->vm_pgoff != 0) {
  946. unlock_kernel();
  947. return -EINVAL;
  948.     }
  949.     size = vma->vm_end - vma->vm_start;
  950.     if (size > (PAGE_SIZE << db->buforder)) {
  951. unlock_kernel();
  952. return -EINVAL;
  953.     }
  954.     if (remap_page_range(vma->vm_start, virt_to_phys(db->rawbuf),
  955.  size, vma->vm_page_prot)) {
  956. unlock_kernel();
  957. return -EAGAIN;
  958.     }
  959.     db->mapped = 1;
  960.     unlock_kernel();
  961.     return 0;
  962. }
  963. #ifdef IT8172_VERBOSE_DEBUG
  964. static struct ioctl_str_t {
  965.     unsigned int cmd;
  966.     const char* str;
  967. } ioctl_str[] = {
  968.     {SNDCTL_DSP_RESET, "SNDCTL_DSP_RESET"},
  969.     {SNDCTL_DSP_SYNC, "SNDCTL_DSP_SYNC"},
  970.     {SNDCTL_DSP_SPEED, "SNDCTL_DSP_SPEED"},
  971.     {SNDCTL_DSP_STEREO, "SNDCTL_DSP_STEREO"},
  972.     {SNDCTL_DSP_GETBLKSIZE, "SNDCTL_DSP_GETBLKSIZE"},
  973.     {SNDCTL_DSP_SAMPLESIZE, "SNDCTL_DSP_SAMPLESIZE"},
  974.     {SNDCTL_DSP_CHANNELS, "SNDCTL_DSP_CHANNELS"},
  975.     {SOUND_PCM_WRITE_CHANNELS, "SOUND_PCM_WRITE_CHANNELS"},
  976.     {SOUND_PCM_WRITE_FILTER, "SOUND_PCM_WRITE_FILTER"},
  977.     {SNDCTL_DSP_POST, "SNDCTL_DSP_POST"},
  978.     {SNDCTL_DSP_SUBDIVIDE, "SNDCTL_DSP_SUBDIVIDE"},
  979.     {SNDCTL_DSP_SETFRAGMENT, "SNDCTL_DSP_SETFRAGMENT"},
  980.     {SNDCTL_DSP_GETFMTS, "SNDCTL_DSP_GETFMTS"},
  981.     {SNDCTL_DSP_SETFMT, "SNDCTL_DSP_SETFMT"},
  982.     {SNDCTL_DSP_GETOSPACE, "SNDCTL_DSP_GETOSPACE"},
  983.     {SNDCTL_DSP_GETISPACE, "SNDCTL_DSP_GETISPACE"},
  984.     {SNDCTL_DSP_NONBLOCK, "SNDCTL_DSP_NONBLOCK"},
  985.     {SNDCTL_DSP_GETCAPS, "SNDCTL_DSP_GETCAPS"},
  986.     {SNDCTL_DSP_GETTRIGGER, "SNDCTL_DSP_GETTRIGGER"},
  987.     {SNDCTL_DSP_SETTRIGGER, "SNDCTL_DSP_SETTRIGGER"},
  988.     {SNDCTL_DSP_GETIPTR, "SNDCTL_DSP_GETIPTR"},
  989.     {SNDCTL_DSP_GETOPTR, "SNDCTL_DSP_GETOPTR"},
  990.     {SNDCTL_DSP_MAPINBUF, "SNDCTL_DSP_MAPINBUF"},
  991.     {SNDCTL_DSP_MAPOUTBUF, "SNDCTL_DSP_MAPOUTBUF"},
  992.     {SNDCTL_DSP_SETSYNCRO, "SNDCTL_DSP_SETSYNCRO"},
  993.     {SNDCTL_DSP_SETDUPLEX, "SNDCTL_DSP_SETDUPLEX"},
  994.     {SNDCTL_DSP_GETODELAY, "SNDCTL_DSP_GETODELAY"},
  995.     {SNDCTL_DSP_GETCHANNELMASK, "SNDCTL_DSP_GETCHANNELMASK"},
  996.     {SNDCTL_DSP_BIND_CHANNEL, "SNDCTL_DSP_BIND_CHANNEL"},
  997.     {OSS_GETVERSION, "OSS_GETVERSION"},
  998.     {SOUND_PCM_READ_RATE, "SOUND_PCM_READ_RATE"},
  999.     {SOUND_PCM_READ_CHANNELS, "SOUND_PCM_READ_CHANNELS"},
  1000.     {SOUND_PCM_READ_BITS, "SOUND_PCM_READ_BITS"},
  1001.     {SOUND_PCM_READ_FILTER, "SOUND_PCM_READ_FILTER"}
  1002. };
  1003. #endif    
  1004. static int it8172_ioctl(struct inode *inode, struct file *file,
  1005. unsigned int cmd, unsigned long arg)
  1006. {
  1007.     struct it8172_state *s = (struct it8172_state *)file->private_data;
  1008.     unsigned long flags;
  1009.     audio_buf_info abinfo;
  1010.     count_info cinfo;
  1011.     int count;
  1012.     int val, mapped, ret, diff;
  1013.     mapped = ((file->f_mode & FMODE_WRITE) && s->dma_dac.mapped) ||
  1014. ((file->f_mode & FMODE_READ) && s->dma_adc.mapped);
  1015. #ifdef IT8172_VERBOSE_DEBUG
  1016.     for (count=0; count<sizeof(ioctl_str)/sizeof(ioctl_str[0]); count++) {
  1017. if (ioctl_str[count].cmd == cmd)
  1018.     break;
  1019.     }
  1020.     if (count < sizeof(ioctl_str)/sizeof(ioctl_str[0]))
  1021. printk(KERN_INFO PFX "ioctl %sn", ioctl_str[count].str);
  1022.     else
  1023. printk(KERN_INFO PFX "ioctl unknown, 0x%xn", cmd);
  1024. #endif
  1025.     
  1026.     switch (cmd) {
  1027.     case OSS_GETVERSION:
  1028. return put_user(SOUND_VERSION, (int *)arg);
  1029.     case SNDCTL_DSP_SYNC:
  1030. if (file->f_mode & FMODE_WRITE)
  1031.     return drain_dac(s, file->f_flags & O_NONBLOCK);
  1032. return 0;
  1033.     case SNDCTL_DSP_SETDUPLEX:
  1034. return 0;
  1035.     case SNDCTL_DSP_GETCAPS:
  1036. return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME |
  1037. DSP_CAP_TRIGGER | DSP_CAP_MMAP, (int *)arg);
  1038.     case SNDCTL_DSP_RESET:
  1039. if (file->f_mode & FMODE_WRITE) {
  1040.     stop_dac(s);
  1041.     synchronize_irq();
  1042.     s->dma_dac.count = s->dma_dac.total_bytes = 0;
  1043.     s->dma_dac.nextIn = s->dma_dac.nextOut = s->dma_dac.rawbuf;
  1044. }
  1045. if (file->f_mode & FMODE_READ) {
  1046.     stop_adc(s);
  1047.     synchronize_irq();
  1048.     s->dma_adc.count = s->dma_adc.total_bytes = 0;
  1049.     s->dma_adc.nextIn = s->dma_adc.nextOut = s->dma_adc.rawbuf;
  1050. }
  1051. return 0;
  1052.     case SNDCTL_DSP_SPEED:
  1053. if (get_user(val, (int *)arg))
  1054.     return -EFAULT;
  1055. if (val >= 0) {
  1056.     if (file->f_mode & FMODE_READ) {
  1057. stop_adc(s);
  1058. set_adc_rate(s, val);
  1059. if ((ret = prog_dmabuf_adc(s)))
  1060.     return ret;
  1061.     }
  1062.     if (file->f_mode & FMODE_WRITE) {
  1063. stop_dac(s);
  1064. set_dac_rate(s, val);
  1065. if ((ret = prog_dmabuf_dac(s)))
  1066.     return ret;
  1067.     }
  1068. }
  1069. return put_user((file->f_mode & FMODE_READ) ?
  1070. s->adcrate : s->dacrate, (int *)arg);
  1071.     case SNDCTL_DSP_STEREO:
  1072. if (get_user(val, (int *)arg))
  1073.     return -EFAULT;
  1074. if (file->f_mode & FMODE_READ) {
  1075.     stop_adc(s);
  1076.     if (val)
  1077. s->capcc |= CC_SM;
  1078.     else
  1079. s->capcc &= ~CC_SM;
  1080.     outw(s->capcc, s->io+IT_AC_CAPCC);
  1081.     if ((ret = prog_dmabuf_adc(s)))
  1082. return ret;
  1083. }
  1084. if (file->f_mode & FMODE_WRITE) {
  1085.     stop_dac(s);
  1086.     if (val)
  1087. s->pcc |= CC_SM;
  1088.     else
  1089. s->pcc &= ~CC_SM;
  1090.     outw(s->pcc, s->io+IT_AC_PCC);
  1091.     if ((ret = prog_dmabuf_dac(s)))
  1092. return ret;
  1093. }
  1094. return 0;
  1095.     case SNDCTL_DSP_CHANNELS:
  1096. if (get_user(val, (int *)arg))
  1097.     return -EFAULT;
  1098. if (val != 0) {
  1099.     if (file->f_mode & FMODE_READ) {
  1100. stop_adc(s);
  1101. if (val >= 2) {
  1102.     val = 2;
  1103.     s->capcc |= CC_SM;
  1104. }
  1105. else
  1106.     s->capcc &= ~CC_SM;
  1107. outw(s->capcc, s->io+IT_AC_CAPCC);
  1108. if ((ret = prog_dmabuf_adc(s)))
  1109.     return ret;
  1110.     }
  1111.     if (file->f_mode & FMODE_WRITE) {
  1112. stop_dac(s);
  1113. switch (val) {
  1114. case 1:
  1115.     s->pcc &= ~CC_SM;
  1116.     break;
  1117. case 2:
  1118.     s->pcc |= CC_SM;
  1119.     break;
  1120. default:
  1121.     // FIX! support multichannel???
  1122.     val = 2;
  1123.     s->pcc |= CC_SM;
  1124.     break;
  1125. }
  1126. outw(s->pcc, s->io+IT_AC_PCC);
  1127. if ((ret = prog_dmabuf_dac(s)))
  1128.     return ret;
  1129.     }
  1130. }
  1131. return put_user(val, (int *)arg);
  1132.     case SNDCTL_DSP_GETFMTS: /* Returns a mask */
  1133. return put_user(AFMT_S16_LE|AFMT_U8, (int *)arg);
  1134.     case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/
  1135. if (get_user(val, (int *)arg))
  1136.     return -EFAULT;
  1137. if (val != AFMT_QUERY) {
  1138.     if (file->f_mode & FMODE_READ) {
  1139. stop_adc(s);
  1140. if (val == AFMT_S16_LE)
  1141.     s->capcc |= CC_DF;
  1142. else {
  1143.     val = AFMT_U8;
  1144.     s->capcc &= ~CC_DF;
  1145. }
  1146. outw(s->capcc, s->io+IT_AC_CAPCC);
  1147. if ((ret = prog_dmabuf_adc(s)))
  1148.     return ret;
  1149.     }
  1150.     if (file->f_mode & FMODE_WRITE) {
  1151. stop_dac(s);
  1152. if (val == AFMT_S16_LE)
  1153.     s->pcc |= CC_DF;
  1154. else {
  1155.     val = AFMT_U8;
  1156.     s->pcc &= ~CC_DF;
  1157. }
  1158. outw(s->pcc, s->io+IT_AC_PCC);
  1159. if ((ret = prog_dmabuf_dac(s)))
  1160.     return ret;
  1161.     }
  1162. } else {
  1163.     if (file->f_mode & FMODE_READ)
  1164. val = (s->capcc & CC_DF) ? AFMT_S16_LE : AFMT_U8;
  1165.     else
  1166. val = (s->pcc & CC_DF) ? AFMT_S16_LE : AFMT_U8;
  1167. }
  1168. return put_user(val, (int *)arg);
  1169.     case SNDCTL_DSP_POST:
  1170. return 0;
  1171.     case SNDCTL_DSP_GETTRIGGER:
  1172. val = 0;
  1173. spin_lock_irqsave(&s->lock, flags);
  1174. if (file->f_mode & FMODE_READ && !s->dma_adc.stopped)
  1175.     val |= PCM_ENABLE_INPUT;
  1176. if (file->f_mode & FMODE_WRITE && !s->dma_dac.stopped)
  1177.     val |= PCM_ENABLE_OUTPUT;
  1178. spin_unlock_irqrestore(&s->lock, flags);
  1179. return put_user(val, (int *)arg);
  1180.     case SNDCTL_DSP_SETTRIGGER:
  1181. if (get_user(val, (int *)arg))
  1182.     return -EFAULT;
  1183. if (file->f_mode & FMODE_READ) {
  1184.     if (val & PCM_ENABLE_INPUT)
  1185. start_adc(s);
  1186.     else
  1187. stop_adc(s);
  1188. }
  1189. if (file->f_mode & FMODE_WRITE) {
  1190.     if (val & PCM_ENABLE_OUTPUT)
  1191. start_dac(s);
  1192.     else
  1193. stop_dac(s);
  1194. }
  1195. return 0;
  1196.     case SNDCTL_DSP_GETOSPACE:
  1197. if (!(file->f_mode & FMODE_WRITE))
  1198.     return -EINVAL;
  1199. abinfo.fragsize = s->dma_dac.fragsize;
  1200. spin_lock_irqsave(&s->lock, flags);
  1201. count = s->dma_dac.count;
  1202. if (!s->dma_dac.stopped)
  1203.     count -= (s->dma_dac.fragsize - inw(s->io+IT_AC_PCDL));
  1204. spin_unlock_irqrestore(&s->lock, flags);
  1205. if (count < 0)
  1206.     count = 0;
  1207. abinfo.bytes = s->dma_dac.dmasize - count;
  1208. abinfo.fragstotal = s->dma_dac.numfrag;
  1209. abinfo.fragments = abinfo.bytes >> s->dma_dac.fragshift;      
  1210. return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
  1211.     case SNDCTL_DSP_GETISPACE:
  1212. if (!(file->f_mode & FMODE_READ))
  1213.     return -EINVAL;
  1214. abinfo.fragsize = s->dma_adc.fragsize;
  1215. spin_lock_irqsave(&s->lock, flags);
  1216. count = s->dma_adc.count;
  1217. if (!s->dma_adc.stopped)
  1218.     count += (s->dma_adc.fragsize - inw(s->io+IT_AC_CAPCDL));
  1219. spin_unlock_irqrestore(&s->lock, flags);
  1220. if (count < 0)
  1221.     count = 0;
  1222. abinfo.bytes = count;
  1223. abinfo.fragstotal = s->dma_adc.numfrag;
  1224. abinfo.fragments = abinfo.bytes >> s->dma_adc.fragshift;      
  1225. return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
  1226.     case SNDCTL_DSP_NONBLOCK:
  1227. file->f_flags |= O_NONBLOCK;
  1228. return 0;
  1229.     case SNDCTL_DSP_GETODELAY:
  1230. if (!(file->f_mode & FMODE_WRITE))
  1231.     return -EINVAL;
  1232. spin_lock_irqsave(&s->lock, flags);
  1233. count = s->dma_dac.count;
  1234. if (!s->dma_dac.stopped)
  1235.     count -= (s->dma_dac.fragsize - inw(s->io+IT_AC_PCDL));
  1236. spin_unlock_irqrestore(&s->lock, flags);
  1237. if (count < 0)
  1238.     count = 0;
  1239. return put_user(count, (int *)arg);
  1240.     case SNDCTL_DSP_GETIPTR:
  1241. if (!(file->f_mode & FMODE_READ))
  1242.     return -EINVAL;
  1243. spin_lock_irqsave(&s->lock, flags);
  1244. cinfo.bytes = s->dma_adc.total_bytes;
  1245. count = s->dma_adc.count;
  1246. if (!s->dma_adc.stopped) {
  1247.     diff = s->dma_adc.fragsize - inw(s->io+IT_AC_CAPCDL);
  1248.     count += diff;
  1249.     cinfo.bytes += diff;
  1250.     cinfo.ptr = inl(s->io+s->dma_adc.curBufPtr) - s->dma_adc.dmaaddr;
  1251. } else
  1252.     cinfo.ptr = virt_to_bus(s->dma_adc.nextIn) - s->dma_adc.dmaaddr;
  1253. if (s->dma_adc.mapped)
  1254.     s->dma_adc.count &= s->dma_adc.fragsize-1;
  1255. spin_unlock_irqrestore(&s->lock, flags);
  1256. if (count < 0)
  1257.     count = 0;
  1258. cinfo.blocks = count >> s->dma_adc.fragshift;
  1259. return copy_to_user((void *)arg, &cinfo, sizeof(cinfo));
  1260.     case SNDCTL_DSP_GETOPTR:
  1261. if (!(file->f_mode & FMODE_READ))
  1262.     return -EINVAL;
  1263. spin_lock_irqsave(&s->lock, flags);
  1264. cinfo.bytes = s->dma_dac.total_bytes;
  1265. count = s->dma_dac.count;
  1266. if (!s->dma_dac.stopped) {
  1267.     diff = s->dma_dac.fragsize - inw(s->io+IT_AC_CAPCDL);
  1268.     count -= diff;
  1269.     cinfo.bytes += diff;
  1270.     cinfo.ptr = inl(s->io+s->dma_dac.curBufPtr) - s->dma_dac.dmaaddr;
  1271. } else
  1272.     cinfo.ptr = virt_to_bus(s->dma_dac.nextOut) - s->dma_dac.dmaaddr;
  1273. if (s->dma_dac.mapped)
  1274.     s->dma_dac.count &= s->dma_dac.fragsize-1;
  1275. spin_unlock_irqrestore(&s->lock, flags);
  1276. if (count < 0)
  1277.     count = 0;
  1278. cinfo.blocks = count >> s->dma_dac.fragshift;
  1279. return copy_to_user((void *)arg, &cinfo, sizeof(cinfo));
  1280.     case SNDCTL_DSP_GETBLKSIZE:
  1281. if (file->f_mode & FMODE_WRITE)
  1282.     return put_user(s->dma_dac.fragsize, (int *)arg);
  1283. else
  1284.     return put_user(s->dma_adc.fragsize, (int *)arg);
  1285.     case SNDCTL_DSP_SETFRAGMENT:
  1286. if (get_user(val, (int *)arg))
  1287.     return -EFAULT;
  1288. if (file->f_mode & FMODE_READ) {
  1289.     stop_adc(s);
  1290.     s->dma_adc.ossfragshift = val & 0xffff;
  1291.     s->dma_adc.ossmaxfrags = (val >> 16) & 0xffff;
  1292.     if (s->dma_adc.ossfragshift < 4)
  1293. s->dma_adc.ossfragshift = 4;
  1294.     if (s->dma_adc.ossfragshift > 15)
  1295. s->dma_adc.ossfragshift = 15;
  1296.     if (s->dma_adc.ossmaxfrags < 4)
  1297. s->dma_adc.ossmaxfrags = 4;
  1298.     if ((ret = prog_dmabuf_adc(s)))
  1299. return ret;
  1300. }
  1301. if (file->f_mode & FMODE_WRITE) {
  1302.     stop_dac(s);
  1303.     s->dma_dac.ossfragshift = val & 0xffff;
  1304.     s->dma_dac.ossmaxfrags = (val >> 16) & 0xffff;
  1305.     if (s->dma_dac.ossfragshift < 4)
  1306. s->dma_dac.ossfragshift = 4;
  1307.     if (s->dma_dac.ossfragshift > 15)
  1308. s->dma_dac.ossfragshift = 15;
  1309.     if (s->dma_dac.ossmaxfrags < 4)
  1310. s->dma_dac.ossmaxfrags = 4;
  1311.     if ((ret = prog_dmabuf_dac(s)))
  1312. return ret;
  1313. }
  1314. return 0;
  1315.     case SNDCTL_DSP_SUBDIVIDE:
  1316. if ((file->f_mode & FMODE_READ && s->dma_adc.subdivision) ||
  1317.     (file->f_mode & FMODE_WRITE && s->dma_dac.subdivision))
  1318.     return -EINVAL;
  1319. if (get_user(val, (int *)arg))
  1320.     return -EFAULT;
  1321. if (val != 1 && val != 2 && val != 4)
  1322.     return -EINVAL;
  1323. if (file->f_mode & FMODE_READ) {
  1324.     stop_adc(s);
  1325.     s->dma_adc.subdivision = val;
  1326.     if ((ret = prog_dmabuf_adc(s)))
  1327. return ret;
  1328. }
  1329. if (file->f_mode & FMODE_WRITE) {
  1330.     stop_dac(s);
  1331.     s->dma_dac.subdivision = val;
  1332.     if ((ret = prog_dmabuf_dac(s)))
  1333. return ret;
  1334. }
  1335. return 0;
  1336.     case SOUND_PCM_READ_RATE:
  1337. return put_user((file->f_mode & FMODE_READ) ?
  1338. s->adcrate : s->dacrate, (int *)arg);
  1339.     case SOUND_PCM_READ_CHANNELS:
  1340. if (file->f_mode & FMODE_READ)
  1341.     return put_user((s->capcc & CC_SM) ? 2 : 1, (int *)arg);
  1342. else
  1343.     return put_user((s->pcc & CC_SM) ? 2 : 1, (int *)arg);
  1344.     
  1345.     case SOUND_PCM_READ_BITS:
  1346. if (file->f_mode & FMODE_READ)
  1347.     return put_user((s->capcc & CC_DF) ? 16 : 8, (int *)arg);
  1348. else
  1349.     return put_user((s->pcc & CC_DF) ? 16 : 8, (int *)arg);
  1350.     case SOUND_PCM_WRITE_FILTER:
  1351.     case SNDCTL_DSP_SETSYNCRO:
  1352.     case SOUND_PCM_READ_FILTER:
  1353. return -EINVAL;
  1354.     }
  1355.     return mixdev_ioctl(&s->codec, cmd, arg);
  1356. }
  1357. static int it8172_open(struct inode *inode, struct file *file)
  1358. {
  1359.     int minor = MINOR(inode->i_rdev);
  1360.     DECLARE_WAITQUEUE(wait, current);
  1361.     unsigned long flags;
  1362.     struct list_head *list;
  1363.     struct it8172_state *s;
  1364.     int ret;
  1365.     
  1366.     for (list = devs.next; ; list = list->next) {
  1367. if (list == &devs)
  1368.     return -ENODEV;
  1369. s = list_entry(list, struct it8172_state, devs);
  1370. if (!((s->dev_audio ^ minor) & ~0xf))
  1371.     break;
  1372.     }
  1373.     file->private_data = s;
  1374.     /* wait for device to become free */
  1375.     down(&s->open_sem);
  1376.     while (s->open_mode & file->f_mode) {
  1377. if (file->f_flags & O_NONBLOCK) {
  1378.     up(&s->open_sem);
  1379.     return -EBUSY;
  1380. }
  1381. add_wait_queue(&s->open_wait, &wait);
  1382. __set_current_state(TASK_INTERRUPTIBLE);
  1383. up(&s->open_sem);
  1384. schedule();
  1385. remove_wait_queue(&s->open_wait, &wait);
  1386. set_current_state(TASK_RUNNING);
  1387. if (signal_pending(current))
  1388.     return -ERESTARTSYS;
  1389. down(&s->open_sem);
  1390.     }
  1391.     spin_lock_irqsave(&s->lock, flags);
  1392.     if (file->f_mode & FMODE_READ) {
  1393. s->dma_adc.ossfragshift = s->dma_adc.ossmaxfrags =
  1394.     s->dma_adc.subdivision = s->dma_adc.total_bytes = 0;
  1395. s->capcc &= ~(CC_SM | CC_DF);
  1396. set_adc_rate(s, 8000);
  1397. if ((minor & 0xf) == SND_DEV_DSP16)
  1398.     s->capcc |= CC_DF;
  1399. outw(s->capcc, s->io+IT_AC_CAPCC);
  1400. if ((ret = prog_dmabuf_adc(s)))
  1401.     return ret;
  1402.     }
  1403.     if (file->f_mode & FMODE_WRITE) {
  1404. s->dma_dac.ossfragshift = s->dma_dac.ossmaxfrags =
  1405.     s->dma_dac.subdivision = s->dma_dac.total_bytes = 0;
  1406. s->pcc &= ~(CC_SM | CC_DF);
  1407. set_dac_rate(s, 8000);
  1408. if ((minor & 0xf) == SND_DEV_DSP16)
  1409.     s->pcc |= CC_DF;
  1410. outw(s->pcc, s->io+IT_AC_PCC);
  1411. if ((ret = prog_dmabuf_dac(s)))
  1412.     return ret;
  1413.     }
  1414.     spin_unlock_irqrestore(&s->lock, flags);
  1415.     s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
  1416.     up(&s->open_sem);
  1417.     return 0;
  1418. }
  1419. static int it8172_release(struct inode *inode, struct file *file)
  1420. {
  1421.     struct it8172_state *s = (struct it8172_state *)file->private_data;
  1422.     lock_kernel();
  1423.     if (file->f_mode & FMODE_WRITE)
  1424. drain_dac(s, file->f_flags & O_NONBLOCK);
  1425.     down(&s->open_sem);
  1426.     if (file->f_mode & FMODE_WRITE) {
  1427. stop_dac(s);
  1428. dealloc_dmabuf(s, &s->dma_dac);
  1429.     }
  1430.     if (file->f_mode & FMODE_READ) {
  1431. stop_adc(s);
  1432. dealloc_dmabuf(s, &s->dma_adc);
  1433.     }
  1434.     s->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
  1435.     up(&s->open_sem);
  1436.     wake_up(&s->open_wait);
  1437.     unlock_kernel();
  1438.     return 0;
  1439. }
  1440. static /*const*/ struct file_operations it8172_audio_fops = {
  1441.     owner: THIS_MODULE,
  1442.     llseek: it8172_llseek,
  1443.     read: it8172_read,
  1444.     write: it8172_write,
  1445.     poll: it8172_poll,
  1446.     ioctl: it8172_ioctl,
  1447.     mmap: it8172_mmap,
  1448.     open: it8172_open,
  1449.     release: it8172_release,
  1450. };
  1451. /* --------------------------------------------------------------------- */
  1452. /* --------------------------------------------------------------------- */
  1453. /*
  1454.  * for debugging purposes, we'll create a proc device that dumps the
  1455.  * CODEC chipstate
  1456.  */
  1457. #ifdef IT8172_DEBUG
  1458. static int proc_it8172_dump (char *buf, char **start, off_t fpos,
  1459.      int length, int *eof, void *data)
  1460. {
  1461.     struct it8172_state *s;
  1462.     int cnt, len = 0;
  1463.     if (list_empty(&devs))
  1464. return 0;
  1465.     s = list_entry(devs.next, struct it8172_state, devs);
  1466.     /* print out header */
  1467.     len += sprintf(buf + len, "nttIT8172 Audio Debugnn");
  1468.     // print out digital controller state
  1469.     len += sprintf (buf + len, "IT8172 Audio Controller registersn");
  1470.     len += sprintf (buf + len, "---------------------------------n");
  1471.     cnt=0;
  1472.     while (cnt < 0x72) {
  1473. if (cnt == IT_AC_PCB1STA || cnt == IT_AC_PCB2STA ||
  1474.     cnt == IT_AC_CAPB1STA || cnt == IT_AC_CAPB2STA ||
  1475.     cnt == IT_AC_PFDP) {
  1476.     len+= sprintf (buf + len, "reg %02x = %08xn",
  1477.    cnt, inl(s->io+cnt));
  1478.     cnt += 4;
  1479. } else {
  1480.     len+= sprintf (buf + len, "reg %02x = %04xn",
  1481.    cnt, inw(s->io+cnt));
  1482.     cnt += 2;
  1483. }
  1484.     }
  1485.     
  1486.     /* print out CODEC state */
  1487.     len += sprintf (buf + len, "nAC97 CODEC registersn");
  1488.     len += sprintf (buf + len, "----------------------n");
  1489.     for (cnt=0; cnt <= 0x7e; cnt = cnt +2)
  1490. len+= sprintf (buf + len, "reg %02x = %04xn",
  1491.        cnt, rdcodec(&s->codec, cnt));
  1492.     if (fpos >=len){
  1493. *start = buf;
  1494. *eof =1;
  1495. return 0;
  1496.     }
  1497.     *start = buf + fpos;
  1498.     if ((len -= fpos) > length)
  1499. return length;
  1500.     *eof =1;
  1501.     return len;
  1502. }
  1503. #endif /* IT8172_DEBUG */
  1504. /* --------------------------------------------------------------------- */
  1505. /* maximum number of devices; only used for command line params */
  1506. #define NR_DEVICE 5
  1507. static int spdif[NR_DEVICE] = { 0, };
  1508. static unsigned int devindex = 0;
  1509. MODULE_PARM(spdif, "1-" __MODULE_STRING(NR_DEVICE) "i");
  1510. MODULE_PARM_DESC(spdif, "if 1 the S/PDIF digital output is enabled");
  1511. MODULE_AUTHOR("Monta Vista Software, stevel@mvista.com");
  1512. MODULE_DESCRIPTION("IT8172 AudioPCI97 Driver");
  1513. MODULE_LICENSE("GPL");
  1514. /* --------------------------------------------------------------------- */
  1515. static int __devinit it8172_probe(struct pci_dev *pcidev,
  1516.   const struct pci_device_id *pciid)
  1517. {
  1518.     struct it8172_state *s;
  1519.     int i, val;
  1520.     unsigned short pcisr, vol;
  1521.     unsigned char legacy, imc;
  1522.     char proc_str[80];
  1523.     
  1524.     if (pcidev->irq == 0) 
  1525. return -1;
  1526.     if (!(s = kmalloc(sizeof(struct it8172_state), GFP_KERNEL))) {
  1527. printk(KERN_ERR PFX "alloc of device struct failedn");
  1528. return -1;
  1529.     }
  1530.     memset(s, 0, sizeof(struct it8172_state));
  1531.     init_waitqueue_head(&s->dma_adc.wait);
  1532.     init_waitqueue_head(&s->dma_dac.wait);
  1533.     init_waitqueue_head(&s->open_wait);
  1534.     init_MUTEX(&s->open_sem);
  1535.     spin_lock_init(&s->lock);
  1536.     s->dev = pcidev;
  1537.     s->io = pci_resource_start(pcidev, 0);
  1538.     s->irq = pcidev->irq;
  1539.     s->vendor = pcidev->vendor;
  1540.     s->device = pcidev->device;
  1541.     pci_read_config_byte(pcidev, PCI_REVISION_ID, &s->rev);
  1542.     s->codec.private_data = s;
  1543.     s->codec.id = 0;
  1544.     s->codec.codec_read = rdcodec;
  1545.     s->codec.codec_write = wrcodec;
  1546.     s->codec.codec_wait = waitcodec;
  1547.     if (!request_region(s->io, pci_resource_len(pcidev,0),
  1548. IT8172_MODULE_NAME)) {
  1549. printk(KERN_ERR PFX "io ports %#lx->%#lx in usen",
  1550. s->io, s->io + pci_resource_len(pcidev,0)-1);
  1551. goto err_region;
  1552.     }
  1553.     if (request_irq(s->irq, it8172_interrupt, SA_INTERRUPT,
  1554.     IT8172_MODULE_NAME, s)) {
  1555. printk(KERN_ERR PFX "irq %u in usen", s->irq);
  1556. goto err_irq;
  1557.     }
  1558.     printk(KERN_INFO PFX "IO at %#lx, IRQ %dn", s->io, s->irq);
  1559.     /* register devices */
  1560.     if ((s->dev_audio = register_sound_dsp(&it8172_audio_fops, -1)) < 0)
  1561. goto err_dev1;
  1562.     if ((s->codec.dev_mixer =
  1563.  register_sound_mixer(&it8172_mixer_fops, -1)) < 0)
  1564. goto err_dev2;
  1565. #ifdef IT8172_DEBUG
  1566.     /* intialize the debug proc device */
  1567.     s->ps = create_proc_read_entry(IT8172_MODULE_NAME, 0, NULL,
  1568.    proc_it8172_dump, NULL);
  1569. #endif /* IT8172_DEBUG */
  1570.     /*
  1571.      * Reset the Audio device using the IT8172 PCI Reset register. This
  1572.      * creates an audible double click on a speaker connected to Line-out.
  1573.      */
  1574.     IT_IO_READ16(IT_PM_PCISR, pcisr);
  1575.     pcisr |= IT_PM_PCISR_ACSR;
  1576.     IT_IO_WRITE16(IT_PM_PCISR, pcisr);
  1577.     /* wait up to 100msec for reset to complete */
  1578.     for (i=0; pcisr & IT_PM_PCISR_ACSR; i++) {
  1579. it8172_delay(10);
  1580. if (i == 10)
  1581.     break;
  1582. IT_IO_READ16(IT_PM_PCISR, pcisr);
  1583.     }
  1584.     if (i == 10) {
  1585. printk(KERN_ERR PFX "chip reset timeout!n");
  1586. goto err_dev3;
  1587.     }
  1588.     
  1589.     /* enable pci io and bus mastering */
  1590.     if (pci_enable_device(pcidev))
  1591. goto err_dev3;
  1592.     pci_set_master(pcidev);
  1593.     /* get out of legacy mode */
  1594.     pci_read_config_byte (pcidev, 0x40, &legacy);
  1595.     pci_write_config_byte (pcidev, 0x40, legacy & ~1);
  1596.     
  1597.     s->spdif_volume = -1;
  1598.     /* check to see if s/pdif mode is being requested */
  1599.     if (spdif[devindex]) {
  1600. printk(KERN_INFO PFX "enabling S/PDIF outputn");
  1601. s->spdif_volume = 0;
  1602. outb(GC_SOE, s->io+IT_AC_GC);
  1603.     } else {
  1604. printk(KERN_INFO PFX "disabling S/PDIF outputn");
  1605. outb(0, s->io+IT_AC_GC);
  1606.     }
  1607.     
  1608.     /* cold reset the AC97 */
  1609.     outw(CODECC_CR, s->io+IT_AC_CODECC);
  1610.     udelay(1000);
  1611.     outw(0, s->io+IT_AC_CODECC);
  1612.     /* need to delay around 500msec(bleech) to give
  1613.        some CODECs enough time to wakeup */
  1614.     it8172_delay(500);
  1615.     
  1616.     /* AC97 warm reset to start the bitclk */
  1617.     outw(CODECC_WR, s->io+IT_AC_CODECC);
  1618.     udelay(1000);
  1619.     outw(0, s->io+IT_AC_CODECC);
  1620.     
  1621.     /* codec init */
  1622.     if (!ac97_probe_codec(&s->codec))
  1623. goto err_dev3;
  1624.     /* Enable Volume button interrupts */
  1625.     imc = inb(s->io+IT_AC_IMC);
  1626.     outb(imc & ~IMC_VCIM, s->io+IT_AC_IMC);
  1627.     /* Un-mute PCM and FM out on the controller */
  1628.     vol = inw(s->io+IT_AC_PCMOV);
  1629.     outw(vol & ~PCMOV_PCMOM, s->io+IT_AC_PCMOV);
  1630.     vol = inw(s->io+IT_AC_FMOV);
  1631.     outw(vol & ~FMOV_FMOM, s->io+IT_AC_FMOV);
  1632.     /* set channel defaults to 8-bit, mono, 8 Khz */
  1633.     s->pcc = 0;
  1634.     s->capcc = 0;
  1635.     set_dac_rate(s, 8000);
  1636.     set_adc_rate(s, 8000);
  1637.     /* set mic to be the recording source */
  1638.     val = SOUND_MASK_MIC;
  1639.     mixdev_ioctl(&s->codec, SOUND_MIXER_WRITE_RECSRC, (unsigned long)&val);
  1640.     /* mute master and PCM when in S/PDIF mode */
  1641.     if (s->spdif_volume != -1) {
  1642. val = 0x0000;
  1643. mixdev_ioctl(&s->codec, SOUND_MIXER_WRITE_VOLUME,
  1644.      (unsigned long)&val);
  1645. mixdev_ioctl(&s->codec, SOUND_MIXER_WRITE_PCM,
  1646.      (unsigned long)&val);
  1647.     }
  1648.     
  1649. #ifdef IT8172_DEBUG
  1650.     sprintf(proc_str, "driver/%s/%d/ac97", IT8172_MODULE_NAME, s->codec.id);
  1651.     s->ac97_ps = create_proc_read_entry (proc_str, 0, NULL,
  1652.  ac97_read_proc, &s->codec);
  1653. #endif
  1654.     
  1655.     /* store it in the driver field */
  1656.     pci_set_drvdata(pcidev, s);
  1657.     pcidev->dma_mask = 0xffffffff;
  1658.     /* put it into driver list */
  1659.     list_add_tail(&s->devs, &devs);
  1660.     /* increment devindex */
  1661.     if (devindex < NR_DEVICE-1)
  1662. devindex++;
  1663.     return 0;
  1664.  err_dev3:
  1665.     unregister_sound_mixer(s->codec.dev_mixer);
  1666.  err_dev2:
  1667.     unregister_sound_dsp(s->dev_audio);
  1668.  err_dev1:
  1669.     printk(KERN_ERR PFX "cannot register misc devicen");
  1670.     free_irq(s->irq, s);
  1671.  err_irq:
  1672.     release_region(s->io, pci_resource_len(pcidev,0));
  1673.  err_region:
  1674.     kfree(s);
  1675.     return -1;
  1676. }
  1677. static void __devinit it8172_remove(struct pci_dev *dev)
  1678. {
  1679.     struct it8172_state *s = pci_get_drvdata(dev);
  1680.     if (!s)
  1681. return;
  1682.     list_del(&s->devs);
  1683. #ifdef IT8172_DEBUG
  1684.     if (s->ps)
  1685. remove_proc_entry(IT8172_MODULE_NAME, NULL);
  1686. #endif /* IT8172_DEBUG */
  1687.     synchronize_irq();
  1688.     free_irq(s->irq, s);
  1689.     release_region(s->io, pci_resource_len(dev,0));
  1690.     unregister_sound_dsp(s->dev_audio);
  1691.     unregister_sound_mixer(s->codec.dev_mixer);
  1692.     kfree(s);
  1693.     pci_set_drvdata(dev, NULL);
  1694. }
  1695. static struct pci_device_id id_table[] __devinitdata = {
  1696.     { PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_IT8172G_AUDIO, PCI_ANY_ID,
  1697.       PCI_ANY_ID, 0, 0 },
  1698.     { 0, }
  1699. };
  1700. MODULE_DEVICE_TABLE(pci, id_table);
  1701. static struct pci_driver it8172_driver = {
  1702.     name: IT8172_MODULE_NAME,
  1703.     id_table: id_table,
  1704.     probe: it8172_probe,
  1705.     remove: it8172_remove
  1706. };
  1707. static int __init init_it8172(void)
  1708. {
  1709.     if (!pci_present())   /* No PCI bus in this machine! */
  1710. return -ENODEV;
  1711.     printk("version v0.26 time " __TIME__ " " __DATE__ "n");
  1712.     return pci_module_init(&it8172_driver);
  1713. }
  1714. static void __exit cleanup_it8172(void)
  1715. {
  1716.     printk(KERN_INFO PFX "unloadingn");
  1717.     pci_unregister_driver(&it8172_driver);
  1718. }
  1719. module_init(init_it8172);
  1720. module_exit(cleanup_it8172);