ite8172.c 58 KB

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