1 /* 2 * ALSA driver for RME Hammerfall DSP audio interface(s) 3 * 4 * Copyright (c) 2002 Paul Davis 5 * Marcus Andersson 6 * Thomas Charbonnel 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 * 22 */ 23 24 #include <linux/init.h> 25 #include <linux/delay.h> 26 #include <linux/interrupt.h> 27 #include <linux/pci.h> 28 #include <linux/firmware.h> 29 #include <linux/module.h> 30 #include <linux/math64.h> 31 #include <linux/vmalloc.h> 32 33 #include <sound/core.h> 34 #include <sound/control.h> 35 #include <sound/pcm.h> 36 #include <sound/info.h> 37 #include <sound/asoundef.h> 38 #include <sound/rawmidi.h> 39 #include <sound/hwdep.h> 40 #include <sound/initval.h> 41 #include <sound/hdsp.h> 42 43 #include <asm/byteorder.h> 44 #include <asm/current.h> 45 #include <asm/io.h> 46 47 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ 48 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ 49 static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ 50 51 module_param_array(index, int, NULL, 0444); 52 MODULE_PARM_DESC(index, "Index value for RME Hammerfall DSP interface."); 53 module_param_array(id, charp, NULL, 0444); 54 MODULE_PARM_DESC(id, "ID string for RME Hammerfall DSP interface."); 55 module_param_array(enable, bool, NULL, 0444); 56 MODULE_PARM_DESC(enable, "Enable/disable specific Hammerfall DSP soundcards."); 57 MODULE_AUTHOR("Paul Davis <paul@linuxaudiosystems.com>, Marcus Andersson, Thomas Charbonnel <thomas@undata.org>"); 58 MODULE_DESCRIPTION("RME Hammerfall DSP"); 59 MODULE_LICENSE("GPL"); 60 MODULE_SUPPORTED_DEVICE("{{RME Hammerfall-DSP}," 61 "{RME HDSP-9652}," 62 "{RME HDSP-9632}}"); 63 MODULE_FIRMWARE("rpm_firmware.bin"); 64 MODULE_FIRMWARE("multiface_firmware.bin"); 65 MODULE_FIRMWARE("multiface_firmware_rev11.bin"); 66 MODULE_FIRMWARE("digiface_firmware.bin"); 67 MODULE_FIRMWARE("digiface_firmware_rev11.bin"); 68 69 #define HDSP_MAX_CHANNELS 26 70 #define HDSP_MAX_DS_CHANNELS 14 71 #define HDSP_MAX_QS_CHANNELS 8 72 #define DIGIFACE_SS_CHANNELS 26 73 #define DIGIFACE_DS_CHANNELS 14 74 #define MULTIFACE_SS_CHANNELS 18 75 #define MULTIFACE_DS_CHANNELS 14 76 #define H9652_SS_CHANNELS 26 77 #define H9652_DS_CHANNELS 14 78 /* This does not include possible Analog Extension Boards 79 AEBs are detected at card initialization 80 */ 81 #define H9632_SS_CHANNELS 12 82 #define H9632_DS_CHANNELS 8 83 #define H9632_QS_CHANNELS 4 84 #define RPM_CHANNELS 6 85 86 /* Write registers. These are defined as byte-offsets from the iobase value. 87 */ 88 #define HDSP_resetPointer 0 89 #define HDSP_freqReg 0 90 #define HDSP_outputBufferAddress 32 91 #define HDSP_inputBufferAddress 36 92 #define HDSP_controlRegister 64 93 #define HDSP_interruptConfirmation 96 94 #define HDSP_outputEnable 128 95 #define HDSP_control2Reg 256 96 #define HDSP_midiDataOut0 352 97 #define HDSP_midiDataOut1 356 98 #define HDSP_fifoData 368 99 #define HDSP_inputEnable 384 100 101 /* Read registers. These are defined as byte-offsets from the iobase value 102 */ 103 104 #define HDSP_statusRegister 0 105 #define HDSP_timecode 128 106 #define HDSP_status2Register 192 107 #define HDSP_midiDataIn0 360 108 #define HDSP_midiDataIn1 364 109 #define HDSP_midiStatusOut0 384 110 #define HDSP_midiStatusOut1 388 111 #define HDSP_midiStatusIn0 392 112 #define HDSP_midiStatusIn1 396 113 #define HDSP_fifoStatus 400 114 115 /* the meters are regular i/o-mapped registers, but offset 116 considerably from the rest. the peak registers are reset 117 when read; the least-significant 4 bits are full-scale counters; 118 the actual peak value is in the most-significant 24 bits. 119 */ 120 121 #define HDSP_playbackPeakLevel 4096 /* 26 * 32 bit values */ 122 #define HDSP_inputPeakLevel 4224 /* 26 * 32 bit values */ 123 #define HDSP_outputPeakLevel 4352 /* (26+2) * 32 bit values */ 124 #define HDSP_playbackRmsLevel 4612 /* 26 * 64 bit values */ 125 #define HDSP_inputRmsLevel 4868 /* 26 * 64 bit values */ 126 127 128 /* This is for H9652 cards 129 Peak values are read downward from the base 130 Rms values are read upward 131 There are rms values for the outputs too 132 26*3 values are read in ss mode 133 14*3 in ds mode, with no gap between values 134 */ 135 #define HDSP_9652_peakBase 7164 136 #define HDSP_9652_rmsBase 4096 137 138 /* c.f. the hdsp_9632_meters_t struct */ 139 #define HDSP_9632_metersBase 4096 140 141 #define HDSP_IO_EXTENT 7168 142 143 /* control2 register bits */ 144 145 #define HDSP_TMS 0x01 146 #define HDSP_TCK 0x02 147 #define HDSP_TDI 0x04 148 #define HDSP_JTAG 0x08 149 #define HDSP_PWDN 0x10 150 #define HDSP_PROGRAM 0x020 151 #define HDSP_CONFIG_MODE_0 0x040 152 #define HDSP_CONFIG_MODE_1 0x080 153 #define HDSP_VERSION_BIT (0x100 | HDSP_S_LOAD) 154 #define HDSP_BIGENDIAN_MODE 0x200 155 #define HDSP_RD_MULTIPLE 0x400 156 #define HDSP_9652_ENABLE_MIXER 0x800 157 #define HDSP_S200 0x800 158 #define HDSP_S300 (0x100 | HDSP_S200) /* dummy, purpose of 0x100 unknown */ 159 #define HDSP_CYCLIC_MODE 0x1000 160 #define HDSP_TDO 0x10000000 161 162 #define HDSP_S_PROGRAM (HDSP_CYCLIC_MODE|HDSP_PROGRAM|HDSP_CONFIG_MODE_0) 163 #define HDSP_S_LOAD (HDSP_CYCLIC_MODE|HDSP_PROGRAM|HDSP_CONFIG_MODE_1) 164 165 /* Control Register bits */ 166 167 #define HDSP_Start (1<<0) /* start engine */ 168 #define HDSP_Latency0 (1<<1) /* buffer size = 2^n where n is defined by Latency{2,1,0} */ 169 #define HDSP_Latency1 (1<<2) /* [ see above ] */ 170 #define HDSP_Latency2 (1<<3) /* [ see above ] */ 171 #define HDSP_ClockModeMaster (1<<4) /* 1=Master, 0=Slave/Autosync */ 172 #define HDSP_AudioInterruptEnable (1<<5) /* what do you think ? */ 173 #define HDSP_Frequency0 (1<<6) /* 0=44.1kHz/88.2kHz/176.4kHz 1=48kHz/96kHz/192kHz */ 174 #define HDSP_Frequency1 (1<<7) /* 0=32kHz/64kHz/128kHz */ 175 #define HDSP_DoubleSpeed (1<<8) /* 0=normal speed, 1=double speed */ 176 #define HDSP_SPDIFProfessional (1<<9) /* 0=consumer, 1=professional */ 177 #define HDSP_SPDIFEmphasis (1<<10) /* 0=none, 1=on */ 178 #define HDSP_SPDIFNonAudio (1<<11) /* 0=off, 1=on */ 179 #define HDSP_SPDIFOpticalOut (1<<12) /* 1=use 1st ADAT connector for SPDIF, 0=do not */ 180 #define HDSP_SyncRef2 (1<<13) 181 #define HDSP_SPDIFInputSelect0 (1<<14) 182 #define HDSP_SPDIFInputSelect1 (1<<15) 183 #define HDSP_SyncRef0 (1<<16) 184 #define HDSP_SyncRef1 (1<<17) 185 #define HDSP_AnalogExtensionBoard (1<<18) /* For H9632 cards */ 186 #define HDSP_XLRBreakoutCable (1<<20) /* For H9632 cards */ 187 #define HDSP_Midi0InterruptEnable (1<<22) 188 #define HDSP_Midi1InterruptEnable (1<<23) 189 #define HDSP_LineOut (1<<24) 190 #define HDSP_ADGain0 (1<<25) /* From here : H9632 specific */ 191 #define HDSP_ADGain1 (1<<26) 192 #define HDSP_DAGain0 (1<<27) 193 #define HDSP_DAGain1 (1<<28) 194 #define HDSP_PhoneGain0 (1<<29) 195 #define HDSP_PhoneGain1 (1<<30) 196 #define HDSP_QuadSpeed (1<<31) 197 198 /* RPM uses some of the registers for special purposes */ 199 #define HDSP_RPM_Inp12 0x04A00 200 #define HDSP_RPM_Inp12_Phon_6dB 0x00800 /* Dolby */ 201 #define HDSP_RPM_Inp12_Phon_0dB 0x00000 /* .. */ 202 #define HDSP_RPM_Inp12_Phon_n6dB 0x04000 /* inp_0 */ 203 #define HDSP_RPM_Inp12_Line_0dB 0x04200 /* Dolby+PRO */ 204 #define HDSP_RPM_Inp12_Line_n6dB 0x00200 /* PRO */ 205 206 #define HDSP_RPM_Inp34 0x32000 207 #define HDSP_RPM_Inp34_Phon_6dB 0x20000 /* SyncRef1 */ 208 #define HDSP_RPM_Inp34_Phon_0dB 0x00000 /* .. */ 209 #define HDSP_RPM_Inp34_Phon_n6dB 0x02000 /* SyncRef2 */ 210 #define HDSP_RPM_Inp34_Line_0dB 0x30000 /* SyncRef1+SyncRef0 */ 211 #define HDSP_RPM_Inp34_Line_n6dB 0x10000 /* SyncRef0 */ 212 213 #define HDSP_RPM_Bypass 0x01000 214 215 #define HDSP_RPM_Disconnect 0x00001 216 217 #define HDSP_ADGainMask (HDSP_ADGain0|HDSP_ADGain1) 218 #define HDSP_ADGainMinus10dBV HDSP_ADGainMask 219 #define HDSP_ADGainPlus4dBu (HDSP_ADGain0) 220 #define HDSP_ADGainLowGain 0 221 222 #define HDSP_DAGainMask (HDSP_DAGain0|HDSP_DAGain1) 223 #define HDSP_DAGainHighGain HDSP_DAGainMask 224 #define HDSP_DAGainPlus4dBu (HDSP_DAGain0) 225 #define HDSP_DAGainMinus10dBV 0 226 227 #define HDSP_PhoneGainMask (HDSP_PhoneGain0|HDSP_PhoneGain1) 228 #define HDSP_PhoneGain0dB HDSP_PhoneGainMask 229 #define HDSP_PhoneGainMinus6dB (HDSP_PhoneGain0) 230 #define HDSP_PhoneGainMinus12dB 0 231 232 #define HDSP_LatencyMask (HDSP_Latency0|HDSP_Latency1|HDSP_Latency2) 233 #define HDSP_FrequencyMask (HDSP_Frequency0|HDSP_Frequency1|HDSP_DoubleSpeed|HDSP_QuadSpeed) 234 235 #define HDSP_SPDIFInputMask (HDSP_SPDIFInputSelect0|HDSP_SPDIFInputSelect1) 236 #define HDSP_SPDIFInputADAT1 0 237 #define HDSP_SPDIFInputCoaxial (HDSP_SPDIFInputSelect0) 238 #define HDSP_SPDIFInputCdrom (HDSP_SPDIFInputSelect1) 239 #define HDSP_SPDIFInputAES (HDSP_SPDIFInputSelect0|HDSP_SPDIFInputSelect1) 240 241 #define HDSP_SyncRefMask (HDSP_SyncRef0|HDSP_SyncRef1|HDSP_SyncRef2) 242 #define HDSP_SyncRef_ADAT1 0 243 #define HDSP_SyncRef_ADAT2 (HDSP_SyncRef0) 244 #define HDSP_SyncRef_ADAT3 (HDSP_SyncRef1) 245 #define HDSP_SyncRef_SPDIF (HDSP_SyncRef0|HDSP_SyncRef1) 246 #define HDSP_SyncRef_WORD (HDSP_SyncRef2) 247 #define HDSP_SyncRef_ADAT_SYNC (HDSP_SyncRef0|HDSP_SyncRef2) 248 249 /* Sample Clock Sources */ 250 251 #define HDSP_CLOCK_SOURCE_AUTOSYNC 0 252 #define HDSP_CLOCK_SOURCE_INTERNAL_32KHZ 1 253 #define HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ 2 254 #define HDSP_CLOCK_SOURCE_INTERNAL_48KHZ 3 255 #define HDSP_CLOCK_SOURCE_INTERNAL_64KHZ 4 256 #define HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ 5 257 #define HDSP_CLOCK_SOURCE_INTERNAL_96KHZ 6 258 #define HDSP_CLOCK_SOURCE_INTERNAL_128KHZ 7 259 #define HDSP_CLOCK_SOURCE_INTERNAL_176_4KHZ 8 260 #define HDSP_CLOCK_SOURCE_INTERNAL_192KHZ 9 261 262 /* Preferred sync reference choices - used by "pref_sync_ref" control switch */ 263 264 #define HDSP_SYNC_FROM_WORD 0 265 #define HDSP_SYNC_FROM_SPDIF 1 266 #define HDSP_SYNC_FROM_ADAT1 2 267 #define HDSP_SYNC_FROM_ADAT_SYNC 3 268 #define HDSP_SYNC_FROM_ADAT2 4 269 #define HDSP_SYNC_FROM_ADAT3 5 270 271 /* SyncCheck status */ 272 273 #define HDSP_SYNC_CHECK_NO_LOCK 0 274 #define HDSP_SYNC_CHECK_LOCK 1 275 #define HDSP_SYNC_CHECK_SYNC 2 276 277 /* AutoSync references - used by "autosync_ref" control switch */ 278 279 #define HDSP_AUTOSYNC_FROM_WORD 0 280 #define HDSP_AUTOSYNC_FROM_ADAT_SYNC 1 281 #define HDSP_AUTOSYNC_FROM_SPDIF 2 282 #define HDSP_AUTOSYNC_FROM_NONE 3 283 #define HDSP_AUTOSYNC_FROM_ADAT1 4 284 #define HDSP_AUTOSYNC_FROM_ADAT2 5 285 #define HDSP_AUTOSYNC_FROM_ADAT3 6 286 287 /* Possible sources of S/PDIF input */ 288 289 #define HDSP_SPDIFIN_OPTICAL 0 /* optical (ADAT1) */ 290 #define HDSP_SPDIFIN_COAXIAL 1 /* coaxial (RCA) */ 291 #define HDSP_SPDIFIN_INTERNAL 2 /* internal (CDROM) */ 292 #define HDSP_SPDIFIN_AES 3 /* xlr for H9632 (AES)*/ 293 294 #define HDSP_Frequency32KHz HDSP_Frequency0 295 #define HDSP_Frequency44_1KHz HDSP_Frequency1 296 #define HDSP_Frequency48KHz (HDSP_Frequency1|HDSP_Frequency0) 297 #define HDSP_Frequency64KHz (HDSP_DoubleSpeed|HDSP_Frequency0) 298 #define HDSP_Frequency88_2KHz (HDSP_DoubleSpeed|HDSP_Frequency1) 299 #define HDSP_Frequency96KHz (HDSP_DoubleSpeed|HDSP_Frequency1|HDSP_Frequency0) 300 /* For H9632 cards */ 301 #define HDSP_Frequency128KHz (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency0) 302 #define HDSP_Frequency176_4KHz (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency1) 303 #define HDSP_Frequency192KHz (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency1|HDSP_Frequency0) 304 /* RME says n = 104857600000000, but in the windows MADI driver, I see: 305 return 104857600000000 / rate; // 100 MHz 306 return 110100480000000 / rate; // 105 MHz 307 */ 308 #define DDS_NUMERATOR 104857600000000ULL; /* = 2^20 * 10^8 */ 309 310 #define hdsp_encode_latency(x) (((x)<<1) & HDSP_LatencyMask) 311 #define hdsp_decode_latency(x) (((x) & HDSP_LatencyMask)>>1) 312 313 #define hdsp_encode_spdif_in(x) (((x)&0x3)<<14) 314 #define hdsp_decode_spdif_in(x) (((x)>>14)&0x3) 315 316 /* Status Register bits */ 317 318 #define HDSP_audioIRQPending (1<<0) 319 #define HDSP_Lock2 (1<<1) /* this is for Digiface and H9652 */ 320 #define HDSP_spdifFrequency3 HDSP_Lock2 /* this is for H9632 only */ 321 #define HDSP_Lock1 (1<<2) 322 #define HDSP_Lock0 (1<<3) 323 #define HDSP_SPDIFSync (1<<4) 324 #define HDSP_TimecodeLock (1<<5) 325 #define HDSP_BufferPositionMask 0x000FFC0 /* Bit 6..15 : h/w buffer pointer */ 326 #define HDSP_Sync2 (1<<16) 327 #define HDSP_Sync1 (1<<17) 328 #define HDSP_Sync0 (1<<18) 329 #define HDSP_DoubleSpeedStatus (1<<19) 330 #define HDSP_ConfigError (1<<20) 331 #define HDSP_DllError (1<<21) 332 #define HDSP_spdifFrequency0 (1<<22) 333 #define HDSP_spdifFrequency1 (1<<23) 334 #define HDSP_spdifFrequency2 (1<<24) 335 #define HDSP_SPDIFErrorFlag (1<<25) 336 #define HDSP_BufferID (1<<26) 337 #define HDSP_TimecodeSync (1<<27) 338 #define HDSP_AEBO (1<<28) /* H9632 specific Analog Extension Boards */ 339 #define HDSP_AEBI (1<<29) /* 0 = present, 1 = absent */ 340 #define HDSP_midi0IRQPending (1<<30) 341 #define HDSP_midi1IRQPending (1<<31) 342 343 #define HDSP_spdifFrequencyMask (HDSP_spdifFrequency0|HDSP_spdifFrequency1|HDSP_spdifFrequency2) 344 #define HDSP_spdifFrequencyMask_9632 (HDSP_spdifFrequency0|\ 345 HDSP_spdifFrequency1|\ 346 HDSP_spdifFrequency2|\ 347 HDSP_spdifFrequency3) 348 349 #define HDSP_spdifFrequency32KHz (HDSP_spdifFrequency0) 350 #define HDSP_spdifFrequency44_1KHz (HDSP_spdifFrequency1) 351 #define HDSP_spdifFrequency48KHz (HDSP_spdifFrequency0|HDSP_spdifFrequency1) 352 353 #define HDSP_spdifFrequency64KHz (HDSP_spdifFrequency2) 354 #define HDSP_spdifFrequency88_2KHz (HDSP_spdifFrequency0|HDSP_spdifFrequency2) 355 #define HDSP_spdifFrequency96KHz (HDSP_spdifFrequency2|HDSP_spdifFrequency1) 356 357 /* This is for H9632 cards */ 358 #define HDSP_spdifFrequency128KHz (HDSP_spdifFrequency0|\ 359 HDSP_spdifFrequency1|\ 360 HDSP_spdifFrequency2) 361 #define HDSP_spdifFrequency176_4KHz HDSP_spdifFrequency3 362 #define HDSP_spdifFrequency192KHz (HDSP_spdifFrequency3|HDSP_spdifFrequency0) 363 364 /* Status2 Register bits */ 365 366 #define HDSP_version0 (1<<0) 367 #define HDSP_version1 (1<<1) 368 #define HDSP_version2 (1<<2) 369 #define HDSP_wc_lock (1<<3) 370 #define HDSP_wc_sync (1<<4) 371 #define HDSP_inp_freq0 (1<<5) 372 #define HDSP_inp_freq1 (1<<6) 373 #define HDSP_inp_freq2 (1<<7) 374 #define HDSP_SelSyncRef0 (1<<8) 375 #define HDSP_SelSyncRef1 (1<<9) 376 #define HDSP_SelSyncRef2 (1<<10) 377 378 #define HDSP_wc_valid (HDSP_wc_lock|HDSP_wc_sync) 379 380 #define HDSP_systemFrequencyMask (HDSP_inp_freq0|HDSP_inp_freq1|HDSP_inp_freq2) 381 #define HDSP_systemFrequency32 (HDSP_inp_freq0) 382 #define HDSP_systemFrequency44_1 (HDSP_inp_freq1) 383 #define HDSP_systemFrequency48 (HDSP_inp_freq0|HDSP_inp_freq1) 384 #define HDSP_systemFrequency64 (HDSP_inp_freq2) 385 #define HDSP_systemFrequency88_2 (HDSP_inp_freq0|HDSP_inp_freq2) 386 #define HDSP_systemFrequency96 (HDSP_inp_freq1|HDSP_inp_freq2) 387 /* FIXME : more values for 9632 cards ? */ 388 389 #define HDSP_SelSyncRefMask (HDSP_SelSyncRef0|HDSP_SelSyncRef1|HDSP_SelSyncRef2) 390 #define HDSP_SelSyncRef_ADAT1 0 391 #define HDSP_SelSyncRef_ADAT2 (HDSP_SelSyncRef0) 392 #define HDSP_SelSyncRef_ADAT3 (HDSP_SelSyncRef1) 393 #define HDSP_SelSyncRef_SPDIF (HDSP_SelSyncRef0|HDSP_SelSyncRef1) 394 #define HDSP_SelSyncRef_WORD (HDSP_SelSyncRef2) 395 #define HDSP_SelSyncRef_ADAT_SYNC (HDSP_SelSyncRef0|HDSP_SelSyncRef2) 396 397 /* Card state flags */ 398 399 #define HDSP_InitializationComplete (1<<0) 400 #define HDSP_FirmwareLoaded (1<<1) 401 #define HDSP_FirmwareCached (1<<2) 402 403 /* FIFO wait times, defined in terms of 1/10ths of msecs */ 404 405 #define HDSP_LONG_WAIT 5000 406 #define HDSP_SHORT_WAIT 30 407 408 #define UNITY_GAIN 32768 409 #define MINUS_INFINITY_GAIN 0 410 411 /* the size of a substream (1 mono data stream) */ 412 413 #define HDSP_CHANNEL_BUFFER_SAMPLES (16*1024) 414 #define HDSP_CHANNEL_BUFFER_BYTES (4*HDSP_CHANNEL_BUFFER_SAMPLES) 415 416 /* the size of the area we need to allocate for DMA transfers. the 417 size is the same regardless of the number of channels - the 418 Multiface still uses the same memory area. 419 420 Note that we allocate 1 more channel than is apparently needed 421 because the h/w seems to write 1 byte beyond the end of the last 422 page. Sigh. 423 */ 424 425 #define HDSP_DMA_AREA_BYTES ((HDSP_MAX_CHANNELS+1) * HDSP_CHANNEL_BUFFER_BYTES) 426 #define HDSP_DMA_AREA_KILOBYTES (HDSP_DMA_AREA_BYTES/1024) 427 428 #define HDSP_FIRMWARE_SIZE (24413 * 4) 429 430 struct hdsp_9632_meters { 431 u32 input_peak[16]; 432 u32 playback_peak[16]; 433 u32 output_peak[16]; 434 u32 xxx_peak[16]; 435 u32 padding[64]; 436 u32 input_rms_low[16]; 437 u32 playback_rms_low[16]; 438 u32 output_rms_low[16]; 439 u32 xxx_rms_low[16]; 440 u32 input_rms_high[16]; 441 u32 playback_rms_high[16]; 442 u32 output_rms_high[16]; 443 u32 xxx_rms_high[16]; 444 }; 445 446 struct hdsp_midi { 447 struct hdsp *hdsp; 448 int id; 449 struct snd_rawmidi *rmidi; 450 struct snd_rawmidi_substream *input; 451 struct snd_rawmidi_substream *output; 452 char istimer; /* timer in use */ 453 struct timer_list timer; 454 spinlock_t lock; 455 int pending; 456 }; 457 458 struct hdsp { 459 spinlock_t lock; 460 struct snd_pcm_substream *capture_substream; 461 struct snd_pcm_substream *playback_substream; 462 struct hdsp_midi midi[2]; 463 struct tasklet_struct midi_tasklet; 464 int use_midi_tasklet; 465 int precise_ptr; 466 u32 control_register; /* cached value */ 467 u32 control2_register; /* cached value */ 468 u32 creg_spdif; 469 u32 creg_spdif_stream; 470 int clock_source_locked; 471 char *card_name; /* digiface/multiface/rpm */ 472 enum HDSP_IO_Type io_type; /* ditto, but for code use */ 473 unsigned short firmware_rev; 474 unsigned short state; /* stores state bits */ 475 const struct firmware *firmware; 476 u32 *fw_uploaded; 477 size_t period_bytes; /* guess what this is */ 478 unsigned char max_channels; 479 unsigned char qs_in_channels; /* quad speed mode for H9632 */ 480 unsigned char ds_in_channels; 481 unsigned char ss_in_channels; /* different for multiface/digiface */ 482 unsigned char qs_out_channels; 483 unsigned char ds_out_channels; 484 unsigned char ss_out_channels; 485 486 struct snd_dma_buffer capture_dma_buf; 487 struct snd_dma_buffer playback_dma_buf; 488 unsigned char *capture_buffer; /* suitably aligned address */ 489 unsigned char *playback_buffer; /* suitably aligned address */ 490 491 pid_t capture_pid; 492 pid_t playback_pid; 493 int running; 494 int system_sample_rate; 495 char *channel_map; 496 int dev; 497 int irq; 498 unsigned long port; 499 void __iomem *iobase; 500 struct snd_card *card; 501 struct snd_pcm *pcm; 502 struct snd_hwdep *hwdep; 503 struct pci_dev *pci; 504 struct snd_kcontrol *spdif_ctl; 505 unsigned short mixer_matrix[HDSP_MATRIX_MIXER_SIZE]; 506 unsigned int dds_value; /* last value written to freq register */ 507 }; 508 509 /* These tables map the ALSA channels 1..N to the channels that we 510 need to use in order to find the relevant channel buffer. RME 511 refer to this kind of mapping as between "the ADAT channel and 512 the DMA channel." We index it using the logical audio channel, 513 and the value is the DMA channel (i.e. channel buffer number) 514 where the data for that channel can be read/written from/to. 515 */ 516 517 static char channel_map_df_ss[HDSP_MAX_CHANNELS] = { 518 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 519 18, 19, 20, 21, 22, 23, 24, 25 520 }; 521 522 static char channel_map_mf_ss[HDSP_MAX_CHANNELS] = { /* Multiface */ 523 /* Analog */ 524 0, 1, 2, 3, 4, 5, 6, 7, 525 /* ADAT 2 */ 526 16, 17, 18, 19, 20, 21, 22, 23, 527 /* SPDIF */ 528 24, 25, 529 -1, -1, -1, -1, -1, -1, -1, -1 530 }; 531 532 static char channel_map_ds[HDSP_MAX_CHANNELS] = { 533 /* ADAT channels are remapped */ 534 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 535 /* channels 12 and 13 are S/PDIF */ 536 24, 25, 537 /* others don't exist */ 538 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 539 }; 540 541 static char channel_map_H9632_ss[HDSP_MAX_CHANNELS] = { 542 /* ADAT channels */ 543 0, 1, 2, 3, 4, 5, 6, 7, 544 /* SPDIF */ 545 8, 9, 546 /* Analog */ 547 10, 11, 548 /* AO4S-192 and AI4S-192 extension boards */ 549 12, 13, 14, 15, 550 /* others don't exist */ 551 -1, -1, -1, -1, -1, -1, -1, -1, 552 -1, -1 553 }; 554 555 static char channel_map_H9632_ds[HDSP_MAX_CHANNELS] = { 556 /* ADAT */ 557 1, 3, 5, 7, 558 /* SPDIF */ 559 8, 9, 560 /* Analog */ 561 10, 11, 562 /* AO4S-192 and AI4S-192 extension boards */ 563 12, 13, 14, 15, 564 /* others don't exist */ 565 -1, -1, -1, -1, -1, -1, -1, -1, 566 -1, -1, -1, -1, -1, -1 567 }; 568 569 static char channel_map_H9632_qs[HDSP_MAX_CHANNELS] = { 570 /* ADAT is disabled in this mode */ 571 /* SPDIF */ 572 8, 9, 573 /* Analog */ 574 10, 11, 575 /* AO4S-192 and AI4S-192 extension boards */ 576 12, 13, 14, 15, 577 /* others don't exist */ 578 -1, -1, -1, -1, -1, -1, -1, -1, 579 -1, -1, -1, -1, -1, -1, -1, -1, 580 -1, -1 581 }; 582 583 static int snd_hammerfall_get_buffer(struct pci_dev *pci, struct snd_dma_buffer *dmab, size_t size) 584 { 585 dmab->dev.type = SNDRV_DMA_TYPE_DEV; 586 dmab->dev.dev = snd_dma_pci_data(pci); 587 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci), 588 size, dmab) < 0) 589 return -ENOMEM; 590 return 0; 591 } 592 593 static void snd_hammerfall_free_buffer(struct snd_dma_buffer *dmab, struct pci_dev *pci) 594 { 595 if (dmab->area) 596 snd_dma_free_pages(dmab); 597 } 598 599 600 static DEFINE_PCI_DEVICE_TABLE(snd_hdsp_ids) = { 601 { 602 .vendor = PCI_VENDOR_ID_XILINX, 603 .device = PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP, 604 .subvendor = PCI_ANY_ID, 605 .subdevice = PCI_ANY_ID, 606 }, /* RME Hammerfall-DSP */ 607 { 0, }, 608 }; 609 610 MODULE_DEVICE_TABLE(pci, snd_hdsp_ids); 611 612 /* prototypes */ 613 static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp); 614 static int snd_hdsp_create_pcm(struct snd_card *card, struct hdsp *hdsp); 615 static int snd_hdsp_enable_io (struct hdsp *hdsp); 616 static void snd_hdsp_initialize_midi_flush (struct hdsp *hdsp); 617 static void snd_hdsp_initialize_channels (struct hdsp *hdsp); 618 static int hdsp_fifo_wait(struct hdsp *hdsp, int count, int timeout); 619 static int hdsp_autosync_ref(struct hdsp *hdsp); 620 static int snd_hdsp_set_defaults(struct hdsp *hdsp); 621 static void snd_hdsp_9652_enable_mixer (struct hdsp *hdsp); 622 623 static int hdsp_playback_to_output_key (struct hdsp *hdsp, int in, int out) 624 { 625 switch (hdsp->io_type) { 626 case Multiface: 627 case Digiface: 628 case RPM: 629 default: 630 if (hdsp->firmware_rev == 0xa) 631 return (64 * out) + (32 + (in)); 632 else 633 return (52 * out) + (26 + (in)); 634 case H9632: 635 return (32 * out) + (16 + (in)); 636 case H9652: 637 return (52 * out) + (26 + (in)); 638 } 639 } 640 641 static int hdsp_input_to_output_key (struct hdsp *hdsp, int in, int out) 642 { 643 switch (hdsp->io_type) { 644 case Multiface: 645 case Digiface: 646 case RPM: 647 default: 648 if (hdsp->firmware_rev == 0xa) 649 return (64 * out) + in; 650 else 651 return (52 * out) + in; 652 case H9632: 653 return (32 * out) + in; 654 case H9652: 655 return (52 * out) + in; 656 } 657 } 658 659 static void hdsp_write(struct hdsp *hdsp, int reg, int val) 660 { 661 writel(val, hdsp->iobase + reg); 662 } 663 664 static unsigned int hdsp_read(struct hdsp *hdsp, int reg) 665 { 666 return readl (hdsp->iobase + reg); 667 } 668 669 static int hdsp_check_for_iobox (struct hdsp *hdsp) 670 { 671 int i; 672 673 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return 0; 674 for (i = 0; i < 500; i++) { 675 if (0 == (hdsp_read(hdsp, HDSP_statusRegister) & 676 HDSP_ConfigError)) { 677 if (i) { 678 dev_dbg(hdsp->card->dev, 679 "IO box found after %d ms\n", 680 (20 * i)); 681 } 682 return 0; 683 } 684 msleep(20); 685 } 686 dev_err(hdsp->card->dev, "no IO box connected!\n"); 687 hdsp->state &= ~HDSP_FirmwareLoaded; 688 return -EIO; 689 } 690 691 static int hdsp_wait_for_iobox(struct hdsp *hdsp, unsigned int loops, 692 unsigned int delay) 693 { 694 unsigned int i; 695 696 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) 697 return 0; 698 699 for (i = 0; i != loops; ++i) { 700 if (hdsp_read(hdsp, HDSP_statusRegister) & HDSP_ConfigError) 701 msleep(delay); 702 else { 703 dev_dbg(hdsp->card->dev, "iobox found after %ums!\n", 704 i * delay); 705 return 0; 706 } 707 } 708 709 dev_info(hdsp->card->dev, "no IO box connected!\n"); 710 hdsp->state &= ~HDSP_FirmwareLoaded; 711 return -EIO; 712 } 713 714 static int snd_hdsp_load_firmware_from_cache(struct hdsp *hdsp) { 715 716 int i; 717 unsigned long flags; 718 const u32 *cache; 719 720 if (hdsp->fw_uploaded) 721 cache = hdsp->fw_uploaded; 722 else { 723 if (!hdsp->firmware) 724 return -ENODEV; 725 cache = (u32 *)hdsp->firmware->data; 726 if (!cache) 727 return -ENODEV; 728 } 729 730 if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) { 731 732 dev_info(hdsp->card->dev, "loading firmware\n"); 733 734 hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_PROGRAM); 735 hdsp_write (hdsp, HDSP_fifoData, 0); 736 737 if (hdsp_fifo_wait (hdsp, 0, HDSP_LONG_WAIT)) { 738 dev_info(hdsp->card->dev, 739 "timeout waiting for download preparation\n"); 740 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200); 741 return -EIO; 742 } 743 744 hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_LOAD); 745 746 for (i = 0; i < HDSP_FIRMWARE_SIZE / 4; ++i) { 747 hdsp_write(hdsp, HDSP_fifoData, cache[i]); 748 if (hdsp_fifo_wait (hdsp, 127, HDSP_LONG_WAIT)) { 749 dev_info(hdsp->card->dev, 750 "timeout during firmware loading\n"); 751 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200); 752 return -EIO; 753 } 754 } 755 756 hdsp_fifo_wait(hdsp, 3, HDSP_LONG_WAIT); 757 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200); 758 759 ssleep(3); 760 #ifdef SNDRV_BIG_ENDIAN 761 hdsp->control2_register = HDSP_BIGENDIAN_MODE; 762 #else 763 hdsp->control2_register = 0; 764 #endif 765 hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register); 766 dev_info(hdsp->card->dev, "finished firmware loading\n"); 767 768 } 769 if (hdsp->state & HDSP_InitializationComplete) { 770 dev_info(hdsp->card->dev, 771 "firmware loaded from cache, restoring defaults\n"); 772 spin_lock_irqsave(&hdsp->lock, flags); 773 snd_hdsp_set_defaults(hdsp); 774 spin_unlock_irqrestore(&hdsp->lock, flags); 775 } 776 777 hdsp->state |= HDSP_FirmwareLoaded; 778 779 return 0; 780 } 781 782 static int hdsp_get_iobox_version (struct hdsp *hdsp) 783 { 784 if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) { 785 786 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD); 787 hdsp_write(hdsp, HDSP_fifoData, 0); 788 789 if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0) { 790 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300); 791 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD); 792 } 793 794 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200 | HDSP_PROGRAM); 795 hdsp_write (hdsp, HDSP_fifoData, 0); 796 if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0) { 797 hdsp->io_type = Multiface; 798 dev_info(hdsp->card->dev, "Multiface found\n"); 799 return 0; 800 } 801 802 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD); 803 hdsp_write(hdsp, HDSP_fifoData, 0); 804 if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) == 0) { 805 hdsp->io_type = Digiface; 806 dev_info(hdsp->card->dev, "Digiface found\n"); 807 return 0; 808 } 809 810 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300); 811 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD); 812 hdsp_write(hdsp, HDSP_fifoData, 0); 813 if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) == 0) { 814 hdsp->io_type = Multiface; 815 dev_info(hdsp->card->dev, "Multiface found\n"); 816 return 0; 817 } 818 819 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300); 820 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD); 821 hdsp_write(hdsp, HDSP_fifoData, 0); 822 if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0) { 823 hdsp->io_type = Multiface; 824 dev_info(hdsp->card->dev, "Multiface found\n"); 825 return 0; 826 } 827 828 hdsp->io_type = RPM; 829 dev_info(hdsp->card->dev, "RPM found\n"); 830 return 0; 831 } else { 832 /* firmware was already loaded, get iobox type */ 833 if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version2) 834 hdsp->io_type = RPM; 835 else if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1) 836 hdsp->io_type = Multiface; 837 else 838 hdsp->io_type = Digiface; 839 } 840 return 0; 841 } 842 843 844 static int hdsp_request_fw_loader(struct hdsp *hdsp); 845 846 static int hdsp_check_for_firmware (struct hdsp *hdsp, int load_on_demand) 847 { 848 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) 849 return 0; 850 if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) { 851 hdsp->state &= ~HDSP_FirmwareLoaded; 852 if (! load_on_demand) 853 return -EIO; 854 dev_err(hdsp->card->dev, "firmware not present.\n"); 855 /* try to load firmware */ 856 if (! (hdsp->state & HDSP_FirmwareCached)) { 857 if (! hdsp_request_fw_loader(hdsp)) 858 return 0; 859 dev_err(hdsp->card->dev, 860 "No firmware loaded nor cached, please upload firmware.\n"); 861 return -EIO; 862 } 863 if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) { 864 dev_err(hdsp->card->dev, 865 "Firmware loading from cache failed, please upload manually.\n"); 866 return -EIO; 867 } 868 } 869 return 0; 870 } 871 872 873 static int hdsp_fifo_wait(struct hdsp *hdsp, int count, int timeout) 874 { 875 int i; 876 877 /* the fifoStatus registers reports on how many words 878 are available in the command FIFO. 879 */ 880 881 for (i = 0; i < timeout; i++) { 882 883 if ((int)(hdsp_read (hdsp, HDSP_fifoStatus) & 0xff) <= count) 884 return 0; 885 886 /* not very friendly, but we only do this during a firmware 887 load and changing the mixer, so we just put up with it. 888 */ 889 890 udelay (100); 891 } 892 893 dev_warn(hdsp->card->dev, 894 "wait for FIFO status <= %d failed after %d iterations\n", 895 count, timeout); 896 return -1; 897 } 898 899 static int hdsp_read_gain (struct hdsp *hdsp, unsigned int addr) 900 { 901 if (addr >= HDSP_MATRIX_MIXER_SIZE) 902 return 0; 903 904 return hdsp->mixer_matrix[addr]; 905 } 906 907 static int hdsp_write_gain(struct hdsp *hdsp, unsigned int addr, unsigned short data) 908 { 909 unsigned int ad; 910 911 if (addr >= HDSP_MATRIX_MIXER_SIZE) 912 return -1; 913 914 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) { 915 916 /* from martin bjornsen: 917 918 "You can only write dwords to the 919 mixer memory which contain two 920 mixer values in the low and high 921 word. So if you want to change 922 value 0 you have to read value 1 923 from the cache and write both to 924 the first dword in the mixer 925 memory." 926 */ 927 928 if (hdsp->io_type == H9632 && addr >= 512) 929 return 0; 930 931 if (hdsp->io_type == H9652 && addr >= 1352) 932 return 0; 933 934 hdsp->mixer_matrix[addr] = data; 935 936 937 /* `addr' addresses a 16-bit wide address, but 938 the address space accessed via hdsp_write 939 uses byte offsets. put another way, addr 940 varies from 0 to 1351, but to access the 941 corresponding memory location, we need 942 to access 0 to 2703 ... 943 */ 944 ad = addr/2; 945 946 hdsp_write (hdsp, 4096 + (ad*4), 947 (hdsp->mixer_matrix[(addr&0x7fe)+1] << 16) + 948 hdsp->mixer_matrix[addr&0x7fe]); 949 950 return 0; 951 952 } else { 953 954 ad = (addr << 16) + data; 955 956 if (hdsp_fifo_wait(hdsp, 127, HDSP_LONG_WAIT)) 957 return -1; 958 959 hdsp_write (hdsp, HDSP_fifoData, ad); 960 hdsp->mixer_matrix[addr] = data; 961 962 } 963 964 return 0; 965 } 966 967 static int snd_hdsp_use_is_exclusive(struct hdsp *hdsp) 968 { 969 unsigned long flags; 970 int ret = 1; 971 972 spin_lock_irqsave(&hdsp->lock, flags); 973 if ((hdsp->playback_pid != hdsp->capture_pid) && 974 (hdsp->playback_pid >= 0) && (hdsp->capture_pid >= 0)) 975 ret = 0; 976 spin_unlock_irqrestore(&hdsp->lock, flags); 977 return ret; 978 } 979 980 static int hdsp_spdif_sample_rate(struct hdsp *hdsp) 981 { 982 unsigned int status = hdsp_read(hdsp, HDSP_statusRegister); 983 unsigned int rate_bits = (status & HDSP_spdifFrequencyMask); 984 985 /* For the 9632, the mask is different */ 986 if (hdsp->io_type == H9632) 987 rate_bits = (status & HDSP_spdifFrequencyMask_9632); 988 989 if (status & HDSP_SPDIFErrorFlag) 990 return 0; 991 992 switch (rate_bits) { 993 case HDSP_spdifFrequency32KHz: return 32000; 994 case HDSP_spdifFrequency44_1KHz: return 44100; 995 case HDSP_spdifFrequency48KHz: return 48000; 996 case HDSP_spdifFrequency64KHz: return 64000; 997 case HDSP_spdifFrequency88_2KHz: return 88200; 998 case HDSP_spdifFrequency96KHz: return 96000; 999 case HDSP_spdifFrequency128KHz: 1000 if (hdsp->io_type == H9632) return 128000; 1001 break; 1002 case HDSP_spdifFrequency176_4KHz: 1003 if (hdsp->io_type == H9632) return 176400; 1004 break; 1005 case HDSP_spdifFrequency192KHz: 1006 if (hdsp->io_type == H9632) return 192000; 1007 break; 1008 default: 1009 break; 1010 } 1011 dev_warn(hdsp->card->dev, 1012 "unknown spdif frequency status; bits = 0x%x, status = 0x%x\n", 1013 rate_bits, status); 1014 return 0; 1015 } 1016 1017 static int hdsp_external_sample_rate(struct hdsp *hdsp) 1018 { 1019 unsigned int status2 = hdsp_read(hdsp, HDSP_status2Register); 1020 unsigned int rate_bits = status2 & HDSP_systemFrequencyMask; 1021 1022 /* For the 9632 card, there seems to be no bit for indicating external 1023 * sample rate greater than 96kHz. The card reports the corresponding 1024 * single speed. So the best means seems to get spdif rate when 1025 * autosync reference is spdif */ 1026 if (hdsp->io_type == H9632 && 1027 hdsp_autosync_ref(hdsp) == HDSP_AUTOSYNC_FROM_SPDIF) 1028 return hdsp_spdif_sample_rate(hdsp); 1029 1030 switch (rate_bits) { 1031 case HDSP_systemFrequency32: return 32000; 1032 case HDSP_systemFrequency44_1: return 44100; 1033 case HDSP_systemFrequency48: return 48000; 1034 case HDSP_systemFrequency64: return 64000; 1035 case HDSP_systemFrequency88_2: return 88200; 1036 case HDSP_systemFrequency96: return 96000; 1037 default: 1038 return 0; 1039 } 1040 } 1041 1042 static void hdsp_compute_period_size(struct hdsp *hdsp) 1043 { 1044 hdsp->period_bytes = 1 << ((hdsp_decode_latency(hdsp->control_register) + 8)); 1045 } 1046 1047 static snd_pcm_uframes_t hdsp_hw_pointer(struct hdsp *hdsp) 1048 { 1049 int position; 1050 1051 position = hdsp_read(hdsp, HDSP_statusRegister); 1052 1053 if (!hdsp->precise_ptr) 1054 return (position & HDSP_BufferID) ? (hdsp->period_bytes / 4) : 0; 1055 1056 position &= HDSP_BufferPositionMask; 1057 position /= 4; 1058 position &= (hdsp->period_bytes/2) - 1; 1059 return position; 1060 } 1061 1062 static void hdsp_reset_hw_pointer(struct hdsp *hdsp) 1063 { 1064 hdsp_write (hdsp, HDSP_resetPointer, 0); 1065 if (hdsp->io_type == H9632 && hdsp->firmware_rev >= 152) 1066 /* HDSP_resetPointer = HDSP_freqReg, which is strange and 1067 * requires (?) to write again DDS value after a reset pointer 1068 * (at least, it works like this) */ 1069 hdsp_write (hdsp, HDSP_freqReg, hdsp->dds_value); 1070 } 1071 1072 static void hdsp_start_audio(struct hdsp *s) 1073 { 1074 s->control_register |= (HDSP_AudioInterruptEnable | HDSP_Start); 1075 hdsp_write(s, HDSP_controlRegister, s->control_register); 1076 } 1077 1078 static void hdsp_stop_audio(struct hdsp *s) 1079 { 1080 s->control_register &= ~(HDSP_Start | HDSP_AudioInterruptEnable); 1081 hdsp_write(s, HDSP_controlRegister, s->control_register); 1082 } 1083 1084 static void hdsp_silence_playback(struct hdsp *hdsp) 1085 { 1086 memset(hdsp->playback_buffer, 0, HDSP_DMA_AREA_BYTES); 1087 } 1088 1089 static int hdsp_set_interrupt_interval(struct hdsp *s, unsigned int frames) 1090 { 1091 int n; 1092 1093 spin_lock_irq(&s->lock); 1094 1095 frames >>= 7; 1096 n = 0; 1097 while (frames) { 1098 n++; 1099 frames >>= 1; 1100 } 1101 1102 s->control_register &= ~HDSP_LatencyMask; 1103 s->control_register |= hdsp_encode_latency(n); 1104 1105 hdsp_write(s, HDSP_controlRegister, s->control_register); 1106 1107 hdsp_compute_period_size(s); 1108 1109 spin_unlock_irq(&s->lock); 1110 1111 return 0; 1112 } 1113 1114 static void hdsp_set_dds_value(struct hdsp *hdsp, int rate) 1115 { 1116 u64 n; 1117 1118 if (rate >= 112000) 1119 rate /= 4; 1120 else if (rate >= 56000) 1121 rate /= 2; 1122 1123 n = DDS_NUMERATOR; 1124 n = div_u64(n, rate); 1125 /* n should be less than 2^32 for being written to FREQ register */ 1126 snd_BUG_ON(n >> 32); 1127 /* HDSP_freqReg and HDSP_resetPointer are the same, so keep the DDS 1128 value to write it after a reset */ 1129 hdsp->dds_value = n; 1130 hdsp_write(hdsp, HDSP_freqReg, hdsp->dds_value); 1131 } 1132 1133 static int hdsp_set_rate(struct hdsp *hdsp, int rate, int called_internally) 1134 { 1135 int reject_if_open = 0; 1136 int current_rate; 1137 int rate_bits; 1138 1139 /* ASSUMPTION: hdsp->lock is either held, or 1140 there is no need for it (e.g. during module 1141 initialization). 1142 */ 1143 1144 if (!(hdsp->control_register & HDSP_ClockModeMaster)) { 1145 if (called_internally) { 1146 /* request from ctl or card initialization */ 1147 dev_err(hdsp->card->dev, 1148 "device is not running as a clock master: cannot set sample rate.\n"); 1149 return -1; 1150 } else { 1151 /* hw_param request while in AutoSync mode */ 1152 int external_freq = hdsp_external_sample_rate(hdsp); 1153 int spdif_freq = hdsp_spdif_sample_rate(hdsp); 1154 1155 if ((spdif_freq == external_freq*2) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1)) 1156 dev_info(hdsp->card->dev, 1157 "Detected ADAT in double speed mode\n"); 1158 else if (hdsp->io_type == H9632 && (spdif_freq == external_freq*4) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1)) 1159 dev_info(hdsp->card->dev, 1160 "Detected ADAT in quad speed mode\n"); 1161 else if (rate != external_freq) { 1162 dev_info(hdsp->card->dev, 1163 "No AutoSync source for requested rate\n"); 1164 return -1; 1165 } 1166 } 1167 } 1168 1169 current_rate = hdsp->system_sample_rate; 1170 1171 /* Changing from a "single speed" to a "double speed" rate is 1172 not allowed if any substreams are open. This is because 1173 such a change causes a shift in the location of 1174 the DMA buffers and a reduction in the number of available 1175 buffers. 1176 1177 Note that a similar but essentially insoluble problem 1178 exists for externally-driven rate changes. All we can do 1179 is to flag rate changes in the read/write routines. */ 1180 1181 if (rate > 96000 && hdsp->io_type != H9632) 1182 return -EINVAL; 1183 1184 switch (rate) { 1185 case 32000: 1186 if (current_rate > 48000) 1187 reject_if_open = 1; 1188 rate_bits = HDSP_Frequency32KHz; 1189 break; 1190 case 44100: 1191 if (current_rate > 48000) 1192 reject_if_open = 1; 1193 rate_bits = HDSP_Frequency44_1KHz; 1194 break; 1195 case 48000: 1196 if (current_rate > 48000) 1197 reject_if_open = 1; 1198 rate_bits = HDSP_Frequency48KHz; 1199 break; 1200 case 64000: 1201 if (current_rate <= 48000 || current_rate > 96000) 1202 reject_if_open = 1; 1203 rate_bits = HDSP_Frequency64KHz; 1204 break; 1205 case 88200: 1206 if (current_rate <= 48000 || current_rate > 96000) 1207 reject_if_open = 1; 1208 rate_bits = HDSP_Frequency88_2KHz; 1209 break; 1210 case 96000: 1211 if (current_rate <= 48000 || current_rate > 96000) 1212 reject_if_open = 1; 1213 rate_bits = HDSP_Frequency96KHz; 1214 break; 1215 case 128000: 1216 if (current_rate < 128000) 1217 reject_if_open = 1; 1218 rate_bits = HDSP_Frequency128KHz; 1219 break; 1220 case 176400: 1221 if (current_rate < 128000) 1222 reject_if_open = 1; 1223 rate_bits = HDSP_Frequency176_4KHz; 1224 break; 1225 case 192000: 1226 if (current_rate < 128000) 1227 reject_if_open = 1; 1228 rate_bits = HDSP_Frequency192KHz; 1229 break; 1230 default: 1231 return -EINVAL; 1232 } 1233 1234 if (reject_if_open && (hdsp->capture_pid >= 0 || hdsp->playback_pid >= 0)) { 1235 dev_warn(hdsp->card->dev, 1236 "cannot change speed mode (capture PID = %d, playback PID = %d)\n", 1237 hdsp->capture_pid, 1238 hdsp->playback_pid); 1239 return -EBUSY; 1240 } 1241 1242 hdsp->control_register &= ~HDSP_FrequencyMask; 1243 hdsp->control_register |= rate_bits; 1244 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 1245 1246 /* For HDSP9632 rev 152, need to set DDS value in FREQ register */ 1247 if (hdsp->io_type == H9632 && hdsp->firmware_rev >= 152) 1248 hdsp_set_dds_value(hdsp, rate); 1249 1250 if (rate >= 128000) { 1251 hdsp->channel_map = channel_map_H9632_qs; 1252 } else if (rate > 48000) { 1253 if (hdsp->io_type == H9632) 1254 hdsp->channel_map = channel_map_H9632_ds; 1255 else 1256 hdsp->channel_map = channel_map_ds; 1257 } else { 1258 switch (hdsp->io_type) { 1259 case RPM: 1260 case Multiface: 1261 hdsp->channel_map = channel_map_mf_ss; 1262 break; 1263 case Digiface: 1264 case H9652: 1265 hdsp->channel_map = channel_map_df_ss; 1266 break; 1267 case H9632: 1268 hdsp->channel_map = channel_map_H9632_ss; 1269 break; 1270 default: 1271 /* should never happen */ 1272 break; 1273 } 1274 } 1275 1276 hdsp->system_sample_rate = rate; 1277 1278 return 0; 1279 } 1280 1281 /*---------------------------------------------------------------------------- 1282 MIDI 1283 ----------------------------------------------------------------------------*/ 1284 1285 static unsigned char snd_hdsp_midi_read_byte (struct hdsp *hdsp, int id) 1286 { 1287 /* the hardware already does the relevant bit-mask with 0xff */ 1288 if (id) 1289 return hdsp_read(hdsp, HDSP_midiDataIn1); 1290 else 1291 return hdsp_read(hdsp, HDSP_midiDataIn0); 1292 } 1293 1294 static void snd_hdsp_midi_write_byte (struct hdsp *hdsp, int id, int val) 1295 { 1296 /* the hardware already does the relevant bit-mask with 0xff */ 1297 if (id) 1298 hdsp_write(hdsp, HDSP_midiDataOut1, val); 1299 else 1300 hdsp_write(hdsp, HDSP_midiDataOut0, val); 1301 } 1302 1303 static int snd_hdsp_midi_input_available (struct hdsp *hdsp, int id) 1304 { 1305 if (id) 1306 return (hdsp_read(hdsp, HDSP_midiStatusIn1) & 0xff); 1307 else 1308 return (hdsp_read(hdsp, HDSP_midiStatusIn0) & 0xff); 1309 } 1310 1311 static int snd_hdsp_midi_output_possible (struct hdsp *hdsp, int id) 1312 { 1313 int fifo_bytes_used; 1314 1315 if (id) 1316 fifo_bytes_used = hdsp_read(hdsp, HDSP_midiStatusOut1) & 0xff; 1317 else 1318 fifo_bytes_used = hdsp_read(hdsp, HDSP_midiStatusOut0) & 0xff; 1319 1320 if (fifo_bytes_used < 128) 1321 return 128 - fifo_bytes_used; 1322 else 1323 return 0; 1324 } 1325 1326 static void snd_hdsp_flush_midi_input (struct hdsp *hdsp, int id) 1327 { 1328 while (snd_hdsp_midi_input_available (hdsp, id)) 1329 snd_hdsp_midi_read_byte (hdsp, id); 1330 } 1331 1332 static int snd_hdsp_midi_output_write (struct hdsp_midi *hmidi) 1333 { 1334 unsigned long flags; 1335 int n_pending; 1336 int to_write; 1337 int i; 1338 unsigned char buf[128]; 1339 1340 /* Output is not interrupt driven */ 1341 1342 spin_lock_irqsave (&hmidi->lock, flags); 1343 if (hmidi->output) { 1344 if (!snd_rawmidi_transmit_empty (hmidi->output)) { 1345 if ((n_pending = snd_hdsp_midi_output_possible (hmidi->hdsp, hmidi->id)) > 0) { 1346 if (n_pending > (int)sizeof (buf)) 1347 n_pending = sizeof (buf); 1348 1349 if ((to_write = snd_rawmidi_transmit (hmidi->output, buf, n_pending)) > 0) { 1350 for (i = 0; i < to_write; ++i) 1351 snd_hdsp_midi_write_byte (hmidi->hdsp, hmidi->id, buf[i]); 1352 } 1353 } 1354 } 1355 } 1356 spin_unlock_irqrestore (&hmidi->lock, flags); 1357 return 0; 1358 } 1359 1360 static int snd_hdsp_midi_input_read (struct hdsp_midi *hmidi) 1361 { 1362 unsigned char buf[128]; /* this buffer is designed to match the MIDI input FIFO size */ 1363 unsigned long flags; 1364 int n_pending; 1365 int i; 1366 1367 spin_lock_irqsave (&hmidi->lock, flags); 1368 if ((n_pending = snd_hdsp_midi_input_available (hmidi->hdsp, hmidi->id)) > 0) { 1369 if (hmidi->input) { 1370 if (n_pending > (int)sizeof (buf)) 1371 n_pending = sizeof (buf); 1372 for (i = 0; i < n_pending; ++i) 1373 buf[i] = snd_hdsp_midi_read_byte (hmidi->hdsp, hmidi->id); 1374 if (n_pending) 1375 snd_rawmidi_receive (hmidi->input, buf, n_pending); 1376 } else { 1377 /* flush the MIDI input FIFO */ 1378 while (--n_pending) 1379 snd_hdsp_midi_read_byte (hmidi->hdsp, hmidi->id); 1380 } 1381 } 1382 hmidi->pending = 0; 1383 if (hmidi->id) 1384 hmidi->hdsp->control_register |= HDSP_Midi1InterruptEnable; 1385 else 1386 hmidi->hdsp->control_register |= HDSP_Midi0InterruptEnable; 1387 hdsp_write(hmidi->hdsp, HDSP_controlRegister, hmidi->hdsp->control_register); 1388 spin_unlock_irqrestore (&hmidi->lock, flags); 1389 return snd_hdsp_midi_output_write (hmidi); 1390 } 1391 1392 static void snd_hdsp_midi_input_trigger(struct snd_rawmidi_substream *substream, int up) 1393 { 1394 struct hdsp *hdsp; 1395 struct hdsp_midi *hmidi; 1396 unsigned long flags; 1397 u32 ie; 1398 1399 hmidi = (struct hdsp_midi *) substream->rmidi->private_data; 1400 hdsp = hmidi->hdsp; 1401 ie = hmidi->id ? HDSP_Midi1InterruptEnable : HDSP_Midi0InterruptEnable; 1402 spin_lock_irqsave (&hdsp->lock, flags); 1403 if (up) { 1404 if (!(hdsp->control_register & ie)) { 1405 snd_hdsp_flush_midi_input (hdsp, hmidi->id); 1406 hdsp->control_register |= ie; 1407 } 1408 } else { 1409 hdsp->control_register &= ~ie; 1410 tasklet_kill(&hdsp->midi_tasklet); 1411 } 1412 1413 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 1414 spin_unlock_irqrestore (&hdsp->lock, flags); 1415 } 1416 1417 static void snd_hdsp_midi_output_timer(unsigned long data) 1418 { 1419 struct hdsp_midi *hmidi = (struct hdsp_midi *) data; 1420 unsigned long flags; 1421 1422 snd_hdsp_midi_output_write(hmidi); 1423 spin_lock_irqsave (&hmidi->lock, flags); 1424 1425 /* this does not bump hmidi->istimer, because the 1426 kernel automatically removed the timer when it 1427 expired, and we are now adding it back, thus 1428 leaving istimer wherever it was set before. 1429 */ 1430 1431 if (hmidi->istimer) { 1432 hmidi->timer.expires = 1 + jiffies; 1433 add_timer(&hmidi->timer); 1434 } 1435 1436 spin_unlock_irqrestore (&hmidi->lock, flags); 1437 } 1438 1439 static void snd_hdsp_midi_output_trigger(struct snd_rawmidi_substream *substream, int up) 1440 { 1441 struct hdsp_midi *hmidi; 1442 unsigned long flags; 1443 1444 hmidi = (struct hdsp_midi *) substream->rmidi->private_data; 1445 spin_lock_irqsave (&hmidi->lock, flags); 1446 if (up) { 1447 if (!hmidi->istimer) { 1448 init_timer(&hmidi->timer); 1449 hmidi->timer.function = snd_hdsp_midi_output_timer; 1450 hmidi->timer.data = (unsigned long) hmidi; 1451 hmidi->timer.expires = 1 + jiffies; 1452 add_timer(&hmidi->timer); 1453 hmidi->istimer++; 1454 } 1455 } else { 1456 if (hmidi->istimer && --hmidi->istimer <= 0) 1457 del_timer (&hmidi->timer); 1458 } 1459 spin_unlock_irqrestore (&hmidi->lock, flags); 1460 if (up) 1461 snd_hdsp_midi_output_write(hmidi); 1462 } 1463 1464 static int snd_hdsp_midi_input_open(struct snd_rawmidi_substream *substream) 1465 { 1466 struct hdsp_midi *hmidi; 1467 1468 hmidi = (struct hdsp_midi *) substream->rmidi->private_data; 1469 spin_lock_irq (&hmidi->lock); 1470 snd_hdsp_flush_midi_input (hmidi->hdsp, hmidi->id); 1471 hmidi->input = substream; 1472 spin_unlock_irq (&hmidi->lock); 1473 1474 return 0; 1475 } 1476 1477 static int snd_hdsp_midi_output_open(struct snd_rawmidi_substream *substream) 1478 { 1479 struct hdsp_midi *hmidi; 1480 1481 hmidi = (struct hdsp_midi *) substream->rmidi->private_data; 1482 spin_lock_irq (&hmidi->lock); 1483 hmidi->output = substream; 1484 spin_unlock_irq (&hmidi->lock); 1485 1486 return 0; 1487 } 1488 1489 static int snd_hdsp_midi_input_close(struct snd_rawmidi_substream *substream) 1490 { 1491 struct hdsp_midi *hmidi; 1492 1493 snd_hdsp_midi_input_trigger (substream, 0); 1494 1495 hmidi = (struct hdsp_midi *) substream->rmidi->private_data; 1496 spin_lock_irq (&hmidi->lock); 1497 hmidi->input = NULL; 1498 spin_unlock_irq (&hmidi->lock); 1499 1500 return 0; 1501 } 1502 1503 static int snd_hdsp_midi_output_close(struct snd_rawmidi_substream *substream) 1504 { 1505 struct hdsp_midi *hmidi; 1506 1507 snd_hdsp_midi_output_trigger (substream, 0); 1508 1509 hmidi = (struct hdsp_midi *) substream->rmidi->private_data; 1510 spin_lock_irq (&hmidi->lock); 1511 hmidi->output = NULL; 1512 spin_unlock_irq (&hmidi->lock); 1513 1514 return 0; 1515 } 1516 1517 static struct snd_rawmidi_ops snd_hdsp_midi_output = 1518 { 1519 .open = snd_hdsp_midi_output_open, 1520 .close = snd_hdsp_midi_output_close, 1521 .trigger = snd_hdsp_midi_output_trigger, 1522 }; 1523 1524 static struct snd_rawmidi_ops snd_hdsp_midi_input = 1525 { 1526 .open = snd_hdsp_midi_input_open, 1527 .close = snd_hdsp_midi_input_close, 1528 .trigger = snd_hdsp_midi_input_trigger, 1529 }; 1530 1531 static int snd_hdsp_create_midi (struct snd_card *card, struct hdsp *hdsp, int id) 1532 { 1533 char buf[32]; 1534 1535 hdsp->midi[id].id = id; 1536 hdsp->midi[id].rmidi = NULL; 1537 hdsp->midi[id].input = NULL; 1538 hdsp->midi[id].output = NULL; 1539 hdsp->midi[id].hdsp = hdsp; 1540 hdsp->midi[id].istimer = 0; 1541 hdsp->midi[id].pending = 0; 1542 spin_lock_init (&hdsp->midi[id].lock); 1543 1544 sprintf (buf, "%s MIDI %d", card->shortname, id+1); 1545 if (snd_rawmidi_new (card, buf, id, 1, 1, &hdsp->midi[id].rmidi) < 0) 1546 return -1; 1547 1548 sprintf(hdsp->midi[id].rmidi->name, "HDSP MIDI %d", id+1); 1549 hdsp->midi[id].rmidi->private_data = &hdsp->midi[id]; 1550 1551 snd_rawmidi_set_ops (hdsp->midi[id].rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, &snd_hdsp_midi_output); 1552 snd_rawmidi_set_ops (hdsp->midi[id].rmidi, SNDRV_RAWMIDI_STREAM_INPUT, &snd_hdsp_midi_input); 1553 1554 hdsp->midi[id].rmidi->info_flags |= SNDRV_RAWMIDI_INFO_OUTPUT | 1555 SNDRV_RAWMIDI_INFO_INPUT | 1556 SNDRV_RAWMIDI_INFO_DUPLEX; 1557 1558 return 0; 1559 } 1560 1561 /*----------------------------------------------------------------------------- 1562 Control Interface 1563 ----------------------------------------------------------------------------*/ 1564 1565 static u32 snd_hdsp_convert_from_aes(struct snd_aes_iec958 *aes) 1566 { 1567 u32 val = 0; 1568 val |= (aes->status[0] & IEC958_AES0_PROFESSIONAL) ? HDSP_SPDIFProfessional : 0; 1569 val |= (aes->status[0] & IEC958_AES0_NONAUDIO) ? HDSP_SPDIFNonAudio : 0; 1570 if (val & HDSP_SPDIFProfessional) 1571 val |= (aes->status[0] & IEC958_AES0_PRO_EMPHASIS_5015) ? HDSP_SPDIFEmphasis : 0; 1572 else 1573 val |= (aes->status[0] & IEC958_AES0_CON_EMPHASIS_5015) ? HDSP_SPDIFEmphasis : 0; 1574 return val; 1575 } 1576 1577 static void snd_hdsp_convert_to_aes(struct snd_aes_iec958 *aes, u32 val) 1578 { 1579 aes->status[0] = ((val & HDSP_SPDIFProfessional) ? IEC958_AES0_PROFESSIONAL : 0) | 1580 ((val & HDSP_SPDIFNonAudio) ? IEC958_AES0_NONAUDIO : 0); 1581 if (val & HDSP_SPDIFProfessional) 1582 aes->status[0] |= (val & HDSP_SPDIFEmphasis) ? IEC958_AES0_PRO_EMPHASIS_5015 : 0; 1583 else 1584 aes->status[0] |= (val & HDSP_SPDIFEmphasis) ? IEC958_AES0_CON_EMPHASIS_5015 : 0; 1585 } 1586 1587 static int snd_hdsp_control_spdif_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1588 { 1589 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958; 1590 uinfo->count = 1; 1591 return 0; 1592 } 1593 1594 static int snd_hdsp_control_spdif_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1595 { 1596 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1597 1598 snd_hdsp_convert_to_aes(&ucontrol->value.iec958, hdsp->creg_spdif); 1599 return 0; 1600 } 1601 1602 static int snd_hdsp_control_spdif_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1603 { 1604 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1605 int change; 1606 u32 val; 1607 1608 val = snd_hdsp_convert_from_aes(&ucontrol->value.iec958); 1609 spin_lock_irq(&hdsp->lock); 1610 change = val != hdsp->creg_spdif; 1611 hdsp->creg_spdif = val; 1612 spin_unlock_irq(&hdsp->lock); 1613 return change; 1614 } 1615 1616 static int snd_hdsp_control_spdif_stream_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1617 { 1618 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958; 1619 uinfo->count = 1; 1620 return 0; 1621 } 1622 1623 static int snd_hdsp_control_spdif_stream_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1624 { 1625 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1626 1627 snd_hdsp_convert_to_aes(&ucontrol->value.iec958, hdsp->creg_spdif_stream); 1628 return 0; 1629 } 1630 1631 static int snd_hdsp_control_spdif_stream_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1632 { 1633 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1634 int change; 1635 u32 val; 1636 1637 val = snd_hdsp_convert_from_aes(&ucontrol->value.iec958); 1638 spin_lock_irq(&hdsp->lock); 1639 change = val != hdsp->creg_spdif_stream; 1640 hdsp->creg_spdif_stream = val; 1641 hdsp->control_register &= ~(HDSP_SPDIFProfessional | HDSP_SPDIFNonAudio | HDSP_SPDIFEmphasis); 1642 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register |= val); 1643 spin_unlock_irq(&hdsp->lock); 1644 return change; 1645 } 1646 1647 static int snd_hdsp_control_spdif_mask_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1648 { 1649 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958; 1650 uinfo->count = 1; 1651 return 0; 1652 } 1653 1654 static int snd_hdsp_control_spdif_mask_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1655 { 1656 ucontrol->value.iec958.status[0] = kcontrol->private_value; 1657 return 0; 1658 } 1659 1660 #define HDSP_SPDIF_IN(xname, xindex) \ 1661 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 1662 .name = xname, \ 1663 .index = xindex, \ 1664 .info = snd_hdsp_info_spdif_in, \ 1665 .get = snd_hdsp_get_spdif_in, \ 1666 .put = snd_hdsp_put_spdif_in } 1667 1668 static unsigned int hdsp_spdif_in(struct hdsp *hdsp) 1669 { 1670 return hdsp_decode_spdif_in(hdsp->control_register & HDSP_SPDIFInputMask); 1671 } 1672 1673 static int hdsp_set_spdif_input(struct hdsp *hdsp, int in) 1674 { 1675 hdsp->control_register &= ~HDSP_SPDIFInputMask; 1676 hdsp->control_register |= hdsp_encode_spdif_in(in); 1677 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 1678 return 0; 1679 } 1680 1681 static int snd_hdsp_info_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1682 { 1683 static char *texts[4] = {"Optical", "Coaxial", "Internal", "AES"}; 1684 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1685 1686 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1687 uinfo->count = 1; 1688 uinfo->value.enumerated.items = ((hdsp->io_type == H9632) ? 4 : 3); 1689 if (uinfo->value.enumerated.item > ((hdsp->io_type == H9632) ? 3 : 2)) 1690 uinfo->value.enumerated.item = ((hdsp->io_type == H9632) ? 3 : 2); 1691 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 1692 return 0; 1693 } 1694 1695 static int snd_hdsp_get_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1696 { 1697 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1698 1699 ucontrol->value.enumerated.item[0] = hdsp_spdif_in(hdsp); 1700 return 0; 1701 } 1702 1703 static int snd_hdsp_put_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1704 { 1705 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1706 int change; 1707 unsigned int val; 1708 1709 if (!snd_hdsp_use_is_exclusive(hdsp)) 1710 return -EBUSY; 1711 val = ucontrol->value.enumerated.item[0] % ((hdsp->io_type == H9632) ? 4 : 3); 1712 spin_lock_irq(&hdsp->lock); 1713 change = val != hdsp_spdif_in(hdsp); 1714 if (change) 1715 hdsp_set_spdif_input(hdsp, val); 1716 spin_unlock_irq(&hdsp->lock); 1717 return change; 1718 } 1719 1720 #define HDSP_TOGGLE_SETTING(xname, xindex) \ 1721 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 1722 .name = xname, \ 1723 .private_value = xindex, \ 1724 .info = snd_hdsp_info_toggle_setting, \ 1725 .get = snd_hdsp_get_toggle_setting, \ 1726 .put = snd_hdsp_put_toggle_setting \ 1727 } 1728 1729 static int hdsp_toggle_setting(struct hdsp *hdsp, u32 regmask) 1730 { 1731 return (hdsp->control_register & regmask) ? 1 : 0; 1732 } 1733 1734 static int hdsp_set_toggle_setting(struct hdsp *hdsp, u32 regmask, int out) 1735 { 1736 if (out) 1737 hdsp->control_register |= regmask; 1738 else 1739 hdsp->control_register &= ~regmask; 1740 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 1741 1742 return 0; 1743 } 1744 1745 #define snd_hdsp_info_toggle_setting snd_ctl_boolean_mono_info 1746 1747 static int snd_hdsp_get_toggle_setting(struct snd_kcontrol *kcontrol, 1748 struct snd_ctl_elem_value *ucontrol) 1749 { 1750 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1751 u32 regmask = kcontrol->private_value; 1752 1753 spin_lock_irq(&hdsp->lock); 1754 ucontrol->value.integer.value[0] = hdsp_toggle_setting(hdsp, regmask); 1755 spin_unlock_irq(&hdsp->lock); 1756 return 0; 1757 } 1758 1759 static int snd_hdsp_put_toggle_setting(struct snd_kcontrol *kcontrol, 1760 struct snd_ctl_elem_value *ucontrol) 1761 { 1762 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1763 u32 regmask = kcontrol->private_value; 1764 int change; 1765 unsigned int val; 1766 1767 if (!snd_hdsp_use_is_exclusive(hdsp)) 1768 return -EBUSY; 1769 val = ucontrol->value.integer.value[0] & 1; 1770 spin_lock_irq(&hdsp->lock); 1771 change = (int) val != hdsp_toggle_setting(hdsp, regmask); 1772 if (change) 1773 hdsp_set_toggle_setting(hdsp, regmask, val); 1774 spin_unlock_irq(&hdsp->lock); 1775 return change; 1776 } 1777 1778 #define HDSP_SPDIF_SAMPLE_RATE(xname, xindex) \ 1779 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 1780 .name = xname, \ 1781 .index = xindex, \ 1782 .access = SNDRV_CTL_ELEM_ACCESS_READ, \ 1783 .info = snd_hdsp_info_spdif_sample_rate, \ 1784 .get = snd_hdsp_get_spdif_sample_rate \ 1785 } 1786 1787 static int snd_hdsp_info_spdif_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1788 { 1789 static char *texts[] = {"32000", "44100", "48000", "64000", "88200", "96000", "None", "128000", "176400", "192000"}; 1790 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1791 1792 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1793 uinfo->count = 1; 1794 uinfo->value.enumerated.items = (hdsp->io_type == H9632) ? 10 : 7; 1795 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 1796 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 1797 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 1798 return 0; 1799 } 1800 1801 static int snd_hdsp_get_spdif_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1802 { 1803 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1804 1805 switch (hdsp_spdif_sample_rate(hdsp)) { 1806 case 32000: 1807 ucontrol->value.enumerated.item[0] = 0; 1808 break; 1809 case 44100: 1810 ucontrol->value.enumerated.item[0] = 1; 1811 break; 1812 case 48000: 1813 ucontrol->value.enumerated.item[0] = 2; 1814 break; 1815 case 64000: 1816 ucontrol->value.enumerated.item[0] = 3; 1817 break; 1818 case 88200: 1819 ucontrol->value.enumerated.item[0] = 4; 1820 break; 1821 case 96000: 1822 ucontrol->value.enumerated.item[0] = 5; 1823 break; 1824 case 128000: 1825 ucontrol->value.enumerated.item[0] = 7; 1826 break; 1827 case 176400: 1828 ucontrol->value.enumerated.item[0] = 8; 1829 break; 1830 case 192000: 1831 ucontrol->value.enumerated.item[0] = 9; 1832 break; 1833 default: 1834 ucontrol->value.enumerated.item[0] = 6; 1835 } 1836 return 0; 1837 } 1838 1839 #define HDSP_SYSTEM_SAMPLE_RATE(xname, xindex) \ 1840 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 1841 .name = xname, \ 1842 .index = xindex, \ 1843 .access = SNDRV_CTL_ELEM_ACCESS_READ, \ 1844 .info = snd_hdsp_info_system_sample_rate, \ 1845 .get = snd_hdsp_get_system_sample_rate \ 1846 } 1847 1848 static int snd_hdsp_info_system_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1849 { 1850 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 1851 uinfo->count = 1; 1852 return 0; 1853 } 1854 1855 static int snd_hdsp_get_system_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1856 { 1857 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1858 1859 ucontrol->value.enumerated.item[0] = hdsp->system_sample_rate; 1860 return 0; 1861 } 1862 1863 #define HDSP_AUTOSYNC_SAMPLE_RATE(xname, xindex) \ 1864 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 1865 .name = xname, \ 1866 .index = xindex, \ 1867 .access = SNDRV_CTL_ELEM_ACCESS_READ, \ 1868 .info = snd_hdsp_info_autosync_sample_rate, \ 1869 .get = snd_hdsp_get_autosync_sample_rate \ 1870 } 1871 1872 static int snd_hdsp_info_autosync_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1873 { 1874 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1875 static char *texts[] = {"32000", "44100", "48000", "64000", "88200", "96000", "None", "128000", "176400", "192000"}; 1876 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1877 uinfo->count = 1; 1878 uinfo->value.enumerated.items = (hdsp->io_type == H9632) ? 10 : 7 ; 1879 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 1880 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 1881 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 1882 return 0; 1883 } 1884 1885 static int snd_hdsp_get_autosync_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1886 { 1887 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1888 1889 switch (hdsp_external_sample_rate(hdsp)) { 1890 case 32000: 1891 ucontrol->value.enumerated.item[0] = 0; 1892 break; 1893 case 44100: 1894 ucontrol->value.enumerated.item[0] = 1; 1895 break; 1896 case 48000: 1897 ucontrol->value.enumerated.item[0] = 2; 1898 break; 1899 case 64000: 1900 ucontrol->value.enumerated.item[0] = 3; 1901 break; 1902 case 88200: 1903 ucontrol->value.enumerated.item[0] = 4; 1904 break; 1905 case 96000: 1906 ucontrol->value.enumerated.item[0] = 5; 1907 break; 1908 case 128000: 1909 ucontrol->value.enumerated.item[0] = 7; 1910 break; 1911 case 176400: 1912 ucontrol->value.enumerated.item[0] = 8; 1913 break; 1914 case 192000: 1915 ucontrol->value.enumerated.item[0] = 9; 1916 break; 1917 default: 1918 ucontrol->value.enumerated.item[0] = 6; 1919 } 1920 return 0; 1921 } 1922 1923 #define HDSP_SYSTEM_CLOCK_MODE(xname, xindex) \ 1924 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 1925 .name = xname, \ 1926 .index = xindex, \ 1927 .access = SNDRV_CTL_ELEM_ACCESS_READ, \ 1928 .info = snd_hdsp_info_system_clock_mode, \ 1929 .get = snd_hdsp_get_system_clock_mode \ 1930 } 1931 1932 static int hdsp_system_clock_mode(struct hdsp *hdsp) 1933 { 1934 if (hdsp->control_register & HDSP_ClockModeMaster) 1935 return 0; 1936 else if (hdsp_external_sample_rate(hdsp) != hdsp->system_sample_rate) 1937 return 0; 1938 return 1; 1939 } 1940 1941 static int snd_hdsp_info_system_clock_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 1942 { 1943 static char *texts[] = {"Master", "Slave" }; 1944 1945 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1946 uinfo->count = 1; 1947 uinfo->value.enumerated.items = 2; 1948 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 1949 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 1950 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 1951 return 0; 1952 } 1953 1954 static int snd_hdsp_get_system_clock_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 1955 { 1956 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 1957 1958 ucontrol->value.enumerated.item[0] = hdsp_system_clock_mode(hdsp); 1959 return 0; 1960 } 1961 1962 #define HDSP_CLOCK_SOURCE(xname, xindex) \ 1963 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 1964 .name = xname, \ 1965 .index = xindex, \ 1966 .info = snd_hdsp_info_clock_source, \ 1967 .get = snd_hdsp_get_clock_source, \ 1968 .put = snd_hdsp_put_clock_source \ 1969 } 1970 1971 static int hdsp_clock_source(struct hdsp *hdsp) 1972 { 1973 if (hdsp->control_register & HDSP_ClockModeMaster) { 1974 switch (hdsp->system_sample_rate) { 1975 case 32000: 1976 return 1; 1977 case 44100: 1978 return 2; 1979 case 48000: 1980 return 3; 1981 case 64000: 1982 return 4; 1983 case 88200: 1984 return 5; 1985 case 96000: 1986 return 6; 1987 case 128000: 1988 return 7; 1989 case 176400: 1990 return 8; 1991 case 192000: 1992 return 9; 1993 default: 1994 return 3; 1995 } 1996 } else { 1997 return 0; 1998 } 1999 } 2000 2001 static int hdsp_set_clock_source(struct hdsp *hdsp, int mode) 2002 { 2003 int rate; 2004 switch (mode) { 2005 case HDSP_CLOCK_SOURCE_AUTOSYNC: 2006 if (hdsp_external_sample_rate(hdsp) != 0) { 2007 if (!hdsp_set_rate(hdsp, hdsp_external_sample_rate(hdsp), 1)) { 2008 hdsp->control_register &= ~HDSP_ClockModeMaster; 2009 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 2010 return 0; 2011 } 2012 } 2013 return -1; 2014 case HDSP_CLOCK_SOURCE_INTERNAL_32KHZ: 2015 rate = 32000; 2016 break; 2017 case HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ: 2018 rate = 44100; 2019 break; 2020 case HDSP_CLOCK_SOURCE_INTERNAL_48KHZ: 2021 rate = 48000; 2022 break; 2023 case HDSP_CLOCK_SOURCE_INTERNAL_64KHZ: 2024 rate = 64000; 2025 break; 2026 case HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ: 2027 rate = 88200; 2028 break; 2029 case HDSP_CLOCK_SOURCE_INTERNAL_96KHZ: 2030 rate = 96000; 2031 break; 2032 case HDSP_CLOCK_SOURCE_INTERNAL_128KHZ: 2033 rate = 128000; 2034 break; 2035 case HDSP_CLOCK_SOURCE_INTERNAL_176_4KHZ: 2036 rate = 176400; 2037 break; 2038 case HDSP_CLOCK_SOURCE_INTERNAL_192KHZ: 2039 rate = 192000; 2040 break; 2041 default: 2042 rate = 48000; 2043 } 2044 hdsp->control_register |= HDSP_ClockModeMaster; 2045 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 2046 hdsp_set_rate(hdsp, rate, 1); 2047 return 0; 2048 } 2049 2050 static int snd_hdsp_info_clock_source(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2051 { 2052 static char *texts[] = {"AutoSync", "Internal 32.0 kHz", "Internal 44.1 kHz", "Internal 48.0 kHz", "Internal 64.0 kHz", "Internal 88.2 kHz", "Internal 96.0 kHz", "Internal 128 kHz", "Internal 176.4 kHz", "Internal 192.0 KHz" }; 2053 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2054 2055 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2056 uinfo->count = 1; 2057 if (hdsp->io_type == H9632) 2058 uinfo->value.enumerated.items = 10; 2059 else 2060 uinfo->value.enumerated.items = 7; 2061 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 2062 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 2063 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 2064 return 0; 2065 } 2066 2067 static int snd_hdsp_get_clock_source(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2068 { 2069 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2070 2071 ucontrol->value.enumerated.item[0] = hdsp_clock_source(hdsp); 2072 return 0; 2073 } 2074 2075 static int snd_hdsp_put_clock_source(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2076 { 2077 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2078 int change; 2079 int val; 2080 2081 if (!snd_hdsp_use_is_exclusive(hdsp)) 2082 return -EBUSY; 2083 val = ucontrol->value.enumerated.item[0]; 2084 if (val < 0) val = 0; 2085 if (hdsp->io_type == H9632) { 2086 if (val > 9) 2087 val = 9; 2088 } else { 2089 if (val > 6) 2090 val = 6; 2091 } 2092 spin_lock_irq(&hdsp->lock); 2093 if (val != hdsp_clock_source(hdsp)) 2094 change = (hdsp_set_clock_source(hdsp, val) == 0) ? 1 : 0; 2095 else 2096 change = 0; 2097 spin_unlock_irq(&hdsp->lock); 2098 return change; 2099 } 2100 2101 #define snd_hdsp_info_clock_source_lock snd_ctl_boolean_mono_info 2102 2103 static int snd_hdsp_get_clock_source_lock(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2104 { 2105 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2106 2107 ucontrol->value.integer.value[0] = hdsp->clock_source_locked; 2108 return 0; 2109 } 2110 2111 static int snd_hdsp_put_clock_source_lock(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2112 { 2113 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2114 int change; 2115 2116 change = (int)ucontrol->value.integer.value[0] != hdsp->clock_source_locked; 2117 if (change) 2118 hdsp->clock_source_locked = !!ucontrol->value.integer.value[0]; 2119 return change; 2120 } 2121 2122 #define HDSP_DA_GAIN(xname, xindex) \ 2123 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2124 .name = xname, \ 2125 .index = xindex, \ 2126 .info = snd_hdsp_info_da_gain, \ 2127 .get = snd_hdsp_get_da_gain, \ 2128 .put = snd_hdsp_put_da_gain \ 2129 } 2130 2131 static int hdsp_da_gain(struct hdsp *hdsp) 2132 { 2133 switch (hdsp->control_register & HDSP_DAGainMask) { 2134 case HDSP_DAGainHighGain: 2135 return 0; 2136 case HDSP_DAGainPlus4dBu: 2137 return 1; 2138 case HDSP_DAGainMinus10dBV: 2139 return 2; 2140 default: 2141 return 1; 2142 } 2143 } 2144 2145 static int hdsp_set_da_gain(struct hdsp *hdsp, int mode) 2146 { 2147 hdsp->control_register &= ~HDSP_DAGainMask; 2148 switch (mode) { 2149 case 0: 2150 hdsp->control_register |= HDSP_DAGainHighGain; 2151 break; 2152 case 1: 2153 hdsp->control_register |= HDSP_DAGainPlus4dBu; 2154 break; 2155 case 2: 2156 hdsp->control_register |= HDSP_DAGainMinus10dBV; 2157 break; 2158 default: 2159 return -1; 2160 2161 } 2162 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 2163 return 0; 2164 } 2165 2166 static int snd_hdsp_info_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2167 { 2168 static char *texts[] = {"Hi Gain", "+4 dBu", "-10 dbV"}; 2169 2170 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2171 uinfo->count = 1; 2172 uinfo->value.enumerated.items = 3; 2173 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 2174 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 2175 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 2176 return 0; 2177 } 2178 2179 static int snd_hdsp_get_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2180 { 2181 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2182 2183 ucontrol->value.enumerated.item[0] = hdsp_da_gain(hdsp); 2184 return 0; 2185 } 2186 2187 static int snd_hdsp_put_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2188 { 2189 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2190 int change; 2191 int val; 2192 2193 if (!snd_hdsp_use_is_exclusive(hdsp)) 2194 return -EBUSY; 2195 val = ucontrol->value.enumerated.item[0]; 2196 if (val < 0) val = 0; 2197 if (val > 2) val = 2; 2198 spin_lock_irq(&hdsp->lock); 2199 if (val != hdsp_da_gain(hdsp)) 2200 change = (hdsp_set_da_gain(hdsp, val) == 0) ? 1 : 0; 2201 else 2202 change = 0; 2203 spin_unlock_irq(&hdsp->lock); 2204 return change; 2205 } 2206 2207 #define HDSP_AD_GAIN(xname, xindex) \ 2208 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2209 .name = xname, \ 2210 .index = xindex, \ 2211 .info = snd_hdsp_info_ad_gain, \ 2212 .get = snd_hdsp_get_ad_gain, \ 2213 .put = snd_hdsp_put_ad_gain \ 2214 } 2215 2216 static int hdsp_ad_gain(struct hdsp *hdsp) 2217 { 2218 switch (hdsp->control_register & HDSP_ADGainMask) { 2219 case HDSP_ADGainMinus10dBV: 2220 return 0; 2221 case HDSP_ADGainPlus4dBu: 2222 return 1; 2223 case HDSP_ADGainLowGain: 2224 return 2; 2225 default: 2226 return 1; 2227 } 2228 } 2229 2230 static int hdsp_set_ad_gain(struct hdsp *hdsp, int mode) 2231 { 2232 hdsp->control_register &= ~HDSP_ADGainMask; 2233 switch (mode) { 2234 case 0: 2235 hdsp->control_register |= HDSP_ADGainMinus10dBV; 2236 break; 2237 case 1: 2238 hdsp->control_register |= HDSP_ADGainPlus4dBu; 2239 break; 2240 case 2: 2241 hdsp->control_register |= HDSP_ADGainLowGain; 2242 break; 2243 default: 2244 return -1; 2245 2246 } 2247 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 2248 return 0; 2249 } 2250 2251 static int snd_hdsp_info_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2252 { 2253 static char *texts[] = {"-10 dBV", "+4 dBu", "Lo Gain"}; 2254 2255 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2256 uinfo->count = 1; 2257 uinfo->value.enumerated.items = 3; 2258 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 2259 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 2260 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 2261 return 0; 2262 } 2263 2264 static int snd_hdsp_get_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2265 { 2266 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2267 2268 ucontrol->value.enumerated.item[0] = hdsp_ad_gain(hdsp); 2269 return 0; 2270 } 2271 2272 static int snd_hdsp_put_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2273 { 2274 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2275 int change; 2276 int val; 2277 2278 if (!snd_hdsp_use_is_exclusive(hdsp)) 2279 return -EBUSY; 2280 val = ucontrol->value.enumerated.item[0]; 2281 if (val < 0) val = 0; 2282 if (val > 2) val = 2; 2283 spin_lock_irq(&hdsp->lock); 2284 if (val != hdsp_ad_gain(hdsp)) 2285 change = (hdsp_set_ad_gain(hdsp, val) == 0) ? 1 : 0; 2286 else 2287 change = 0; 2288 spin_unlock_irq(&hdsp->lock); 2289 return change; 2290 } 2291 2292 #define HDSP_PHONE_GAIN(xname, xindex) \ 2293 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2294 .name = xname, \ 2295 .index = xindex, \ 2296 .info = snd_hdsp_info_phone_gain, \ 2297 .get = snd_hdsp_get_phone_gain, \ 2298 .put = snd_hdsp_put_phone_gain \ 2299 } 2300 2301 static int hdsp_phone_gain(struct hdsp *hdsp) 2302 { 2303 switch (hdsp->control_register & HDSP_PhoneGainMask) { 2304 case HDSP_PhoneGain0dB: 2305 return 0; 2306 case HDSP_PhoneGainMinus6dB: 2307 return 1; 2308 case HDSP_PhoneGainMinus12dB: 2309 return 2; 2310 default: 2311 return 0; 2312 } 2313 } 2314 2315 static int hdsp_set_phone_gain(struct hdsp *hdsp, int mode) 2316 { 2317 hdsp->control_register &= ~HDSP_PhoneGainMask; 2318 switch (mode) { 2319 case 0: 2320 hdsp->control_register |= HDSP_PhoneGain0dB; 2321 break; 2322 case 1: 2323 hdsp->control_register |= HDSP_PhoneGainMinus6dB; 2324 break; 2325 case 2: 2326 hdsp->control_register |= HDSP_PhoneGainMinus12dB; 2327 break; 2328 default: 2329 return -1; 2330 2331 } 2332 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 2333 return 0; 2334 } 2335 2336 static int snd_hdsp_info_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2337 { 2338 static char *texts[] = {"0 dB", "-6 dB", "-12 dB"}; 2339 2340 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2341 uinfo->count = 1; 2342 uinfo->value.enumerated.items = 3; 2343 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 2344 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 2345 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 2346 return 0; 2347 } 2348 2349 static int snd_hdsp_get_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2350 { 2351 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2352 2353 ucontrol->value.enumerated.item[0] = hdsp_phone_gain(hdsp); 2354 return 0; 2355 } 2356 2357 static int snd_hdsp_put_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2358 { 2359 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2360 int change; 2361 int val; 2362 2363 if (!snd_hdsp_use_is_exclusive(hdsp)) 2364 return -EBUSY; 2365 val = ucontrol->value.enumerated.item[0]; 2366 if (val < 0) val = 0; 2367 if (val > 2) val = 2; 2368 spin_lock_irq(&hdsp->lock); 2369 if (val != hdsp_phone_gain(hdsp)) 2370 change = (hdsp_set_phone_gain(hdsp, val) == 0) ? 1 : 0; 2371 else 2372 change = 0; 2373 spin_unlock_irq(&hdsp->lock); 2374 return change; 2375 } 2376 2377 #define HDSP_PREF_SYNC_REF(xname, xindex) \ 2378 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2379 .name = xname, \ 2380 .index = xindex, \ 2381 .info = snd_hdsp_info_pref_sync_ref, \ 2382 .get = snd_hdsp_get_pref_sync_ref, \ 2383 .put = snd_hdsp_put_pref_sync_ref \ 2384 } 2385 2386 static int hdsp_pref_sync_ref(struct hdsp *hdsp) 2387 { 2388 /* Notice that this looks at the requested sync source, 2389 not the one actually in use. 2390 */ 2391 2392 switch (hdsp->control_register & HDSP_SyncRefMask) { 2393 case HDSP_SyncRef_ADAT1: 2394 return HDSP_SYNC_FROM_ADAT1; 2395 case HDSP_SyncRef_ADAT2: 2396 return HDSP_SYNC_FROM_ADAT2; 2397 case HDSP_SyncRef_ADAT3: 2398 return HDSP_SYNC_FROM_ADAT3; 2399 case HDSP_SyncRef_SPDIF: 2400 return HDSP_SYNC_FROM_SPDIF; 2401 case HDSP_SyncRef_WORD: 2402 return HDSP_SYNC_FROM_WORD; 2403 case HDSP_SyncRef_ADAT_SYNC: 2404 return HDSP_SYNC_FROM_ADAT_SYNC; 2405 default: 2406 return HDSP_SYNC_FROM_WORD; 2407 } 2408 return 0; 2409 } 2410 2411 static int hdsp_set_pref_sync_ref(struct hdsp *hdsp, int pref) 2412 { 2413 hdsp->control_register &= ~HDSP_SyncRefMask; 2414 switch (pref) { 2415 case HDSP_SYNC_FROM_ADAT1: 2416 hdsp->control_register &= ~HDSP_SyncRefMask; /* clear SyncRef bits */ 2417 break; 2418 case HDSP_SYNC_FROM_ADAT2: 2419 hdsp->control_register |= HDSP_SyncRef_ADAT2; 2420 break; 2421 case HDSP_SYNC_FROM_ADAT3: 2422 hdsp->control_register |= HDSP_SyncRef_ADAT3; 2423 break; 2424 case HDSP_SYNC_FROM_SPDIF: 2425 hdsp->control_register |= HDSP_SyncRef_SPDIF; 2426 break; 2427 case HDSP_SYNC_FROM_WORD: 2428 hdsp->control_register |= HDSP_SyncRef_WORD; 2429 break; 2430 case HDSP_SYNC_FROM_ADAT_SYNC: 2431 hdsp->control_register |= HDSP_SyncRef_ADAT_SYNC; 2432 break; 2433 default: 2434 return -1; 2435 } 2436 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 2437 return 0; 2438 } 2439 2440 static int snd_hdsp_info_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2441 { 2442 static char *texts[] = {"Word", "IEC958", "ADAT1", "ADAT Sync", "ADAT2", "ADAT3" }; 2443 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2444 2445 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2446 uinfo->count = 1; 2447 2448 switch (hdsp->io_type) { 2449 case Digiface: 2450 case H9652: 2451 uinfo->value.enumerated.items = 6; 2452 break; 2453 case Multiface: 2454 uinfo->value.enumerated.items = 4; 2455 break; 2456 case H9632: 2457 uinfo->value.enumerated.items = 3; 2458 break; 2459 default: 2460 return -EINVAL; 2461 } 2462 2463 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 2464 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 2465 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 2466 return 0; 2467 } 2468 2469 static int snd_hdsp_get_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2470 { 2471 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2472 2473 ucontrol->value.enumerated.item[0] = hdsp_pref_sync_ref(hdsp); 2474 return 0; 2475 } 2476 2477 static int snd_hdsp_put_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2478 { 2479 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2480 int change, max; 2481 unsigned int val; 2482 2483 if (!snd_hdsp_use_is_exclusive(hdsp)) 2484 return -EBUSY; 2485 2486 switch (hdsp->io_type) { 2487 case Digiface: 2488 case H9652: 2489 max = 6; 2490 break; 2491 case Multiface: 2492 max = 4; 2493 break; 2494 case H9632: 2495 max = 3; 2496 break; 2497 default: 2498 return -EIO; 2499 } 2500 2501 val = ucontrol->value.enumerated.item[0] % max; 2502 spin_lock_irq(&hdsp->lock); 2503 change = (int)val != hdsp_pref_sync_ref(hdsp); 2504 hdsp_set_pref_sync_ref(hdsp, val); 2505 spin_unlock_irq(&hdsp->lock); 2506 return change; 2507 } 2508 2509 #define HDSP_AUTOSYNC_REF(xname, xindex) \ 2510 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2511 .name = xname, \ 2512 .index = xindex, \ 2513 .access = SNDRV_CTL_ELEM_ACCESS_READ, \ 2514 .info = snd_hdsp_info_autosync_ref, \ 2515 .get = snd_hdsp_get_autosync_ref, \ 2516 } 2517 2518 static int hdsp_autosync_ref(struct hdsp *hdsp) 2519 { 2520 /* This looks at the autosync selected sync reference */ 2521 unsigned int status2 = hdsp_read(hdsp, HDSP_status2Register); 2522 2523 switch (status2 & HDSP_SelSyncRefMask) { 2524 case HDSP_SelSyncRef_WORD: 2525 return HDSP_AUTOSYNC_FROM_WORD; 2526 case HDSP_SelSyncRef_ADAT_SYNC: 2527 return HDSP_AUTOSYNC_FROM_ADAT_SYNC; 2528 case HDSP_SelSyncRef_SPDIF: 2529 return HDSP_AUTOSYNC_FROM_SPDIF; 2530 case HDSP_SelSyncRefMask: 2531 return HDSP_AUTOSYNC_FROM_NONE; 2532 case HDSP_SelSyncRef_ADAT1: 2533 return HDSP_AUTOSYNC_FROM_ADAT1; 2534 case HDSP_SelSyncRef_ADAT2: 2535 return HDSP_AUTOSYNC_FROM_ADAT2; 2536 case HDSP_SelSyncRef_ADAT3: 2537 return HDSP_AUTOSYNC_FROM_ADAT3; 2538 default: 2539 return HDSP_AUTOSYNC_FROM_WORD; 2540 } 2541 return 0; 2542 } 2543 2544 static int snd_hdsp_info_autosync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2545 { 2546 static char *texts[] = {"Word", "ADAT Sync", "IEC958", "None", "ADAT1", "ADAT2", "ADAT3" }; 2547 2548 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2549 uinfo->count = 1; 2550 uinfo->value.enumerated.items = 7; 2551 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 2552 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 2553 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 2554 return 0; 2555 } 2556 2557 static int snd_hdsp_get_autosync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2558 { 2559 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2560 2561 ucontrol->value.enumerated.item[0] = hdsp_autosync_ref(hdsp); 2562 return 0; 2563 } 2564 2565 #define HDSP_PRECISE_POINTER(xname, xindex) \ 2566 { .iface = SNDRV_CTL_ELEM_IFACE_CARD, \ 2567 .name = xname, \ 2568 .index = xindex, \ 2569 .info = snd_hdsp_info_precise_pointer, \ 2570 .get = snd_hdsp_get_precise_pointer, \ 2571 .put = snd_hdsp_put_precise_pointer \ 2572 } 2573 2574 static int hdsp_set_precise_pointer(struct hdsp *hdsp, int precise) 2575 { 2576 if (precise) 2577 hdsp->precise_ptr = 1; 2578 else 2579 hdsp->precise_ptr = 0; 2580 return 0; 2581 } 2582 2583 #define snd_hdsp_info_precise_pointer snd_ctl_boolean_mono_info 2584 2585 static int snd_hdsp_get_precise_pointer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2586 { 2587 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2588 2589 spin_lock_irq(&hdsp->lock); 2590 ucontrol->value.integer.value[0] = hdsp->precise_ptr; 2591 spin_unlock_irq(&hdsp->lock); 2592 return 0; 2593 } 2594 2595 static int snd_hdsp_put_precise_pointer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2596 { 2597 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2598 int change; 2599 unsigned int val; 2600 2601 if (!snd_hdsp_use_is_exclusive(hdsp)) 2602 return -EBUSY; 2603 val = ucontrol->value.integer.value[0] & 1; 2604 spin_lock_irq(&hdsp->lock); 2605 change = (int)val != hdsp->precise_ptr; 2606 hdsp_set_precise_pointer(hdsp, val); 2607 spin_unlock_irq(&hdsp->lock); 2608 return change; 2609 } 2610 2611 #define HDSP_USE_MIDI_TASKLET(xname, xindex) \ 2612 { .iface = SNDRV_CTL_ELEM_IFACE_CARD, \ 2613 .name = xname, \ 2614 .index = xindex, \ 2615 .info = snd_hdsp_info_use_midi_tasklet, \ 2616 .get = snd_hdsp_get_use_midi_tasklet, \ 2617 .put = snd_hdsp_put_use_midi_tasklet \ 2618 } 2619 2620 static int hdsp_set_use_midi_tasklet(struct hdsp *hdsp, int use_tasklet) 2621 { 2622 if (use_tasklet) 2623 hdsp->use_midi_tasklet = 1; 2624 else 2625 hdsp->use_midi_tasklet = 0; 2626 return 0; 2627 } 2628 2629 #define snd_hdsp_info_use_midi_tasklet snd_ctl_boolean_mono_info 2630 2631 static int snd_hdsp_get_use_midi_tasklet(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2632 { 2633 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2634 2635 spin_lock_irq(&hdsp->lock); 2636 ucontrol->value.integer.value[0] = hdsp->use_midi_tasklet; 2637 spin_unlock_irq(&hdsp->lock); 2638 return 0; 2639 } 2640 2641 static int snd_hdsp_put_use_midi_tasklet(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2642 { 2643 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2644 int change; 2645 unsigned int val; 2646 2647 if (!snd_hdsp_use_is_exclusive(hdsp)) 2648 return -EBUSY; 2649 val = ucontrol->value.integer.value[0] & 1; 2650 spin_lock_irq(&hdsp->lock); 2651 change = (int)val != hdsp->use_midi_tasklet; 2652 hdsp_set_use_midi_tasklet(hdsp, val); 2653 spin_unlock_irq(&hdsp->lock); 2654 return change; 2655 } 2656 2657 #define HDSP_MIXER(xname, xindex) \ 2658 { .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \ 2659 .name = xname, \ 2660 .index = xindex, \ 2661 .device = 0, \ 2662 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | \ 2663 SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ 2664 .info = snd_hdsp_info_mixer, \ 2665 .get = snd_hdsp_get_mixer, \ 2666 .put = snd_hdsp_put_mixer \ 2667 } 2668 2669 static int snd_hdsp_info_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2670 { 2671 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 2672 uinfo->count = 3; 2673 uinfo->value.integer.min = 0; 2674 uinfo->value.integer.max = 65536; 2675 uinfo->value.integer.step = 1; 2676 return 0; 2677 } 2678 2679 static int snd_hdsp_get_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2680 { 2681 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2682 int source; 2683 int destination; 2684 int addr; 2685 2686 source = ucontrol->value.integer.value[0]; 2687 destination = ucontrol->value.integer.value[1]; 2688 2689 if (source >= hdsp->max_channels) 2690 addr = hdsp_playback_to_output_key(hdsp,source-hdsp->max_channels,destination); 2691 else 2692 addr = hdsp_input_to_output_key(hdsp,source, destination); 2693 2694 spin_lock_irq(&hdsp->lock); 2695 ucontrol->value.integer.value[2] = hdsp_read_gain (hdsp, addr); 2696 spin_unlock_irq(&hdsp->lock); 2697 return 0; 2698 } 2699 2700 static int snd_hdsp_put_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2701 { 2702 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2703 int change; 2704 int source; 2705 int destination; 2706 int gain; 2707 int addr; 2708 2709 if (!snd_hdsp_use_is_exclusive(hdsp)) 2710 return -EBUSY; 2711 2712 source = ucontrol->value.integer.value[0]; 2713 destination = ucontrol->value.integer.value[1]; 2714 2715 if (source >= hdsp->max_channels) 2716 addr = hdsp_playback_to_output_key(hdsp,source-hdsp->max_channels, destination); 2717 else 2718 addr = hdsp_input_to_output_key(hdsp,source, destination); 2719 2720 gain = ucontrol->value.integer.value[2]; 2721 2722 spin_lock_irq(&hdsp->lock); 2723 change = gain != hdsp_read_gain(hdsp, addr); 2724 if (change) 2725 hdsp_write_gain(hdsp, addr, gain); 2726 spin_unlock_irq(&hdsp->lock); 2727 return change; 2728 } 2729 2730 #define HDSP_WC_SYNC_CHECK(xname, xindex) \ 2731 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2732 .name = xname, \ 2733 .index = xindex, \ 2734 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ 2735 .info = snd_hdsp_info_sync_check, \ 2736 .get = snd_hdsp_get_wc_sync_check \ 2737 } 2738 2739 static int snd_hdsp_info_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2740 { 2741 static char *texts[] = {"No Lock", "Lock", "Sync" }; 2742 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 2743 uinfo->count = 1; 2744 uinfo->value.enumerated.items = 3; 2745 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 2746 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 2747 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 2748 return 0; 2749 } 2750 2751 static int hdsp_wc_sync_check(struct hdsp *hdsp) 2752 { 2753 int status2 = hdsp_read(hdsp, HDSP_status2Register); 2754 if (status2 & HDSP_wc_lock) { 2755 if (status2 & HDSP_wc_sync) 2756 return 2; 2757 else 2758 return 1; 2759 } else 2760 return 0; 2761 return 0; 2762 } 2763 2764 static int snd_hdsp_get_wc_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2765 { 2766 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2767 2768 ucontrol->value.enumerated.item[0] = hdsp_wc_sync_check(hdsp); 2769 return 0; 2770 } 2771 2772 #define HDSP_SPDIF_SYNC_CHECK(xname, xindex) \ 2773 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2774 .name = xname, \ 2775 .index = xindex, \ 2776 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ 2777 .info = snd_hdsp_info_sync_check, \ 2778 .get = snd_hdsp_get_spdif_sync_check \ 2779 } 2780 2781 static int hdsp_spdif_sync_check(struct hdsp *hdsp) 2782 { 2783 int status = hdsp_read(hdsp, HDSP_statusRegister); 2784 if (status & HDSP_SPDIFErrorFlag) 2785 return 0; 2786 else { 2787 if (status & HDSP_SPDIFSync) 2788 return 2; 2789 else 2790 return 1; 2791 } 2792 return 0; 2793 } 2794 2795 static int snd_hdsp_get_spdif_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2796 { 2797 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2798 2799 ucontrol->value.enumerated.item[0] = hdsp_spdif_sync_check(hdsp); 2800 return 0; 2801 } 2802 2803 #define HDSP_ADATSYNC_SYNC_CHECK(xname, xindex) \ 2804 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2805 .name = xname, \ 2806 .index = xindex, \ 2807 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ 2808 .info = snd_hdsp_info_sync_check, \ 2809 .get = snd_hdsp_get_adatsync_sync_check \ 2810 } 2811 2812 static int hdsp_adatsync_sync_check(struct hdsp *hdsp) 2813 { 2814 int status = hdsp_read(hdsp, HDSP_statusRegister); 2815 if (status & HDSP_TimecodeLock) { 2816 if (status & HDSP_TimecodeSync) 2817 return 2; 2818 else 2819 return 1; 2820 } else 2821 return 0; 2822 } 2823 2824 static int snd_hdsp_get_adatsync_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2825 { 2826 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2827 2828 ucontrol->value.enumerated.item[0] = hdsp_adatsync_sync_check(hdsp); 2829 return 0; 2830 } 2831 2832 #define HDSP_ADAT_SYNC_CHECK \ 2833 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2834 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ 2835 .info = snd_hdsp_info_sync_check, \ 2836 .get = snd_hdsp_get_adat_sync_check \ 2837 } 2838 2839 static int hdsp_adat_sync_check(struct hdsp *hdsp, int idx) 2840 { 2841 int status = hdsp_read(hdsp, HDSP_statusRegister); 2842 2843 if (status & (HDSP_Lock0>>idx)) { 2844 if (status & (HDSP_Sync0>>idx)) 2845 return 2; 2846 else 2847 return 1; 2848 } else 2849 return 0; 2850 } 2851 2852 static int snd_hdsp_get_adat_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2853 { 2854 int offset; 2855 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2856 2857 offset = ucontrol->id.index - 1; 2858 snd_BUG_ON(offset < 0); 2859 2860 switch (hdsp->io_type) { 2861 case Digiface: 2862 case H9652: 2863 if (offset >= 3) 2864 return -EINVAL; 2865 break; 2866 case Multiface: 2867 case H9632: 2868 if (offset >= 1) 2869 return -EINVAL; 2870 break; 2871 default: 2872 return -EIO; 2873 } 2874 2875 ucontrol->value.enumerated.item[0] = hdsp_adat_sync_check(hdsp, offset); 2876 return 0; 2877 } 2878 2879 #define HDSP_DDS_OFFSET(xname, xindex) \ 2880 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2881 .name = xname, \ 2882 .index = xindex, \ 2883 .info = snd_hdsp_info_dds_offset, \ 2884 .get = snd_hdsp_get_dds_offset, \ 2885 .put = snd_hdsp_put_dds_offset \ 2886 } 2887 2888 static int hdsp_dds_offset(struct hdsp *hdsp) 2889 { 2890 u64 n; 2891 unsigned int dds_value = hdsp->dds_value; 2892 int system_sample_rate = hdsp->system_sample_rate; 2893 2894 if (!dds_value) 2895 return 0; 2896 2897 n = DDS_NUMERATOR; 2898 /* 2899 * dds_value = n / rate 2900 * rate = n / dds_value 2901 */ 2902 n = div_u64(n, dds_value); 2903 if (system_sample_rate >= 112000) 2904 n *= 4; 2905 else if (system_sample_rate >= 56000) 2906 n *= 2; 2907 return ((int)n) - system_sample_rate; 2908 } 2909 2910 static int hdsp_set_dds_offset(struct hdsp *hdsp, int offset_hz) 2911 { 2912 int rate = hdsp->system_sample_rate + offset_hz; 2913 hdsp_set_dds_value(hdsp, rate); 2914 return 0; 2915 } 2916 2917 static int snd_hdsp_info_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 2918 { 2919 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 2920 uinfo->count = 1; 2921 uinfo->value.integer.min = -5000; 2922 uinfo->value.integer.max = 5000; 2923 return 0; 2924 } 2925 2926 static int snd_hdsp_get_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2927 { 2928 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2929 2930 ucontrol->value.enumerated.item[0] = hdsp_dds_offset(hdsp); 2931 return 0; 2932 } 2933 2934 static int snd_hdsp_put_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 2935 { 2936 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 2937 int change; 2938 int val; 2939 2940 if (!snd_hdsp_use_is_exclusive(hdsp)) 2941 return -EBUSY; 2942 val = ucontrol->value.enumerated.item[0]; 2943 spin_lock_irq(&hdsp->lock); 2944 if (val != hdsp_dds_offset(hdsp)) 2945 change = (hdsp_set_dds_offset(hdsp, val) == 0) ? 1 : 0; 2946 else 2947 change = 0; 2948 spin_unlock_irq(&hdsp->lock); 2949 return change; 2950 } 2951 2952 static struct snd_kcontrol_new snd_hdsp_9632_controls[] = { 2953 HDSP_DA_GAIN("DA Gain", 0), 2954 HDSP_AD_GAIN("AD Gain", 0), 2955 HDSP_PHONE_GAIN("Phones Gain", 0), 2956 HDSP_TOGGLE_SETTING("XLR Breakout Cable", HDSP_XLRBreakoutCable), 2957 HDSP_DDS_OFFSET("DDS Sample Rate Offset", 0) 2958 }; 2959 2960 static struct snd_kcontrol_new snd_hdsp_controls[] = { 2961 { 2962 .iface = SNDRV_CTL_ELEM_IFACE_PCM, 2963 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT), 2964 .info = snd_hdsp_control_spdif_info, 2965 .get = snd_hdsp_control_spdif_get, 2966 .put = snd_hdsp_control_spdif_put, 2967 }, 2968 { 2969 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE, 2970 .iface = SNDRV_CTL_ELEM_IFACE_PCM, 2971 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,PCM_STREAM), 2972 .info = snd_hdsp_control_spdif_stream_info, 2973 .get = snd_hdsp_control_spdif_stream_get, 2974 .put = snd_hdsp_control_spdif_stream_put, 2975 }, 2976 { 2977 .access = SNDRV_CTL_ELEM_ACCESS_READ, 2978 .iface = SNDRV_CTL_ELEM_IFACE_PCM, 2979 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK), 2980 .info = snd_hdsp_control_spdif_mask_info, 2981 .get = snd_hdsp_control_spdif_mask_get, 2982 .private_value = IEC958_AES0_NONAUDIO | 2983 IEC958_AES0_PROFESSIONAL | 2984 IEC958_AES0_CON_EMPHASIS, 2985 }, 2986 { 2987 .access = SNDRV_CTL_ELEM_ACCESS_READ, 2988 .iface = SNDRV_CTL_ELEM_IFACE_PCM, 2989 .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,PRO_MASK), 2990 .info = snd_hdsp_control_spdif_mask_info, 2991 .get = snd_hdsp_control_spdif_mask_get, 2992 .private_value = IEC958_AES0_NONAUDIO | 2993 IEC958_AES0_PROFESSIONAL | 2994 IEC958_AES0_PRO_EMPHASIS, 2995 }, 2996 HDSP_MIXER("Mixer", 0), 2997 HDSP_SPDIF_IN("IEC958 Input Connector", 0), 2998 HDSP_TOGGLE_SETTING("IEC958 Output also on ADAT1", HDSP_SPDIFOpticalOut), 2999 HDSP_TOGGLE_SETTING("IEC958 Professional Bit", HDSP_SPDIFProfessional), 3000 HDSP_TOGGLE_SETTING("IEC958 Emphasis Bit", HDSP_SPDIFEmphasis), 3001 HDSP_TOGGLE_SETTING("IEC958 Non-audio Bit", HDSP_SPDIFNonAudio), 3002 /* 'Sample Clock Source' complies with the alsa control naming scheme */ 3003 HDSP_CLOCK_SOURCE("Sample Clock Source", 0), 3004 { 3005 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 3006 .name = "Sample Clock Source Locking", 3007 .info = snd_hdsp_info_clock_source_lock, 3008 .get = snd_hdsp_get_clock_source_lock, 3009 .put = snd_hdsp_put_clock_source_lock, 3010 }, 3011 HDSP_SYSTEM_CLOCK_MODE("System Clock Mode", 0), 3012 HDSP_PREF_SYNC_REF("Preferred Sync Reference", 0), 3013 HDSP_AUTOSYNC_REF("AutoSync Reference", 0), 3014 HDSP_SPDIF_SAMPLE_RATE("SPDIF Sample Rate", 0), 3015 HDSP_SYSTEM_SAMPLE_RATE("System Sample Rate", 0), 3016 /* 'External Rate' complies with the alsa control naming scheme */ 3017 HDSP_AUTOSYNC_SAMPLE_RATE("External Rate", 0), 3018 HDSP_WC_SYNC_CHECK("Word Clock Lock Status", 0), 3019 HDSP_SPDIF_SYNC_CHECK("SPDIF Lock Status", 0), 3020 HDSP_ADATSYNC_SYNC_CHECK("ADAT Sync Lock Status", 0), 3021 HDSP_TOGGLE_SETTING("Line Out", HDSP_LineOut), 3022 HDSP_PRECISE_POINTER("Precise Pointer", 0), 3023 HDSP_USE_MIDI_TASKLET("Use Midi Tasklet", 0), 3024 }; 3025 3026 3027 static int hdsp_rpm_input12(struct hdsp *hdsp) 3028 { 3029 switch (hdsp->control_register & HDSP_RPM_Inp12) { 3030 case HDSP_RPM_Inp12_Phon_6dB: 3031 return 0; 3032 case HDSP_RPM_Inp12_Phon_n6dB: 3033 return 2; 3034 case HDSP_RPM_Inp12_Line_0dB: 3035 return 3; 3036 case HDSP_RPM_Inp12_Line_n6dB: 3037 return 4; 3038 } 3039 return 1; 3040 } 3041 3042 3043 static int snd_hdsp_get_rpm_input12(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 3044 { 3045 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 3046 3047 ucontrol->value.enumerated.item[0] = hdsp_rpm_input12(hdsp); 3048 return 0; 3049 } 3050 3051 3052 static int hdsp_set_rpm_input12(struct hdsp *hdsp, int mode) 3053 { 3054 hdsp->control_register &= ~HDSP_RPM_Inp12; 3055 switch (mode) { 3056 case 0: 3057 hdsp->control_register |= HDSP_RPM_Inp12_Phon_6dB; 3058 break; 3059 case 1: 3060 break; 3061 case 2: 3062 hdsp->control_register |= HDSP_RPM_Inp12_Phon_n6dB; 3063 break; 3064 case 3: 3065 hdsp->control_register |= HDSP_RPM_Inp12_Line_0dB; 3066 break; 3067 case 4: 3068 hdsp->control_register |= HDSP_RPM_Inp12_Line_n6dB; 3069 break; 3070 default: 3071 return -1; 3072 } 3073 3074 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 3075 return 0; 3076 } 3077 3078 3079 static int snd_hdsp_put_rpm_input12(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 3080 { 3081 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 3082 int change; 3083 int val; 3084 3085 if (!snd_hdsp_use_is_exclusive(hdsp)) 3086 return -EBUSY; 3087 val = ucontrol->value.enumerated.item[0]; 3088 if (val < 0) 3089 val = 0; 3090 if (val > 4) 3091 val = 4; 3092 spin_lock_irq(&hdsp->lock); 3093 if (val != hdsp_rpm_input12(hdsp)) 3094 change = (hdsp_set_rpm_input12(hdsp, val) == 0) ? 1 : 0; 3095 else 3096 change = 0; 3097 spin_unlock_irq(&hdsp->lock); 3098 return change; 3099 } 3100 3101 3102 static int snd_hdsp_info_rpm_input(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 3103 { 3104 static char *texts[] = {"Phono +6dB", "Phono 0dB", "Phono -6dB", "Line 0dB", "Line -6dB"}; 3105 3106 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 3107 uinfo->count = 1; 3108 uinfo->value.enumerated.items = 5; 3109 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 3110 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 3111 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 3112 return 0; 3113 } 3114 3115 3116 static int hdsp_rpm_input34(struct hdsp *hdsp) 3117 { 3118 switch (hdsp->control_register & HDSP_RPM_Inp34) { 3119 case HDSP_RPM_Inp34_Phon_6dB: 3120 return 0; 3121 case HDSP_RPM_Inp34_Phon_n6dB: 3122 return 2; 3123 case HDSP_RPM_Inp34_Line_0dB: 3124 return 3; 3125 case HDSP_RPM_Inp34_Line_n6dB: 3126 return 4; 3127 } 3128 return 1; 3129 } 3130 3131 3132 static int snd_hdsp_get_rpm_input34(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 3133 { 3134 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 3135 3136 ucontrol->value.enumerated.item[0] = hdsp_rpm_input34(hdsp); 3137 return 0; 3138 } 3139 3140 3141 static int hdsp_set_rpm_input34(struct hdsp *hdsp, int mode) 3142 { 3143 hdsp->control_register &= ~HDSP_RPM_Inp34; 3144 switch (mode) { 3145 case 0: 3146 hdsp->control_register |= HDSP_RPM_Inp34_Phon_6dB; 3147 break; 3148 case 1: 3149 break; 3150 case 2: 3151 hdsp->control_register |= HDSP_RPM_Inp34_Phon_n6dB; 3152 break; 3153 case 3: 3154 hdsp->control_register |= HDSP_RPM_Inp34_Line_0dB; 3155 break; 3156 case 4: 3157 hdsp->control_register |= HDSP_RPM_Inp34_Line_n6dB; 3158 break; 3159 default: 3160 return -1; 3161 } 3162 3163 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 3164 return 0; 3165 } 3166 3167 3168 static int snd_hdsp_put_rpm_input34(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 3169 { 3170 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 3171 int change; 3172 int val; 3173 3174 if (!snd_hdsp_use_is_exclusive(hdsp)) 3175 return -EBUSY; 3176 val = ucontrol->value.enumerated.item[0]; 3177 if (val < 0) 3178 val = 0; 3179 if (val > 4) 3180 val = 4; 3181 spin_lock_irq(&hdsp->lock); 3182 if (val != hdsp_rpm_input34(hdsp)) 3183 change = (hdsp_set_rpm_input34(hdsp, val) == 0) ? 1 : 0; 3184 else 3185 change = 0; 3186 spin_unlock_irq(&hdsp->lock); 3187 return change; 3188 } 3189 3190 3191 /* RPM Bypass switch */ 3192 static int hdsp_rpm_bypass(struct hdsp *hdsp) 3193 { 3194 return (hdsp->control_register & HDSP_RPM_Bypass) ? 1 : 0; 3195 } 3196 3197 3198 static int snd_hdsp_get_rpm_bypass(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 3199 { 3200 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 3201 3202 ucontrol->value.integer.value[0] = hdsp_rpm_bypass(hdsp); 3203 return 0; 3204 } 3205 3206 3207 static int hdsp_set_rpm_bypass(struct hdsp *hdsp, int on) 3208 { 3209 if (on) 3210 hdsp->control_register |= HDSP_RPM_Bypass; 3211 else 3212 hdsp->control_register &= ~HDSP_RPM_Bypass; 3213 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 3214 return 0; 3215 } 3216 3217 3218 static int snd_hdsp_put_rpm_bypass(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 3219 { 3220 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 3221 int change; 3222 unsigned int val; 3223 3224 if (!snd_hdsp_use_is_exclusive(hdsp)) 3225 return -EBUSY; 3226 val = ucontrol->value.integer.value[0] & 1; 3227 spin_lock_irq(&hdsp->lock); 3228 change = (int)val != hdsp_rpm_bypass(hdsp); 3229 hdsp_set_rpm_bypass(hdsp, val); 3230 spin_unlock_irq(&hdsp->lock); 3231 return change; 3232 } 3233 3234 3235 static int snd_hdsp_info_rpm_bypass(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 3236 { 3237 static char *texts[] = {"On", "Off"}; 3238 3239 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 3240 uinfo->count = 1; 3241 uinfo->value.enumerated.items = 2; 3242 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 3243 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 3244 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 3245 return 0; 3246 } 3247 3248 3249 /* RPM Disconnect switch */ 3250 static int hdsp_rpm_disconnect(struct hdsp *hdsp) 3251 { 3252 return (hdsp->control_register & HDSP_RPM_Disconnect) ? 1 : 0; 3253 } 3254 3255 3256 static int snd_hdsp_get_rpm_disconnect(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 3257 { 3258 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 3259 3260 ucontrol->value.integer.value[0] = hdsp_rpm_disconnect(hdsp); 3261 return 0; 3262 } 3263 3264 3265 static int hdsp_set_rpm_disconnect(struct hdsp *hdsp, int on) 3266 { 3267 if (on) 3268 hdsp->control_register |= HDSP_RPM_Disconnect; 3269 else 3270 hdsp->control_register &= ~HDSP_RPM_Disconnect; 3271 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 3272 return 0; 3273 } 3274 3275 3276 static int snd_hdsp_put_rpm_disconnect(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) 3277 { 3278 struct hdsp *hdsp = snd_kcontrol_chip(kcontrol); 3279 int change; 3280 unsigned int val; 3281 3282 if (!snd_hdsp_use_is_exclusive(hdsp)) 3283 return -EBUSY; 3284 val = ucontrol->value.integer.value[0] & 1; 3285 spin_lock_irq(&hdsp->lock); 3286 change = (int)val != hdsp_rpm_disconnect(hdsp); 3287 hdsp_set_rpm_disconnect(hdsp, val); 3288 spin_unlock_irq(&hdsp->lock); 3289 return change; 3290 } 3291 3292 static int snd_hdsp_info_rpm_disconnect(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) 3293 { 3294 static char *texts[] = {"On", "Off"}; 3295 3296 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 3297 uinfo->count = 1; 3298 uinfo->value.enumerated.items = 2; 3299 if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) 3300 uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; 3301 strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); 3302 return 0; 3303 } 3304 3305 static struct snd_kcontrol_new snd_hdsp_rpm_controls[] = { 3306 { 3307 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 3308 .name = "RPM Bypass", 3309 .get = snd_hdsp_get_rpm_bypass, 3310 .put = snd_hdsp_put_rpm_bypass, 3311 .info = snd_hdsp_info_rpm_bypass 3312 }, 3313 { 3314 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 3315 .name = "RPM Disconnect", 3316 .get = snd_hdsp_get_rpm_disconnect, 3317 .put = snd_hdsp_put_rpm_disconnect, 3318 .info = snd_hdsp_info_rpm_disconnect 3319 }, 3320 { 3321 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 3322 .name = "Input 1/2", 3323 .get = snd_hdsp_get_rpm_input12, 3324 .put = snd_hdsp_put_rpm_input12, 3325 .info = snd_hdsp_info_rpm_input 3326 }, 3327 { 3328 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 3329 .name = "Input 3/4", 3330 .get = snd_hdsp_get_rpm_input34, 3331 .put = snd_hdsp_put_rpm_input34, 3332 .info = snd_hdsp_info_rpm_input 3333 }, 3334 HDSP_SYSTEM_SAMPLE_RATE("System Sample Rate", 0), 3335 HDSP_MIXER("Mixer", 0) 3336 }; 3337 3338 static struct snd_kcontrol_new snd_hdsp_96xx_aeb = 3339 HDSP_TOGGLE_SETTING("Analog Extension Board", 3340 HDSP_AnalogExtensionBoard); 3341 static struct snd_kcontrol_new snd_hdsp_adat_sync_check = HDSP_ADAT_SYNC_CHECK; 3342 3343 static int snd_hdsp_create_controls(struct snd_card *card, struct hdsp *hdsp) 3344 { 3345 unsigned int idx; 3346 int err; 3347 struct snd_kcontrol *kctl; 3348 3349 if (hdsp->io_type == RPM) { 3350 /* RPM Bypass, Disconnect and Input switches */ 3351 for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_rpm_controls); idx++) { 3352 err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_hdsp_rpm_controls[idx], hdsp)); 3353 if (err < 0) 3354 return err; 3355 } 3356 return 0; 3357 } 3358 3359 for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_controls); idx++) { 3360 if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_hdsp_controls[idx], hdsp))) < 0) 3361 return err; 3362 if (idx == 1) /* IEC958 (S/PDIF) Stream */ 3363 hdsp->spdif_ctl = kctl; 3364 } 3365 3366 /* ADAT SyncCheck status */ 3367 snd_hdsp_adat_sync_check.name = "ADAT Lock Status"; 3368 snd_hdsp_adat_sync_check.index = 1; 3369 if ((err = snd_ctl_add (card, kctl = snd_ctl_new1(&snd_hdsp_adat_sync_check, hdsp)))) 3370 return err; 3371 if (hdsp->io_type == Digiface || hdsp->io_type == H9652) { 3372 for (idx = 1; idx < 3; ++idx) { 3373 snd_hdsp_adat_sync_check.index = idx+1; 3374 if ((err = snd_ctl_add (card, kctl = snd_ctl_new1(&snd_hdsp_adat_sync_check, hdsp)))) 3375 return err; 3376 } 3377 } 3378 3379 /* DA, AD and Phone gain and XLR breakout cable controls for H9632 cards */ 3380 if (hdsp->io_type == H9632) { 3381 for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_9632_controls); idx++) { 3382 if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_hdsp_9632_controls[idx], hdsp))) < 0) 3383 return err; 3384 } 3385 } 3386 3387 /* AEB control for H96xx card */ 3388 if (hdsp->io_type == H9632 || hdsp->io_type == H9652) { 3389 if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_hdsp_96xx_aeb, hdsp))) < 0) 3390 return err; 3391 } 3392 3393 return 0; 3394 } 3395 3396 /*------------------------------------------------------------ 3397 /proc interface 3398 ------------------------------------------------------------*/ 3399 3400 static void 3401 snd_hdsp_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer) 3402 { 3403 struct hdsp *hdsp = entry->private_data; 3404 unsigned int status; 3405 unsigned int status2; 3406 char *pref_sync_ref; 3407 char *autosync_ref; 3408 char *system_clock_mode; 3409 char *clock_source; 3410 int x; 3411 3412 status = hdsp_read(hdsp, HDSP_statusRegister); 3413 status2 = hdsp_read(hdsp, HDSP_status2Register); 3414 3415 snd_iprintf(buffer, "%s (Card #%d)\n", hdsp->card_name, 3416 hdsp->card->number + 1); 3417 snd_iprintf(buffer, "Buffers: capture %p playback %p\n", 3418 hdsp->capture_buffer, hdsp->playback_buffer); 3419 snd_iprintf(buffer, "IRQ: %d Registers bus: 0x%lx VM: 0x%lx\n", 3420 hdsp->irq, hdsp->port, (unsigned long)hdsp->iobase); 3421 snd_iprintf(buffer, "Control register: 0x%x\n", hdsp->control_register); 3422 snd_iprintf(buffer, "Control2 register: 0x%x\n", 3423 hdsp->control2_register); 3424 snd_iprintf(buffer, "Status register: 0x%x\n", status); 3425 snd_iprintf(buffer, "Status2 register: 0x%x\n", status2); 3426 3427 if (hdsp_check_for_iobox(hdsp)) { 3428 snd_iprintf(buffer, "No I/O box connected.\n" 3429 "Please connect one and upload firmware.\n"); 3430 return; 3431 } 3432 3433 if (hdsp_check_for_firmware(hdsp, 0)) { 3434 if (hdsp->state & HDSP_FirmwareCached) { 3435 if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) { 3436 snd_iprintf(buffer, "Firmware loading from " 3437 "cache failed, " 3438 "please upload manually.\n"); 3439 return; 3440 } 3441 } else { 3442 int err = -EINVAL; 3443 err = hdsp_request_fw_loader(hdsp); 3444 if (err < 0) { 3445 snd_iprintf(buffer, 3446 "No firmware loaded nor cached, " 3447 "please upload firmware.\n"); 3448 return; 3449 } 3450 } 3451 } 3452 3453 snd_iprintf(buffer, "FIFO status: %d\n", hdsp_read(hdsp, HDSP_fifoStatus) & 0xff); 3454 snd_iprintf(buffer, "MIDI1 Output status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusOut0)); 3455 snd_iprintf(buffer, "MIDI1 Input status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusIn0)); 3456 snd_iprintf(buffer, "MIDI2 Output status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusOut1)); 3457 snd_iprintf(buffer, "MIDI2 Input status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusIn1)); 3458 snd_iprintf(buffer, "Use Midi Tasklet: %s\n", hdsp->use_midi_tasklet ? "on" : "off"); 3459 3460 snd_iprintf(buffer, "\n"); 3461 3462 x = 1 << (6 + hdsp_decode_latency(hdsp->control_register & HDSP_LatencyMask)); 3463 3464 snd_iprintf(buffer, "Buffer Size (Latency): %d samples (2 periods of %lu bytes)\n", x, (unsigned long) hdsp->period_bytes); 3465 snd_iprintf(buffer, "Hardware pointer (frames): %ld\n", hdsp_hw_pointer(hdsp)); 3466 snd_iprintf(buffer, "Precise pointer: %s\n", hdsp->precise_ptr ? "on" : "off"); 3467 snd_iprintf(buffer, "Line out: %s\n", (hdsp->control_register & HDSP_LineOut) ? "on" : "off"); 3468 3469 snd_iprintf(buffer, "Firmware version: %d\n", (status2&HDSP_version0)|(status2&HDSP_version1)<<1|(status2&HDSP_version2)<<2); 3470 3471 snd_iprintf(buffer, "\n"); 3472 3473 switch (hdsp_clock_source(hdsp)) { 3474 case HDSP_CLOCK_SOURCE_AUTOSYNC: 3475 clock_source = "AutoSync"; 3476 break; 3477 case HDSP_CLOCK_SOURCE_INTERNAL_32KHZ: 3478 clock_source = "Internal 32 kHz"; 3479 break; 3480 case HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ: 3481 clock_source = "Internal 44.1 kHz"; 3482 break; 3483 case HDSP_CLOCK_SOURCE_INTERNAL_48KHZ: 3484 clock_source = "Internal 48 kHz"; 3485 break; 3486 case HDSP_CLOCK_SOURCE_INTERNAL_64KHZ: 3487 clock_source = "Internal 64 kHz"; 3488 break; 3489 case HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ: 3490 clock_source = "Internal 88.2 kHz"; 3491 break; 3492 case HDSP_CLOCK_SOURCE_INTERNAL_96KHZ: 3493 clock_source = "Internal 96 kHz"; 3494 break; 3495 case HDSP_CLOCK_SOURCE_INTERNAL_128KHZ: 3496 clock_source = "Internal 128 kHz"; 3497 break; 3498 case HDSP_CLOCK_SOURCE_INTERNAL_176_4KHZ: 3499 clock_source = "Internal 176.4 kHz"; 3500 break; 3501 case HDSP_CLOCK_SOURCE_INTERNAL_192KHZ: 3502 clock_source = "Internal 192 kHz"; 3503 break; 3504 default: 3505 clock_source = "Error"; 3506 } 3507 snd_iprintf (buffer, "Sample Clock Source: %s\n", clock_source); 3508 3509 if (hdsp_system_clock_mode(hdsp)) 3510 system_clock_mode = "Slave"; 3511 else 3512 system_clock_mode = "Master"; 3513 3514 switch (hdsp_pref_sync_ref (hdsp)) { 3515 case HDSP_SYNC_FROM_WORD: 3516 pref_sync_ref = "Word Clock"; 3517 break; 3518 case HDSP_SYNC_FROM_ADAT_SYNC: 3519 pref_sync_ref = "ADAT Sync"; 3520 break; 3521 case HDSP_SYNC_FROM_SPDIF: 3522 pref_sync_ref = "SPDIF"; 3523 break; 3524 case HDSP_SYNC_FROM_ADAT1: 3525 pref_sync_ref = "ADAT1"; 3526 break; 3527 case HDSP_SYNC_FROM_ADAT2: 3528 pref_sync_ref = "ADAT2"; 3529 break; 3530 case HDSP_SYNC_FROM_ADAT3: 3531 pref_sync_ref = "ADAT3"; 3532 break; 3533 default: 3534 pref_sync_ref = "Word Clock"; 3535 break; 3536 } 3537 snd_iprintf (buffer, "Preferred Sync Reference: %s\n", pref_sync_ref); 3538 3539 switch (hdsp_autosync_ref (hdsp)) { 3540 case HDSP_AUTOSYNC_FROM_WORD: 3541 autosync_ref = "Word Clock"; 3542 break; 3543 case HDSP_AUTOSYNC_FROM_ADAT_SYNC: 3544 autosync_ref = "ADAT Sync"; 3545 break; 3546 case HDSP_AUTOSYNC_FROM_SPDIF: 3547 autosync_ref = "SPDIF"; 3548 break; 3549 case HDSP_AUTOSYNC_FROM_NONE: 3550 autosync_ref = "None"; 3551 break; 3552 case HDSP_AUTOSYNC_FROM_ADAT1: 3553 autosync_ref = "ADAT1"; 3554 break; 3555 case HDSP_AUTOSYNC_FROM_ADAT2: 3556 autosync_ref = "ADAT2"; 3557 break; 3558 case HDSP_AUTOSYNC_FROM_ADAT3: 3559 autosync_ref = "ADAT3"; 3560 break; 3561 default: 3562 autosync_ref = "---"; 3563 break; 3564 } 3565 snd_iprintf (buffer, "AutoSync Reference: %s\n", autosync_ref); 3566 3567 snd_iprintf (buffer, "AutoSync Frequency: %d\n", hdsp_external_sample_rate(hdsp)); 3568 3569 snd_iprintf (buffer, "System Clock Mode: %s\n", system_clock_mode); 3570 3571 snd_iprintf (buffer, "System Clock Frequency: %d\n", hdsp->system_sample_rate); 3572 snd_iprintf (buffer, "System Clock Locked: %s\n", hdsp->clock_source_locked ? "Yes" : "No"); 3573 3574 snd_iprintf(buffer, "\n"); 3575 3576 if (hdsp->io_type != RPM) { 3577 switch (hdsp_spdif_in(hdsp)) { 3578 case HDSP_SPDIFIN_OPTICAL: 3579 snd_iprintf(buffer, "IEC958 input: Optical\n"); 3580 break; 3581 case HDSP_SPDIFIN_COAXIAL: 3582 snd_iprintf(buffer, "IEC958 input: Coaxial\n"); 3583 break; 3584 case HDSP_SPDIFIN_INTERNAL: 3585 snd_iprintf(buffer, "IEC958 input: Internal\n"); 3586 break; 3587 case HDSP_SPDIFIN_AES: 3588 snd_iprintf(buffer, "IEC958 input: AES\n"); 3589 break; 3590 default: 3591 snd_iprintf(buffer, "IEC958 input: ???\n"); 3592 break; 3593 } 3594 } 3595 3596 if (RPM == hdsp->io_type) { 3597 if (hdsp->control_register & HDSP_RPM_Bypass) 3598 snd_iprintf(buffer, "RPM Bypass: disabled\n"); 3599 else 3600 snd_iprintf(buffer, "RPM Bypass: enabled\n"); 3601 if (hdsp->control_register & HDSP_RPM_Disconnect) 3602 snd_iprintf(buffer, "RPM disconnected\n"); 3603 else 3604 snd_iprintf(buffer, "RPM connected\n"); 3605 3606 switch (hdsp->control_register & HDSP_RPM_Inp12) { 3607 case HDSP_RPM_Inp12_Phon_6dB: 3608 snd_iprintf(buffer, "Input 1/2: Phono, 6dB\n"); 3609 break; 3610 case HDSP_RPM_Inp12_Phon_0dB: 3611 snd_iprintf(buffer, "Input 1/2: Phono, 0dB\n"); 3612 break; 3613 case HDSP_RPM_Inp12_Phon_n6dB: 3614 snd_iprintf(buffer, "Input 1/2: Phono, -6dB\n"); 3615 break; 3616 case HDSP_RPM_Inp12_Line_0dB: 3617 snd_iprintf(buffer, "Input 1/2: Line, 0dB\n"); 3618 break; 3619 case HDSP_RPM_Inp12_Line_n6dB: 3620 snd_iprintf(buffer, "Input 1/2: Line, -6dB\n"); 3621 break; 3622 default: 3623 snd_iprintf(buffer, "Input 1/2: ???\n"); 3624 } 3625 3626 switch (hdsp->control_register & HDSP_RPM_Inp34) { 3627 case HDSP_RPM_Inp34_Phon_6dB: 3628 snd_iprintf(buffer, "Input 3/4: Phono, 6dB\n"); 3629 break; 3630 case HDSP_RPM_Inp34_Phon_0dB: 3631 snd_iprintf(buffer, "Input 3/4: Phono, 0dB\n"); 3632 break; 3633 case HDSP_RPM_Inp34_Phon_n6dB: 3634 snd_iprintf(buffer, "Input 3/4: Phono, -6dB\n"); 3635 break; 3636 case HDSP_RPM_Inp34_Line_0dB: 3637 snd_iprintf(buffer, "Input 3/4: Line, 0dB\n"); 3638 break; 3639 case HDSP_RPM_Inp34_Line_n6dB: 3640 snd_iprintf(buffer, "Input 3/4: Line, -6dB\n"); 3641 break; 3642 default: 3643 snd_iprintf(buffer, "Input 3/4: ???\n"); 3644 } 3645 3646 } else { 3647 if (hdsp->control_register & HDSP_SPDIFOpticalOut) 3648 snd_iprintf(buffer, "IEC958 output: Coaxial & ADAT1\n"); 3649 else 3650 snd_iprintf(buffer, "IEC958 output: Coaxial only\n"); 3651 3652 if (hdsp->control_register & HDSP_SPDIFProfessional) 3653 snd_iprintf(buffer, "IEC958 quality: Professional\n"); 3654 else 3655 snd_iprintf(buffer, "IEC958 quality: Consumer\n"); 3656 3657 if (hdsp->control_register & HDSP_SPDIFEmphasis) 3658 snd_iprintf(buffer, "IEC958 emphasis: on\n"); 3659 else 3660 snd_iprintf(buffer, "IEC958 emphasis: off\n"); 3661 3662 if (hdsp->control_register & HDSP_SPDIFNonAudio) 3663 snd_iprintf(buffer, "IEC958 NonAudio: on\n"); 3664 else 3665 snd_iprintf(buffer, "IEC958 NonAudio: off\n"); 3666 x = hdsp_spdif_sample_rate(hdsp); 3667 if (x != 0) 3668 snd_iprintf(buffer, "IEC958 sample rate: %d\n", x); 3669 else 3670 snd_iprintf(buffer, "IEC958 sample rate: Error flag set\n"); 3671 } 3672 snd_iprintf(buffer, "\n"); 3673 3674 /* Sync Check */ 3675 x = status & HDSP_Sync0; 3676 if (status & HDSP_Lock0) 3677 snd_iprintf(buffer, "ADAT1: %s\n", x ? "Sync" : "Lock"); 3678 else 3679 snd_iprintf(buffer, "ADAT1: No Lock\n"); 3680 3681 switch (hdsp->io_type) { 3682 case Digiface: 3683 case H9652: 3684 x = status & HDSP_Sync1; 3685 if (status & HDSP_Lock1) 3686 snd_iprintf(buffer, "ADAT2: %s\n", x ? "Sync" : "Lock"); 3687 else 3688 snd_iprintf(buffer, "ADAT2: No Lock\n"); 3689 x = status & HDSP_Sync2; 3690 if (status & HDSP_Lock2) 3691 snd_iprintf(buffer, "ADAT3: %s\n", x ? "Sync" : "Lock"); 3692 else 3693 snd_iprintf(buffer, "ADAT3: No Lock\n"); 3694 break; 3695 default: 3696 /* relax */ 3697 break; 3698 } 3699 3700 x = status & HDSP_SPDIFSync; 3701 if (status & HDSP_SPDIFErrorFlag) 3702 snd_iprintf (buffer, "SPDIF: No Lock\n"); 3703 else 3704 snd_iprintf (buffer, "SPDIF: %s\n", x ? "Sync" : "Lock"); 3705 3706 x = status2 & HDSP_wc_sync; 3707 if (status2 & HDSP_wc_lock) 3708 snd_iprintf (buffer, "Word Clock: %s\n", x ? "Sync" : "Lock"); 3709 else 3710 snd_iprintf (buffer, "Word Clock: No Lock\n"); 3711 3712 x = status & HDSP_TimecodeSync; 3713 if (status & HDSP_TimecodeLock) 3714 snd_iprintf(buffer, "ADAT Sync: %s\n", x ? "Sync" : "Lock"); 3715 else 3716 snd_iprintf(buffer, "ADAT Sync: No Lock\n"); 3717 3718 snd_iprintf(buffer, "\n"); 3719 3720 /* Informations about H9632 specific controls */ 3721 if (hdsp->io_type == H9632) { 3722 char *tmp; 3723 3724 switch (hdsp_ad_gain(hdsp)) { 3725 case 0: 3726 tmp = "-10 dBV"; 3727 break; 3728 case 1: 3729 tmp = "+4 dBu"; 3730 break; 3731 default: 3732 tmp = "Lo Gain"; 3733 break; 3734 } 3735 snd_iprintf(buffer, "AD Gain : %s\n", tmp); 3736 3737 switch (hdsp_da_gain(hdsp)) { 3738 case 0: 3739 tmp = "Hi Gain"; 3740 break; 3741 case 1: 3742 tmp = "+4 dBu"; 3743 break; 3744 default: 3745 tmp = "-10 dBV"; 3746 break; 3747 } 3748 snd_iprintf(buffer, "DA Gain : %s\n", tmp); 3749 3750 switch (hdsp_phone_gain(hdsp)) { 3751 case 0: 3752 tmp = "0 dB"; 3753 break; 3754 case 1: 3755 tmp = "-6 dB"; 3756 break; 3757 default: 3758 tmp = "-12 dB"; 3759 break; 3760 } 3761 snd_iprintf(buffer, "Phones Gain : %s\n", tmp); 3762 3763 snd_iprintf(buffer, "XLR Breakout Cable : %s\n", 3764 hdsp_toggle_setting(hdsp, HDSP_XLRBreakoutCable) ? 3765 "yes" : "no"); 3766 3767 if (hdsp->control_register & HDSP_AnalogExtensionBoard) 3768 snd_iprintf(buffer, "AEB : on (ADAT1 internal)\n"); 3769 else 3770 snd_iprintf(buffer, "AEB : off (ADAT1 external)\n"); 3771 snd_iprintf(buffer, "\n"); 3772 } 3773 3774 } 3775 3776 static void snd_hdsp_proc_init(struct hdsp *hdsp) 3777 { 3778 struct snd_info_entry *entry; 3779 3780 if (! snd_card_proc_new(hdsp->card, "hdsp", &entry)) 3781 snd_info_set_text_ops(entry, hdsp, snd_hdsp_proc_read); 3782 } 3783 3784 static void snd_hdsp_free_buffers(struct hdsp *hdsp) 3785 { 3786 snd_hammerfall_free_buffer(&hdsp->capture_dma_buf, hdsp->pci); 3787 snd_hammerfall_free_buffer(&hdsp->playback_dma_buf, hdsp->pci); 3788 } 3789 3790 static int snd_hdsp_initialize_memory(struct hdsp *hdsp) 3791 { 3792 unsigned long pb_bus, cb_bus; 3793 3794 if (snd_hammerfall_get_buffer(hdsp->pci, &hdsp->capture_dma_buf, HDSP_DMA_AREA_BYTES) < 0 || 3795 snd_hammerfall_get_buffer(hdsp->pci, &hdsp->playback_dma_buf, HDSP_DMA_AREA_BYTES) < 0) { 3796 if (hdsp->capture_dma_buf.area) 3797 snd_dma_free_pages(&hdsp->capture_dma_buf); 3798 dev_err(hdsp->card->dev, 3799 "%s: no buffers available\n", hdsp->card_name); 3800 return -ENOMEM; 3801 } 3802 3803 /* Align to bus-space 64K boundary */ 3804 3805 cb_bus = ALIGN(hdsp->capture_dma_buf.addr, 0x10000ul); 3806 pb_bus = ALIGN(hdsp->playback_dma_buf.addr, 0x10000ul); 3807 3808 /* Tell the card where it is */ 3809 3810 hdsp_write(hdsp, HDSP_inputBufferAddress, cb_bus); 3811 hdsp_write(hdsp, HDSP_outputBufferAddress, pb_bus); 3812 3813 hdsp->capture_buffer = hdsp->capture_dma_buf.area + (cb_bus - hdsp->capture_dma_buf.addr); 3814 hdsp->playback_buffer = hdsp->playback_dma_buf.area + (pb_bus - hdsp->playback_dma_buf.addr); 3815 3816 return 0; 3817 } 3818 3819 static int snd_hdsp_set_defaults(struct hdsp *hdsp) 3820 { 3821 unsigned int i; 3822 3823 /* ASSUMPTION: hdsp->lock is either held, or 3824 there is no need to hold it (e.g. during module 3825 initialization). 3826 */ 3827 3828 /* set defaults: 3829 3830 SPDIF Input via Coax 3831 Master clock mode 3832 maximum latency (7 => 2^7 = 8192 samples, 64Kbyte buffer, 3833 which implies 2 4096 sample, 32Kbyte periods). 3834 Enable line out. 3835 */ 3836 3837 hdsp->control_register = HDSP_ClockModeMaster | 3838 HDSP_SPDIFInputCoaxial | 3839 hdsp_encode_latency(7) | 3840 HDSP_LineOut; 3841 3842 3843 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 3844 3845 #ifdef SNDRV_BIG_ENDIAN 3846 hdsp->control2_register = HDSP_BIGENDIAN_MODE; 3847 #else 3848 hdsp->control2_register = 0; 3849 #endif 3850 if (hdsp->io_type == H9652) 3851 snd_hdsp_9652_enable_mixer (hdsp); 3852 else 3853 hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register); 3854 3855 hdsp_reset_hw_pointer(hdsp); 3856 hdsp_compute_period_size(hdsp); 3857 3858 /* silence everything */ 3859 3860 for (i = 0; i < HDSP_MATRIX_MIXER_SIZE; ++i) 3861 hdsp->mixer_matrix[i] = MINUS_INFINITY_GAIN; 3862 3863 for (i = 0; i < ((hdsp->io_type == H9652 || hdsp->io_type == H9632) ? 1352 : HDSP_MATRIX_MIXER_SIZE); ++i) { 3864 if (hdsp_write_gain (hdsp, i, MINUS_INFINITY_GAIN)) 3865 return -EIO; 3866 } 3867 3868 /* H9632 specific defaults */ 3869 if (hdsp->io_type == H9632) { 3870 hdsp->control_register |= (HDSP_DAGainPlus4dBu | HDSP_ADGainPlus4dBu | HDSP_PhoneGain0dB); 3871 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 3872 } 3873 3874 /* set a default rate so that the channel map is set up. 3875 */ 3876 3877 hdsp_set_rate(hdsp, 48000, 1); 3878 3879 return 0; 3880 } 3881 3882 static void hdsp_midi_tasklet(unsigned long arg) 3883 { 3884 struct hdsp *hdsp = (struct hdsp *)arg; 3885 3886 if (hdsp->midi[0].pending) 3887 snd_hdsp_midi_input_read (&hdsp->midi[0]); 3888 if (hdsp->midi[1].pending) 3889 snd_hdsp_midi_input_read (&hdsp->midi[1]); 3890 } 3891 3892 static irqreturn_t snd_hdsp_interrupt(int irq, void *dev_id) 3893 { 3894 struct hdsp *hdsp = (struct hdsp *) dev_id; 3895 unsigned int status; 3896 int audio; 3897 int midi0; 3898 int midi1; 3899 unsigned int midi0status; 3900 unsigned int midi1status; 3901 int schedule = 0; 3902 3903 status = hdsp_read(hdsp, HDSP_statusRegister); 3904 3905 audio = status & HDSP_audioIRQPending; 3906 midi0 = status & HDSP_midi0IRQPending; 3907 midi1 = status & HDSP_midi1IRQPending; 3908 3909 if (!audio && !midi0 && !midi1) 3910 return IRQ_NONE; 3911 3912 hdsp_write(hdsp, HDSP_interruptConfirmation, 0); 3913 3914 midi0status = hdsp_read (hdsp, HDSP_midiStatusIn0) & 0xff; 3915 midi1status = hdsp_read (hdsp, HDSP_midiStatusIn1) & 0xff; 3916 3917 if (!(hdsp->state & HDSP_InitializationComplete)) 3918 return IRQ_HANDLED; 3919 3920 if (audio) { 3921 if (hdsp->capture_substream) 3922 snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream); 3923 3924 if (hdsp->playback_substream) 3925 snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream); 3926 } 3927 3928 if (midi0 && midi0status) { 3929 if (hdsp->use_midi_tasklet) { 3930 /* we disable interrupts for this input until processing is done */ 3931 hdsp->control_register &= ~HDSP_Midi0InterruptEnable; 3932 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 3933 hdsp->midi[0].pending = 1; 3934 schedule = 1; 3935 } else { 3936 snd_hdsp_midi_input_read (&hdsp->midi[0]); 3937 } 3938 } 3939 if (hdsp->io_type != Multiface && hdsp->io_type != RPM && hdsp->io_type != H9632 && midi1 && midi1status) { 3940 if (hdsp->use_midi_tasklet) { 3941 /* we disable interrupts for this input until processing is done */ 3942 hdsp->control_register &= ~HDSP_Midi1InterruptEnable; 3943 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); 3944 hdsp->midi[1].pending = 1; 3945 schedule = 1; 3946 } else { 3947 snd_hdsp_midi_input_read (&hdsp->midi[1]); 3948 } 3949 } 3950 if (hdsp->use_midi_tasklet && schedule) 3951 tasklet_schedule(&hdsp->midi_tasklet); 3952 return IRQ_HANDLED; 3953 } 3954 3955 static snd_pcm_uframes_t snd_hdsp_hw_pointer(struct snd_pcm_substream *substream) 3956 { 3957 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 3958 return hdsp_hw_pointer(hdsp); 3959 } 3960 3961 static char *hdsp_channel_buffer_location(struct hdsp *hdsp, 3962 int stream, 3963 int channel) 3964 3965 { 3966 int mapped_channel; 3967 3968 if (snd_BUG_ON(channel < 0 || channel >= hdsp->max_channels)) 3969 return NULL; 3970 3971 if ((mapped_channel = hdsp->channel_map[channel]) < 0) 3972 return NULL; 3973 3974 if (stream == SNDRV_PCM_STREAM_CAPTURE) 3975 return hdsp->capture_buffer + (mapped_channel * HDSP_CHANNEL_BUFFER_BYTES); 3976 else 3977 return hdsp->playback_buffer + (mapped_channel * HDSP_CHANNEL_BUFFER_BYTES); 3978 } 3979 3980 static int snd_hdsp_playback_copy(struct snd_pcm_substream *substream, int channel, 3981 snd_pcm_uframes_t pos, void __user *src, snd_pcm_uframes_t count) 3982 { 3983 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 3984 char *channel_buf; 3985 3986 if (snd_BUG_ON(pos + count > HDSP_CHANNEL_BUFFER_BYTES / 4)) 3987 return -EINVAL; 3988 3989 channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel); 3990 if (snd_BUG_ON(!channel_buf)) 3991 return -EIO; 3992 if (copy_from_user(channel_buf + pos * 4, src, count * 4)) 3993 return -EFAULT; 3994 return count; 3995 } 3996 3997 static int snd_hdsp_capture_copy(struct snd_pcm_substream *substream, int channel, 3998 snd_pcm_uframes_t pos, void __user *dst, snd_pcm_uframes_t count) 3999 { 4000 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 4001 char *channel_buf; 4002 4003 if (snd_BUG_ON(pos + count > HDSP_CHANNEL_BUFFER_BYTES / 4)) 4004 return -EINVAL; 4005 4006 channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel); 4007 if (snd_BUG_ON(!channel_buf)) 4008 return -EIO; 4009 if (copy_to_user(dst, channel_buf + pos * 4, count * 4)) 4010 return -EFAULT; 4011 return count; 4012 } 4013 4014 static int snd_hdsp_hw_silence(struct snd_pcm_substream *substream, int channel, 4015 snd_pcm_uframes_t pos, snd_pcm_uframes_t count) 4016 { 4017 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 4018 char *channel_buf; 4019 4020 channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel); 4021 if (snd_BUG_ON(!channel_buf)) 4022 return -EIO; 4023 memset(channel_buf + pos * 4, 0, count * 4); 4024 return count; 4025 } 4026 4027 static int snd_hdsp_reset(struct snd_pcm_substream *substream) 4028 { 4029 struct snd_pcm_runtime *runtime = substream->runtime; 4030 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 4031 struct snd_pcm_substream *other; 4032 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 4033 other = hdsp->capture_substream; 4034 else 4035 other = hdsp->playback_substream; 4036 if (hdsp->running) 4037 runtime->status->hw_ptr = hdsp_hw_pointer(hdsp); 4038 else 4039 runtime->status->hw_ptr = 0; 4040 if (other) { 4041 struct snd_pcm_substream *s; 4042 struct snd_pcm_runtime *oruntime = other->runtime; 4043 snd_pcm_group_for_each_entry(s, substream) { 4044 if (s == other) { 4045 oruntime->status->hw_ptr = runtime->status->hw_ptr; 4046 break; 4047 } 4048 } 4049 } 4050 return 0; 4051 } 4052 4053 static int snd_hdsp_hw_params(struct snd_pcm_substream *substream, 4054 struct snd_pcm_hw_params *params) 4055 { 4056 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 4057 int err; 4058 pid_t this_pid; 4059 pid_t other_pid; 4060 4061 if (hdsp_check_for_iobox (hdsp)) 4062 return -EIO; 4063 4064 if (hdsp_check_for_firmware(hdsp, 1)) 4065 return -EIO; 4066 4067 spin_lock_irq(&hdsp->lock); 4068 4069 if (substream->pstr->stream == SNDRV_PCM_STREAM_PLAYBACK) { 4070 hdsp->control_register &= ~(HDSP_SPDIFProfessional | HDSP_SPDIFNonAudio | HDSP_SPDIFEmphasis); 4071 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register |= hdsp->creg_spdif_stream); 4072 this_pid = hdsp->playback_pid; 4073 other_pid = hdsp->capture_pid; 4074 } else { 4075 this_pid = hdsp->capture_pid; 4076 other_pid = hdsp->playback_pid; 4077 } 4078 4079 if ((other_pid > 0) && (this_pid != other_pid)) { 4080 4081 /* The other stream is open, and not by the same 4082 task as this one. Make sure that the parameters 4083 that matter are the same. 4084 */ 4085 4086 if (params_rate(params) != hdsp->system_sample_rate) { 4087 spin_unlock_irq(&hdsp->lock); 4088 _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE); 4089 return -EBUSY; 4090 } 4091 4092 if (params_period_size(params) != hdsp->period_bytes / 4) { 4093 spin_unlock_irq(&hdsp->lock); 4094 _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE); 4095 return -EBUSY; 4096 } 4097 4098 /* We're fine. */ 4099 4100 spin_unlock_irq(&hdsp->lock); 4101 return 0; 4102 4103 } else { 4104 spin_unlock_irq(&hdsp->lock); 4105 } 4106 4107 /* how to make sure that the rate matches an externally-set one ? 4108 */ 4109 4110 spin_lock_irq(&hdsp->lock); 4111 if (! hdsp->clock_source_locked) { 4112 if ((err = hdsp_set_rate(hdsp, params_rate(params), 0)) < 0) { 4113 spin_unlock_irq(&hdsp->lock); 4114 _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE); 4115 return err; 4116 } 4117 } 4118 spin_unlock_irq(&hdsp->lock); 4119 4120 if ((err = hdsp_set_interrupt_interval(hdsp, params_period_size(params))) < 0) { 4121 _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE); 4122 return err; 4123 } 4124 4125 return 0; 4126 } 4127 4128 static int snd_hdsp_channel_info(struct snd_pcm_substream *substream, 4129 struct snd_pcm_channel_info *info) 4130 { 4131 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 4132 int mapped_channel; 4133 4134 if (snd_BUG_ON(info->channel >= hdsp->max_channels)) 4135 return -EINVAL; 4136 4137 if ((mapped_channel = hdsp->channel_map[info->channel]) < 0) 4138 return -EINVAL; 4139 4140 info->offset = mapped_channel * HDSP_CHANNEL_BUFFER_BYTES; 4141 info->first = 0; 4142 info->step = 32; 4143 return 0; 4144 } 4145 4146 static int snd_hdsp_ioctl(struct snd_pcm_substream *substream, 4147 unsigned int cmd, void *arg) 4148 { 4149 switch (cmd) { 4150 case SNDRV_PCM_IOCTL1_RESET: 4151 return snd_hdsp_reset(substream); 4152 case SNDRV_PCM_IOCTL1_CHANNEL_INFO: 4153 return snd_hdsp_channel_info(substream, arg); 4154 default: 4155 break; 4156 } 4157 4158 return snd_pcm_lib_ioctl(substream, cmd, arg); 4159 } 4160 4161 static int snd_hdsp_trigger(struct snd_pcm_substream *substream, int cmd) 4162 { 4163 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 4164 struct snd_pcm_substream *other; 4165 int running; 4166 4167 if (hdsp_check_for_iobox (hdsp)) 4168 return -EIO; 4169 4170 if (hdsp_check_for_firmware(hdsp, 0)) /* no auto-loading in trigger */ 4171 return -EIO; 4172 4173 spin_lock(&hdsp->lock); 4174 running = hdsp->running; 4175 switch (cmd) { 4176 case SNDRV_PCM_TRIGGER_START: 4177 running |= 1 << substream->stream; 4178 break; 4179 case SNDRV_PCM_TRIGGER_STOP: 4180 running &= ~(1 << substream->stream); 4181 break; 4182 default: 4183 snd_BUG(); 4184 spin_unlock(&hdsp->lock); 4185 return -EINVAL; 4186 } 4187 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 4188 other = hdsp->capture_substream; 4189 else 4190 other = hdsp->playback_substream; 4191 4192 if (other) { 4193 struct snd_pcm_substream *s; 4194 snd_pcm_group_for_each_entry(s, substream) { 4195 if (s == other) { 4196 snd_pcm_trigger_done(s, substream); 4197 if (cmd == SNDRV_PCM_TRIGGER_START) 4198 running |= 1 << s->stream; 4199 else 4200 running &= ~(1 << s->stream); 4201 goto _ok; 4202 } 4203 } 4204 if (cmd == SNDRV_PCM_TRIGGER_START) { 4205 if (!(running & (1 << SNDRV_PCM_STREAM_PLAYBACK)) && 4206 substream->stream == SNDRV_PCM_STREAM_CAPTURE) 4207 hdsp_silence_playback(hdsp); 4208 } else { 4209 if (running && 4210 substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 4211 hdsp_silence_playback(hdsp); 4212 } 4213 } else { 4214 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) 4215 hdsp_silence_playback(hdsp); 4216 } 4217 _ok: 4218 snd_pcm_trigger_done(substream, substream); 4219 if (!hdsp->running && running) 4220 hdsp_start_audio(hdsp); 4221 else if (hdsp->running && !running) 4222 hdsp_stop_audio(hdsp); 4223 hdsp->running = running; 4224 spin_unlock(&hdsp->lock); 4225 4226 return 0; 4227 } 4228 4229 static int snd_hdsp_prepare(struct snd_pcm_substream *substream) 4230 { 4231 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 4232 int result = 0; 4233 4234 if (hdsp_check_for_iobox (hdsp)) 4235 return -EIO; 4236 4237 if (hdsp_check_for_firmware(hdsp, 1)) 4238 return -EIO; 4239 4240 spin_lock_irq(&hdsp->lock); 4241 if (!hdsp->running) 4242 hdsp_reset_hw_pointer(hdsp); 4243 spin_unlock_irq(&hdsp->lock); 4244 return result; 4245 } 4246 4247 static struct snd_pcm_hardware snd_hdsp_playback_subinfo = 4248 { 4249 .info = (SNDRV_PCM_INFO_MMAP | 4250 SNDRV_PCM_INFO_MMAP_VALID | 4251 SNDRV_PCM_INFO_NONINTERLEAVED | 4252 SNDRV_PCM_INFO_SYNC_START | 4253 SNDRV_PCM_INFO_DOUBLE), 4254 #ifdef SNDRV_BIG_ENDIAN 4255 .formats = SNDRV_PCM_FMTBIT_S32_BE, 4256 #else 4257 .formats = SNDRV_PCM_FMTBIT_S32_LE, 4258 #endif 4259 .rates = (SNDRV_PCM_RATE_32000 | 4260 SNDRV_PCM_RATE_44100 | 4261 SNDRV_PCM_RATE_48000 | 4262 SNDRV_PCM_RATE_64000 | 4263 SNDRV_PCM_RATE_88200 | 4264 SNDRV_PCM_RATE_96000), 4265 .rate_min = 32000, 4266 .rate_max = 96000, 4267 .channels_min = 6, 4268 .channels_max = HDSP_MAX_CHANNELS, 4269 .buffer_bytes_max = HDSP_CHANNEL_BUFFER_BYTES * HDSP_MAX_CHANNELS, 4270 .period_bytes_min = (64 * 4) * 10, 4271 .period_bytes_max = (8192 * 4) * HDSP_MAX_CHANNELS, 4272 .periods_min = 2, 4273 .periods_max = 2, 4274 .fifo_size = 0 4275 }; 4276 4277 static struct snd_pcm_hardware snd_hdsp_capture_subinfo = 4278 { 4279 .info = (SNDRV_PCM_INFO_MMAP | 4280 SNDRV_PCM_INFO_MMAP_VALID | 4281 SNDRV_PCM_INFO_NONINTERLEAVED | 4282 SNDRV_PCM_INFO_SYNC_START), 4283 #ifdef SNDRV_BIG_ENDIAN 4284 .formats = SNDRV_PCM_FMTBIT_S32_BE, 4285 #else 4286 .formats = SNDRV_PCM_FMTBIT_S32_LE, 4287 #endif 4288 .rates = (SNDRV_PCM_RATE_32000 | 4289 SNDRV_PCM_RATE_44100 | 4290 SNDRV_PCM_RATE_48000 | 4291 SNDRV_PCM_RATE_64000 | 4292 SNDRV_PCM_RATE_88200 | 4293 SNDRV_PCM_RATE_96000), 4294 .rate_min = 32000, 4295 .rate_max = 96000, 4296 .channels_min = 5, 4297 .channels_max = HDSP_MAX_CHANNELS, 4298 .buffer_bytes_max = HDSP_CHANNEL_BUFFER_BYTES * HDSP_MAX_CHANNELS, 4299 .period_bytes_min = (64 * 4) * 10, 4300 .period_bytes_max = (8192 * 4) * HDSP_MAX_CHANNELS, 4301 .periods_min = 2, 4302 .periods_max = 2, 4303 .fifo_size = 0 4304 }; 4305 4306 static unsigned int hdsp_period_sizes[] = { 64, 128, 256, 512, 1024, 2048, 4096, 8192 }; 4307 4308 static struct snd_pcm_hw_constraint_list hdsp_hw_constraints_period_sizes = { 4309 .count = ARRAY_SIZE(hdsp_period_sizes), 4310 .list = hdsp_period_sizes, 4311 .mask = 0 4312 }; 4313 4314 static unsigned int hdsp_9632_sample_rates[] = { 32000, 44100, 48000, 64000, 88200, 96000, 128000, 176400, 192000 }; 4315 4316 static struct snd_pcm_hw_constraint_list hdsp_hw_constraints_9632_sample_rates = { 4317 .count = ARRAY_SIZE(hdsp_9632_sample_rates), 4318 .list = hdsp_9632_sample_rates, 4319 .mask = 0 4320 }; 4321 4322 static int snd_hdsp_hw_rule_in_channels(struct snd_pcm_hw_params *params, 4323 struct snd_pcm_hw_rule *rule) 4324 { 4325 struct hdsp *hdsp = rule->private; 4326 struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); 4327 if (hdsp->io_type == H9632) { 4328 unsigned int list[3]; 4329 list[0] = hdsp->qs_in_channels; 4330 list[1] = hdsp->ds_in_channels; 4331 list[2] = hdsp->ss_in_channels; 4332 return snd_interval_list(c, 3, list, 0); 4333 } else { 4334 unsigned int list[2]; 4335 list[0] = hdsp->ds_in_channels; 4336 list[1] = hdsp->ss_in_channels; 4337 return snd_interval_list(c, 2, list, 0); 4338 } 4339 } 4340 4341 static int snd_hdsp_hw_rule_out_channels(struct snd_pcm_hw_params *params, 4342 struct snd_pcm_hw_rule *rule) 4343 { 4344 unsigned int list[3]; 4345 struct hdsp *hdsp = rule->private; 4346 struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); 4347 if (hdsp->io_type == H9632) { 4348 list[0] = hdsp->qs_out_channels; 4349 list[1] = hdsp->ds_out_channels; 4350 list[2] = hdsp->ss_out_channels; 4351 return snd_interval_list(c, 3, list, 0); 4352 } else { 4353 list[0] = hdsp->ds_out_channels; 4354 list[1] = hdsp->ss_out_channels; 4355 } 4356 return snd_interval_list(c, 2, list, 0); 4357 } 4358 4359 static int snd_hdsp_hw_rule_in_channels_rate(struct snd_pcm_hw_params *params, 4360 struct snd_pcm_hw_rule *rule) 4361 { 4362 struct hdsp *hdsp = rule->private; 4363 struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); 4364 struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE); 4365 if (r->min > 96000 && hdsp->io_type == H9632) { 4366 struct snd_interval t = { 4367 .min = hdsp->qs_in_channels, 4368 .max = hdsp->qs_in_channels, 4369 .integer = 1, 4370 }; 4371 return snd_interval_refine(c, &t); 4372 } else if (r->min > 48000 && r->max <= 96000) { 4373 struct snd_interval t = { 4374 .min = hdsp->ds_in_channels, 4375 .max = hdsp->ds_in_channels, 4376 .integer = 1, 4377 }; 4378 return snd_interval_refine(c, &t); 4379 } else if (r->max < 64000) { 4380 struct snd_interval t = { 4381 .min = hdsp->ss_in_channels, 4382 .max = hdsp->ss_in_channels, 4383 .integer = 1, 4384 }; 4385 return snd_interval_refine(c, &t); 4386 } 4387 return 0; 4388 } 4389 4390 static int snd_hdsp_hw_rule_out_channels_rate(struct snd_pcm_hw_params *params, 4391 struct snd_pcm_hw_rule *rule) 4392 { 4393 struct hdsp *hdsp = rule->private; 4394 struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); 4395 struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE); 4396 if (r->min > 96000 && hdsp->io_type == H9632) { 4397 struct snd_interval t = { 4398 .min = hdsp->qs_out_channels, 4399 .max = hdsp->qs_out_channels, 4400 .integer = 1, 4401 }; 4402 return snd_interval_refine(c, &t); 4403 } else if (r->min > 48000 && r->max <= 96000) { 4404 struct snd_interval t = { 4405 .min = hdsp->ds_out_channels, 4406 .max = hdsp->ds_out_channels, 4407 .integer = 1, 4408 }; 4409 return snd_interval_refine(c, &t); 4410 } else if (r->max < 64000) { 4411 struct snd_interval t = { 4412 .min = hdsp->ss_out_channels, 4413 .max = hdsp->ss_out_channels, 4414 .integer = 1, 4415 }; 4416 return snd_interval_refine(c, &t); 4417 } 4418 return 0; 4419 } 4420 4421 static int snd_hdsp_hw_rule_rate_out_channels(struct snd_pcm_hw_params *params, 4422 struct snd_pcm_hw_rule *rule) 4423 { 4424 struct hdsp *hdsp = rule->private; 4425 struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); 4426 struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE); 4427 if (c->min >= hdsp->ss_out_channels) { 4428 struct snd_interval t = { 4429 .min = 32000, 4430 .max = 48000, 4431 .integer = 1, 4432 }; 4433 return snd_interval_refine(r, &t); 4434 } else if (c->max <= hdsp->qs_out_channels && hdsp->io_type == H9632) { 4435 struct snd_interval t = { 4436 .min = 128000, 4437 .max = 192000, 4438 .integer = 1, 4439 }; 4440 return snd_interval_refine(r, &t); 4441 } else if (c->max <= hdsp->ds_out_channels) { 4442 struct snd_interval t = { 4443 .min = 64000, 4444 .max = 96000, 4445 .integer = 1, 4446 }; 4447 return snd_interval_refine(r, &t); 4448 } 4449 return 0; 4450 } 4451 4452 static int snd_hdsp_hw_rule_rate_in_channels(struct snd_pcm_hw_params *params, 4453 struct snd_pcm_hw_rule *rule) 4454 { 4455 struct hdsp *hdsp = rule->private; 4456 struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); 4457 struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE); 4458 if (c->min >= hdsp->ss_in_channels) { 4459 struct snd_interval t = { 4460 .min = 32000, 4461 .max = 48000, 4462 .integer = 1, 4463 }; 4464 return snd_interval_refine(r, &t); 4465 } else if (c->max <= hdsp->qs_in_channels && hdsp->io_type == H9632) { 4466 struct snd_interval t = { 4467 .min = 128000, 4468 .max = 192000, 4469 .integer = 1, 4470 }; 4471 return snd_interval_refine(r, &t); 4472 } else if (c->max <= hdsp->ds_in_channels) { 4473 struct snd_interval t = { 4474 .min = 64000, 4475 .max = 96000, 4476 .integer = 1, 4477 }; 4478 return snd_interval_refine(r, &t); 4479 } 4480 return 0; 4481 } 4482 4483 static int snd_hdsp_playback_open(struct snd_pcm_substream *substream) 4484 { 4485 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 4486 struct snd_pcm_runtime *runtime = substream->runtime; 4487 4488 if (hdsp_check_for_iobox (hdsp)) 4489 return -EIO; 4490 4491 if (hdsp_check_for_firmware(hdsp, 1)) 4492 return -EIO; 4493 4494 spin_lock_irq(&hdsp->lock); 4495 4496 snd_pcm_set_sync(substream); 4497 4498 runtime->hw = snd_hdsp_playback_subinfo; 4499 runtime->dma_area = hdsp->playback_buffer; 4500 runtime->dma_bytes = HDSP_DMA_AREA_BYTES; 4501 4502 hdsp->playback_pid = current->pid; 4503 hdsp->playback_substream = substream; 4504 4505 spin_unlock_irq(&hdsp->lock); 4506 4507 snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24); 4508 snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hdsp_hw_constraints_period_sizes); 4509 if (hdsp->clock_source_locked) { 4510 runtime->hw.rate_min = runtime->hw.rate_max = hdsp->system_sample_rate; 4511 } else if (hdsp->io_type == H9632) { 4512 runtime->hw.rate_max = 192000; 4513 runtime->hw.rates = SNDRV_PCM_RATE_KNOT; 4514 snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hdsp_hw_constraints_9632_sample_rates); 4515 } 4516 if (hdsp->io_type == H9632) { 4517 runtime->hw.channels_min = hdsp->qs_out_channels; 4518 runtime->hw.channels_max = hdsp->ss_out_channels; 4519 } 4520 4521 snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, 4522 snd_hdsp_hw_rule_out_channels, hdsp, 4523 SNDRV_PCM_HW_PARAM_CHANNELS, -1); 4524 snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, 4525 snd_hdsp_hw_rule_out_channels_rate, hdsp, 4526 SNDRV_PCM_HW_PARAM_RATE, -1); 4527 snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, 4528 snd_hdsp_hw_rule_rate_out_channels, hdsp, 4529 SNDRV_PCM_HW_PARAM_CHANNELS, -1); 4530 4531 if (RPM != hdsp->io_type) { 4532 hdsp->creg_spdif_stream = hdsp->creg_spdif; 4533 hdsp->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; 4534 snd_ctl_notify(hdsp->card, SNDRV_CTL_EVENT_MASK_VALUE | 4535 SNDRV_CTL_EVENT_MASK_INFO, &hdsp->spdif_ctl->id); 4536 } 4537 return 0; 4538 } 4539 4540 static int snd_hdsp_playback_release(struct snd_pcm_substream *substream) 4541 { 4542 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 4543 4544 spin_lock_irq(&hdsp->lock); 4545 4546 hdsp->playback_pid = -1; 4547 hdsp->playback_substream = NULL; 4548 4549 spin_unlock_irq(&hdsp->lock); 4550 4551 if (RPM != hdsp->io_type) { 4552 hdsp->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; 4553 snd_ctl_notify(hdsp->card, SNDRV_CTL_EVENT_MASK_VALUE | 4554 SNDRV_CTL_EVENT_MASK_INFO, &hdsp->spdif_ctl->id); 4555 } 4556 return 0; 4557 } 4558 4559 4560 static int snd_hdsp_capture_open(struct snd_pcm_substream *substream) 4561 { 4562 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 4563 struct snd_pcm_runtime *runtime = substream->runtime; 4564 4565 if (hdsp_check_for_iobox (hdsp)) 4566 return -EIO; 4567 4568 if (hdsp_check_for_firmware(hdsp, 1)) 4569 return -EIO; 4570 4571 spin_lock_irq(&hdsp->lock); 4572 4573 snd_pcm_set_sync(substream); 4574 4575 runtime->hw = snd_hdsp_capture_subinfo; 4576 runtime->dma_area = hdsp->capture_buffer; 4577 runtime->dma_bytes = HDSP_DMA_AREA_BYTES; 4578 4579 hdsp->capture_pid = current->pid; 4580 hdsp->capture_substream = substream; 4581 4582 spin_unlock_irq(&hdsp->lock); 4583 4584 snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24); 4585 snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hdsp_hw_constraints_period_sizes); 4586 if (hdsp->io_type == H9632) { 4587 runtime->hw.channels_min = hdsp->qs_in_channels; 4588 runtime->hw.channels_max = hdsp->ss_in_channels; 4589 runtime->hw.rate_max = 192000; 4590 runtime->hw.rates = SNDRV_PCM_RATE_KNOT; 4591 snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hdsp_hw_constraints_9632_sample_rates); 4592 } 4593 snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, 4594 snd_hdsp_hw_rule_in_channels, hdsp, 4595 SNDRV_PCM_HW_PARAM_CHANNELS, -1); 4596 snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, 4597 snd_hdsp_hw_rule_in_channels_rate, hdsp, 4598 SNDRV_PCM_HW_PARAM_RATE, -1); 4599 snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, 4600 snd_hdsp_hw_rule_rate_in_channels, hdsp, 4601 SNDRV_PCM_HW_PARAM_CHANNELS, -1); 4602 return 0; 4603 } 4604 4605 static int snd_hdsp_capture_release(struct snd_pcm_substream *substream) 4606 { 4607 struct hdsp *hdsp = snd_pcm_substream_chip(substream); 4608 4609 spin_lock_irq(&hdsp->lock); 4610 4611 hdsp->capture_pid = -1; 4612 hdsp->capture_substream = NULL; 4613 4614 spin_unlock_irq(&hdsp->lock); 4615 return 0; 4616 } 4617 4618 /* helper functions for copying meter values */ 4619 static inline int copy_u32_le(void __user *dest, void __iomem *src) 4620 { 4621 u32 val = readl(src); 4622 return copy_to_user(dest, &val, 4); 4623 } 4624 4625 static inline int copy_u64_le(void __user *dest, void __iomem *src_low, void __iomem *src_high) 4626 { 4627 u32 rms_low, rms_high; 4628 u64 rms; 4629 rms_low = readl(src_low); 4630 rms_high = readl(src_high); 4631 rms = ((u64)rms_high << 32) | rms_low; 4632 return copy_to_user(dest, &rms, 8); 4633 } 4634 4635 static inline int copy_u48_le(void __user *dest, void __iomem *src_low, void __iomem *src_high) 4636 { 4637 u32 rms_low, rms_high; 4638 u64 rms; 4639 rms_low = readl(src_low) & 0xffffff00; 4640 rms_high = readl(src_high) & 0xffffff00; 4641 rms = ((u64)rms_high << 32) | rms_low; 4642 return copy_to_user(dest, &rms, 8); 4643 } 4644 4645 static int hdsp_9652_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms) 4646 { 4647 int doublespeed = 0; 4648 int i, j, channels, ofs; 4649 4650 if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DoubleSpeedStatus) 4651 doublespeed = 1; 4652 channels = doublespeed ? 14 : 26; 4653 for (i = 0, j = 0; i < 26; ++i) { 4654 if (doublespeed && (i & 4)) 4655 continue; 4656 ofs = HDSP_9652_peakBase - j * 4; 4657 if (copy_u32_le(&peak_rms->input_peaks[i], hdsp->iobase + ofs)) 4658 return -EFAULT; 4659 ofs -= channels * 4; 4660 if (copy_u32_le(&peak_rms->playback_peaks[i], hdsp->iobase + ofs)) 4661 return -EFAULT; 4662 ofs -= channels * 4; 4663 if (copy_u32_le(&peak_rms->output_peaks[i], hdsp->iobase + ofs)) 4664 return -EFAULT; 4665 ofs = HDSP_9652_rmsBase + j * 8; 4666 if (copy_u48_le(&peak_rms->input_rms[i], hdsp->iobase + ofs, 4667 hdsp->iobase + ofs + 4)) 4668 return -EFAULT; 4669 ofs += channels * 8; 4670 if (copy_u48_le(&peak_rms->playback_rms[i], hdsp->iobase + ofs, 4671 hdsp->iobase + ofs + 4)) 4672 return -EFAULT; 4673 ofs += channels * 8; 4674 if (copy_u48_le(&peak_rms->output_rms[i], hdsp->iobase + ofs, 4675 hdsp->iobase + ofs + 4)) 4676 return -EFAULT; 4677 j++; 4678 } 4679 return 0; 4680 } 4681 4682 static int hdsp_9632_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms) 4683 { 4684 int i, j; 4685 struct hdsp_9632_meters __iomem *m; 4686 int doublespeed = 0; 4687 4688 if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DoubleSpeedStatus) 4689 doublespeed = 1; 4690 m = (struct hdsp_9632_meters __iomem *)(hdsp->iobase+HDSP_9632_metersBase); 4691 for (i = 0, j = 0; i < 16; ++i, ++j) { 4692 if (copy_u32_le(&peak_rms->input_peaks[i], &m->input_peak[j])) 4693 return -EFAULT; 4694 if (copy_u32_le(&peak_rms->playback_peaks[i], &m->playback_peak[j])) 4695 return -EFAULT; 4696 if (copy_u32_le(&peak_rms->output_peaks[i], &m->output_peak[j])) 4697 return -EFAULT; 4698 if (copy_u64_le(&peak_rms->input_rms[i], &m->input_rms_low[j], 4699 &m->input_rms_high[j])) 4700 return -EFAULT; 4701 if (copy_u64_le(&peak_rms->playback_rms[i], &m->playback_rms_low[j], 4702 &m->playback_rms_high[j])) 4703 return -EFAULT; 4704 if (copy_u64_le(&peak_rms->output_rms[i], &m->output_rms_low[j], 4705 &m->output_rms_high[j])) 4706 return -EFAULT; 4707 if (doublespeed && i == 3) i += 4; 4708 } 4709 return 0; 4710 } 4711 4712 static int hdsp_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms) 4713 { 4714 int i; 4715 4716 for (i = 0; i < 26; i++) { 4717 if (copy_u32_le(&peak_rms->playback_peaks[i], 4718 hdsp->iobase + HDSP_playbackPeakLevel + i * 4)) 4719 return -EFAULT; 4720 if (copy_u32_le(&peak_rms->input_peaks[i], 4721 hdsp->iobase + HDSP_inputPeakLevel + i * 4)) 4722 return -EFAULT; 4723 } 4724 for (i = 0; i < 28; i++) { 4725 if (copy_u32_le(&peak_rms->output_peaks[i], 4726 hdsp->iobase + HDSP_outputPeakLevel + i * 4)) 4727 return -EFAULT; 4728 } 4729 for (i = 0; i < 26; ++i) { 4730 if (copy_u64_le(&peak_rms->playback_rms[i], 4731 hdsp->iobase + HDSP_playbackRmsLevel + i * 8 + 4, 4732 hdsp->iobase + HDSP_playbackRmsLevel + i * 8)) 4733 return -EFAULT; 4734 if (copy_u64_le(&peak_rms->input_rms[i], 4735 hdsp->iobase + HDSP_inputRmsLevel + i * 8 + 4, 4736 hdsp->iobase + HDSP_inputRmsLevel + i * 8)) 4737 return -EFAULT; 4738 } 4739 return 0; 4740 } 4741 4742 static int snd_hdsp_hwdep_ioctl(struct snd_hwdep *hw, struct file *file, unsigned int cmd, unsigned long arg) 4743 { 4744 struct hdsp *hdsp = hw->private_data; 4745 void __user *argp = (void __user *)arg; 4746 int err; 4747 4748 switch (cmd) { 4749 case SNDRV_HDSP_IOCTL_GET_PEAK_RMS: { 4750 struct hdsp_peak_rms __user *peak_rms = (struct hdsp_peak_rms __user *)arg; 4751 4752 err = hdsp_check_for_iobox(hdsp); 4753 if (err < 0) 4754 return err; 4755 4756 err = hdsp_check_for_firmware(hdsp, 1); 4757 if (err < 0) 4758 return err; 4759 4760 if (!(hdsp->state & HDSP_FirmwareLoaded)) { 4761 dev_err(hdsp->card->dev, 4762 "firmware needs to be uploaded to the card.\n"); 4763 return -EINVAL; 4764 } 4765 4766 switch (hdsp->io_type) { 4767 case H9652: 4768 return hdsp_9652_get_peak(hdsp, peak_rms); 4769 case H9632: 4770 return hdsp_9632_get_peak(hdsp, peak_rms); 4771 default: 4772 return hdsp_get_peak(hdsp, peak_rms); 4773 } 4774 } 4775 case SNDRV_HDSP_IOCTL_GET_CONFIG_INFO: { 4776 struct hdsp_config_info info; 4777 unsigned long flags; 4778 int i; 4779 4780 err = hdsp_check_for_iobox(hdsp); 4781 if (err < 0) 4782 return err; 4783 4784 err = hdsp_check_for_firmware(hdsp, 1); 4785 if (err < 0) 4786 return err; 4787 4788 memset(&info, 0, sizeof(info)); 4789 spin_lock_irqsave(&hdsp->lock, flags); 4790 info.pref_sync_ref = (unsigned char)hdsp_pref_sync_ref(hdsp); 4791 info.wordclock_sync_check = (unsigned char)hdsp_wc_sync_check(hdsp); 4792 if (hdsp->io_type != H9632) 4793 info.adatsync_sync_check = (unsigned char)hdsp_adatsync_sync_check(hdsp); 4794 info.spdif_sync_check = (unsigned char)hdsp_spdif_sync_check(hdsp); 4795 for (i = 0; i < ((hdsp->io_type != Multiface && hdsp->io_type != RPM && hdsp->io_type != H9632) ? 3 : 1); ++i) 4796 info.adat_sync_check[i] = (unsigned char)hdsp_adat_sync_check(hdsp, i); 4797 info.spdif_in = (unsigned char)hdsp_spdif_in(hdsp); 4798 info.spdif_out = (unsigned char)hdsp_toggle_setting(hdsp, 4799 HDSP_SPDIFOpticalOut); 4800 info.spdif_professional = (unsigned char) 4801 hdsp_toggle_setting(hdsp, HDSP_SPDIFProfessional); 4802 info.spdif_emphasis = (unsigned char) 4803 hdsp_toggle_setting(hdsp, HDSP_SPDIFEmphasis); 4804 info.spdif_nonaudio = (unsigned char) 4805 hdsp_toggle_setting(hdsp, HDSP_SPDIFNonAudio); 4806 info.spdif_sample_rate = hdsp_spdif_sample_rate(hdsp); 4807 info.system_sample_rate = hdsp->system_sample_rate; 4808 info.autosync_sample_rate = hdsp_external_sample_rate(hdsp); 4809 info.system_clock_mode = (unsigned char)hdsp_system_clock_mode(hdsp); 4810 info.clock_source = (unsigned char)hdsp_clock_source(hdsp); 4811 info.autosync_ref = (unsigned char)hdsp_autosync_ref(hdsp); 4812 info.line_out = (unsigned char) 4813 hdsp_toggle_setting(hdsp, HDSP_LineOut); 4814 if (hdsp->io_type == H9632) { 4815 info.da_gain = (unsigned char)hdsp_da_gain(hdsp); 4816 info.ad_gain = (unsigned char)hdsp_ad_gain(hdsp); 4817 info.phone_gain = (unsigned char)hdsp_phone_gain(hdsp); 4818 info.xlr_breakout_cable = 4819 (unsigned char)hdsp_toggle_setting(hdsp, 4820 HDSP_XLRBreakoutCable); 4821 4822 } else if (hdsp->io_type == RPM) { 4823 info.da_gain = (unsigned char) hdsp_rpm_input12(hdsp); 4824 info.ad_gain = (unsigned char) hdsp_rpm_input34(hdsp); 4825 } 4826 if (hdsp->io_type == H9632 || hdsp->io_type == H9652) 4827 info.analog_extension_board = 4828 (unsigned char)hdsp_toggle_setting(hdsp, 4829 HDSP_AnalogExtensionBoard); 4830 spin_unlock_irqrestore(&hdsp->lock, flags); 4831 if (copy_to_user(argp, &info, sizeof(info))) 4832 return -EFAULT; 4833 break; 4834 } 4835 case SNDRV_HDSP_IOCTL_GET_9632_AEB: { 4836 struct hdsp_9632_aeb h9632_aeb; 4837 4838 if (hdsp->io_type != H9632) return -EINVAL; 4839 h9632_aeb.aebi = hdsp->ss_in_channels - H9632_SS_CHANNELS; 4840 h9632_aeb.aebo = hdsp->ss_out_channels - H9632_SS_CHANNELS; 4841 if (copy_to_user(argp, &h9632_aeb, sizeof(h9632_aeb))) 4842 return -EFAULT; 4843 break; 4844 } 4845 case SNDRV_HDSP_IOCTL_GET_VERSION: { 4846 struct hdsp_version hdsp_version; 4847 int err; 4848 4849 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL; 4850 if (hdsp->io_type == Undefined) { 4851 if ((err = hdsp_get_iobox_version(hdsp)) < 0) 4852 return err; 4853 } 4854 memset(&hdsp_version, 0, sizeof(hdsp_version)); 4855 hdsp_version.io_type = hdsp->io_type; 4856 hdsp_version.firmware_rev = hdsp->firmware_rev; 4857 if ((err = copy_to_user(argp, &hdsp_version, sizeof(hdsp_version)))) 4858 return -EFAULT; 4859 break; 4860 } 4861 case SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE: { 4862 struct hdsp_firmware __user *firmware; 4863 u32 __user *firmware_data; 4864 int err; 4865 4866 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL; 4867 /* SNDRV_HDSP_IOCTL_GET_VERSION must have been called */ 4868 if (hdsp->io_type == Undefined) return -EINVAL; 4869 4870 if (hdsp->state & (HDSP_FirmwareCached | HDSP_FirmwareLoaded)) 4871 return -EBUSY; 4872 4873 dev_info(hdsp->card->dev, 4874 "initializing firmware upload\n"); 4875 firmware = (struct hdsp_firmware __user *)argp; 4876 4877 if (get_user(firmware_data, &firmware->firmware_data)) 4878 return -EFAULT; 4879 4880 if (hdsp_check_for_iobox (hdsp)) 4881 return -EIO; 4882 4883 if (!hdsp->fw_uploaded) { 4884 hdsp->fw_uploaded = vmalloc(HDSP_FIRMWARE_SIZE); 4885 if (!hdsp->fw_uploaded) 4886 return -ENOMEM; 4887 } 4888 4889 if (copy_from_user(hdsp->fw_uploaded, firmware_data, 4890 HDSP_FIRMWARE_SIZE)) { 4891 vfree(hdsp->fw_uploaded); 4892 hdsp->fw_uploaded = NULL; 4893 return -EFAULT; 4894 } 4895 4896 hdsp->state |= HDSP_FirmwareCached; 4897 4898 if ((err = snd_hdsp_load_firmware_from_cache(hdsp)) < 0) 4899 return err; 4900 4901 if (!(hdsp->state & HDSP_InitializationComplete)) { 4902 if ((err = snd_hdsp_enable_io(hdsp)) < 0) 4903 return err; 4904 4905 snd_hdsp_initialize_channels(hdsp); 4906 snd_hdsp_initialize_midi_flush(hdsp); 4907 4908 if ((err = snd_hdsp_create_alsa_devices(hdsp->card, hdsp)) < 0) { 4909 dev_err(hdsp->card->dev, 4910 "error creating alsa devices\n"); 4911 return err; 4912 } 4913 } 4914 break; 4915 } 4916 case SNDRV_HDSP_IOCTL_GET_MIXER: { 4917 struct hdsp_mixer __user *mixer = (struct hdsp_mixer __user *)argp; 4918 if (copy_to_user(mixer->matrix, hdsp->mixer_matrix, sizeof(unsigned short)*HDSP_MATRIX_MIXER_SIZE)) 4919 return -EFAULT; 4920 break; 4921 } 4922 default: 4923 return -EINVAL; 4924 } 4925 return 0; 4926 } 4927 4928 static struct snd_pcm_ops snd_hdsp_playback_ops = { 4929 .open = snd_hdsp_playback_open, 4930 .close = snd_hdsp_playback_release, 4931 .ioctl = snd_hdsp_ioctl, 4932 .hw_params = snd_hdsp_hw_params, 4933 .prepare = snd_hdsp_prepare, 4934 .trigger = snd_hdsp_trigger, 4935 .pointer = snd_hdsp_hw_pointer, 4936 .copy = snd_hdsp_playback_copy, 4937 .silence = snd_hdsp_hw_silence, 4938 }; 4939 4940 static struct snd_pcm_ops snd_hdsp_capture_ops = { 4941 .open = snd_hdsp_capture_open, 4942 .close = snd_hdsp_capture_release, 4943 .ioctl = snd_hdsp_ioctl, 4944 .hw_params = snd_hdsp_hw_params, 4945 .prepare = snd_hdsp_prepare, 4946 .trigger = snd_hdsp_trigger, 4947 .pointer = snd_hdsp_hw_pointer, 4948 .copy = snd_hdsp_capture_copy, 4949 }; 4950 4951 static int snd_hdsp_create_hwdep(struct snd_card *card, struct hdsp *hdsp) 4952 { 4953 struct snd_hwdep *hw; 4954 int err; 4955 4956 if ((err = snd_hwdep_new(card, "HDSP hwdep", 0, &hw)) < 0) 4957 return err; 4958 4959 hdsp->hwdep = hw; 4960 hw->private_data = hdsp; 4961 strcpy(hw->name, "HDSP hwdep interface"); 4962 4963 hw->ops.ioctl = snd_hdsp_hwdep_ioctl; 4964 hw->ops.ioctl_compat = snd_hdsp_hwdep_ioctl; 4965 4966 return 0; 4967 } 4968 4969 static int snd_hdsp_create_pcm(struct snd_card *card, struct hdsp *hdsp) 4970 { 4971 struct snd_pcm *pcm; 4972 int err; 4973 4974 if ((err = snd_pcm_new(card, hdsp->card_name, 0, 1, 1, &pcm)) < 0) 4975 return err; 4976 4977 hdsp->pcm = pcm; 4978 pcm->private_data = hdsp; 4979 strcpy(pcm->name, hdsp->card_name); 4980 4981 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_hdsp_playback_ops); 4982 snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_hdsp_capture_ops); 4983 4984 pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX; 4985 4986 return 0; 4987 } 4988 4989 static void snd_hdsp_9652_enable_mixer (struct hdsp *hdsp) 4990 { 4991 hdsp->control2_register |= HDSP_9652_ENABLE_MIXER; 4992 hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register); 4993 } 4994 4995 static int snd_hdsp_enable_io (struct hdsp *hdsp) 4996 { 4997 int i; 4998 4999 if (hdsp_fifo_wait (hdsp, 0, 100)) { 5000 dev_err(hdsp->card->dev, 5001 "enable_io fifo_wait failed\n"); 5002 return -EIO; 5003 } 5004 5005 for (i = 0; i < hdsp->max_channels; ++i) { 5006 hdsp_write (hdsp, HDSP_inputEnable + (4 * i), 1); 5007 hdsp_write (hdsp, HDSP_outputEnable + (4 * i), 1); 5008 } 5009 5010 return 0; 5011 } 5012 5013 static void snd_hdsp_initialize_channels(struct hdsp *hdsp) 5014 { 5015 int status, aebi_channels, aebo_channels; 5016 5017 switch (hdsp->io_type) { 5018 case Digiface: 5019 hdsp->card_name = "RME Hammerfall DSP + Digiface"; 5020 hdsp->ss_in_channels = hdsp->ss_out_channels = DIGIFACE_SS_CHANNELS; 5021 hdsp->ds_in_channels = hdsp->ds_out_channels = DIGIFACE_DS_CHANNELS; 5022 break; 5023 5024 case H9652: 5025 hdsp->card_name = "RME Hammerfall HDSP 9652"; 5026 hdsp->ss_in_channels = hdsp->ss_out_channels = H9652_SS_CHANNELS; 5027 hdsp->ds_in_channels = hdsp->ds_out_channels = H9652_DS_CHANNELS; 5028 break; 5029 5030 case H9632: 5031 status = hdsp_read(hdsp, HDSP_statusRegister); 5032 /* HDSP_AEBx bits are low when AEB are connected */ 5033 aebi_channels = (status & HDSP_AEBI) ? 0 : 4; 5034 aebo_channels = (status & HDSP_AEBO) ? 0 : 4; 5035 hdsp->card_name = "RME Hammerfall HDSP 9632"; 5036 hdsp->ss_in_channels = H9632_SS_CHANNELS+aebi_channels; 5037 hdsp->ds_in_channels = H9632_DS_CHANNELS+aebi_channels; 5038 hdsp->qs_in_channels = H9632_QS_CHANNELS+aebi_channels; 5039 hdsp->ss_out_channels = H9632_SS_CHANNELS+aebo_channels; 5040 hdsp->ds_out_channels = H9632_DS_CHANNELS+aebo_channels; 5041 hdsp->qs_out_channels = H9632_QS_CHANNELS+aebo_channels; 5042 break; 5043 5044 case Multiface: 5045 hdsp->card_name = "RME Hammerfall DSP + Multiface"; 5046 hdsp->ss_in_channels = hdsp->ss_out_channels = MULTIFACE_SS_CHANNELS; 5047 hdsp->ds_in_channels = hdsp->ds_out_channels = MULTIFACE_DS_CHANNELS; 5048 break; 5049 5050 case RPM: 5051 hdsp->card_name = "RME Hammerfall DSP + RPM"; 5052 hdsp->ss_in_channels = RPM_CHANNELS-1; 5053 hdsp->ss_out_channels = RPM_CHANNELS; 5054 hdsp->ds_in_channels = RPM_CHANNELS-1; 5055 hdsp->ds_out_channels = RPM_CHANNELS; 5056 break; 5057 5058 default: 5059 /* should never get here */ 5060 break; 5061 } 5062 } 5063 5064 static void snd_hdsp_initialize_midi_flush (struct hdsp *hdsp) 5065 { 5066 snd_hdsp_flush_midi_input (hdsp, 0); 5067 snd_hdsp_flush_midi_input (hdsp, 1); 5068 } 5069 5070 static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp) 5071 { 5072 int err; 5073 5074 if ((err = snd_hdsp_create_pcm(card, hdsp)) < 0) { 5075 dev_err(card->dev, 5076 "Error creating pcm interface\n"); 5077 return err; 5078 } 5079 5080 5081 if ((err = snd_hdsp_create_midi(card, hdsp, 0)) < 0) { 5082 dev_err(card->dev, 5083 "Error creating first midi interface\n"); 5084 return err; 5085 } 5086 5087 if (hdsp->io_type == Digiface || hdsp->io_type == H9652) { 5088 if ((err = snd_hdsp_create_midi(card, hdsp, 1)) < 0) { 5089 dev_err(card->dev, 5090 "Error creating second midi interface\n"); 5091 return err; 5092 } 5093 } 5094 5095 if ((err = snd_hdsp_create_controls(card, hdsp)) < 0) { 5096 dev_err(card->dev, 5097 "Error creating ctl interface\n"); 5098 return err; 5099 } 5100 5101 snd_hdsp_proc_init(hdsp); 5102 5103 hdsp->system_sample_rate = -1; 5104 hdsp->playback_pid = -1; 5105 hdsp->capture_pid = -1; 5106 hdsp->capture_substream = NULL; 5107 hdsp->playback_substream = NULL; 5108 5109 if ((err = snd_hdsp_set_defaults(hdsp)) < 0) { 5110 dev_err(card->dev, 5111 "Error setting default values\n"); 5112 return err; 5113 } 5114 5115 if (!(hdsp->state & HDSP_InitializationComplete)) { 5116 strcpy(card->shortname, "Hammerfall DSP"); 5117 sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name, 5118 hdsp->port, hdsp->irq); 5119 5120 if ((err = snd_card_register(card)) < 0) { 5121 dev_err(card->dev, 5122 "error registering card\n"); 5123 return err; 5124 } 5125 hdsp->state |= HDSP_InitializationComplete; 5126 } 5127 5128 return 0; 5129 } 5130 5131 /* load firmware via hotplug fw loader */ 5132 static int hdsp_request_fw_loader(struct hdsp *hdsp) 5133 { 5134 const char *fwfile; 5135 const struct firmware *fw; 5136 int err; 5137 5138 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) 5139 return 0; 5140 if (hdsp->io_type == Undefined) { 5141 if ((err = hdsp_get_iobox_version(hdsp)) < 0) 5142 return err; 5143 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) 5144 return 0; 5145 } 5146 5147 /* caution: max length of firmware filename is 30! */ 5148 switch (hdsp->io_type) { 5149 case RPM: 5150 fwfile = "rpm_firmware.bin"; 5151 break; 5152 case Multiface: 5153 if (hdsp->firmware_rev == 0xa) 5154 fwfile = "multiface_firmware.bin"; 5155 else 5156 fwfile = "multiface_firmware_rev11.bin"; 5157 break; 5158 case Digiface: 5159 if (hdsp->firmware_rev == 0xa) 5160 fwfile = "digiface_firmware.bin"; 5161 else 5162 fwfile = "digiface_firmware_rev11.bin"; 5163 break; 5164 default: 5165 dev_err(hdsp->card->dev, 5166 "invalid io_type %d\n", hdsp->io_type); 5167 return -EINVAL; 5168 } 5169 5170 if (request_firmware(&fw, fwfile, &hdsp->pci->dev)) { 5171 dev_err(hdsp->card->dev, 5172 "cannot load firmware %s\n", fwfile); 5173 return -ENOENT; 5174 } 5175 if (fw->size < HDSP_FIRMWARE_SIZE) { 5176 dev_err(hdsp->card->dev, 5177 "too short firmware size %d (expected %d)\n", 5178 (int)fw->size, HDSP_FIRMWARE_SIZE); 5179 return -EINVAL; 5180 } 5181 5182 hdsp->firmware = fw; 5183 5184 hdsp->state |= HDSP_FirmwareCached; 5185 5186 if ((err = snd_hdsp_load_firmware_from_cache(hdsp)) < 0) 5187 return err; 5188 5189 if (!(hdsp->state & HDSP_InitializationComplete)) { 5190 if ((err = snd_hdsp_enable_io(hdsp)) < 0) 5191 return err; 5192 5193 if ((err = snd_hdsp_create_hwdep(hdsp->card, hdsp)) < 0) { 5194 dev_err(hdsp->card->dev, 5195 "error creating hwdep device\n"); 5196 return err; 5197 } 5198 snd_hdsp_initialize_channels(hdsp); 5199 snd_hdsp_initialize_midi_flush(hdsp); 5200 if ((err = snd_hdsp_create_alsa_devices(hdsp->card, hdsp)) < 0) { 5201 dev_err(hdsp->card->dev, 5202 "error creating alsa devices\n"); 5203 return err; 5204 } 5205 } 5206 return 0; 5207 } 5208 5209 static int snd_hdsp_create(struct snd_card *card, 5210 struct hdsp *hdsp) 5211 { 5212 struct pci_dev *pci = hdsp->pci; 5213 int err; 5214 int is_9652 = 0; 5215 int is_9632 = 0; 5216 5217 hdsp->irq = -1; 5218 hdsp->state = 0; 5219 hdsp->midi[0].rmidi = NULL; 5220 hdsp->midi[1].rmidi = NULL; 5221 hdsp->midi[0].input = NULL; 5222 hdsp->midi[1].input = NULL; 5223 hdsp->midi[0].output = NULL; 5224 hdsp->midi[1].output = NULL; 5225 hdsp->midi[0].pending = 0; 5226 hdsp->midi[1].pending = 0; 5227 spin_lock_init(&hdsp->midi[0].lock); 5228 spin_lock_init(&hdsp->midi[1].lock); 5229 hdsp->iobase = NULL; 5230 hdsp->control_register = 0; 5231 hdsp->control2_register = 0; 5232 hdsp->io_type = Undefined; 5233 hdsp->max_channels = 26; 5234 5235 hdsp->card = card; 5236 5237 spin_lock_init(&hdsp->lock); 5238 5239 tasklet_init(&hdsp->midi_tasklet, hdsp_midi_tasklet, (unsigned long)hdsp); 5240 5241 pci_read_config_word(hdsp->pci, PCI_CLASS_REVISION, &hdsp->firmware_rev); 5242 hdsp->firmware_rev &= 0xff; 5243 5244 /* From Martin Bjoernsen : 5245 "It is important that the card's latency timer register in 5246 the PCI configuration space is set to a value much larger 5247 than 0 by the computer's BIOS or the driver. 5248 The windows driver always sets this 8 bit register [...] 5249 to its maximum 255 to avoid problems with some computers." 5250 */ 5251 pci_write_config_byte(hdsp->pci, PCI_LATENCY_TIMER, 0xFF); 5252 5253 strcpy(card->driver, "H-DSP"); 5254 strcpy(card->mixername, "Xilinx FPGA"); 5255 5256 if (hdsp->firmware_rev < 0xa) 5257 return -ENODEV; 5258 else if (hdsp->firmware_rev < 0x64) 5259 hdsp->card_name = "RME Hammerfall DSP"; 5260 else if (hdsp->firmware_rev < 0x96) { 5261 hdsp->card_name = "RME HDSP 9652"; 5262 is_9652 = 1; 5263 } else { 5264 hdsp->card_name = "RME HDSP 9632"; 5265 hdsp->max_channels = 16; 5266 is_9632 = 1; 5267 } 5268 5269 if ((err = pci_enable_device(pci)) < 0) 5270 return err; 5271 5272 pci_set_master(hdsp->pci); 5273 5274 if ((err = pci_request_regions(pci, "hdsp")) < 0) 5275 return err; 5276 hdsp->port = pci_resource_start(pci, 0); 5277 if ((hdsp->iobase = ioremap_nocache(hdsp->port, HDSP_IO_EXTENT)) == NULL) { 5278 dev_err(hdsp->card->dev, "unable to remap region 0x%lx-0x%lx\n", 5279 hdsp->port, hdsp->port + HDSP_IO_EXTENT - 1); 5280 return -EBUSY; 5281 } 5282 5283 if (request_irq(pci->irq, snd_hdsp_interrupt, IRQF_SHARED, 5284 KBUILD_MODNAME, hdsp)) { 5285 dev_err(hdsp->card->dev, "unable to use IRQ %d\n", pci->irq); 5286 return -EBUSY; 5287 } 5288 5289 hdsp->irq = pci->irq; 5290 hdsp->precise_ptr = 0; 5291 hdsp->use_midi_tasklet = 1; 5292 hdsp->dds_value = 0; 5293 5294 if ((err = snd_hdsp_initialize_memory(hdsp)) < 0) 5295 return err; 5296 5297 if (!is_9652 && !is_9632) { 5298 /* we wait a maximum of 10 seconds to let freshly 5299 * inserted cardbus cards do their hardware init */ 5300 err = hdsp_wait_for_iobox(hdsp, 1000, 10); 5301 5302 if (err < 0) 5303 return err; 5304 5305 if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) { 5306 if ((err = hdsp_request_fw_loader(hdsp)) < 0) 5307 /* we don't fail as this can happen 5308 if userspace is not ready for 5309 firmware upload 5310 */ 5311 dev_err(hdsp->card->dev, 5312 "couldn't get firmware from userspace. try using hdsploader\n"); 5313 else 5314 /* init is complete, we return */ 5315 return 0; 5316 /* we defer initialization */ 5317 dev_info(hdsp->card->dev, 5318 "card initialization pending : waiting for firmware\n"); 5319 if ((err = snd_hdsp_create_hwdep(card, hdsp)) < 0) 5320 return err; 5321 return 0; 5322 } else { 5323 dev_info(hdsp->card->dev, 5324 "Firmware already present, initializing card.\n"); 5325 if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version2) 5326 hdsp->io_type = RPM; 5327 else if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1) 5328 hdsp->io_type = Multiface; 5329 else 5330 hdsp->io_type = Digiface; 5331 } 5332 } 5333 5334 if ((err = snd_hdsp_enable_io(hdsp)) != 0) 5335 return err; 5336 5337 if (is_9652) 5338 hdsp->io_type = H9652; 5339 5340 if (is_9632) 5341 hdsp->io_type = H9632; 5342 5343 if ((err = snd_hdsp_create_hwdep(card, hdsp)) < 0) 5344 return err; 5345 5346 snd_hdsp_initialize_channels(hdsp); 5347 snd_hdsp_initialize_midi_flush(hdsp); 5348 5349 hdsp->state |= HDSP_FirmwareLoaded; 5350 5351 if ((err = snd_hdsp_create_alsa_devices(card, hdsp)) < 0) 5352 return err; 5353 5354 return 0; 5355 } 5356 5357 static int snd_hdsp_free(struct hdsp *hdsp) 5358 { 5359 if (hdsp->port) { 5360 /* stop the audio, and cancel all interrupts */ 5361 tasklet_kill(&hdsp->midi_tasklet); 5362 hdsp->control_register &= ~(HDSP_Start|HDSP_AudioInterruptEnable|HDSP_Midi0InterruptEnable|HDSP_Midi1InterruptEnable); 5363 hdsp_write (hdsp, HDSP_controlRegister, hdsp->control_register); 5364 } 5365 5366 if (hdsp->irq >= 0) 5367 free_irq(hdsp->irq, (void *)hdsp); 5368 5369 snd_hdsp_free_buffers(hdsp); 5370 5371 if (hdsp->firmware) 5372 release_firmware(hdsp->firmware); 5373 vfree(hdsp->fw_uploaded); 5374 5375 if (hdsp->iobase) 5376 iounmap(hdsp->iobase); 5377 5378 if (hdsp->port) 5379 pci_release_regions(hdsp->pci); 5380 5381 pci_disable_device(hdsp->pci); 5382 return 0; 5383 } 5384 5385 static void snd_hdsp_card_free(struct snd_card *card) 5386 { 5387 struct hdsp *hdsp = card->private_data; 5388 5389 if (hdsp) 5390 snd_hdsp_free(hdsp); 5391 } 5392 5393 static int snd_hdsp_probe(struct pci_dev *pci, 5394 const struct pci_device_id *pci_id) 5395 { 5396 static int dev; 5397 struct hdsp *hdsp; 5398 struct snd_card *card; 5399 int err; 5400 5401 if (dev >= SNDRV_CARDS) 5402 return -ENODEV; 5403 if (!enable[dev]) { 5404 dev++; 5405 return -ENOENT; 5406 } 5407 5408 err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 5409 sizeof(struct hdsp), &card); 5410 if (err < 0) 5411 return err; 5412 5413 hdsp = card->private_data; 5414 card->private_free = snd_hdsp_card_free; 5415 hdsp->dev = dev; 5416 hdsp->pci = pci; 5417 5418 if ((err = snd_hdsp_create(card, hdsp)) < 0) { 5419 snd_card_free(card); 5420 return err; 5421 } 5422 5423 strcpy(card->shortname, "Hammerfall DSP"); 5424 sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name, 5425 hdsp->port, hdsp->irq); 5426 5427 if ((err = snd_card_register(card)) < 0) { 5428 snd_card_free(card); 5429 return err; 5430 } 5431 pci_set_drvdata(pci, card); 5432 dev++; 5433 return 0; 5434 } 5435 5436 static void snd_hdsp_remove(struct pci_dev *pci) 5437 { 5438 snd_card_free(pci_get_drvdata(pci)); 5439 } 5440 5441 static struct pci_driver hdsp_driver = { 5442 .name = KBUILD_MODNAME, 5443 .id_table = snd_hdsp_ids, 5444 .probe = snd_hdsp_probe, 5445 .remove = snd_hdsp_remove, 5446 }; 5447 5448 module_pci_driver(hdsp_driver); 5449