Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003  *   ALSA driver for RME Hammerfall DSP audio interface(s)
0004  *
0005  *      Copyright (c) 2002  Paul Davis
0006  *                          Marcus Andersson
0007  *                          Thomas Charbonnel
0008  */
0009 
0010 #include <linux/init.h>
0011 #include <linux/delay.h>
0012 #include <linux/interrupt.h>
0013 #include <linux/pci.h>
0014 #include <linux/firmware.h>
0015 #include <linux/module.h>
0016 #include <linux/math64.h>
0017 #include <linux/vmalloc.h>
0018 #include <linux/io.h>
0019 #include <linux/nospec.h>
0020 
0021 #include <sound/core.h>
0022 #include <sound/control.h>
0023 #include <sound/pcm.h>
0024 #include <sound/info.h>
0025 #include <sound/asoundef.h>
0026 #include <sound/rawmidi.h>
0027 #include <sound/hwdep.h>
0028 #include <sound/initval.h>
0029 #include <sound/hdsp.h>
0030 
0031 #include <asm/byteorder.h>
0032 #include <asm/current.h>
0033 
0034 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;  /* Index 0-MAX */
0035 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;   /* ID for this card */
0036 static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */
0037 
0038 module_param_array(index, int, NULL, 0444);
0039 MODULE_PARM_DESC(index, "Index value for RME Hammerfall DSP interface.");
0040 module_param_array(id, charp, NULL, 0444);
0041 MODULE_PARM_DESC(id, "ID string for RME Hammerfall DSP interface.");
0042 module_param_array(enable, bool, NULL, 0444);
0043 MODULE_PARM_DESC(enable, "Enable/disable specific Hammerfall DSP soundcards.");
0044 MODULE_AUTHOR("Paul Davis <paul@linuxaudiosystems.com>, Marcus Andersson, Thomas Charbonnel <thomas@undata.org>");
0045 MODULE_DESCRIPTION("RME Hammerfall DSP");
0046 MODULE_LICENSE("GPL");
0047 MODULE_FIRMWARE("rpm_firmware.bin");
0048 MODULE_FIRMWARE("multiface_firmware.bin");
0049 MODULE_FIRMWARE("multiface_firmware_rev11.bin");
0050 MODULE_FIRMWARE("digiface_firmware.bin");
0051 MODULE_FIRMWARE("digiface_firmware_rev11.bin");
0052 
0053 #define HDSP_MAX_CHANNELS        26
0054 #define HDSP_MAX_DS_CHANNELS     14
0055 #define HDSP_MAX_QS_CHANNELS     8
0056 #define DIGIFACE_SS_CHANNELS     26
0057 #define DIGIFACE_DS_CHANNELS     14
0058 #define MULTIFACE_SS_CHANNELS    18
0059 #define MULTIFACE_DS_CHANNELS    14
0060 #define H9652_SS_CHANNELS        26
0061 #define H9652_DS_CHANNELS        14
0062 /* This does not include possible Analog Extension Boards
0063    AEBs are detected at card initialization
0064 */
0065 #define H9632_SS_CHANNELS    12
0066 #define H9632_DS_CHANNELS    8
0067 #define H9632_QS_CHANNELS    4
0068 #define RPM_CHANNELS             6
0069 
0070 /* Write registers. These are defined as byte-offsets from the iobase value.
0071  */
0072 #define HDSP_resetPointer               0
0073 #define HDSP_freqReg            0
0074 #define HDSP_outputBufferAddress    32
0075 #define HDSP_inputBufferAddress     36
0076 #define HDSP_controlRegister        64
0077 #define HDSP_interruptConfirmation  96
0078 #define HDSP_outputEnable       128
0079 #define HDSP_control2Reg        256
0080 #define HDSP_midiDataOut0       352
0081 #define HDSP_midiDataOut1       356
0082 #define HDSP_fifoData           368
0083 #define HDSP_inputEnable        384
0084 
0085 /* Read registers. These are defined as byte-offsets from the iobase value
0086  */
0087 
0088 #define HDSP_statusRegister    0
0089 #define HDSP_timecode        128
0090 #define HDSP_status2Register 192
0091 #define HDSP_midiDataIn0     360
0092 #define HDSP_midiDataIn1     364
0093 #define HDSP_midiStatusOut0  384
0094 #define HDSP_midiStatusOut1  388
0095 #define HDSP_midiStatusIn0   392
0096 #define HDSP_midiStatusIn1   396
0097 #define HDSP_fifoStatus      400
0098 
0099 /* the meters are regular i/o-mapped registers, but offset
0100    considerably from the rest. the peak registers are reset
0101    when read; the least-significant 4 bits are full-scale counters;
0102    the actual peak value is in the most-significant 24 bits.
0103 */
0104 
0105 #define HDSP_playbackPeakLevel  4096  /* 26 * 32 bit values */
0106 #define HDSP_inputPeakLevel     4224  /* 26 * 32 bit values */
0107 #define HDSP_outputPeakLevel    4352  /* (26+2) * 32 bit values */
0108 #define HDSP_playbackRmsLevel   4612  /* 26 * 64 bit values */
0109 #define HDSP_inputRmsLevel      4868  /* 26 * 64 bit values */
0110 
0111 
0112 /* This is for H9652 cards
0113    Peak values are read downward from the base
0114    Rms values are read upward
0115    There are rms values for the outputs too
0116    26*3 values are read in ss mode
0117    14*3 in ds mode, with no gap between values
0118 */
0119 #define HDSP_9652_peakBase  7164
0120 #define HDSP_9652_rmsBase   4096
0121 
0122 /* c.f. the hdsp_9632_meters_t struct */
0123 #define HDSP_9632_metersBase    4096
0124 
0125 #define HDSP_IO_EXTENT     7168
0126 
0127 /* control2 register bits */
0128 
0129 #define HDSP_TMS                0x01
0130 #define HDSP_TCK                0x02
0131 #define HDSP_TDI                0x04
0132 #define HDSP_JTAG               0x08
0133 #define HDSP_PWDN               0x10
0134 #define HDSP_PROGRAM            0x020
0135 #define HDSP_CONFIG_MODE_0  0x040
0136 #define HDSP_CONFIG_MODE_1  0x080
0137 #define HDSP_VERSION_BIT    (0x100 | HDSP_S_LOAD)
0138 #define HDSP_BIGENDIAN_MODE     0x200
0139 #define HDSP_RD_MULTIPLE        0x400
0140 #define HDSP_9652_ENABLE_MIXER  0x800
0141 #define HDSP_S200       0x800
0142 #define HDSP_S300       (0x100 | HDSP_S200) /* dummy, purpose of 0x100 unknown */
0143 #define HDSP_CYCLIC_MODE    0x1000
0144 #define HDSP_TDO                0x10000000
0145 
0146 #define HDSP_S_PROGRAM      (HDSP_CYCLIC_MODE|HDSP_PROGRAM|HDSP_CONFIG_MODE_0)
0147 #define HDSP_S_LOAD     (HDSP_CYCLIC_MODE|HDSP_PROGRAM|HDSP_CONFIG_MODE_1)
0148 
0149 /* Control Register bits */
0150 
0151 #define HDSP_Start                (1<<0)  /* start engine */
0152 #define HDSP_Latency0             (1<<1)  /* buffer size = 2^n where n is defined by Latency{2,1,0} */
0153 #define HDSP_Latency1             (1<<2)  /* [ see above ] */
0154 #define HDSP_Latency2             (1<<3)  /* [ see above ] */
0155 #define HDSP_ClockModeMaster      (1<<4)  /* 1=Master, 0=Slave/Autosync */
0156 #define HDSP_AudioInterruptEnable (1<<5)  /* what do you think ? */
0157 #define HDSP_Frequency0           (1<<6)  /* 0=44.1kHz/88.2kHz/176.4kHz 1=48kHz/96kHz/192kHz */
0158 #define HDSP_Frequency1           (1<<7)  /* 0=32kHz/64kHz/128kHz */
0159 #define HDSP_DoubleSpeed          (1<<8)  /* 0=normal speed, 1=double speed */
0160 #define HDSP_SPDIFProfessional    (1<<9)  /* 0=consumer, 1=professional */
0161 #define HDSP_SPDIFEmphasis        (1<<10) /* 0=none, 1=on */
0162 #define HDSP_SPDIFNonAudio        (1<<11) /* 0=off, 1=on */
0163 #define HDSP_SPDIFOpticalOut      (1<<12) /* 1=use 1st ADAT connector for SPDIF, 0=do not */
0164 #define HDSP_SyncRef2             (1<<13)
0165 #define HDSP_SPDIFInputSelect0    (1<<14)
0166 #define HDSP_SPDIFInputSelect1    (1<<15)
0167 #define HDSP_SyncRef0             (1<<16)
0168 #define HDSP_SyncRef1             (1<<17)
0169 #define HDSP_AnalogExtensionBoard (1<<18) /* For H9632 cards */
0170 #define HDSP_XLRBreakoutCable     (1<<20) /* For H9632 cards */
0171 #define HDSP_Midi0InterruptEnable (1<<22)
0172 #define HDSP_Midi1InterruptEnable (1<<23)
0173 #define HDSP_LineOut              (1<<24)
0174 #define HDSP_ADGain0          (1<<25) /* From here : H9632 specific */
0175 #define HDSP_ADGain1          (1<<26)
0176 #define HDSP_DAGain0          (1<<27)
0177 #define HDSP_DAGain1          (1<<28)
0178 #define HDSP_PhoneGain0       (1<<29)
0179 #define HDSP_PhoneGain1       (1<<30)
0180 #define HDSP_QuadSpeed        (1<<31)
0181 
0182 /* RPM uses some of the registers for special purposes */
0183 #define HDSP_RPM_Inp12            0x04A00
0184 #define HDSP_RPM_Inp12_Phon_6dB   0x00800  /* Dolby */
0185 #define HDSP_RPM_Inp12_Phon_0dB   0x00000  /* .. */
0186 #define HDSP_RPM_Inp12_Phon_n6dB  0x04000  /* inp_0 */
0187 #define HDSP_RPM_Inp12_Line_0dB   0x04200  /* Dolby+PRO */
0188 #define HDSP_RPM_Inp12_Line_n6dB  0x00200  /* PRO */
0189 
0190 #define HDSP_RPM_Inp34            0x32000
0191 #define HDSP_RPM_Inp34_Phon_6dB   0x20000  /* SyncRef1 */
0192 #define HDSP_RPM_Inp34_Phon_0dB   0x00000  /* .. */
0193 #define HDSP_RPM_Inp34_Phon_n6dB  0x02000  /* SyncRef2 */
0194 #define HDSP_RPM_Inp34_Line_0dB   0x30000  /* SyncRef1+SyncRef0 */
0195 #define HDSP_RPM_Inp34_Line_n6dB  0x10000  /* SyncRef0 */
0196 
0197 #define HDSP_RPM_Bypass           0x01000
0198 
0199 #define HDSP_RPM_Disconnect       0x00001
0200 
0201 #define HDSP_ADGainMask       (HDSP_ADGain0|HDSP_ADGain1)
0202 #define HDSP_ADGainMinus10dBV  HDSP_ADGainMask
0203 #define HDSP_ADGainPlus4dBu   (HDSP_ADGain0)
0204 #define HDSP_ADGainLowGain     0
0205 
0206 #define HDSP_DAGainMask         (HDSP_DAGain0|HDSP_DAGain1)
0207 #define HDSP_DAGainHighGain      HDSP_DAGainMask
0208 #define HDSP_DAGainPlus4dBu     (HDSP_DAGain0)
0209 #define HDSP_DAGainMinus10dBV    0
0210 
0211 #define HDSP_PhoneGainMask      (HDSP_PhoneGain0|HDSP_PhoneGain1)
0212 #define HDSP_PhoneGain0dB        HDSP_PhoneGainMask
0213 #define HDSP_PhoneGainMinus6dB  (HDSP_PhoneGain0)
0214 #define HDSP_PhoneGainMinus12dB  0
0215 
0216 #define HDSP_LatencyMask    (HDSP_Latency0|HDSP_Latency1|HDSP_Latency2)
0217 #define HDSP_FrequencyMask  (HDSP_Frequency0|HDSP_Frequency1|HDSP_DoubleSpeed|HDSP_QuadSpeed)
0218 
0219 #define HDSP_SPDIFInputMask    (HDSP_SPDIFInputSelect0|HDSP_SPDIFInputSelect1)
0220 #define HDSP_SPDIFInputADAT1    0
0221 #define HDSP_SPDIFInputCoaxial (HDSP_SPDIFInputSelect0)
0222 #define HDSP_SPDIFInputCdrom   (HDSP_SPDIFInputSelect1)
0223 #define HDSP_SPDIFInputAES     (HDSP_SPDIFInputSelect0|HDSP_SPDIFInputSelect1)
0224 
0225 #define HDSP_SyncRefMask        (HDSP_SyncRef0|HDSP_SyncRef1|HDSP_SyncRef2)
0226 #define HDSP_SyncRef_ADAT1       0
0227 #define HDSP_SyncRef_ADAT2      (HDSP_SyncRef0)
0228 #define HDSP_SyncRef_ADAT3      (HDSP_SyncRef1)
0229 #define HDSP_SyncRef_SPDIF      (HDSP_SyncRef0|HDSP_SyncRef1)
0230 #define HDSP_SyncRef_WORD       (HDSP_SyncRef2)
0231 #define HDSP_SyncRef_ADAT_SYNC  (HDSP_SyncRef0|HDSP_SyncRef2)
0232 
0233 /* Sample Clock Sources */
0234 
0235 #define HDSP_CLOCK_SOURCE_AUTOSYNC           0
0236 #define HDSP_CLOCK_SOURCE_INTERNAL_32KHZ     1
0237 #define HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ   2
0238 #define HDSP_CLOCK_SOURCE_INTERNAL_48KHZ     3
0239 #define HDSP_CLOCK_SOURCE_INTERNAL_64KHZ     4
0240 #define HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ   5
0241 #define HDSP_CLOCK_SOURCE_INTERNAL_96KHZ     6
0242 #define HDSP_CLOCK_SOURCE_INTERNAL_128KHZ    7
0243 #define HDSP_CLOCK_SOURCE_INTERNAL_176_4KHZ  8
0244 #define HDSP_CLOCK_SOURCE_INTERNAL_192KHZ    9
0245 
0246 /* Preferred sync reference choices - used by "pref_sync_ref" control switch */
0247 
0248 #define HDSP_SYNC_FROM_WORD      0
0249 #define HDSP_SYNC_FROM_SPDIF     1
0250 #define HDSP_SYNC_FROM_ADAT1     2
0251 #define HDSP_SYNC_FROM_ADAT_SYNC 3
0252 #define HDSP_SYNC_FROM_ADAT2     4
0253 #define HDSP_SYNC_FROM_ADAT3     5
0254 
0255 /* SyncCheck status */
0256 
0257 #define HDSP_SYNC_CHECK_NO_LOCK 0
0258 #define HDSP_SYNC_CHECK_LOCK    1
0259 #define HDSP_SYNC_CHECK_SYNC    2
0260 
0261 /* AutoSync references - used by "autosync_ref" control switch */
0262 
0263 #define HDSP_AUTOSYNC_FROM_WORD      0
0264 #define HDSP_AUTOSYNC_FROM_ADAT_SYNC 1
0265 #define HDSP_AUTOSYNC_FROM_SPDIF     2
0266 #define HDSP_AUTOSYNC_FROM_NONE      3
0267 #define HDSP_AUTOSYNC_FROM_ADAT1     4
0268 #define HDSP_AUTOSYNC_FROM_ADAT2     5
0269 #define HDSP_AUTOSYNC_FROM_ADAT3     6
0270 
0271 /* Possible sources of S/PDIF input */
0272 
0273 #define HDSP_SPDIFIN_OPTICAL  0 /* optical  (ADAT1) */
0274 #define HDSP_SPDIFIN_COAXIAL  1 /* coaxial (RCA) */
0275 #define HDSP_SPDIFIN_INTERNAL 2 /* internal (CDROM) */
0276 #define HDSP_SPDIFIN_AES      3 /* xlr for H9632 (AES)*/
0277 
0278 #define HDSP_Frequency32KHz    HDSP_Frequency0
0279 #define HDSP_Frequency44_1KHz  HDSP_Frequency1
0280 #define HDSP_Frequency48KHz    (HDSP_Frequency1|HDSP_Frequency0)
0281 #define HDSP_Frequency64KHz    (HDSP_DoubleSpeed|HDSP_Frequency0)
0282 #define HDSP_Frequency88_2KHz  (HDSP_DoubleSpeed|HDSP_Frequency1)
0283 #define HDSP_Frequency96KHz    (HDSP_DoubleSpeed|HDSP_Frequency1|HDSP_Frequency0)
0284 /* For H9632 cards */
0285 #define HDSP_Frequency128KHz   (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency0)
0286 #define HDSP_Frequency176_4KHz (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency1)
0287 #define HDSP_Frequency192KHz   (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency1|HDSP_Frequency0)
0288 /* RME says n = 104857600000000, but in the windows MADI driver, I see:
0289     return 104857600000000 / rate; // 100 MHz
0290     return 110100480000000 / rate; // 105 MHz
0291 */
0292 #define DDS_NUMERATOR 104857600000000ULL  /*  =  2^20 * 10^8 */
0293 
0294 #define hdsp_encode_latency(x)       (((x)<<1) & HDSP_LatencyMask)
0295 #define hdsp_decode_latency(x)       (((x) & HDSP_LatencyMask)>>1)
0296 
0297 #define hdsp_encode_spdif_in(x) (((x)&0x3)<<14)
0298 #define hdsp_decode_spdif_in(x) (((x)>>14)&0x3)
0299 
0300 /* Status Register bits */
0301 
0302 #define HDSP_audioIRQPending    (1<<0)
0303 #define HDSP_Lock2              (1<<1)     /* this is for Digiface and H9652 */
0304 #define HDSP_spdifFrequency3    HDSP_Lock2 /* this is for H9632 only */
0305 #define HDSP_Lock1              (1<<2)
0306 #define HDSP_Lock0              (1<<3)
0307 #define HDSP_SPDIFSync          (1<<4)
0308 #define HDSP_TimecodeLock       (1<<5)
0309 #define HDSP_BufferPositionMask 0x000FFC0 /* Bit 6..15 : h/w buffer pointer */
0310 #define HDSP_Sync2              (1<<16)
0311 #define HDSP_Sync1              (1<<17)
0312 #define HDSP_Sync0              (1<<18)
0313 #define HDSP_DoubleSpeedStatus  (1<<19)
0314 #define HDSP_ConfigError        (1<<20)
0315 #define HDSP_DllError           (1<<21)
0316 #define HDSP_spdifFrequency0    (1<<22)
0317 #define HDSP_spdifFrequency1    (1<<23)
0318 #define HDSP_spdifFrequency2    (1<<24)
0319 #define HDSP_SPDIFErrorFlag     (1<<25)
0320 #define HDSP_BufferID           (1<<26)
0321 #define HDSP_TimecodeSync       (1<<27)
0322 #define HDSP_AEBO           (1<<28) /* H9632 specific Analog Extension Boards */
0323 #define HDSP_AEBI       (1<<29) /* 0 = present, 1 = absent */
0324 #define HDSP_midi0IRQPending    (1<<30)
0325 #define HDSP_midi1IRQPending    (1<<31)
0326 
0327 #define HDSP_spdifFrequencyMask    (HDSP_spdifFrequency0|HDSP_spdifFrequency1|HDSP_spdifFrequency2)
0328 #define HDSP_spdifFrequencyMask_9632 (HDSP_spdifFrequency0|\
0329                       HDSP_spdifFrequency1|\
0330                       HDSP_spdifFrequency2|\
0331                       HDSP_spdifFrequency3)
0332 
0333 #define HDSP_spdifFrequency32KHz   (HDSP_spdifFrequency0)
0334 #define HDSP_spdifFrequency44_1KHz (HDSP_spdifFrequency1)
0335 #define HDSP_spdifFrequency48KHz   (HDSP_spdifFrequency0|HDSP_spdifFrequency1)
0336 
0337 #define HDSP_spdifFrequency64KHz   (HDSP_spdifFrequency2)
0338 #define HDSP_spdifFrequency88_2KHz (HDSP_spdifFrequency0|HDSP_spdifFrequency2)
0339 #define HDSP_spdifFrequency96KHz   (HDSP_spdifFrequency2|HDSP_spdifFrequency1)
0340 
0341 /* This is for H9632 cards */
0342 #define HDSP_spdifFrequency128KHz   (HDSP_spdifFrequency0|\
0343                      HDSP_spdifFrequency1|\
0344                      HDSP_spdifFrequency2)
0345 #define HDSP_spdifFrequency176_4KHz HDSP_spdifFrequency3
0346 #define HDSP_spdifFrequency192KHz   (HDSP_spdifFrequency3|HDSP_spdifFrequency0)
0347 
0348 /* Status2 Register bits */
0349 
0350 #define HDSP_version0     (1<<0)
0351 #define HDSP_version1     (1<<1)
0352 #define HDSP_version2     (1<<2)
0353 #define HDSP_wc_lock      (1<<3)
0354 #define HDSP_wc_sync      (1<<4)
0355 #define HDSP_inp_freq0    (1<<5)
0356 #define HDSP_inp_freq1    (1<<6)
0357 #define HDSP_inp_freq2    (1<<7)
0358 #define HDSP_SelSyncRef0  (1<<8)
0359 #define HDSP_SelSyncRef1  (1<<9)
0360 #define HDSP_SelSyncRef2  (1<<10)
0361 
0362 #define HDSP_wc_valid (HDSP_wc_lock|HDSP_wc_sync)
0363 
0364 #define HDSP_systemFrequencyMask (HDSP_inp_freq0|HDSP_inp_freq1|HDSP_inp_freq2)
0365 #define HDSP_systemFrequency32   (HDSP_inp_freq0)
0366 #define HDSP_systemFrequency44_1 (HDSP_inp_freq1)
0367 #define HDSP_systemFrequency48   (HDSP_inp_freq0|HDSP_inp_freq1)
0368 #define HDSP_systemFrequency64   (HDSP_inp_freq2)
0369 #define HDSP_systemFrequency88_2 (HDSP_inp_freq0|HDSP_inp_freq2)
0370 #define HDSP_systemFrequency96   (HDSP_inp_freq1|HDSP_inp_freq2)
0371 /* FIXME : more values for 9632 cards ? */
0372 
0373 #define HDSP_SelSyncRefMask        (HDSP_SelSyncRef0|HDSP_SelSyncRef1|HDSP_SelSyncRef2)
0374 #define HDSP_SelSyncRef_ADAT1      0
0375 #define HDSP_SelSyncRef_ADAT2      (HDSP_SelSyncRef0)
0376 #define HDSP_SelSyncRef_ADAT3      (HDSP_SelSyncRef1)
0377 #define HDSP_SelSyncRef_SPDIF      (HDSP_SelSyncRef0|HDSP_SelSyncRef1)
0378 #define HDSP_SelSyncRef_WORD       (HDSP_SelSyncRef2)
0379 #define HDSP_SelSyncRef_ADAT_SYNC  (HDSP_SelSyncRef0|HDSP_SelSyncRef2)
0380 
0381 /* Card state flags */
0382 
0383 #define HDSP_InitializationComplete  (1<<0)
0384 #define HDSP_FirmwareLoaded      (1<<1)
0385 #define HDSP_FirmwareCached      (1<<2)
0386 
0387 /* FIFO wait times, defined in terms of 1/10ths of msecs */
0388 
0389 #define HDSP_LONG_WAIT   5000
0390 #define HDSP_SHORT_WAIT  30
0391 
0392 #define UNITY_GAIN                       32768
0393 #define MINUS_INFINITY_GAIN              0
0394 
0395 /* the size of a substream (1 mono data stream) */
0396 
0397 #define HDSP_CHANNEL_BUFFER_SAMPLES  (16*1024)
0398 #define HDSP_CHANNEL_BUFFER_BYTES    (4*HDSP_CHANNEL_BUFFER_SAMPLES)
0399 
0400 /* the size of the area we need to allocate for DMA transfers. the
0401    size is the same regardless of the number of channels - the
0402    Multiface still uses the same memory area.
0403 
0404    Note that we allocate 1 more channel than is apparently needed
0405    because the h/w seems to write 1 byte beyond the end of the last
0406    page. Sigh.
0407 */
0408 
0409 #define HDSP_DMA_AREA_BYTES ((HDSP_MAX_CHANNELS+1) * HDSP_CHANNEL_BUFFER_BYTES)
0410 #define HDSP_DMA_AREA_KILOBYTES (HDSP_DMA_AREA_BYTES/1024)
0411 
0412 #define HDSP_FIRMWARE_SIZE  (24413 * 4)
0413 
0414 struct hdsp_9632_meters {
0415     u32 input_peak[16];
0416     u32 playback_peak[16];
0417     u32 output_peak[16];
0418     u32 xxx_peak[16];
0419     u32 padding[64];
0420     u32 input_rms_low[16];
0421     u32 playback_rms_low[16];
0422     u32 output_rms_low[16];
0423     u32 xxx_rms_low[16];
0424     u32 input_rms_high[16];
0425     u32 playback_rms_high[16];
0426     u32 output_rms_high[16];
0427     u32 xxx_rms_high[16];
0428 };
0429 
0430 struct hdsp_midi {
0431     struct hdsp             *hdsp;
0432     int                      id;
0433     struct snd_rawmidi           *rmidi;
0434     struct snd_rawmidi_substream *input;
0435     struct snd_rawmidi_substream *output;
0436     char                     istimer; /* timer in use */
0437     struct timer_list        timer;
0438     spinlock_t               lock;
0439     int              pending;
0440 };
0441 
0442 struct hdsp {
0443     spinlock_t            lock;
0444     struct snd_pcm_substream *capture_substream;
0445     struct snd_pcm_substream *playback_substream;
0446         struct hdsp_midi      midi[2];
0447     struct work_struct    midi_work;
0448     int           use_midi_work;
0449     int                   precise_ptr;
0450     u32                   control_register;      /* cached value */
0451     u32                   control2_register;     /* cached value */
0452     u32                   creg_spdif;
0453     u32                   creg_spdif_stream;
0454     int                   clock_source_locked;
0455     char                 *card_name;     /* digiface/multiface/rpm */
0456     enum HDSP_IO_Type     io_type;               /* ditto, but for code use */
0457         unsigned short        firmware_rev;
0458     unsigned short        state;             /* stores state bits */
0459     const struct firmware *firmware;
0460     u32                  *fw_uploaded;
0461     size_t                period_bytes;          /* guess what this is */
0462     unsigned char         max_channels;
0463     unsigned char         qs_in_channels;        /* quad speed mode for H9632 */
0464     unsigned char         ds_in_channels;
0465     unsigned char         ss_in_channels;       /* different for multiface/digiface */
0466     unsigned char         qs_out_channels;
0467     unsigned char         ds_out_channels;
0468     unsigned char         ss_out_channels;
0469     u32                   io_loopback;          /* output loopback channel states*/
0470 
0471     /* DMA buffers; those are copied instances from the original snd_dma_buf
0472      * objects (which are managed via devres) for the address alignments
0473      */
0474     struct snd_dma_buffer capture_dma_buf;
0475     struct snd_dma_buffer playback_dma_buf;
0476     unsigned char        *capture_buffer;       /* suitably aligned address */
0477     unsigned char        *playback_buffer;      /* suitably aligned address */
0478 
0479     pid_t                 capture_pid;
0480     pid_t                 playback_pid;
0481     int                   running;
0482     int                   system_sample_rate;
0483     const char           *channel_map;
0484     int                   dev;
0485     int                   irq;
0486     unsigned long         port;
0487         void __iomem         *iobase;
0488     struct snd_card *card;
0489     struct snd_pcm *pcm;
0490     struct snd_hwdep          *hwdep;
0491     struct pci_dev       *pci;
0492     struct snd_kcontrol *spdif_ctl;
0493         unsigned short        mixer_matrix[HDSP_MATRIX_MIXER_SIZE];
0494     unsigned int          dds_value; /* last value written to freq register */
0495 };
0496 
0497 /* These tables map the ALSA channels 1..N to the channels that we
0498    need to use in order to find the relevant channel buffer. RME
0499    refer to this kind of mapping as between "the ADAT channel and
0500    the DMA channel." We index it using the logical audio channel,
0501    and the value is the DMA channel (i.e. channel buffer number)
0502    where the data for that channel can be read/written from/to.
0503 */
0504 
0505 static const char channel_map_df_ss[HDSP_MAX_CHANNELS] = {
0506     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
0507     18, 19, 20, 21, 22, 23, 24, 25
0508 };
0509 
0510 static const char channel_map_mf_ss[HDSP_MAX_CHANNELS] = { /* Multiface */
0511     /* Analog */
0512     0, 1, 2, 3, 4, 5, 6, 7,
0513     /* ADAT 2 */
0514     16, 17, 18, 19, 20, 21, 22, 23,
0515     /* SPDIF */
0516     24, 25,
0517     -1, -1, -1, -1, -1, -1, -1, -1
0518 };
0519 
0520 static const char channel_map_ds[HDSP_MAX_CHANNELS] = {
0521     /* ADAT channels are remapped */
0522     1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23,
0523     /* channels 12 and 13 are S/PDIF */
0524     24, 25,
0525     /* others don't exist */
0526     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
0527 };
0528 
0529 static const char channel_map_H9632_ss[HDSP_MAX_CHANNELS] = {
0530     /* ADAT channels */
0531     0, 1, 2, 3, 4, 5, 6, 7,
0532     /* SPDIF */
0533     8, 9,
0534     /* Analog */
0535     10, 11,
0536     /* AO4S-192 and AI4S-192 extension boards */
0537     12, 13, 14, 15,
0538     /* others don't exist */
0539     -1, -1, -1, -1, -1, -1, -1, -1,
0540     -1, -1
0541 };
0542 
0543 static const char channel_map_H9632_ds[HDSP_MAX_CHANNELS] = {
0544     /* ADAT */
0545     1, 3, 5, 7,
0546     /* SPDIF */
0547     8, 9,
0548     /* Analog */
0549     10, 11,
0550     /* AO4S-192 and AI4S-192 extension boards */
0551     12, 13, 14, 15,
0552     /* others don't exist */
0553     -1, -1, -1, -1, -1, -1, -1, -1,
0554     -1, -1, -1, -1, -1, -1
0555 };
0556 
0557 static const char channel_map_H9632_qs[HDSP_MAX_CHANNELS] = {
0558     /* ADAT is disabled in this mode */
0559     /* SPDIF */
0560     8, 9,
0561     /* Analog */
0562     10, 11,
0563     /* AO4S-192 and AI4S-192 extension boards */
0564     12, 13, 14, 15,
0565     /* others don't exist */
0566     -1, -1, -1, -1, -1, -1, -1, -1,
0567     -1, -1, -1, -1, -1, -1, -1, -1,
0568     -1, -1
0569 };
0570 
0571 static struct snd_dma_buffer *
0572 snd_hammerfall_get_buffer(struct pci_dev *pci, size_t size)
0573 {
0574     return snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, size);
0575 }
0576 
0577 static const struct pci_device_id snd_hdsp_ids[] = {
0578     {
0579         .vendor = PCI_VENDOR_ID_XILINX,
0580         .device = PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP,
0581         .subvendor = PCI_ANY_ID,
0582         .subdevice = PCI_ANY_ID,
0583     }, /* RME Hammerfall-DSP */
0584     { 0, },
0585 };
0586 
0587 MODULE_DEVICE_TABLE(pci, snd_hdsp_ids);
0588 
0589 /* prototypes */
0590 static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp);
0591 static int snd_hdsp_create_pcm(struct snd_card *card, struct hdsp *hdsp);
0592 static int snd_hdsp_enable_io (struct hdsp *hdsp);
0593 static void snd_hdsp_initialize_midi_flush (struct hdsp *hdsp);
0594 static void snd_hdsp_initialize_channels (struct hdsp *hdsp);
0595 static int hdsp_fifo_wait(struct hdsp *hdsp, int count, int timeout);
0596 static int hdsp_autosync_ref(struct hdsp *hdsp);
0597 static int snd_hdsp_set_defaults(struct hdsp *hdsp);
0598 static void snd_hdsp_9652_enable_mixer (struct hdsp *hdsp);
0599 
0600 static int hdsp_playback_to_output_key (struct hdsp *hdsp, int in, int out)
0601 {
0602     switch (hdsp->io_type) {
0603     case Multiface:
0604     case Digiface:
0605     case RPM:
0606     default:
0607         if (hdsp->firmware_rev == 0xa)
0608             return (64 * out) + (32 + (in));
0609         else
0610             return (52 * out) + (26 + (in));
0611     case H9632:
0612         return (32 * out) + (16 + (in));
0613     case H9652:
0614         return (52 * out) + (26 + (in));
0615     }
0616 }
0617 
0618 static int hdsp_input_to_output_key (struct hdsp *hdsp, int in, int out)
0619 {
0620     switch (hdsp->io_type) {
0621     case Multiface:
0622     case Digiface:
0623     case RPM:
0624     default:
0625         if (hdsp->firmware_rev == 0xa)
0626             return (64 * out) + in;
0627         else
0628             return (52 * out) + in;
0629     case H9632:
0630         return (32 * out) + in;
0631     case H9652:
0632         return (52 * out) + in;
0633     }
0634 }
0635 
0636 static void hdsp_write(struct hdsp *hdsp, int reg, int val)
0637 {
0638     writel(val, hdsp->iobase + reg);
0639 }
0640 
0641 static unsigned int hdsp_read(struct hdsp *hdsp, int reg)
0642 {
0643     return readl (hdsp->iobase + reg);
0644 }
0645 
0646 static int hdsp_check_for_iobox (struct hdsp *hdsp)
0647 {
0648     int i;
0649 
0650     if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return 0;
0651     for (i = 0; i < 500; i++) {
0652         if (0 == (hdsp_read(hdsp, HDSP_statusRegister) &
0653                     HDSP_ConfigError)) {
0654             if (i) {
0655                 dev_dbg(hdsp->card->dev,
0656                     "IO box found after %d ms\n",
0657                         (20 * i));
0658             }
0659             return 0;
0660         }
0661         msleep(20);
0662     }
0663     dev_err(hdsp->card->dev, "no IO box connected!\n");
0664     hdsp->state &= ~HDSP_FirmwareLoaded;
0665     return -EIO;
0666 }
0667 
0668 static int hdsp_wait_for_iobox(struct hdsp *hdsp, unsigned int loops,
0669                    unsigned int delay)
0670 {
0671     unsigned int i;
0672 
0673     if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
0674         return 0;
0675 
0676     for (i = 0; i != loops; ++i) {
0677         if (hdsp_read(hdsp, HDSP_statusRegister) & HDSP_ConfigError)
0678             msleep(delay);
0679         else {
0680             dev_dbg(hdsp->card->dev, "iobox found after %ums!\n",
0681                    i * delay);
0682             return 0;
0683         }
0684     }
0685 
0686     dev_info(hdsp->card->dev, "no IO box connected!\n");
0687     hdsp->state &= ~HDSP_FirmwareLoaded;
0688     return -EIO;
0689 }
0690 
0691 static int snd_hdsp_load_firmware_from_cache(struct hdsp *hdsp) {
0692 
0693     int i;
0694     unsigned long flags;
0695     const u32 *cache;
0696 
0697     if (hdsp->fw_uploaded)
0698         cache = hdsp->fw_uploaded;
0699     else {
0700         if (!hdsp->firmware)
0701             return -ENODEV;
0702         cache = (u32 *)hdsp->firmware->data;
0703         if (!cache)
0704             return -ENODEV;
0705     }
0706 
0707     if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
0708 
0709         dev_info(hdsp->card->dev, "loading firmware\n");
0710 
0711         hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_PROGRAM);
0712         hdsp_write (hdsp, HDSP_fifoData, 0);
0713 
0714         if (hdsp_fifo_wait (hdsp, 0, HDSP_LONG_WAIT)) {
0715             dev_info(hdsp->card->dev,
0716                  "timeout waiting for download preparation\n");
0717             hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200);
0718             return -EIO;
0719         }
0720 
0721         hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_LOAD);
0722 
0723         for (i = 0; i < HDSP_FIRMWARE_SIZE / 4; ++i) {
0724             hdsp_write(hdsp, HDSP_fifoData, cache[i]);
0725             if (hdsp_fifo_wait (hdsp, 127, HDSP_LONG_WAIT)) {
0726                 dev_info(hdsp->card->dev,
0727                      "timeout during firmware loading\n");
0728                 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200);
0729                 return -EIO;
0730             }
0731         }
0732 
0733         hdsp_fifo_wait(hdsp, 3, HDSP_LONG_WAIT);
0734         hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200);
0735 
0736         ssleep(3);
0737 #ifdef SNDRV_BIG_ENDIAN
0738         hdsp->control2_register = HDSP_BIGENDIAN_MODE;
0739 #else
0740         hdsp->control2_register = 0;
0741 #endif
0742         hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
0743         dev_info(hdsp->card->dev, "finished firmware loading\n");
0744 
0745     }
0746     if (hdsp->state & HDSP_InitializationComplete) {
0747         dev_info(hdsp->card->dev,
0748              "firmware loaded from cache, restoring defaults\n");
0749         spin_lock_irqsave(&hdsp->lock, flags);
0750         snd_hdsp_set_defaults(hdsp);
0751         spin_unlock_irqrestore(&hdsp->lock, flags);
0752     }
0753 
0754     hdsp->state |= HDSP_FirmwareLoaded;
0755 
0756     return 0;
0757 }
0758 
0759 static int hdsp_get_iobox_version (struct hdsp *hdsp)
0760 {
0761     if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
0762 
0763         hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
0764         hdsp_write(hdsp, HDSP_fifoData, 0);
0765 
0766         if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0) {
0767             hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
0768             hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
0769         }
0770 
0771         hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200 | HDSP_PROGRAM);
0772         hdsp_write (hdsp, HDSP_fifoData, 0);
0773         if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0)
0774             goto set_multi;
0775 
0776         hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
0777         hdsp_write(hdsp, HDSP_fifoData, 0);
0778         if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) == 0) {
0779             hdsp->io_type = Digiface;
0780             dev_info(hdsp->card->dev, "Digiface found\n");
0781             return 0;
0782         }
0783 
0784         hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
0785         hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
0786         hdsp_write(hdsp, HDSP_fifoData, 0);
0787         if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) == 0)
0788             goto set_multi;
0789 
0790         hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
0791         hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
0792         hdsp_write(hdsp, HDSP_fifoData, 0);
0793         if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0)
0794             goto set_multi;
0795 
0796         hdsp->io_type = RPM;
0797         dev_info(hdsp->card->dev, "RPM found\n");
0798         return 0;
0799     } else {
0800         /* firmware was already loaded, get iobox type */
0801         if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version2)
0802             hdsp->io_type = RPM;
0803         else if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1)
0804             hdsp->io_type = Multiface;
0805         else
0806             hdsp->io_type = Digiface;
0807     }
0808     return 0;
0809 
0810 set_multi:
0811     hdsp->io_type = Multiface;
0812     dev_info(hdsp->card->dev, "Multiface found\n");
0813     return 0;
0814 }
0815 
0816 
0817 static int hdsp_request_fw_loader(struct hdsp *hdsp);
0818 
0819 static int hdsp_check_for_firmware (struct hdsp *hdsp, int load_on_demand)
0820 {
0821     if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
0822         return 0;
0823     if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
0824         hdsp->state &= ~HDSP_FirmwareLoaded;
0825         if (! load_on_demand)
0826             return -EIO;
0827         dev_err(hdsp->card->dev, "firmware not present.\n");
0828         /* try to load firmware */
0829         if (! (hdsp->state & HDSP_FirmwareCached)) {
0830             if (! hdsp_request_fw_loader(hdsp))
0831                 return 0;
0832             dev_err(hdsp->card->dev,
0833                    "No firmware loaded nor cached, please upload firmware.\n");
0834             return -EIO;
0835         }
0836         if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) {
0837             dev_err(hdsp->card->dev,
0838                    "Firmware loading from cache failed, please upload manually.\n");
0839             return -EIO;
0840         }
0841     }
0842     return 0;
0843 }
0844 
0845 
0846 static int hdsp_fifo_wait(struct hdsp *hdsp, int count, int timeout)
0847 {
0848     int i;
0849 
0850     /* the fifoStatus registers reports on how many words
0851        are available in the command FIFO.
0852     */
0853 
0854     for (i = 0; i < timeout; i++) {
0855 
0856         if ((int)(hdsp_read (hdsp, HDSP_fifoStatus) & 0xff) <= count)
0857             return 0;
0858 
0859         /* not very friendly, but we only do this during a firmware
0860            load and changing the mixer, so we just put up with it.
0861         */
0862 
0863         udelay (100);
0864     }
0865 
0866     dev_warn(hdsp->card->dev,
0867          "wait for FIFO status <= %d failed after %d iterations\n",
0868             count, timeout);
0869     return -1;
0870 }
0871 
0872 static int hdsp_read_gain (struct hdsp *hdsp, unsigned int addr)
0873 {
0874     if (addr >= HDSP_MATRIX_MIXER_SIZE)
0875         return 0;
0876 
0877     return hdsp->mixer_matrix[addr];
0878 }
0879 
0880 static int hdsp_write_gain(struct hdsp *hdsp, unsigned int addr, unsigned short data)
0881 {
0882     unsigned int ad;
0883 
0884     if (addr >= HDSP_MATRIX_MIXER_SIZE)
0885         return -1;
0886 
0887     if (hdsp->io_type == H9652 || hdsp->io_type == H9632) {
0888 
0889         /* from martin bjornsen:
0890 
0891            "You can only write dwords to the
0892            mixer memory which contain two
0893            mixer values in the low and high
0894            word. So if you want to change
0895            value 0 you have to read value 1
0896            from the cache and write both to
0897            the first dword in the mixer
0898            memory."
0899         */
0900 
0901         if (hdsp->io_type == H9632 && addr >= 512)
0902             return 0;
0903 
0904         if (hdsp->io_type == H9652 && addr >= 1352)
0905             return 0;
0906 
0907         hdsp->mixer_matrix[addr] = data;
0908 
0909 
0910         /* `addr' addresses a 16-bit wide address, but
0911            the address space accessed via hdsp_write
0912            uses byte offsets. put another way, addr
0913            varies from 0 to 1351, but to access the
0914            corresponding memory location, we need
0915            to access 0 to 2703 ...
0916         */
0917         ad = addr/2;
0918 
0919         hdsp_write (hdsp, 4096 + (ad*4),
0920                 (hdsp->mixer_matrix[(addr&0x7fe)+1] << 16) +
0921                 hdsp->mixer_matrix[addr&0x7fe]);
0922 
0923         return 0;
0924 
0925     } else {
0926 
0927         ad = (addr << 16) + data;
0928 
0929         if (hdsp_fifo_wait(hdsp, 127, HDSP_LONG_WAIT))
0930             return -1;
0931 
0932         hdsp_write (hdsp, HDSP_fifoData, ad);
0933         hdsp->mixer_matrix[addr] = data;
0934 
0935     }
0936 
0937     return 0;
0938 }
0939 
0940 static int snd_hdsp_use_is_exclusive(struct hdsp *hdsp)
0941 {
0942     unsigned long flags;
0943     int ret = 1;
0944 
0945     spin_lock_irqsave(&hdsp->lock, flags);
0946     if ((hdsp->playback_pid != hdsp->capture_pid) &&
0947         (hdsp->playback_pid >= 0) && (hdsp->capture_pid >= 0))
0948         ret = 0;
0949     spin_unlock_irqrestore(&hdsp->lock, flags);
0950     return ret;
0951 }
0952 
0953 static int hdsp_spdif_sample_rate(struct hdsp *hdsp)
0954 {
0955     unsigned int status = hdsp_read(hdsp, HDSP_statusRegister);
0956     unsigned int rate_bits = (status & HDSP_spdifFrequencyMask);
0957 
0958     /* For the 9632, the mask is different */
0959     if (hdsp->io_type == H9632)
0960          rate_bits = (status & HDSP_spdifFrequencyMask_9632);
0961 
0962     if (status & HDSP_SPDIFErrorFlag)
0963         return 0;
0964 
0965     switch (rate_bits) {
0966     case HDSP_spdifFrequency32KHz: return 32000;
0967     case HDSP_spdifFrequency44_1KHz: return 44100;
0968     case HDSP_spdifFrequency48KHz: return 48000;
0969     case HDSP_spdifFrequency64KHz: return 64000;
0970     case HDSP_spdifFrequency88_2KHz: return 88200;
0971     case HDSP_spdifFrequency96KHz: return 96000;
0972     case HDSP_spdifFrequency128KHz:
0973         if (hdsp->io_type == H9632) return 128000;
0974         break;
0975     case HDSP_spdifFrequency176_4KHz:
0976         if (hdsp->io_type == H9632) return 176400;
0977         break;
0978     case HDSP_spdifFrequency192KHz:
0979         if (hdsp->io_type == H9632) return 192000;
0980         break;
0981     default:
0982         break;
0983     }
0984     dev_warn(hdsp->card->dev,
0985          "unknown spdif frequency status; bits = 0x%x, status = 0x%x\n",
0986          rate_bits, status);
0987     return 0;
0988 }
0989 
0990 static int hdsp_external_sample_rate(struct hdsp *hdsp)
0991 {
0992     unsigned int status2 = hdsp_read(hdsp, HDSP_status2Register);
0993     unsigned int rate_bits = status2 & HDSP_systemFrequencyMask;
0994 
0995     /* For the 9632 card, there seems to be no bit for indicating external
0996      * sample rate greater than 96kHz. The card reports the corresponding
0997      * single speed. So the best means seems to get spdif rate when
0998      * autosync reference is spdif */
0999     if (hdsp->io_type == H9632 &&
1000         hdsp_autosync_ref(hdsp) == HDSP_AUTOSYNC_FROM_SPDIF)
1001          return hdsp_spdif_sample_rate(hdsp);
1002 
1003     switch (rate_bits) {
1004     case HDSP_systemFrequency32:   return 32000;
1005     case HDSP_systemFrequency44_1: return 44100;
1006     case HDSP_systemFrequency48:   return 48000;
1007     case HDSP_systemFrequency64:   return 64000;
1008     case HDSP_systemFrequency88_2: return 88200;
1009     case HDSP_systemFrequency96:   return 96000;
1010     default:
1011         return 0;
1012     }
1013 }
1014 
1015 static void hdsp_compute_period_size(struct hdsp *hdsp)
1016 {
1017     hdsp->period_bytes = 1 << ((hdsp_decode_latency(hdsp->control_register) + 8));
1018 }
1019 
1020 static snd_pcm_uframes_t hdsp_hw_pointer(struct hdsp *hdsp)
1021 {
1022     int position;
1023 
1024     position = hdsp_read(hdsp, HDSP_statusRegister);
1025 
1026     if (!hdsp->precise_ptr)
1027         return (position & HDSP_BufferID) ? (hdsp->period_bytes / 4) : 0;
1028 
1029     position &= HDSP_BufferPositionMask;
1030     position /= 4;
1031     position &= (hdsp->period_bytes/2) - 1;
1032     return position;
1033 }
1034 
1035 static void hdsp_reset_hw_pointer(struct hdsp *hdsp)
1036 {
1037     hdsp_write (hdsp, HDSP_resetPointer, 0);
1038     if (hdsp->io_type == H9632 && hdsp->firmware_rev >= 152)
1039         /* HDSP_resetPointer = HDSP_freqReg, which is strange and
1040          * requires (?) to write again DDS value after a reset pointer
1041          * (at least, it works like this) */
1042         hdsp_write (hdsp, HDSP_freqReg, hdsp->dds_value);
1043 }
1044 
1045 static void hdsp_start_audio(struct hdsp *s)
1046 {
1047     s->control_register |= (HDSP_AudioInterruptEnable | HDSP_Start);
1048     hdsp_write(s, HDSP_controlRegister, s->control_register);
1049 }
1050 
1051 static void hdsp_stop_audio(struct hdsp *s)
1052 {
1053     s->control_register &= ~(HDSP_Start | HDSP_AudioInterruptEnable);
1054     hdsp_write(s, HDSP_controlRegister, s->control_register);
1055 }
1056 
1057 static void hdsp_silence_playback(struct hdsp *hdsp)
1058 {
1059     memset(hdsp->playback_buffer, 0, HDSP_DMA_AREA_BYTES);
1060 }
1061 
1062 static int hdsp_set_interrupt_interval(struct hdsp *s, unsigned int frames)
1063 {
1064     int n;
1065 
1066     spin_lock_irq(&s->lock);
1067 
1068     frames >>= 7;
1069     n = 0;
1070     while (frames) {
1071         n++;
1072         frames >>= 1;
1073     }
1074 
1075     s->control_register &= ~HDSP_LatencyMask;
1076     s->control_register |= hdsp_encode_latency(n);
1077 
1078     hdsp_write(s, HDSP_controlRegister, s->control_register);
1079 
1080     hdsp_compute_period_size(s);
1081 
1082     spin_unlock_irq(&s->lock);
1083 
1084     return 0;
1085 }
1086 
1087 static void hdsp_set_dds_value(struct hdsp *hdsp, int rate)
1088 {
1089     u64 n;
1090 
1091     if (rate >= 112000)
1092         rate /= 4;
1093     else if (rate >= 56000)
1094         rate /= 2;
1095 
1096     n = DDS_NUMERATOR;
1097     n = div_u64(n, rate);
1098     /* n should be less than 2^32 for being written to FREQ register */
1099     snd_BUG_ON(n >> 32);
1100     /* HDSP_freqReg and HDSP_resetPointer are the same, so keep the DDS
1101        value to write it after a reset */
1102     hdsp->dds_value = n;
1103     hdsp_write(hdsp, HDSP_freqReg, hdsp->dds_value);
1104 }
1105 
1106 static int hdsp_set_rate(struct hdsp *hdsp, int rate, int called_internally)
1107 {
1108     int reject_if_open = 0;
1109     int current_rate;
1110     int rate_bits;
1111 
1112     /* ASSUMPTION: hdsp->lock is either held, or
1113        there is no need for it (e.g. during module
1114        initialization).
1115     */
1116 
1117     if (!(hdsp->control_register & HDSP_ClockModeMaster)) {
1118         if (called_internally) {
1119             /* request from ctl or card initialization */
1120             dev_err(hdsp->card->dev,
1121                 "device is not running as a clock master: cannot set sample rate.\n");
1122             return -1;
1123         } else {
1124             /* hw_param request while in AutoSync mode */
1125             int external_freq = hdsp_external_sample_rate(hdsp);
1126             int spdif_freq = hdsp_spdif_sample_rate(hdsp);
1127 
1128             if ((spdif_freq == external_freq*2) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1))
1129                 dev_info(hdsp->card->dev,
1130                      "Detected ADAT in double speed mode\n");
1131             else if (hdsp->io_type == H9632 && (spdif_freq == external_freq*4) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1))
1132                 dev_info(hdsp->card->dev,
1133                      "Detected ADAT in quad speed mode\n");
1134             else if (rate != external_freq) {
1135                 dev_info(hdsp->card->dev,
1136                      "No AutoSync source for requested rate\n");
1137                 return -1;
1138             }
1139         }
1140     }
1141 
1142     current_rate = hdsp->system_sample_rate;
1143 
1144     /* Changing from a "single speed" to a "double speed" rate is
1145        not allowed if any substreams are open. This is because
1146        such a change causes a shift in the location of
1147        the DMA buffers and a reduction in the number of available
1148        buffers.
1149 
1150        Note that a similar but essentially insoluble problem
1151        exists for externally-driven rate changes. All we can do
1152        is to flag rate changes in the read/write routines.  */
1153 
1154     if (rate > 96000 && hdsp->io_type != H9632)
1155         return -EINVAL;
1156 
1157     switch (rate) {
1158     case 32000:
1159         if (current_rate > 48000)
1160             reject_if_open = 1;
1161         rate_bits = HDSP_Frequency32KHz;
1162         break;
1163     case 44100:
1164         if (current_rate > 48000)
1165             reject_if_open = 1;
1166         rate_bits = HDSP_Frequency44_1KHz;
1167         break;
1168     case 48000:
1169         if (current_rate > 48000)
1170             reject_if_open = 1;
1171         rate_bits = HDSP_Frequency48KHz;
1172         break;
1173     case 64000:
1174         if (current_rate <= 48000 || current_rate > 96000)
1175             reject_if_open = 1;
1176         rate_bits = HDSP_Frequency64KHz;
1177         break;
1178     case 88200:
1179         if (current_rate <= 48000 || current_rate > 96000)
1180             reject_if_open = 1;
1181         rate_bits = HDSP_Frequency88_2KHz;
1182         break;
1183     case 96000:
1184         if (current_rate <= 48000 || current_rate > 96000)
1185             reject_if_open = 1;
1186         rate_bits = HDSP_Frequency96KHz;
1187         break;
1188     case 128000:
1189         if (current_rate < 128000)
1190             reject_if_open = 1;
1191         rate_bits = HDSP_Frequency128KHz;
1192         break;
1193     case 176400:
1194         if (current_rate < 128000)
1195             reject_if_open = 1;
1196         rate_bits = HDSP_Frequency176_4KHz;
1197         break;
1198     case 192000:
1199         if (current_rate < 128000)
1200             reject_if_open = 1;
1201         rate_bits = HDSP_Frequency192KHz;
1202         break;
1203     default:
1204         return -EINVAL;
1205     }
1206 
1207     if (reject_if_open && (hdsp->capture_pid >= 0 || hdsp->playback_pid >= 0)) {
1208         dev_warn(hdsp->card->dev,
1209              "cannot change speed mode (capture PID = %d, playback PID = %d)\n",
1210                 hdsp->capture_pid,
1211                 hdsp->playback_pid);
1212         return -EBUSY;
1213     }
1214 
1215     hdsp->control_register &= ~HDSP_FrequencyMask;
1216     hdsp->control_register |= rate_bits;
1217     hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
1218 
1219     /* For HDSP9632 rev 152, need to set DDS value in FREQ register */
1220     if (hdsp->io_type == H9632 && hdsp->firmware_rev >= 152)
1221         hdsp_set_dds_value(hdsp, rate);
1222 
1223     if (rate >= 128000) {
1224         hdsp->channel_map = channel_map_H9632_qs;
1225     } else if (rate > 48000) {
1226         if (hdsp->io_type == H9632)
1227             hdsp->channel_map = channel_map_H9632_ds;
1228         else
1229             hdsp->channel_map = channel_map_ds;
1230     } else {
1231         switch (hdsp->io_type) {
1232         case RPM:
1233         case Multiface:
1234             hdsp->channel_map = channel_map_mf_ss;
1235             break;
1236         case Digiface:
1237         case H9652:
1238             hdsp->channel_map = channel_map_df_ss;
1239             break;
1240         case H9632:
1241             hdsp->channel_map = channel_map_H9632_ss;
1242             break;
1243         default:
1244             /* should never happen */
1245             break;
1246         }
1247     }
1248 
1249     hdsp->system_sample_rate = rate;
1250 
1251     return 0;
1252 }
1253 
1254 /*----------------------------------------------------------------------------
1255    MIDI
1256   ----------------------------------------------------------------------------*/
1257 
1258 static unsigned char snd_hdsp_midi_read_byte (struct hdsp *hdsp, int id)
1259 {
1260     /* the hardware already does the relevant bit-mask with 0xff */
1261     if (id)
1262         return hdsp_read(hdsp, HDSP_midiDataIn1);
1263     else
1264         return hdsp_read(hdsp, HDSP_midiDataIn0);
1265 }
1266 
1267 static void snd_hdsp_midi_write_byte (struct hdsp *hdsp, int id, int val)
1268 {
1269     /* the hardware already does the relevant bit-mask with 0xff */
1270     if (id)
1271         hdsp_write(hdsp, HDSP_midiDataOut1, val);
1272     else
1273         hdsp_write(hdsp, HDSP_midiDataOut0, val);
1274 }
1275 
1276 static int snd_hdsp_midi_input_available (struct hdsp *hdsp, int id)
1277 {
1278     if (id)
1279         return (hdsp_read(hdsp, HDSP_midiStatusIn1) & 0xff);
1280     else
1281         return (hdsp_read(hdsp, HDSP_midiStatusIn0) & 0xff);
1282 }
1283 
1284 static int snd_hdsp_midi_output_possible (struct hdsp *hdsp, int id)
1285 {
1286     int fifo_bytes_used;
1287 
1288     if (id)
1289         fifo_bytes_used = hdsp_read(hdsp, HDSP_midiStatusOut1) & 0xff;
1290     else
1291         fifo_bytes_used = hdsp_read(hdsp, HDSP_midiStatusOut0) & 0xff;
1292 
1293     if (fifo_bytes_used < 128)
1294         return  128 - fifo_bytes_used;
1295     else
1296         return 0;
1297 }
1298 
1299 static void snd_hdsp_flush_midi_input (struct hdsp *hdsp, int id)
1300 {
1301     while (snd_hdsp_midi_input_available (hdsp, id))
1302         snd_hdsp_midi_read_byte (hdsp, id);
1303 }
1304 
1305 static int snd_hdsp_midi_output_write (struct hdsp_midi *hmidi)
1306 {
1307     unsigned long flags;
1308     int n_pending;
1309     int to_write;
1310     int i;
1311     unsigned char buf[128];
1312 
1313     /* Output is not interrupt driven */
1314 
1315     spin_lock_irqsave (&hmidi->lock, flags);
1316     if (hmidi->output) {
1317         if (!snd_rawmidi_transmit_empty (hmidi->output)) {
1318             n_pending = snd_hdsp_midi_output_possible(hmidi->hdsp, hmidi->id);
1319             if (n_pending > 0) {
1320                 if (n_pending > (int)sizeof (buf))
1321                     n_pending = sizeof (buf);
1322 
1323                 to_write = snd_rawmidi_transmit(hmidi->output, buf, n_pending);
1324                 if (to_write > 0) {
1325                     for (i = 0; i < to_write; ++i)
1326                         snd_hdsp_midi_write_byte (hmidi->hdsp, hmidi->id, buf[i]);
1327                 }
1328             }
1329         }
1330     }
1331     spin_unlock_irqrestore (&hmidi->lock, flags);
1332     return 0;
1333 }
1334 
1335 static int snd_hdsp_midi_input_read (struct hdsp_midi *hmidi)
1336 {
1337     unsigned char buf[128]; /* this buffer is designed to match the MIDI input FIFO size */
1338     unsigned long flags;
1339     int n_pending;
1340     int i;
1341 
1342     spin_lock_irqsave (&hmidi->lock, flags);
1343     n_pending = snd_hdsp_midi_input_available(hmidi->hdsp, hmidi->id);
1344     if (n_pending > 0) {
1345         if (hmidi->input) {
1346             if (n_pending > (int)sizeof (buf))
1347                 n_pending = sizeof (buf);
1348             for (i = 0; i < n_pending; ++i)
1349                 buf[i] = snd_hdsp_midi_read_byte (hmidi->hdsp, hmidi->id);
1350             if (n_pending)
1351                 snd_rawmidi_receive (hmidi->input, buf, n_pending);
1352         } else {
1353             /* flush the MIDI input FIFO */
1354             while (--n_pending)
1355                 snd_hdsp_midi_read_byte (hmidi->hdsp, hmidi->id);
1356         }
1357     }
1358     hmidi->pending = 0;
1359     if (hmidi->id)
1360         hmidi->hdsp->control_register |= HDSP_Midi1InterruptEnable;
1361     else
1362         hmidi->hdsp->control_register |= HDSP_Midi0InterruptEnable;
1363     hdsp_write(hmidi->hdsp, HDSP_controlRegister, hmidi->hdsp->control_register);
1364     spin_unlock_irqrestore (&hmidi->lock, flags);
1365     return snd_hdsp_midi_output_write (hmidi);
1366 }
1367 
1368 static void snd_hdsp_midi_input_trigger(struct snd_rawmidi_substream *substream, int up)
1369 {
1370     struct hdsp *hdsp;
1371     struct hdsp_midi *hmidi;
1372     unsigned long flags;
1373     u32 ie;
1374 
1375     hmidi = (struct hdsp_midi *) substream->rmidi->private_data;
1376     hdsp = hmidi->hdsp;
1377     ie = hmidi->id ? HDSP_Midi1InterruptEnable : HDSP_Midi0InterruptEnable;
1378     spin_lock_irqsave (&hdsp->lock, flags);
1379     if (up) {
1380         if (!(hdsp->control_register & ie)) {
1381             snd_hdsp_flush_midi_input (hdsp, hmidi->id);
1382             hdsp->control_register |= ie;
1383         }
1384     } else {
1385         hdsp->control_register &= ~ie;
1386     }
1387 
1388     hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
1389     spin_unlock_irqrestore (&hdsp->lock, flags);
1390 }
1391 
1392 static void snd_hdsp_midi_output_timer(struct timer_list *t)
1393 {
1394     struct hdsp_midi *hmidi = from_timer(hmidi, t, timer);
1395     unsigned long flags;
1396 
1397     snd_hdsp_midi_output_write(hmidi);
1398     spin_lock_irqsave (&hmidi->lock, flags);
1399 
1400     /* this does not bump hmidi->istimer, because the
1401        kernel automatically removed the timer when it
1402        expired, and we are now adding it back, thus
1403        leaving istimer wherever it was set before.
1404     */
1405 
1406     if (hmidi->istimer)
1407         mod_timer(&hmidi->timer, 1 + jiffies);
1408 
1409     spin_unlock_irqrestore (&hmidi->lock, flags);
1410 }
1411 
1412 static void snd_hdsp_midi_output_trigger(struct snd_rawmidi_substream *substream, int up)
1413 {
1414     struct hdsp_midi *hmidi;
1415     unsigned long flags;
1416 
1417     hmidi = (struct hdsp_midi *) substream->rmidi->private_data;
1418     spin_lock_irqsave (&hmidi->lock, flags);
1419     if (up) {
1420         if (!hmidi->istimer) {
1421             timer_setup(&hmidi->timer, snd_hdsp_midi_output_timer,
1422                     0);
1423             mod_timer(&hmidi->timer, 1 + jiffies);
1424             hmidi->istimer++;
1425         }
1426     } else {
1427         if (hmidi->istimer && --hmidi->istimer <= 0)
1428             del_timer (&hmidi->timer);
1429     }
1430     spin_unlock_irqrestore (&hmidi->lock, flags);
1431     if (up)
1432         snd_hdsp_midi_output_write(hmidi);
1433 }
1434 
1435 static int snd_hdsp_midi_input_open(struct snd_rawmidi_substream *substream)
1436 {
1437     struct hdsp_midi *hmidi;
1438 
1439     hmidi = (struct hdsp_midi *) substream->rmidi->private_data;
1440     spin_lock_irq (&hmidi->lock);
1441     snd_hdsp_flush_midi_input (hmidi->hdsp, hmidi->id);
1442     hmidi->input = substream;
1443     spin_unlock_irq (&hmidi->lock);
1444 
1445     return 0;
1446 }
1447 
1448 static int snd_hdsp_midi_output_open(struct snd_rawmidi_substream *substream)
1449 {
1450     struct hdsp_midi *hmidi;
1451 
1452     hmidi = (struct hdsp_midi *) substream->rmidi->private_data;
1453     spin_lock_irq (&hmidi->lock);
1454     hmidi->output = substream;
1455     spin_unlock_irq (&hmidi->lock);
1456 
1457     return 0;
1458 }
1459 
1460 static int snd_hdsp_midi_input_close(struct snd_rawmidi_substream *substream)
1461 {
1462     struct hdsp_midi *hmidi;
1463 
1464     snd_hdsp_midi_input_trigger (substream, 0);
1465 
1466     hmidi = (struct hdsp_midi *) substream->rmidi->private_data;
1467     spin_lock_irq (&hmidi->lock);
1468     hmidi->input = NULL;
1469     spin_unlock_irq (&hmidi->lock);
1470 
1471     return 0;
1472 }
1473 
1474 static int snd_hdsp_midi_output_close(struct snd_rawmidi_substream *substream)
1475 {
1476     struct hdsp_midi *hmidi;
1477 
1478     snd_hdsp_midi_output_trigger (substream, 0);
1479 
1480     hmidi = (struct hdsp_midi *) substream->rmidi->private_data;
1481     spin_lock_irq (&hmidi->lock);
1482     hmidi->output = NULL;
1483     spin_unlock_irq (&hmidi->lock);
1484 
1485     return 0;
1486 }
1487 
1488 static const struct snd_rawmidi_ops snd_hdsp_midi_output =
1489 {
1490     .open =     snd_hdsp_midi_output_open,
1491     .close =    snd_hdsp_midi_output_close,
1492     .trigger =  snd_hdsp_midi_output_trigger,
1493 };
1494 
1495 static const struct snd_rawmidi_ops snd_hdsp_midi_input =
1496 {
1497     .open =     snd_hdsp_midi_input_open,
1498     .close =    snd_hdsp_midi_input_close,
1499     .trigger =  snd_hdsp_midi_input_trigger,
1500 };
1501 
1502 static int snd_hdsp_create_midi (struct snd_card *card, struct hdsp *hdsp, int id)
1503 {
1504     char buf[40];
1505 
1506     hdsp->midi[id].id = id;
1507     hdsp->midi[id].rmidi = NULL;
1508     hdsp->midi[id].input = NULL;
1509     hdsp->midi[id].output = NULL;
1510     hdsp->midi[id].hdsp = hdsp;
1511     hdsp->midi[id].istimer = 0;
1512     hdsp->midi[id].pending = 0;
1513     spin_lock_init (&hdsp->midi[id].lock);
1514 
1515     snprintf(buf, sizeof(buf), "%s MIDI %d", card->shortname, id + 1);
1516     if (snd_rawmidi_new (card, buf, id, 1, 1, &hdsp->midi[id].rmidi) < 0)
1517         return -1;
1518 
1519     sprintf(hdsp->midi[id].rmidi->name, "HDSP MIDI %d", id+1);
1520     hdsp->midi[id].rmidi->private_data = &hdsp->midi[id];
1521 
1522     snd_rawmidi_set_ops (hdsp->midi[id].rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, &snd_hdsp_midi_output);
1523     snd_rawmidi_set_ops (hdsp->midi[id].rmidi, SNDRV_RAWMIDI_STREAM_INPUT, &snd_hdsp_midi_input);
1524 
1525     hdsp->midi[id].rmidi->info_flags |= SNDRV_RAWMIDI_INFO_OUTPUT |
1526         SNDRV_RAWMIDI_INFO_INPUT |
1527         SNDRV_RAWMIDI_INFO_DUPLEX;
1528 
1529     return 0;
1530 }
1531 
1532 /*-----------------------------------------------------------------------------
1533   Control Interface
1534   ----------------------------------------------------------------------------*/
1535 
1536 static u32 snd_hdsp_convert_from_aes(struct snd_aes_iec958 *aes)
1537 {
1538     u32 val = 0;
1539     val |= (aes->status[0] & IEC958_AES0_PROFESSIONAL) ? HDSP_SPDIFProfessional : 0;
1540     val |= (aes->status[0] & IEC958_AES0_NONAUDIO) ? HDSP_SPDIFNonAudio : 0;
1541     if (val & HDSP_SPDIFProfessional)
1542         val |= (aes->status[0] & IEC958_AES0_PRO_EMPHASIS_5015) ? HDSP_SPDIFEmphasis : 0;
1543     else
1544         val |= (aes->status[0] & IEC958_AES0_CON_EMPHASIS_5015) ? HDSP_SPDIFEmphasis : 0;
1545     return val;
1546 }
1547 
1548 static void snd_hdsp_convert_to_aes(struct snd_aes_iec958 *aes, u32 val)
1549 {
1550     aes->status[0] = ((val & HDSP_SPDIFProfessional) ? IEC958_AES0_PROFESSIONAL : 0) |
1551              ((val & HDSP_SPDIFNonAudio) ? IEC958_AES0_NONAUDIO : 0);
1552     if (val & HDSP_SPDIFProfessional)
1553         aes->status[0] |= (val & HDSP_SPDIFEmphasis) ? IEC958_AES0_PRO_EMPHASIS_5015 : 0;
1554     else
1555         aes->status[0] |= (val & HDSP_SPDIFEmphasis) ? IEC958_AES0_CON_EMPHASIS_5015 : 0;
1556 }
1557 
1558 static int snd_hdsp_control_spdif_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1559 {
1560     uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
1561     uinfo->count = 1;
1562     return 0;
1563 }
1564 
1565 static int snd_hdsp_control_spdif_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1566 {
1567     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1568 
1569     snd_hdsp_convert_to_aes(&ucontrol->value.iec958, hdsp->creg_spdif);
1570     return 0;
1571 }
1572 
1573 static int snd_hdsp_control_spdif_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1574 {
1575     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1576     int change;
1577     u32 val;
1578 
1579     val = snd_hdsp_convert_from_aes(&ucontrol->value.iec958);
1580     spin_lock_irq(&hdsp->lock);
1581     change = val != hdsp->creg_spdif;
1582     hdsp->creg_spdif = val;
1583     spin_unlock_irq(&hdsp->lock);
1584     return change;
1585 }
1586 
1587 static int snd_hdsp_control_spdif_stream_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_stream_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_stream);
1599     return 0;
1600 }
1601 
1602 static int snd_hdsp_control_spdif_stream_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_stream;
1611     hdsp->creg_spdif_stream = val;
1612     hdsp->control_register &= ~(HDSP_SPDIFProfessional | HDSP_SPDIFNonAudio | HDSP_SPDIFEmphasis);
1613     hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register |= val);
1614     spin_unlock_irq(&hdsp->lock);
1615     return change;
1616 }
1617 
1618 static int snd_hdsp_control_spdif_mask_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1619 {
1620     uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
1621     uinfo->count = 1;
1622     return 0;
1623 }
1624 
1625 static int snd_hdsp_control_spdif_mask_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1626 {
1627     ucontrol->value.iec958.status[0] = kcontrol->private_value;
1628     return 0;
1629 }
1630 
1631 #define HDSP_SPDIF_IN(xname, xindex) \
1632 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1633   .name = xname, \
1634   .index = xindex, \
1635   .info = snd_hdsp_info_spdif_in, \
1636   .get = snd_hdsp_get_spdif_in, \
1637   .put = snd_hdsp_put_spdif_in }
1638 
1639 static unsigned int hdsp_spdif_in(struct hdsp *hdsp)
1640 {
1641     return hdsp_decode_spdif_in(hdsp->control_register & HDSP_SPDIFInputMask);
1642 }
1643 
1644 static int hdsp_set_spdif_input(struct hdsp *hdsp, int in)
1645 {
1646     hdsp->control_register &= ~HDSP_SPDIFInputMask;
1647     hdsp->control_register |= hdsp_encode_spdif_in(in);
1648     hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
1649     return 0;
1650 }
1651 
1652 static int snd_hdsp_info_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1653 {
1654     static const char * const texts[4] = {
1655         "Optical", "Coaxial", "Internal", "AES"
1656     };
1657     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1658 
1659     return snd_ctl_enum_info(uinfo, 1, (hdsp->io_type == H9632) ? 4 : 3,
1660                  texts);
1661 }
1662 
1663 static int snd_hdsp_get_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1664 {
1665     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1666 
1667     ucontrol->value.enumerated.item[0] = hdsp_spdif_in(hdsp);
1668     return 0;
1669 }
1670 
1671 static int snd_hdsp_put_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1672 {
1673     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1674     int change;
1675     unsigned int val;
1676 
1677     if (!snd_hdsp_use_is_exclusive(hdsp))
1678         return -EBUSY;
1679     val = ucontrol->value.enumerated.item[0] % ((hdsp->io_type == H9632) ? 4 : 3);
1680     spin_lock_irq(&hdsp->lock);
1681     change = val != hdsp_spdif_in(hdsp);
1682     if (change)
1683         hdsp_set_spdif_input(hdsp, val);
1684     spin_unlock_irq(&hdsp->lock);
1685     return change;
1686 }
1687 
1688 #define HDSP_TOGGLE_SETTING(xname, xindex) \
1689 {   .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1690     .name = xname, \
1691     .private_value = xindex, \
1692     .info = snd_hdsp_info_toggle_setting, \
1693     .get = snd_hdsp_get_toggle_setting, \
1694     .put = snd_hdsp_put_toggle_setting \
1695 }
1696 
1697 static int hdsp_toggle_setting(struct hdsp *hdsp, u32 regmask)
1698 {
1699     return (hdsp->control_register & regmask) ? 1 : 0;
1700 }
1701 
1702 static int hdsp_set_toggle_setting(struct hdsp *hdsp, u32 regmask, int out)
1703 {
1704     if (out)
1705         hdsp->control_register |= regmask;
1706     else
1707         hdsp->control_register &= ~regmask;
1708     hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
1709 
1710     return 0;
1711 }
1712 
1713 #define snd_hdsp_info_toggle_setting           snd_ctl_boolean_mono_info
1714 
1715 static int snd_hdsp_get_toggle_setting(struct snd_kcontrol *kcontrol,
1716         struct snd_ctl_elem_value *ucontrol)
1717 {
1718     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1719     u32 regmask = kcontrol->private_value;
1720 
1721     spin_lock_irq(&hdsp->lock);
1722     ucontrol->value.integer.value[0] = hdsp_toggle_setting(hdsp, regmask);
1723     spin_unlock_irq(&hdsp->lock);
1724     return 0;
1725 }
1726 
1727 static int snd_hdsp_put_toggle_setting(struct snd_kcontrol *kcontrol,
1728         struct snd_ctl_elem_value *ucontrol)
1729 {
1730     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1731     u32 regmask = kcontrol->private_value;
1732     int change;
1733     unsigned int val;
1734 
1735     if (!snd_hdsp_use_is_exclusive(hdsp))
1736         return -EBUSY;
1737     val = ucontrol->value.integer.value[0] & 1;
1738     spin_lock_irq(&hdsp->lock);
1739     change = (int) val != hdsp_toggle_setting(hdsp, regmask);
1740     if (change)
1741         hdsp_set_toggle_setting(hdsp, regmask, val);
1742     spin_unlock_irq(&hdsp->lock);
1743     return change;
1744 }
1745 
1746 #define HDSP_SPDIF_SAMPLE_RATE(xname, xindex) \
1747 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1748   .name = xname, \
1749   .index = xindex, \
1750   .access = SNDRV_CTL_ELEM_ACCESS_READ, \
1751   .info = snd_hdsp_info_spdif_sample_rate, \
1752   .get = snd_hdsp_get_spdif_sample_rate \
1753 }
1754 
1755 static int snd_hdsp_info_spdif_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1756 {
1757     static const char * const texts[] = {
1758         "32000", "44100", "48000", "64000", "88200", "96000",
1759         "None", "128000", "176400", "192000"
1760     };
1761     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1762 
1763     return snd_ctl_enum_info(uinfo, 1, (hdsp->io_type == H9632) ? 10 : 7,
1764                  texts);
1765 }
1766 
1767 static int snd_hdsp_get_spdif_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1768 {
1769     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1770 
1771     switch (hdsp_spdif_sample_rate(hdsp)) {
1772     case 32000:
1773         ucontrol->value.enumerated.item[0] = 0;
1774         break;
1775     case 44100:
1776         ucontrol->value.enumerated.item[0] = 1;
1777         break;
1778     case 48000:
1779         ucontrol->value.enumerated.item[0] = 2;
1780         break;
1781     case 64000:
1782         ucontrol->value.enumerated.item[0] = 3;
1783         break;
1784     case 88200:
1785         ucontrol->value.enumerated.item[0] = 4;
1786         break;
1787     case 96000:
1788         ucontrol->value.enumerated.item[0] = 5;
1789         break;
1790     case 128000:
1791         ucontrol->value.enumerated.item[0] = 7;
1792         break;
1793     case 176400:
1794         ucontrol->value.enumerated.item[0] = 8;
1795         break;
1796     case 192000:
1797         ucontrol->value.enumerated.item[0] = 9;
1798         break;
1799     default:
1800         ucontrol->value.enumerated.item[0] = 6;
1801     }
1802     return 0;
1803 }
1804 
1805 #define HDSP_SYSTEM_SAMPLE_RATE(xname, xindex) \
1806 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1807   .name = xname, \
1808   .index = xindex, \
1809   .access = SNDRV_CTL_ELEM_ACCESS_READ, \
1810   .info = snd_hdsp_info_system_sample_rate, \
1811   .get = snd_hdsp_get_system_sample_rate \
1812 }
1813 
1814 static int snd_hdsp_info_system_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1815 {
1816     uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1817     uinfo->count = 1;
1818     return 0;
1819 }
1820 
1821 static int snd_hdsp_get_system_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1822 {
1823     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1824 
1825     ucontrol->value.enumerated.item[0] = hdsp->system_sample_rate;
1826     return 0;
1827 }
1828 
1829 #define HDSP_AUTOSYNC_SAMPLE_RATE(xname, xindex) \
1830 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1831   .name = xname, \
1832   .index = xindex, \
1833   .access = SNDRV_CTL_ELEM_ACCESS_READ, \
1834   .info = snd_hdsp_info_autosync_sample_rate, \
1835   .get = snd_hdsp_get_autosync_sample_rate \
1836 }
1837 
1838 static int snd_hdsp_info_autosync_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1839 {
1840     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1841     static const char * const texts[] = {
1842         "32000", "44100", "48000", "64000", "88200", "96000",
1843         "None", "128000", "176400", "192000"
1844     };
1845 
1846     return snd_ctl_enum_info(uinfo, 1, (hdsp->io_type == H9632) ? 10 : 7,
1847                  texts);
1848 }
1849 
1850 static int snd_hdsp_get_autosync_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1851 {
1852     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1853 
1854     switch (hdsp_external_sample_rate(hdsp)) {
1855     case 32000:
1856         ucontrol->value.enumerated.item[0] = 0;
1857         break;
1858     case 44100:
1859         ucontrol->value.enumerated.item[0] = 1;
1860         break;
1861     case 48000:
1862         ucontrol->value.enumerated.item[0] = 2;
1863         break;
1864     case 64000:
1865         ucontrol->value.enumerated.item[0] = 3;
1866         break;
1867     case 88200:
1868         ucontrol->value.enumerated.item[0] = 4;
1869         break;
1870     case 96000:
1871         ucontrol->value.enumerated.item[0] = 5;
1872         break;
1873     case 128000:
1874         ucontrol->value.enumerated.item[0] = 7;
1875         break;
1876     case 176400:
1877         ucontrol->value.enumerated.item[0] = 8;
1878         break;
1879     case 192000:
1880         ucontrol->value.enumerated.item[0] = 9;
1881         break;
1882     default:
1883         ucontrol->value.enumerated.item[0] = 6;
1884     }
1885     return 0;
1886 }
1887 
1888 #define HDSP_SYSTEM_CLOCK_MODE(xname, xindex) \
1889 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1890   .name = xname, \
1891   .index = xindex, \
1892   .access = SNDRV_CTL_ELEM_ACCESS_READ, \
1893   .info = snd_hdsp_info_system_clock_mode, \
1894   .get = snd_hdsp_get_system_clock_mode \
1895 }
1896 
1897 static int hdsp_system_clock_mode(struct hdsp *hdsp)
1898 {
1899     if (hdsp->control_register & HDSP_ClockModeMaster)
1900         return 0;
1901     else if (hdsp_external_sample_rate(hdsp) != hdsp->system_sample_rate)
1902             return 0;
1903     return 1;
1904 }
1905 
1906 static int snd_hdsp_info_system_clock_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1907 {
1908     static const char * const texts[] = {"Master", "Slave" };
1909 
1910     return snd_ctl_enum_info(uinfo, 1, 2, texts);
1911 }
1912 
1913 static int snd_hdsp_get_system_clock_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1914 {
1915     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1916 
1917     ucontrol->value.enumerated.item[0] = hdsp_system_clock_mode(hdsp);
1918     return 0;
1919 }
1920 
1921 #define HDSP_CLOCK_SOURCE(xname, xindex) \
1922 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1923   .name = xname, \
1924   .index = xindex, \
1925   .info = snd_hdsp_info_clock_source, \
1926   .get = snd_hdsp_get_clock_source, \
1927   .put = snd_hdsp_put_clock_source \
1928 }
1929 
1930 static int hdsp_clock_source(struct hdsp *hdsp)
1931 {
1932     if (hdsp->control_register & HDSP_ClockModeMaster) {
1933         switch (hdsp->system_sample_rate) {
1934         case 32000:
1935             return 1;
1936         case 44100:
1937             return 2;
1938         case 48000:
1939             return 3;
1940         case 64000:
1941             return 4;
1942         case 88200:
1943             return 5;
1944         case 96000:
1945             return 6;
1946         case 128000:
1947             return 7;
1948         case 176400:
1949             return 8;
1950         case 192000:
1951             return 9;
1952         default:
1953             return 3;
1954         }
1955     } else {
1956         return 0;
1957     }
1958 }
1959 
1960 static int hdsp_set_clock_source(struct hdsp *hdsp, int mode)
1961 {
1962     int rate;
1963     switch (mode) {
1964     case HDSP_CLOCK_SOURCE_AUTOSYNC:
1965         if (hdsp_external_sample_rate(hdsp) != 0) {
1966             if (!hdsp_set_rate(hdsp, hdsp_external_sample_rate(hdsp), 1)) {
1967             hdsp->control_register &= ~HDSP_ClockModeMaster;
1968             hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
1969             return 0;
1970             }
1971         }
1972         return -1;
1973     case HDSP_CLOCK_SOURCE_INTERNAL_32KHZ:
1974         rate = 32000;
1975         break;
1976     case HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ:
1977         rate = 44100;
1978         break;
1979     case HDSP_CLOCK_SOURCE_INTERNAL_48KHZ:
1980         rate = 48000;
1981         break;
1982     case HDSP_CLOCK_SOURCE_INTERNAL_64KHZ:
1983         rate = 64000;
1984         break;
1985     case HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ:
1986         rate = 88200;
1987         break;
1988     case HDSP_CLOCK_SOURCE_INTERNAL_96KHZ:
1989         rate = 96000;
1990         break;
1991     case HDSP_CLOCK_SOURCE_INTERNAL_128KHZ:
1992         rate = 128000;
1993         break;
1994     case HDSP_CLOCK_SOURCE_INTERNAL_176_4KHZ:
1995         rate = 176400;
1996         break;
1997     case HDSP_CLOCK_SOURCE_INTERNAL_192KHZ:
1998         rate = 192000;
1999         break;
2000     default:
2001         rate = 48000;
2002     }
2003     hdsp->control_register |= HDSP_ClockModeMaster;
2004     hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
2005     hdsp_set_rate(hdsp, rate, 1);
2006     return 0;
2007 }
2008 
2009 static int snd_hdsp_info_clock_source(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2010 {
2011     static const char * const texts[] = {
2012         "AutoSync", "Internal 32.0 kHz", "Internal 44.1 kHz",
2013         "Internal 48.0 kHz", "Internal 64.0 kHz", "Internal 88.2 kHz",
2014         "Internal 96.0 kHz", "Internal 128 kHz", "Internal 176.4 kHz",
2015         "Internal 192.0 KHz"
2016     };
2017     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2018 
2019     return snd_ctl_enum_info(uinfo, 1, (hdsp->io_type == H9632) ? 10 : 7,
2020                  texts);
2021 }
2022 
2023 static int snd_hdsp_get_clock_source(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2024 {
2025     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2026 
2027     ucontrol->value.enumerated.item[0] = hdsp_clock_source(hdsp);
2028     return 0;
2029 }
2030 
2031 static int snd_hdsp_put_clock_source(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2032 {
2033     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2034     int change;
2035     int val;
2036 
2037     if (!snd_hdsp_use_is_exclusive(hdsp))
2038         return -EBUSY;
2039     val = ucontrol->value.enumerated.item[0];
2040     if (val < 0) val = 0;
2041     if (hdsp->io_type == H9632) {
2042         if (val > 9)
2043             val = 9;
2044     } else {
2045         if (val > 6)
2046             val = 6;
2047     }
2048     spin_lock_irq(&hdsp->lock);
2049     if (val != hdsp_clock_source(hdsp))
2050         change = (hdsp_set_clock_source(hdsp, val) == 0) ? 1 : 0;
2051     else
2052         change = 0;
2053     spin_unlock_irq(&hdsp->lock);
2054     return change;
2055 }
2056 
2057 #define snd_hdsp_info_clock_source_lock     snd_ctl_boolean_mono_info
2058 
2059 static int snd_hdsp_get_clock_source_lock(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2060 {
2061     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2062 
2063     ucontrol->value.integer.value[0] = hdsp->clock_source_locked;
2064     return 0;
2065 }
2066 
2067 static int snd_hdsp_put_clock_source_lock(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2068 {
2069     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2070     int change;
2071 
2072     change = (int)ucontrol->value.integer.value[0] != hdsp->clock_source_locked;
2073     if (change)
2074         hdsp->clock_source_locked = !!ucontrol->value.integer.value[0];
2075     return change;
2076 }
2077 
2078 #define HDSP_DA_GAIN(xname, xindex) \
2079 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2080   .name = xname, \
2081   .index = xindex, \
2082   .info = snd_hdsp_info_da_gain, \
2083   .get = snd_hdsp_get_da_gain, \
2084   .put = snd_hdsp_put_da_gain \
2085 }
2086 
2087 static int hdsp_da_gain(struct hdsp *hdsp)
2088 {
2089     switch (hdsp->control_register & HDSP_DAGainMask) {
2090     case HDSP_DAGainHighGain:
2091         return 0;
2092     case HDSP_DAGainPlus4dBu:
2093         return 1;
2094     case HDSP_DAGainMinus10dBV:
2095         return 2;
2096     default:
2097         return 1;
2098     }
2099 }
2100 
2101 static int hdsp_set_da_gain(struct hdsp *hdsp, int mode)
2102 {
2103     hdsp->control_register &= ~HDSP_DAGainMask;
2104     switch (mode) {
2105     case 0:
2106         hdsp->control_register |= HDSP_DAGainHighGain;
2107         break;
2108     case 1:
2109         hdsp->control_register |= HDSP_DAGainPlus4dBu;
2110         break;
2111     case 2:
2112         hdsp->control_register |= HDSP_DAGainMinus10dBV;
2113         break;
2114     default:
2115         return -1;
2116 
2117     }
2118     hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
2119     return 0;
2120 }
2121 
2122 static int snd_hdsp_info_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2123 {
2124     static const char * const texts[] = {"Hi Gain", "+4 dBu", "-10 dbV"};
2125 
2126     return snd_ctl_enum_info(uinfo, 1, 3, texts);
2127 }
2128 
2129 static int snd_hdsp_get_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2130 {
2131     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2132 
2133     ucontrol->value.enumerated.item[0] = hdsp_da_gain(hdsp);
2134     return 0;
2135 }
2136 
2137 static int snd_hdsp_put_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2138 {
2139     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2140     int change;
2141     int val;
2142 
2143     if (!snd_hdsp_use_is_exclusive(hdsp))
2144         return -EBUSY;
2145     val = ucontrol->value.enumerated.item[0];
2146     if (val < 0) val = 0;
2147     if (val > 2) val = 2;
2148     spin_lock_irq(&hdsp->lock);
2149     if (val != hdsp_da_gain(hdsp))
2150         change = (hdsp_set_da_gain(hdsp, val) == 0) ? 1 : 0;
2151     else
2152         change = 0;
2153     spin_unlock_irq(&hdsp->lock);
2154     return change;
2155 }
2156 
2157 #define HDSP_AD_GAIN(xname, xindex) \
2158 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2159   .name = xname, \
2160   .index = xindex, \
2161   .info = snd_hdsp_info_ad_gain, \
2162   .get = snd_hdsp_get_ad_gain, \
2163   .put = snd_hdsp_put_ad_gain \
2164 }
2165 
2166 static int hdsp_ad_gain(struct hdsp *hdsp)
2167 {
2168     switch (hdsp->control_register & HDSP_ADGainMask) {
2169     case HDSP_ADGainMinus10dBV:
2170         return 0;
2171     case HDSP_ADGainPlus4dBu:
2172         return 1;
2173     case HDSP_ADGainLowGain:
2174         return 2;
2175     default:
2176         return 1;
2177     }
2178 }
2179 
2180 static int hdsp_set_ad_gain(struct hdsp *hdsp, int mode)
2181 {
2182     hdsp->control_register &= ~HDSP_ADGainMask;
2183     switch (mode) {
2184     case 0:
2185         hdsp->control_register |= HDSP_ADGainMinus10dBV;
2186         break;
2187     case 1:
2188         hdsp->control_register |= HDSP_ADGainPlus4dBu;
2189         break;
2190     case 2:
2191         hdsp->control_register |= HDSP_ADGainLowGain;
2192         break;
2193     default:
2194         return -1;
2195 
2196     }
2197     hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
2198     return 0;
2199 }
2200 
2201 static int snd_hdsp_info_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2202 {
2203     static const char * const texts[] = {"-10 dBV", "+4 dBu", "Lo Gain"};
2204 
2205     return snd_ctl_enum_info(uinfo, 1, 3, texts);
2206 }
2207 
2208 static int snd_hdsp_get_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2209 {
2210     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2211 
2212     ucontrol->value.enumerated.item[0] = hdsp_ad_gain(hdsp);
2213     return 0;
2214 }
2215 
2216 static int snd_hdsp_put_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2217 {
2218     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2219     int change;
2220     int val;
2221 
2222     if (!snd_hdsp_use_is_exclusive(hdsp))
2223         return -EBUSY;
2224     val = ucontrol->value.enumerated.item[0];
2225     if (val < 0) val = 0;
2226     if (val > 2) val = 2;
2227     spin_lock_irq(&hdsp->lock);
2228     if (val != hdsp_ad_gain(hdsp))
2229         change = (hdsp_set_ad_gain(hdsp, val) == 0) ? 1 : 0;
2230     else
2231         change = 0;
2232     spin_unlock_irq(&hdsp->lock);
2233     return change;
2234 }
2235 
2236 #define HDSP_PHONE_GAIN(xname, xindex) \
2237 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2238   .name = xname, \
2239   .index = xindex, \
2240   .info = snd_hdsp_info_phone_gain, \
2241   .get = snd_hdsp_get_phone_gain, \
2242   .put = snd_hdsp_put_phone_gain \
2243 }
2244 
2245 static int hdsp_phone_gain(struct hdsp *hdsp)
2246 {
2247     switch (hdsp->control_register & HDSP_PhoneGainMask) {
2248     case HDSP_PhoneGain0dB:
2249         return 0;
2250     case HDSP_PhoneGainMinus6dB:
2251         return 1;
2252     case HDSP_PhoneGainMinus12dB:
2253         return 2;
2254     default:
2255         return 0;
2256     }
2257 }
2258 
2259 static int hdsp_set_phone_gain(struct hdsp *hdsp, int mode)
2260 {
2261     hdsp->control_register &= ~HDSP_PhoneGainMask;
2262     switch (mode) {
2263     case 0:
2264         hdsp->control_register |= HDSP_PhoneGain0dB;
2265         break;
2266     case 1:
2267         hdsp->control_register |= HDSP_PhoneGainMinus6dB;
2268         break;
2269     case 2:
2270         hdsp->control_register |= HDSP_PhoneGainMinus12dB;
2271         break;
2272     default:
2273         return -1;
2274 
2275     }
2276     hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
2277     return 0;
2278 }
2279 
2280 static int snd_hdsp_info_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2281 {
2282     static const char * const texts[] = {"0 dB", "-6 dB", "-12 dB"};
2283 
2284     return snd_ctl_enum_info(uinfo, 1, 3, texts);
2285 }
2286 
2287 static int snd_hdsp_get_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2288 {
2289     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2290 
2291     ucontrol->value.enumerated.item[0] = hdsp_phone_gain(hdsp);
2292     return 0;
2293 }
2294 
2295 static int snd_hdsp_put_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2296 {
2297     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2298     int change;
2299     int val;
2300 
2301     if (!snd_hdsp_use_is_exclusive(hdsp))
2302         return -EBUSY;
2303     val = ucontrol->value.enumerated.item[0];
2304     if (val < 0) val = 0;
2305     if (val > 2) val = 2;
2306     spin_lock_irq(&hdsp->lock);
2307     if (val != hdsp_phone_gain(hdsp))
2308         change = (hdsp_set_phone_gain(hdsp, val) == 0) ? 1 : 0;
2309     else
2310         change = 0;
2311     spin_unlock_irq(&hdsp->lock);
2312     return change;
2313 }
2314 
2315 #define HDSP_PREF_SYNC_REF(xname, xindex) \
2316 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2317   .name = xname, \
2318   .index = xindex, \
2319   .info = snd_hdsp_info_pref_sync_ref, \
2320   .get = snd_hdsp_get_pref_sync_ref, \
2321   .put = snd_hdsp_put_pref_sync_ref \
2322 }
2323 
2324 static int hdsp_pref_sync_ref(struct hdsp *hdsp)
2325 {
2326     /* Notice that this looks at the requested sync source,
2327        not the one actually in use.
2328     */
2329 
2330     switch (hdsp->control_register & HDSP_SyncRefMask) {
2331     case HDSP_SyncRef_ADAT1:
2332         return HDSP_SYNC_FROM_ADAT1;
2333     case HDSP_SyncRef_ADAT2:
2334         return HDSP_SYNC_FROM_ADAT2;
2335     case HDSP_SyncRef_ADAT3:
2336         return HDSP_SYNC_FROM_ADAT3;
2337     case HDSP_SyncRef_SPDIF:
2338         return HDSP_SYNC_FROM_SPDIF;
2339     case HDSP_SyncRef_WORD:
2340         return HDSP_SYNC_FROM_WORD;
2341     case HDSP_SyncRef_ADAT_SYNC:
2342         return HDSP_SYNC_FROM_ADAT_SYNC;
2343     default:
2344         return HDSP_SYNC_FROM_WORD;
2345     }
2346     return 0;
2347 }
2348 
2349 static int hdsp_set_pref_sync_ref(struct hdsp *hdsp, int pref)
2350 {
2351     hdsp->control_register &= ~HDSP_SyncRefMask;
2352     switch (pref) {
2353     case HDSP_SYNC_FROM_ADAT1:
2354         hdsp->control_register &= ~HDSP_SyncRefMask; /* clear SyncRef bits */
2355         break;
2356     case HDSP_SYNC_FROM_ADAT2:
2357         hdsp->control_register |= HDSP_SyncRef_ADAT2;
2358         break;
2359     case HDSP_SYNC_FROM_ADAT3:
2360         hdsp->control_register |= HDSP_SyncRef_ADAT3;
2361         break;
2362     case HDSP_SYNC_FROM_SPDIF:
2363         hdsp->control_register |= HDSP_SyncRef_SPDIF;
2364         break;
2365     case HDSP_SYNC_FROM_WORD:
2366         hdsp->control_register |= HDSP_SyncRef_WORD;
2367         break;
2368     case HDSP_SYNC_FROM_ADAT_SYNC:
2369         hdsp->control_register |= HDSP_SyncRef_ADAT_SYNC;
2370         break;
2371     default:
2372         return -1;
2373     }
2374     hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
2375     return 0;
2376 }
2377 
2378 static int snd_hdsp_info_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2379 {
2380     static const char * const texts[] = {
2381         "Word", "IEC958", "ADAT1", "ADAT Sync", "ADAT2", "ADAT3"
2382     };
2383     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2384     int num_items;
2385 
2386     switch (hdsp->io_type) {
2387     case Digiface:
2388     case H9652:
2389         num_items = 6;
2390         break;
2391     case Multiface:
2392         num_items = 4;
2393         break;
2394     case H9632:
2395         num_items = 3;
2396         break;
2397     default:
2398         return -EINVAL;
2399     }
2400 
2401     return snd_ctl_enum_info(uinfo, 1, num_items, texts);
2402 }
2403 
2404 static int snd_hdsp_get_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2405 {
2406     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2407 
2408     ucontrol->value.enumerated.item[0] = hdsp_pref_sync_ref(hdsp);
2409     return 0;
2410 }
2411 
2412 static int snd_hdsp_put_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2413 {
2414     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2415     int change, max;
2416     unsigned int val;
2417 
2418     if (!snd_hdsp_use_is_exclusive(hdsp))
2419         return -EBUSY;
2420 
2421     switch (hdsp->io_type) {
2422     case Digiface:
2423     case H9652:
2424         max = 6;
2425         break;
2426     case Multiface:
2427         max = 4;
2428         break;
2429     case H9632:
2430         max = 3;
2431         break;
2432     default:
2433         return -EIO;
2434     }
2435 
2436     val = ucontrol->value.enumerated.item[0] % max;
2437     spin_lock_irq(&hdsp->lock);
2438     change = (int)val != hdsp_pref_sync_ref(hdsp);
2439     hdsp_set_pref_sync_ref(hdsp, val);
2440     spin_unlock_irq(&hdsp->lock);
2441     return change;
2442 }
2443 
2444 #define HDSP_AUTOSYNC_REF(xname, xindex) \
2445 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2446   .name = xname, \
2447   .index = xindex, \
2448   .access = SNDRV_CTL_ELEM_ACCESS_READ, \
2449   .info = snd_hdsp_info_autosync_ref, \
2450   .get = snd_hdsp_get_autosync_ref, \
2451 }
2452 
2453 static int hdsp_autosync_ref(struct hdsp *hdsp)
2454 {
2455     /* This looks at the autosync selected sync reference */
2456     unsigned int status2 = hdsp_read(hdsp, HDSP_status2Register);
2457 
2458     switch (status2 & HDSP_SelSyncRefMask) {
2459     case HDSP_SelSyncRef_WORD:
2460         return HDSP_AUTOSYNC_FROM_WORD;
2461     case HDSP_SelSyncRef_ADAT_SYNC:
2462         return HDSP_AUTOSYNC_FROM_ADAT_SYNC;
2463     case HDSP_SelSyncRef_SPDIF:
2464         return HDSP_AUTOSYNC_FROM_SPDIF;
2465     case HDSP_SelSyncRefMask:
2466         return HDSP_AUTOSYNC_FROM_NONE;
2467     case HDSP_SelSyncRef_ADAT1:
2468         return HDSP_AUTOSYNC_FROM_ADAT1;
2469     case HDSP_SelSyncRef_ADAT2:
2470         return HDSP_AUTOSYNC_FROM_ADAT2;
2471     case HDSP_SelSyncRef_ADAT3:
2472         return HDSP_AUTOSYNC_FROM_ADAT3;
2473     default:
2474         return HDSP_AUTOSYNC_FROM_WORD;
2475     }
2476     return 0;
2477 }
2478 
2479 static int snd_hdsp_info_autosync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2480 {
2481     static const char * const texts[] = {
2482         "Word", "ADAT Sync", "IEC958", "None", "ADAT1", "ADAT2", "ADAT3"
2483     };
2484 
2485     return snd_ctl_enum_info(uinfo, 1, 7, texts);
2486 }
2487 
2488 static int snd_hdsp_get_autosync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2489 {
2490     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2491 
2492     ucontrol->value.enumerated.item[0] = hdsp_autosync_ref(hdsp);
2493     return 0;
2494 }
2495 
2496 #define HDSP_PRECISE_POINTER(xname, xindex) \
2497 { .iface = SNDRV_CTL_ELEM_IFACE_CARD, \
2498   .name = xname, \
2499   .index = xindex, \
2500   .info = snd_hdsp_info_precise_pointer, \
2501   .get = snd_hdsp_get_precise_pointer, \
2502   .put = snd_hdsp_put_precise_pointer \
2503 }
2504 
2505 static int hdsp_set_precise_pointer(struct hdsp *hdsp, int precise)
2506 {
2507     if (precise)
2508         hdsp->precise_ptr = 1;
2509     else
2510         hdsp->precise_ptr = 0;
2511     return 0;
2512 }
2513 
2514 #define snd_hdsp_info_precise_pointer       snd_ctl_boolean_mono_info
2515 
2516 static int snd_hdsp_get_precise_pointer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2517 {
2518     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2519 
2520     spin_lock_irq(&hdsp->lock);
2521     ucontrol->value.integer.value[0] = hdsp->precise_ptr;
2522     spin_unlock_irq(&hdsp->lock);
2523     return 0;
2524 }
2525 
2526 static int snd_hdsp_put_precise_pointer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2527 {
2528     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2529     int change;
2530     unsigned int val;
2531 
2532     if (!snd_hdsp_use_is_exclusive(hdsp))
2533         return -EBUSY;
2534     val = ucontrol->value.integer.value[0] & 1;
2535     spin_lock_irq(&hdsp->lock);
2536     change = (int)val != hdsp->precise_ptr;
2537     hdsp_set_precise_pointer(hdsp, val);
2538     spin_unlock_irq(&hdsp->lock);
2539     return change;
2540 }
2541 
2542 #define HDSP_USE_MIDI_WORK(xname, xindex) \
2543 { .iface = SNDRV_CTL_ELEM_IFACE_CARD, \
2544   .name = xname, \
2545   .index = xindex, \
2546   .info = snd_hdsp_info_use_midi_work, \
2547   .get = snd_hdsp_get_use_midi_work, \
2548   .put = snd_hdsp_put_use_midi_work \
2549 }
2550 
2551 static int hdsp_set_use_midi_work(struct hdsp *hdsp, int use_work)
2552 {
2553     if (use_work)
2554         hdsp->use_midi_work = 1;
2555     else
2556         hdsp->use_midi_work = 0;
2557     return 0;
2558 }
2559 
2560 #define snd_hdsp_info_use_midi_work     snd_ctl_boolean_mono_info
2561 
2562 static int snd_hdsp_get_use_midi_work(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2563 {
2564     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2565 
2566     spin_lock_irq(&hdsp->lock);
2567     ucontrol->value.integer.value[0] = hdsp->use_midi_work;
2568     spin_unlock_irq(&hdsp->lock);
2569     return 0;
2570 }
2571 
2572 static int snd_hdsp_put_use_midi_work(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2573 {
2574     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2575     int change;
2576     unsigned int val;
2577 
2578     if (!snd_hdsp_use_is_exclusive(hdsp))
2579         return -EBUSY;
2580     val = ucontrol->value.integer.value[0] & 1;
2581     spin_lock_irq(&hdsp->lock);
2582     change = (int)val != hdsp->use_midi_work;
2583     hdsp_set_use_midi_work(hdsp, val);
2584     spin_unlock_irq(&hdsp->lock);
2585     return change;
2586 }
2587 
2588 #define HDSP_MIXER(xname, xindex) \
2589 { .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \
2590   .name = xname, \
2591   .index = xindex, \
2592   .device = 0, \
2593   .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | \
2594          SNDRV_CTL_ELEM_ACCESS_VOLATILE, \
2595   .info = snd_hdsp_info_mixer, \
2596   .get = snd_hdsp_get_mixer, \
2597   .put = snd_hdsp_put_mixer \
2598 }
2599 
2600 static int snd_hdsp_info_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2601 {
2602     uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
2603     uinfo->count = 3;
2604     uinfo->value.integer.min = 0;
2605     uinfo->value.integer.max = 65536;
2606     uinfo->value.integer.step = 1;
2607     return 0;
2608 }
2609 
2610 static int snd_hdsp_get_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2611 {
2612     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2613     int source;
2614     int destination;
2615     int addr;
2616 
2617     source = ucontrol->value.integer.value[0];
2618     destination = ucontrol->value.integer.value[1];
2619 
2620     if (source >= hdsp->max_channels)
2621         addr = hdsp_playback_to_output_key(hdsp,source-hdsp->max_channels,destination);
2622     else
2623         addr = hdsp_input_to_output_key(hdsp,source, destination);
2624 
2625     spin_lock_irq(&hdsp->lock);
2626     ucontrol->value.integer.value[2] = hdsp_read_gain (hdsp, addr);
2627     spin_unlock_irq(&hdsp->lock);
2628     return 0;
2629 }
2630 
2631 static int snd_hdsp_put_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2632 {
2633     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2634     int change;
2635     int source;
2636     int destination;
2637     int gain;
2638     int addr;
2639 
2640     if (!snd_hdsp_use_is_exclusive(hdsp))
2641         return -EBUSY;
2642 
2643     source = ucontrol->value.integer.value[0];
2644     destination = ucontrol->value.integer.value[1];
2645 
2646     if (source >= hdsp->max_channels)
2647         addr = hdsp_playback_to_output_key(hdsp,source-hdsp->max_channels, destination);
2648     else
2649         addr = hdsp_input_to_output_key(hdsp,source, destination);
2650 
2651     gain = ucontrol->value.integer.value[2];
2652 
2653     spin_lock_irq(&hdsp->lock);
2654     change = gain != hdsp_read_gain(hdsp, addr);
2655     if (change)
2656         hdsp_write_gain(hdsp, addr, gain);
2657     spin_unlock_irq(&hdsp->lock);
2658     return change;
2659 }
2660 
2661 #define HDSP_WC_SYNC_CHECK(xname, xindex) \
2662 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2663   .name = xname, \
2664   .index = xindex, \
2665   .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \
2666   .info = snd_hdsp_info_sync_check, \
2667   .get = snd_hdsp_get_wc_sync_check \
2668 }
2669 
2670 static int snd_hdsp_info_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2671 {
2672     static const char * const texts[] = {"No Lock", "Lock", "Sync" };
2673 
2674     return snd_ctl_enum_info(uinfo, 1, 3, texts);
2675 }
2676 
2677 static int hdsp_wc_sync_check(struct hdsp *hdsp)
2678 {
2679     int status2 = hdsp_read(hdsp, HDSP_status2Register);
2680     if (status2 & HDSP_wc_lock) {
2681         if (status2 & HDSP_wc_sync)
2682             return 2;
2683         else
2684              return 1;
2685     } else
2686         return 0;
2687     return 0;
2688 }
2689 
2690 static int snd_hdsp_get_wc_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2691 {
2692     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2693 
2694     ucontrol->value.enumerated.item[0] = hdsp_wc_sync_check(hdsp);
2695     return 0;
2696 }
2697 
2698 #define HDSP_SPDIF_SYNC_CHECK(xname, xindex) \
2699 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2700   .name = xname, \
2701   .index = xindex, \
2702   .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \
2703   .info = snd_hdsp_info_sync_check, \
2704   .get = snd_hdsp_get_spdif_sync_check \
2705 }
2706 
2707 static int hdsp_spdif_sync_check(struct hdsp *hdsp)
2708 {
2709     int status = hdsp_read(hdsp, HDSP_statusRegister);
2710     if (status & HDSP_SPDIFErrorFlag)
2711         return 0;
2712     else {
2713         if (status & HDSP_SPDIFSync)
2714             return 2;
2715         else
2716             return 1;
2717     }
2718     return 0;
2719 }
2720 
2721 static int snd_hdsp_get_spdif_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2722 {
2723     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2724 
2725     ucontrol->value.enumerated.item[0] = hdsp_spdif_sync_check(hdsp);
2726     return 0;
2727 }
2728 
2729 #define HDSP_ADATSYNC_SYNC_CHECK(xname, xindex) \
2730 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2731   .name = xname, \
2732   .index = xindex, \
2733   .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \
2734   .info = snd_hdsp_info_sync_check, \
2735   .get = snd_hdsp_get_adatsync_sync_check \
2736 }
2737 
2738 static int hdsp_adatsync_sync_check(struct hdsp *hdsp)
2739 {
2740     int status = hdsp_read(hdsp, HDSP_statusRegister);
2741     if (status & HDSP_TimecodeLock) {
2742         if (status & HDSP_TimecodeSync)
2743             return 2;
2744         else
2745             return 1;
2746     } else
2747         return 0;
2748 }
2749 
2750 static int snd_hdsp_get_adatsync_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2751 {
2752     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2753 
2754     ucontrol->value.enumerated.item[0] = hdsp_adatsync_sync_check(hdsp);
2755     return 0;
2756 }
2757 
2758 #define HDSP_ADAT_SYNC_CHECK \
2759 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2760   .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \
2761   .info = snd_hdsp_info_sync_check, \
2762   .get = snd_hdsp_get_adat_sync_check \
2763 }
2764 
2765 static int hdsp_adat_sync_check(struct hdsp *hdsp, int idx)
2766 {
2767     int status = hdsp_read(hdsp, HDSP_statusRegister);
2768 
2769     if (status & (HDSP_Lock0>>idx)) {
2770         if (status & (HDSP_Sync0>>idx))
2771             return 2;
2772         else
2773             return 1;
2774     } else
2775         return 0;
2776 }
2777 
2778 static int snd_hdsp_get_adat_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2779 {
2780     int offset;
2781     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2782 
2783     offset = ucontrol->id.index - 1;
2784     if (snd_BUG_ON(offset < 0))
2785         return -EINVAL;
2786 
2787     switch (hdsp->io_type) {
2788     case Digiface:
2789     case H9652:
2790         if (offset >= 3)
2791             return -EINVAL;
2792         break;
2793     case Multiface:
2794     case H9632:
2795         if (offset >= 1)
2796             return -EINVAL;
2797         break;
2798     default:
2799         return -EIO;
2800     }
2801 
2802     ucontrol->value.enumerated.item[0] = hdsp_adat_sync_check(hdsp, offset);
2803     return 0;
2804 }
2805 
2806 #define HDSP_DDS_OFFSET(xname, xindex) \
2807 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2808   .name = xname, \
2809   .index = xindex, \
2810   .info = snd_hdsp_info_dds_offset, \
2811   .get = snd_hdsp_get_dds_offset, \
2812   .put = snd_hdsp_put_dds_offset \
2813 }
2814 
2815 static int hdsp_dds_offset(struct hdsp *hdsp)
2816 {
2817     u64 n;
2818     unsigned int dds_value = hdsp->dds_value;
2819     int system_sample_rate = hdsp->system_sample_rate;
2820 
2821     if (!dds_value)
2822         return 0;
2823 
2824     n = DDS_NUMERATOR;
2825     /*
2826      * dds_value = n / rate
2827      * rate = n / dds_value
2828      */
2829     n = div_u64(n, dds_value);
2830     if (system_sample_rate >= 112000)
2831         n *= 4;
2832     else if (system_sample_rate >= 56000)
2833         n *= 2;
2834     return ((int)n) - system_sample_rate;
2835 }
2836 
2837 static int hdsp_set_dds_offset(struct hdsp *hdsp, int offset_hz)
2838 {
2839     int rate = hdsp->system_sample_rate + offset_hz;
2840     hdsp_set_dds_value(hdsp, rate);
2841     return 0;
2842 }
2843 
2844 static int snd_hdsp_info_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2845 {
2846     uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
2847     uinfo->count = 1;
2848     uinfo->value.integer.min = -5000;
2849     uinfo->value.integer.max = 5000;
2850     return 0;
2851 }
2852 
2853 static int snd_hdsp_get_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2854 {
2855     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2856 
2857     ucontrol->value.integer.value[0] = hdsp_dds_offset(hdsp);
2858     return 0;
2859 }
2860 
2861 static int snd_hdsp_put_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2862 {
2863     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2864     int change;
2865     int val;
2866 
2867     if (!snd_hdsp_use_is_exclusive(hdsp))
2868         return -EBUSY;
2869     val = ucontrol->value.integer.value[0];
2870     spin_lock_irq(&hdsp->lock);
2871     if (val != hdsp_dds_offset(hdsp))
2872         change = (hdsp_set_dds_offset(hdsp, val) == 0) ? 1 : 0;
2873     else
2874         change = 0;
2875     spin_unlock_irq(&hdsp->lock);
2876     return change;
2877 }
2878 
2879 static const struct snd_kcontrol_new snd_hdsp_9632_controls[] = {
2880 HDSP_DA_GAIN("DA Gain", 0),
2881 HDSP_AD_GAIN("AD Gain", 0),
2882 HDSP_PHONE_GAIN("Phones Gain", 0),
2883 HDSP_TOGGLE_SETTING("XLR Breakout Cable", HDSP_XLRBreakoutCable),
2884 HDSP_DDS_OFFSET("DDS Sample Rate Offset", 0)
2885 };
2886 
2887 static const struct snd_kcontrol_new snd_hdsp_controls[] = {
2888 {
2889     .iface =    SNDRV_CTL_ELEM_IFACE_PCM,
2890     .name =     SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT),
2891     .info =     snd_hdsp_control_spdif_info,
2892     .get =      snd_hdsp_control_spdif_get,
2893     .put =      snd_hdsp_control_spdif_put,
2894 },
2895 {
2896     .access =   SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE,
2897     .iface =    SNDRV_CTL_ELEM_IFACE_PCM,
2898     .name =     SNDRV_CTL_NAME_IEC958("",PLAYBACK,PCM_STREAM),
2899     .info =     snd_hdsp_control_spdif_stream_info,
2900     .get =      snd_hdsp_control_spdif_stream_get,
2901     .put =      snd_hdsp_control_spdif_stream_put,
2902 },
2903 {
2904     .access =   SNDRV_CTL_ELEM_ACCESS_READ,
2905     .iface =    SNDRV_CTL_ELEM_IFACE_PCM,
2906     .name =     SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK),
2907     .info =     snd_hdsp_control_spdif_mask_info,
2908     .get =      snd_hdsp_control_spdif_mask_get,
2909     .private_value = IEC958_AES0_NONAUDIO |
2910              IEC958_AES0_PROFESSIONAL |
2911              IEC958_AES0_CON_EMPHASIS,
2912 },
2913 {
2914     .access =   SNDRV_CTL_ELEM_ACCESS_READ,
2915     .iface =    SNDRV_CTL_ELEM_IFACE_PCM,
2916     .name =     SNDRV_CTL_NAME_IEC958("",PLAYBACK,PRO_MASK),
2917     .info =     snd_hdsp_control_spdif_mask_info,
2918     .get =      snd_hdsp_control_spdif_mask_get,
2919     .private_value = IEC958_AES0_NONAUDIO |
2920              IEC958_AES0_PROFESSIONAL |
2921              IEC958_AES0_PRO_EMPHASIS,
2922 },
2923 HDSP_MIXER("Mixer", 0),
2924 HDSP_SPDIF_IN("IEC958 Input Connector", 0),
2925 HDSP_TOGGLE_SETTING("IEC958 Output also on ADAT1", HDSP_SPDIFOpticalOut),
2926 HDSP_TOGGLE_SETTING("IEC958 Professional Bit", HDSP_SPDIFProfessional),
2927 HDSP_TOGGLE_SETTING("IEC958 Emphasis Bit", HDSP_SPDIFEmphasis),
2928 HDSP_TOGGLE_SETTING("IEC958 Non-audio Bit", HDSP_SPDIFNonAudio),
2929 /* 'Sample Clock Source' complies with the alsa control naming scheme */
2930 HDSP_CLOCK_SOURCE("Sample Clock Source", 0),
2931 {
2932     .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2933     .name = "Sample Clock Source Locking",
2934     .info = snd_hdsp_info_clock_source_lock,
2935     .get = snd_hdsp_get_clock_source_lock,
2936     .put = snd_hdsp_put_clock_source_lock,
2937 },
2938 HDSP_SYSTEM_CLOCK_MODE("System Clock Mode", 0),
2939 HDSP_PREF_SYNC_REF("Preferred Sync Reference", 0),
2940 HDSP_AUTOSYNC_REF("AutoSync Reference", 0),
2941 HDSP_SPDIF_SAMPLE_RATE("SPDIF Sample Rate", 0),
2942 HDSP_SYSTEM_SAMPLE_RATE("System Sample Rate", 0),
2943 /* 'External Rate' complies with the alsa control naming scheme */
2944 HDSP_AUTOSYNC_SAMPLE_RATE("External Rate", 0),
2945 HDSP_WC_SYNC_CHECK("Word Clock Lock Status", 0),
2946 HDSP_SPDIF_SYNC_CHECK("SPDIF Lock Status", 0),
2947 HDSP_ADATSYNC_SYNC_CHECK("ADAT Sync Lock Status", 0),
2948 HDSP_TOGGLE_SETTING("Line Out", HDSP_LineOut),
2949 HDSP_PRECISE_POINTER("Precise Pointer", 0),
2950 HDSP_USE_MIDI_WORK("Use Midi Tasklet", 0),
2951 };
2952 
2953 
2954 static int hdsp_rpm_input12(struct hdsp *hdsp)
2955 {
2956     switch (hdsp->control_register & HDSP_RPM_Inp12) {
2957     case HDSP_RPM_Inp12_Phon_6dB:
2958         return 0;
2959     case HDSP_RPM_Inp12_Phon_n6dB:
2960         return 2;
2961     case HDSP_RPM_Inp12_Line_0dB:
2962         return 3;
2963     case HDSP_RPM_Inp12_Line_n6dB:
2964         return 4;
2965     }
2966     return 1;
2967 }
2968 
2969 
2970 static int snd_hdsp_get_rpm_input12(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2971 {
2972     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2973 
2974     ucontrol->value.enumerated.item[0] = hdsp_rpm_input12(hdsp);
2975     return 0;
2976 }
2977 
2978 
2979 static int hdsp_set_rpm_input12(struct hdsp *hdsp, int mode)
2980 {
2981     hdsp->control_register &= ~HDSP_RPM_Inp12;
2982     switch (mode) {
2983     case 0:
2984         hdsp->control_register |= HDSP_RPM_Inp12_Phon_6dB;
2985         break;
2986     case 1:
2987         break;
2988     case 2:
2989         hdsp->control_register |= HDSP_RPM_Inp12_Phon_n6dB;
2990         break;
2991     case 3:
2992         hdsp->control_register |= HDSP_RPM_Inp12_Line_0dB;
2993         break;
2994     case 4:
2995         hdsp->control_register |= HDSP_RPM_Inp12_Line_n6dB;
2996         break;
2997     default:
2998         return -1;
2999     }
3000 
3001     hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3002     return 0;
3003 }
3004 
3005 
3006 static int snd_hdsp_put_rpm_input12(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
3007 {
3008     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
3009     int change;
3010     int val;
3011 
3012     if (!snd_hdsp_use_is_exclusive(hdsp))
3013         return -EBUSY;
3014     val = ucontrol->value.enumerated.item[0];
3015     if (val < 0)
3016         val = 0;
3017     if (val > 4)
3018         val = 4;
3019     spin_lock_irq(&hdsp->lock);
3020     if (val != hdsp_rpm_input12(hdsp))
3021         change = (hdsp_set_rpm_input12(hdsp, val) == 0) ? 1 : 0;
3022     else
3023         change = 0;
3024     spin_unlock_irq(&hdsp->lock);
3025     return change;
3026 }
3027 
3028 
3029 static int snd_hdsp_info_rpm_input(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
3030 {
3031     static const char * const texts[] = {
3032         "Phono +6dB", "Phono 0dB", "Phono -6dB", "Line 0dB", "Line -6dB"
3033     };
3034 
3035     return snd_ctl_enum_info(uinfo, 1, 5, texts);
3036 }
3037 
3038 
3039 static int hdsp_rpm_input34(struct hdsp *hdsp)
3040 {
3041     switch (hdsp->control_register & HDSP_RPM_Inp34) {
3042     case HDSP_RPM_Inp34_Phon_6dB:
3043         return 0;
3044     case HDSP_RPM_Inp34_Phon_n6dB:
3045         return 2;
3046     case HDSP_RPM_Inp34_Line_0dB:
3047         return 3;
3048     case HDSP_RPM_Inp34_Line_n6dB:
3049         return 4;
3050     }
3051     return 1;
3052 }
3053 
3054 
3055 static int snd_hdsp_get_rpm_input34(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
3056 {
3057     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
3058 
3059     ucontrol->value.enumerated.item[0] = hdsp_rpm_input34(hdsp);
3060     return 0;
3061 }
3062 
3063 
3064 static int hdsp_set_rpm_input34(struct hdsp *hdsp, int mode)
3065 {
3066     hdsp->control_register &= ~HDSP_RPM_Inp34;
3067     switch (mode) {
3068     case 0:
3069         hdsp->control_register |= HDSP_RPM_Inp34_Phon_6dB;
3070         break;
3071     case 1:
3072         break;
3073     case 2:
3074         hdsp->control_register |= HDSP_RPM_Inp34_Phon_n6dB;
3075         break;
3076     case 3:
3077         hdsp->control_register |= HDSP_RPM_Inp34_Line_0dB;
3078         break;
3079     case 4:
3080         hdsp->control_register |= HDSP_RPM_Inp34_Line_n6dB;
3081         break;
3082     default:
3083         return -1;
3084     }
3085 
3086     hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3087     return 0;
3088 }
3089 
3090 
3091 static int snd_hdsp_put_rpm_input34(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
3092 {
3093     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
3094     int change;
3095     int val;
3096 
3097     if (!snd_hdsp_use_is_exclusive(hdsp))
3098         return -EBUSY;
3099     val = ucontrol->value.enumerated.item[0];
3100     if (val < 0)
3101         val = 0;
3102     if (val > 4)
3103         val = 4;
3104     spin_lock_irq(&hdsp->lock);
3105     if (val != hdsp_rpm_input34(hdsp))
3106         change = (hdsp_set_rpm_input34(hdsp, val) == 0) ? 1 : 0;
3107     else
3108         change = 0;
3109     spin_unlock_irq(&hdsp->lock);
3110     return change;
3111 }
3112 
3113 
3114 /* RPM Bypass switch */
3115 static int hdsp_rpm_bypass(struct hdsp *hdsp)
3116 {
3117     return (hdsp->control_register & HDSP_RPM_Bypass) ? 1 : 0;
3118 }
3119 
3120 
3121 static int snd_hdsp_get_rpm_bypass(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
3122 {
3123     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
3124 
3125     ucontrol->value.integer.value[0] = hdsp_rpm_bypass(hdsp);
3126     return 0;
3127 }
3128 
3129 
3130 static int hdsp_set_rpm_bypass(struct hdsp *hdsp, int on)
3131 {
3132     if (on)
3133         hdsp->control_register |= HDSP_RPM_Bypass;
3134     else
3135         hdsp->control_register &= ~HDSP_RPM_Bypass;
3136     hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3137     return 0;
3138 }
3139 
3140 
3141 static int snd_hdsp_put_rpm_bypass(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
3142 {
3143     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
3144     int change;
3145     unsigned int val;
3146 
3147     if (!snd_hdsp_use_is_exclusive(hdsp))
3148         return -EBUSY;
3149     val = ucontrol->value.integer.value[0] & 1;
3150     spin_lock_irq(&hdsp->lock);
3151     change = (int)val != hdsp_rpm_bypass(hdsp);
3152     hdsp_set_rpm_bypass(hdsp, val);
3153     spin_unlock_irq(&hdsp->lock);
3154     return change;
3155 }
3156 
3157 
3158 static int snd_hdsp_info_rpm_bypass(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
3159 {
3160     static const char * const texts[] = {"On", "Off"};
3161 
3162     return snd_ctl_enum_info(uinfo, 1, 2, texts);
3163 }
3164 
3165 
3166 /* RPM Disconnect switch */
3167 static int hdsp_rpm_disconnect(struct hdsp *hdsp)
3168 {
3169     return (hdsp->control_register & HDSP_RPM_Disconnect) ? 1 : 0;
3170 }
3171 
3172 
3173 static int snd_hdsp_get_rpm_disconnect(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
3174 {
3175     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
3176 
3177     ucontrol->value.integer.value[0] = hdsp_rpm_disconnect(hdsp);
3178     return 0;
3179 }
3180 
3181 
3182 static int hdsp_set_rpm_disconnect(struct hdsp *hdsp, int on)
3183 {
3184     if (on)
3185         hdsp->control_register |= HDSP_RPM_Disconnect;
3186     else
3187         hdsp->control_register &= ~HDSP_RPM_Disconnect;
3188     hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3189     return 0;
3190 }
3191 
3192 
3193 static int snd_hdsp_put_rpm_disconnect(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
3194 {
3195     struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
3196     int change;
3197     unsigned int val;
3198 
3199     if (!snd_hdsp_use_is_exclusive(hdsp))
3200         return -EBUSY;
3201     val = ucontrol->value.integer.value[0] & 1;
3202     spin_lock_irq(&hdsp->lock);
3203     change = (int)val != hdsp_rpm_disconnect(hdsp);
3204     hdsp_set_rpm_disconnect(hdsp, val);
3205     spin_unlock_irq(&hdsp->lock);
3206     return change;
3207 }
3208 
3209 static int snd_hdsp_info_rpm_disconnect(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
3210 {
3211     static const char * const texts[] = {"On", "Off"};
3212 
3213     return snd_ctl_enum_info(uinfo, 1, 2, texts);
3214 }
3215 
3216 static const struct snd_kcontrol_new snd_hdsp_rpm_controls[] = {
3217     {
3218         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3219         .name = "RPM Bypass",
3220         .get = snd_hdsp_get_rpm_bypass,
3221         .put = snd_hdsp_put_rpm_bypass,
3222         .info = snd_hdsp_info_rpm_bypass
3223     },
3224     {
3225         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3226         .name = "RPM Disconnect",
3227         .get = snd_hdsp_get_rpm_disconnect,
3228         .put = snd_hdsp_put_rpm_disconnect,
3229         .info = snd_hdsp_info_rpm_disconnect
3230     },
3231     {
3232         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3233         .name = "Input 1/2",
3234         .get = snd_hdsp_get_rpm_input12,
3235         .put = snd_hdsp_put_rpm_input12,
3236         .info = snd_hdsp_info_rpm_input
3237     },
3238     {
3239         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3240         .name = "Input 3/4",
3241         .get = snd_hdsp_get_rpm_input34,
3242         .put = snd_hdsp_put_rpm_input34,
3243         .info = snd_hdsp_info_rpm_input
3244     },
3245     HDSP_SYSTEM_SAMPLE_RATE("System Sample Rate", 0),
3246     HDSP_MIXER("Mixer", 0)
3247 };
3248 
3249 static const struct snd_kcontrol_new snd_hdsp_96xx_aeb =
3250     HDSP_TOGGLE_SETTING("Analog Extension Board",
3251             HDSP_AnalogExtensionBoard);
3252 static struct snd_kcontrol_new snd_hdsp_adat_sync_check = HDSP_ADAT_SYNC_CHECK;
3253 
3254 
3255 static bool hdsp_loopback_get(struct hdsp *const hdsp, const u8 channel)
3256 {
3257     return hdsp->io_loopback & (1 << channel);
3258 }
3259 
3260 static int hdsp_loopback_set(struct hdsp *const hdsp, const u8 channel, const bool enable)
3261 {
3262     if (hdsp_loopback_get(hdsp, channel) == enable)
3263         return 0;
3264 
3265     hdsp->io_loopback ^= (1 << channel);
3266 
3267     hdsp_write(hdsp, HDSP_inputEnable + (4 * (hdsp->max_channels + channel)), enable);
3268 
3269     return 1;
3270 }
3271 
3272 static int snd_hdsp_loopback_get(struct snd_kcontrol *const kcontrol,
3273                  struct snd_ctl_elem_value *const ucontrol)
3274 {
3275     struct hdsp *const hdsp = snd_kcontrol_chip(kcontrol);
3276     const u8 channel = snd_ctl_get_ioff(kcontrol, &ucontrol->id);
3277 
3278     if (channel >= hdsp->max_channels)
3279         return -ENOENT;
3280 
3281     ucontrol->value.integer.value[0] = hdsp_loopback_get(hdsp, channel);
3282 
3283     return 0;
3284 }
3285 
3286 static int snd_hdsp_loopback_put(struct snd_kcontrol *const kcontrol,
3287                  struct snd_ctl_elem_value *const ucontrol)
3288 {
3289     struct hdsp *const hdsp = snd_kcontrol_chip(kcontrol);
3290     const u8 channel = snd_ctl_get_ioff(kcontrol, &ucontrol->id);
3291     const bool enable = ucontrol->value.integer.value[0] & 1;
3292 
3293     if (channel >= hdsp->max_channels)
3294         return -ENOENT;
3295 
3296     return hdsp_loopback_set(hdsp, channel, enable);
3297 }
3298 
3299 static struct snd_kcontrol_new snd_hdsp_loopback_control = {
3300     .iface = SNDRV_CTL_ELEM_IFACE_HWDEP,
3301     .name = "Output Loopback",
3302     .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3303     .info = snd_ctl_boolean_mono_info,
3304     .get = snd_hdsp_loopback_get,
3305     .put = snd_hdsp_loopback_put
3306 };
3307 
3308 static int snd_hdsp_create_controls(struct snd_card *card, struct hdsp *hdsp)
3309 {
3310     unsigned int idx;
3311     int err;
3312     struct snd_kcontrol *kctl;
3313 
3314     if (hdsp->io_type == RPM) {
3315         /* RPM Bypass, Disconnect and Input switches */
3316         for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_rpm_controls); idx++) {
3317             err = snd_ctl_add(card, snd_ctl_new1(&snd_hdsp_rpm_controls[idx], hdsp));
3318             if (err < 0)
3319                 return err;
3320         }
3321         return 0;
3322     }
3323 
3324     for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_controls); idx++) {
3325         kctl = snd_ctl_new1(&snd_hdsp_controls[idx], hdsp);
3326         err = snd_ctl_add(card, kctl);
3327         if (err < 0)
3328             return err;
3329         if (idx == 1)   /* IEC958 (S/PDIF) Stream */
3330             hdsp->spdif_ctl = kctl;
3331     }
3332 
3333     /* ADAT SyncCheck status */
3334     snd_hdsp_adat_sync_check.name = "ADAT Lock Status";
3335     snd_hdsp_adat_sync_check.index = 1;
3336     kctl = snd_ctl_new1(&snd_hdsp_adat_sync_check, hdsp);
3337     err = snd_ctl_add(card, kctl);
3338     if (err < 0)
3339         return err;
3340     if (hdsp->io_type == Digiface || hdsp->io_type == H9652) {
3341         for (idx = 1; idx < 3; ++idx) {
3342             snd_hdsp_adat_sync_check.index = idx+1;
3343             kctl = snd_ctl_new1(&snd_hdsp_adat_sync_check, hdsp);
3344             err = snd_ctl_add(card, kctl);
3345             if (err < 0)
3346                 return err;
3347         }
3348     }
3349 
3350     /* DA, AD and Phone gain and XLR breakout cable controls for H9632 cards */
3351     if (hdsp->io_type == H9632) {
3352         for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_9632_controls); idx++) {
3353             kctl = snd_ctl_new1(&snd_hdsp_9632_controls[idx], hdsp);
3354             err = snd_ctl_add(card, kctl);
3355             if (err < 0)
3356                 return err;
3357         }
3358     }
3359 
3360     /* Output loopback controls for H9632 cards */
3361     if (hdsp->io_type == H9632) {
3362         snd_hdsp_loopback_control.count = hdsp->max_channels;
3363         kctl = snd_ctl_new1(&snd_hdsp_loopback_control, hdsp);
3364         if (kctl == NULL)
3365             return -ENOMEM;
3366         err = snd_ctl_add(card, kctl);
3367         if (err < 0)
3368             return err;
3369     }
3370 
3371     /* AEB control for H96xx card */
3372     if (hdsp->io_type == H9632 || hdsp->io_type == H9652) {
3373         kctl = snd_ctl_new1(&snd_hdsp_96xx_aeb, hdsp);
3374         err = snd_ctl_add(card, kctl);
3375         if (err < 0)
3376             return err;
3377     }
3378 
3379     return 0;
3380 }
3381 
3382 /*------------------------------------------------------------
3383    /proc interface
3384  ------------------------------------------------------------*/
3385 
3386 static void
3387 snd_hdsp_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
3388 {
3389     struct hdsp *hdsp = entry->private_data;
3390     unsigned int status;
3391     unsigned int status2;
3392     char *pref_sync_ref;
3393     char *autosync_ref;
3394     char *system_clock_mode;
3395     char *clock_source;
3396     int x;
3397 
3398     status = hdsp_read(hdsp, HDSP_statusRegister);
3399     status2 = hdsp_read(hdsp, HDSP_status2Register);
3400 
3401     snd_iprintf(buffer, "%s (Card #%d)\n", hdsp->card_name,
3402             hdsp->card->number + 1);
3403     snd_iprintf(buffer, "Buffers: capture %p playback %p\n",
3404             hdsp->capture_buffer, hdsp->playback_buffer);
3405     snd_iprintf(buffer, "IRQ: %d Registers bus: 0x%lx VM: 0x%lx\n",
3406             hdsp->irq, hdsp->port, (unsigned long)hdsp->iobase);
3407     snd_iprintf(buffer, "Control register: 0x%x\n", hdsp->control_register);
3408     snd_iprintf(buffer, "Control2 register: 0x%x\n",
3409             hdsp->control2_register);
3410     snd_iprintf(buffer, "Status register: 0x%x\n", status);
3411     snd_iprintf(buffer, "Status2 register: 0x%x\n", status2);
3412 
3413     if (hdsp_check_for_iobox(hdsp)) {
3414         snd_iprintf(buffer, "No I/O box connected.\n"
3415                 "Please connect one and upload firmware.\n");
3416         return;
3417     }
3418 
3419     if (hdsp_check_for_firmware(hdsp, 0)) {
3420         if (hdsp->state & HDSP_FirmwareCached) {
3421             if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) {
3422                 snd_iprintf(buffer, "Firmware loading from "
3423                         "cache failed, "
3424                         "please upload manually.\n");
3425                 return;
3426             }
3427         } else {
3428             int err;
3429 
3430             err = hdsp_request_fw_loader(hdsp);
3431             if (err < 0) {
3432                 snd_iprintf(buffer,
3433                         "No firmware loaded nor cached, "
3434                         "please upload firmware.\n");
3435                 return;
3436             }
3437         }
3438     }
3439 
3440     snd_iprintf(buffer, "FIFO status: %d\n", hdsp_read(hdsp, HDSP_fifoStatus) & 0xff);
3441     snd_iprintf(buffer, "MIDI1 Output status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusOut0));
3442     snd_iprintf(buffer, "MIDI1 Input status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusIn0));
3443     snd_iprintf(buffer, "MIDI2 Output status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusOut1));
3444     snd_iprintf(buffer, "MIDI2 Input status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusIn1));
3445     snd_iprintf(buffer, "Use Midi Tasklet: %s\n", hdsp->use_midi_work ? "on" : "off");
3446 
3447     snd_iprintf(buffer, "\n");
3448 
3449     x = 1 << (6 + hdsp_decode_latency(hdsp->control_register & HDSP_LatencyMask));
3450 
3451     snd_iprintf(buffer, "Buffer Size (Latency): %d samples (2 periods of %lu bytes)\n", x, (unsigned long) hdsp->period_bytes);
3452     snd_iprintf(buffer, "Hardware pointer (frames): %ld\n", hdsp_hw_pointer(hdsp));
3453     snd_iprintf(buffer, "Precise pointer: %s\n", hdsp->precise_ptr ? "on" : "off");
3454     snd_iprintf(buffer, "Line out: %s\n", (hdsp->control_register & HDSP_LineOut) ? "on" : "off");
3455 
3456     snd_iprintf(buffer, "Firmware version: %d\n", (status2&HDSP_version0)|(status2&HDSP_version1)<<1|(status2&HDSP_version2)<<2);
3457 
3458     snd_iprintf(buffer, "\n");
3459 
3460     switch (hdsp_clock_source(hdsp)) {
3461     case HDSP_CLOCK_SOURCE_AUTOSYNC:
3462         clock_source = "AutoSync";
3463         break;
3464     case HDSP_CLOCK_SOURCE_INTERNAL_32KHZ:
3465         clock_source = "Internal 32 kHz";
3466         break;
3467     case HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ:
3468         clock_source = "Internal 44.1 kHz";
3469         break;
3470     case HDSP_CLOCK_SOURCE_INTERNAL_48KHZ:
3471         clock_source = "Internal 48 kHz";
3472         break;
3473     case HDSP_CLOCK_SOURCE_INTERNAL_64KHZ:
3474         clock_source = "Internal 64 kHz";
3475         break;
3476     case HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ:
3477         clock_source = "Internal 88.2 kHz";
3478         break;
3479     case HDSP_CLOCK_SOURCE_INTERNAL_96KHZ:
3480         clock_source = "Internal 96 kHz";
3481         break;
3482     case HDSP_CLOCK_SOURCE_INTERNAL_128KHZ:
3483         clock_source = "Internal 128 kHz";
3484         break;
3485     case HDSP_CLOCK_SOURCE_INTERNAL_176_4KHZ:
3486         clock_source = "Internal 176.4 kHz";
3487         break;
3488         case HDSP_CLOCK_SOURCE_INTERNAL_192KHZ:
3489         clock_source = "Internal 192 kHz";
3490         break;
3491     default:
3492         clock_source = "Error";
3493     }
3494     snd_iprintf (buffer, "Sample Clock Source: %s\n", clock_source);
3495 
3496     if (hdsp_system_clock_mode(hdsp))
3497         system_clock_mode = "Slave";
3498     else
3499         system_clock_mode = "Master";
3500 
3501     switch (hdsp_pref_sync_ref (hdsp)) {
3502     case HDSP_SYNC_FROM_WORD:
3503         pref_sync_ref = "Word Clock";
3504         break;
3505     case HDSP_SYNC_FROM_ADAT_SYNC:
3506         pref_sync_ref = "ADAT Sync";
3507         break;
3508     case HDSP_SYNC_FROM_SPDIF:
3509         pref_sync_ref = "SPDIF";
3510         break;
3511     case HDSP_SYNC_FROM_ADAT1:
3512         pref_sync_ref = "ADAT1";
3513         break;
3514     case HDSP_SYNC_FROM_ADAT2:
3515         pref_sync_ref = "ADAT2";
3516         break;
3517     case HDSP_SYNC_FROM_ADAT3:
3518         pref_sync_ref = "ADAT3";
3519         break;
3520     default:
3521         pref_sync_ref = "Word Clock";
3522         break;
3523     }
3524     snd_iprintf (buffer, "Preferred Sync Reference: %s\n", pref_sync_ref);
3525 
3526     switch (hdsp_autosync_ref (hdsp)) {
3527     case HDSP_AUTOSYNC_FROM_WORD:
3528         autosync_ref = "Word Clock";
3529         break;
3530     case HDSP_AUTOSYNC_FROM_ADAT_SYNC:
3531         autosync_ref = "ADAT Sync";
3532         break;
3533     case HDSP_AUTOSYNC_FROM_SPDIF:
3534         autosync_ref = "SPDIF";
3535         break;
3536     case HDSP_AUTOSYNC_FROM_NONE:
3537         autosync_ref = "None";
3538         break;
3539     case HDSP_AUTOSYNC_FROM_ADAT1:
3540         autosync_ref = "ADAT1";
3541         break;
3542     case HDSP_AUTOSYNC_FROM_ADAT2:
3543         autosync_ref = "ADAT2";
3544         break;
3545     case HDSP_AUTOSYNC_FROM_ADAT3:
3546         autosync_ref = "ADAT3";
3547         break;
3548     default:
3549         autosync_ref = "---";
3550         break;
3551     }
3552     snd_iprintf (buffer, "AutoSync Reference: %s\n", autosync_ref);
3553 
3554     snd_iprintf (buffer, "AutoSync Frequency: %d\n", hdsp_external_sample_rate(hdsp));
3555 
3556     snd_iprintf (buffer, "System Clock Mode: %s\n", system_clock_mode);
3557 
3558     snd_iprintf (buffer, "System Clock Frequency: %d\n", hdsp->system_sample_rate);
3559     snd_iprintf (buffer, "System Clock Locked: %s\n", hdsp->clock_source_locked ? "Yes" : "No");
3560 
3561     snd_iprintf(buffer, "\n");
3562 
3563     if (hdsp->io_type != RPM) {
3564         switch (hdsp_spdif_in(hdsp)) {
3565         case HDSP_SPDIFIN_OPTICAL:
3566             snd_iprintf(buffer, "IEC958 input: Optical\n");
3567             break;
3568         case HDSP_SPDIFIN_COAXIAL:
3569             snd_iprintf(buffer, "IEC958 input: Coaxial\n");
3570             break;
3571         case HDSP_SPDIFIN_INTERNAL:
3572             snd_iprintf(buffer, "IEC958 input: Internal\n");
3573             break;
3574         case HDSP_SPDIFIN_AES:
3575             snd_iprintf(buffer, "IEC958 input: AES\n");
3576             break;
3577         default:
3578             snd_iprintf(buffer, "IEC958 input: ???\n");
3579             break;
3580         }
3581     }
3582 
3583     if (RPM == hdsp->io_type) {
3584         if (hdsp->control_register & HDSP_RPM_Bypass)
3585             snd_iprintf(buffer, "RPM Bypass: disabled\n");
3586         else
3587             snd_iprintf(buffer, "RPM Bypass: enabled\n");
3588         if (hdsp->control_register & HDSP_RPM_Disconnect)
3589             snd_iprintf(buffer, "RPM disconnected\n");
3590         else
3591             snd_iprintf(buffer, "RPM connected\n");
3592 
3593         switch (hdsp->control_register & HDSP_RPM_Inp12) {
3594         case HDSP_RPM_Inp12_Phon_6dB:
3595             snd_iprintf(buffer, "Input 1/2: Phono, 6dB\n");
3596             break;
3597         case HDSP_RPM_Inp12_Phon_0dB:
3598             snd_iprintf(buffer, "Input 1/2: Phono, 0dB\n");
3599             break;
3600         case HDSP_RPM_Inp12_Phon_n6dB:
3601             snd_iprintf(buffer, "Input 1/2: Phono, -6dB\n");
3602             break;
3603         case HDSP_RPM_Inp12_Line_0dB:
3604             snd_iprintf(buffer, "Input 1/2: Line, 0dB\n");
3605             break;
3606         case HDSP_RPM_Inp12_Line_n6dB:
3607             snd_iprintf(buffer, "Input 1/2: Line, -6dB\n");
3608             break;
3609         default:
3610             snd_iprintf(buffer, "Input 1/2: ???\n");
3611         }
3612 
3613         switch (hdsp->control_register & HDSP_RPM_Inp34) {
3614         case HDSP_RPM_Inp34_Phon_6dB:
3615             snd_iprintf(buffer, "Input 3/4: Phono, 6dB\n");
3616             break;
3617         case HDSP_RPM_Inp34_Phon_0dB:
3618             snd_iprintf(buffer, "Input 3/4: Phono, 0dB\n");
3619             break;
3620         case HDSP_RPM_Inp34_Phon_n6dB:
3621             snd_iprintf(buffer, "Input 3/4: Phono, -6dB\n");
3622             break;
3623         case HDSP_RPM_Inp34_Line_0dB:
3624             snd_iprintf(buffer, "Input 3/4: Line, 0dB\n");
3625             break;
3626         case HDSP_RPM_Inp34_Line_n6dB:
3627             snd_iprintf(buffer, "Input 3/4: Line, -6dB\n");
3628             break;
3629         default:
3630             snd_iprintf(buffer, "Input 3/4: ???\n");
3631         }
3632 
3633     } else {
3634         if (hdsp->control_register & HDSP_SPDIFOpticalOut)
3635             snd_iprintf(buffer, "IEC958 output: Coaxial & ADAT1\n");
3636         else
3637             snd_iprintf(buffer, "IEC958 output: Coaxial only\n");
3638 
3639         if (hdsp->control_register & HDSP_SPDIFProfessional)
3640             snd_iprintf(buffer, "IEC958 quality: Professional\n");
3641         else
3642             snd_iprintf(buffer, "IEC958 quality: Consumer\n");
3643 
3644         if (hdsp->control_register & HDSP_SPDIFEmphasis)
3645             snd_iprintf(buffer, "IEC958 emphasis: on\n");
3646         else
3647             snd_iprintf(buffer, "IEC958 emphasis: off\n");
3648 
3649         if (hdsp->control_register & HDSP_SPDIFNonAudio)
3650             snd_iprintf(buffer, "IEC958 NonAudio: on\n");
3651         else
3652             snd_iprintf(buffer, "IEC958 NonAudio: off\n");
3653         x = hdsp_spdif_sample_rate(hdsp);
3654         if (x != 0)
3655             snd_iprintf(buffer, "IEC958 sample rate: %d\n", x);
3656         else
3657             snd_iprintf(buffer, "IEC958 sample rate: Error flag set\n");
3658     }
3659     snd_iprintf(buffer, "\n");
3660 
3661     /* Sync Check */
3662     x = status & HDSP_Sync0;
3663     if (status & HDSP_Lock0)
3664         snd_iprintf(buffer, "ADAT1: %s\n", x ? "Sync" : "Lock");
3665     else
3666         snd_iprintf(buffer, "ADAT1: No Lock\n");
3667 
3668     switch (hdsp->io_type) {
3669     case Digiface:
3670     case H9652:
3671         x = status & HDSP_Sync1;
3672         if (status & HDSP_Lock1)
3673             snd_iprintf(buffer, "ADAT2: %s\n", x ? "Sync" : "Lock");
3674         else
3675             snd_iprintf(buffer, "ADAT2: No Lock\n");
3676         x = status & HDSP_Sync2;
3677         if (status & HDSP_Lock2)
3678             snd_iprintf(buffer, "ADAT3: %s\n", x ? "Sync" : "Lock");
3679         else
3680             snd_iprintf(buffer, "ADAT3: No Lock\n");
3681         break;
3682     default:
3683         /* relax */
3684         break;
3685     }
3686 
3687     x = status & HDSP_SPDIFSync;
3688     if (status & HDSP_SPDIFErrorFlag)
3689         snd_iprintf (buffer, "SPDIF: No Lock\n");
3690     else
3691         snd_iprintf (buffer, "SPDIF: %s\n", x ? "Sync" : "Lock");
3692 
3693     x = status2 & HDSP_wc_sync;
3694     if (status2 & HDSP_wc_lock)
3695         snd_iprintf (buffer, "Word Clock: %s\n", x ? "Sync" : "Lock");
3696     else
3697         snd_iprintf (buffer, "Word Clock: No Lock\n");
3698 
3699     x = status & HDSP_TimecodeSync;
3700     if (status & HDSP_TimecodeLock)
3701         snd_iprintf(buffer, "ADAT Sync: %s\n", x ? "Sync" : "Lock");
3702     else
3703         snd_iprintf(buffer, "ADAT Sync: No Lock\n");
3704 
3705     snd_iprintf(buffer, "\n");
3706 
3707     /* Informations about H9632 specific controls */
3708     if (hdsp->io_type == H9632) {
3709         char *tmp;
3710 
3711         switch (hdsp_ad_gain(hdsp)) {
3712         case 0:
3713             tmp = "-10 dBV";
3714             break;
3715         case 1:
3716             tmp = "+4 dBu";
3717             break;
3718         default:
3719             tmp = "Lo Gain";
3720             break;
3721         }
3722         snd_iprintf(buffer, "AD Gain : %s\n", tmp);
3723 
3724         switch (hdsp_da_gain(hdsp)) {
3725         case 0:
3726             tmp = "Hi Gain";
3727             break;
3728         case 1:
3729             tmp = "+4 dBu";
3730             break;
3731         default:
3732             tmp = "-10 dBV";
3733             break;
3734         }
3735         snd_iprintf(buffer, "DA Gain : %s\n", tmp);
3736 
3737         switch (hdsp_phone_gain(hdsp)) {
3738         case 0:
3739             tmp = "0 dB";
3740             break;
3741         case 1:
3742             tmp = "-6 dB";
3743             break;
3744         default:
3745             tmp = "-12 dB";
3746             break;
3747         }
3748         snd_iprintf(buffer, "Phones Gain : %s\n", tmp);
3749 
3750         snd_iprintf(buffer, "XLR Breakout Cable : %s\n",
3751             hdsp_toggle_setting(hdsp, HDSP_XLRBreakoutCable) ?
3752             "yes" : "no");
3753 
3754         if (hdsp->control_register & HDSP_AnalogExtensionBoard)
3755             snd_iprintf(buffer, "AEB : on (ADAT1 internal)\n");
3756         else
3757             snd_iprintf(buffer, "AEB : off (ADAT1 external)\n");
3758         snd_iprintf(buffer, "\n");
3759     }
3760 
3761 }
3762 
3763 static void snd_hdsp_proc_init(struct hdsp *hdsp)
3764 {
3765     snd_card_ro_proc_new(hdsp->card, "hdsp", hdsp, snd_hdsp_proc_read);
3766 }
3767 
3768 static int snd_hdsp_initialize_memory(struct hdsp *hdsp)
3769 {
3770     struct snd_dma_buffer *capture_dma, *playback_dma;
3771 
3772     capture_dma = snd_hammerfall_get_buffer(hdsp->pci, HDSP_DMA_AREA_BYTES);
3773     playback_dma = snd_hammerfall_get_buffer(hdsp->pci, HDSP_DMA_AREA_BYTES);
3774     if (!capture_dma || !playback_dma) {
3775         dev_err(hdsp->card->dev,
3776             "%s: no buffers available\n", hdsp->card_name);
3777         return -ENOMEM;
3778     }
3779 
3780     /* copy to the own data for alignment */
3781     hdsp->capture_dma_buf = *capture_dma;
3782     hdsp->playback_dma_buf = *playback_dma;
3783 
3784     /* Align to bus-space 64K boundary */
3785     hdsp->capture_dma_buf.addr = ALIGN(capture_dma->addr, 0x10000ul);
3786     hdsp->playback_dma_buf.addr = ALIGN(playback_dma->addr, 0x10000ul);
3787 
3788     /* Tell the card where it is */
3789     hdsp_write(hdsp, HDSP_inputBufferAddress, hdsp->capture_dma_buf.addr);
3790     hdsp_write(hdsp, HDSP_outputBufferAddress, hdsp->playback_dma_buf.addr);
3791 
3792     hdsp->capture_dma_buf.area += hdsp->capture_dma_buf.addr - capture_dma->addr;
3793     hdsp->playback_dma_buf.area += hdsp->playback_dma_buf.addr - playback_dma->addr;
3794     hdsp->capture_buffer = hdsp->capture_dma_buf.area;
3795     hdsp->playback_buffer = hdsp->playback_dma_buf.area;
3796 
3797     return 0;
3798 }
3799 
3800 static int snd_hdsp_set_defaults(struct hdsp *hdsp)
3801 {
3802     unsigned int i;
3803 
3804     /* ASSUMPTION: hdsp->lock is either held, or
3805        there is no need to hold it (e.g. during module
3806        initialization).
3807      */
3808 
3809     /* set defaults:
3810 
3811        SPDIF Input via Coax
3812        Master clock mode
3813        maximum latency (7 => 2^7 = 8192 samples, 64Kbyte buffer,
3814                         which implies 2 4096 sample, 32Kbyte periods).
3815            Enable line out.
3816      */
3817 
3818     hdsp->control_register = HDSP_ClockModeMaster |
3819                          HDSP_SPDIFInputCoaxial |
3820                          hdsp_encode_latency(7) |
3821                          HDSP_LineOut;
3822 
3823 
3824     hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3825 
3826 #ifdef SNDRV_BIG_ENDIAN
3827     hdsp->control2_register = HDSP_BIGENDIAN_MODE;
3828 #else
3829     hdsp->control2_register = 0;
3830 #endif
3831     if (hdsp->io_type == H9652)
3832             snd_hdsp_9652_enable_mixer (hdsp);
3833     else
3834         hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
3835 
3836     hdsp_reset_hw_pointer(hdsp);
3837     hdsp_compute_period_size(hdsp);
3838 
3839     /* silence everything */
3840 
3841     for (i = 0; i < HDSP_MATRIX_MIXER_SIZE; ++i)
3842         hdsp->mixer_matrix[i] = MINUS_INFINITY_GAIN;
3843 
3844     for (i = 0; i < ((hdsp->io_type == H9652 || hdsp->io_type == H9632) ? 1352 : HDSP_MATRIX_MIXER_SIZE); ++i) {
3845         if (hdsp_write_gain (hdsp, i, MINUS_INFINITY_GAIN))
3846             return -EIO;
3847     }
3848 
3849     /* H9632 specific defaults */
3850     if (hdsp->io_type == H9632) {
3851         hdsp->control_register |= (HDSP_DAGainPlus4dBu | HDSP_ADGainPlus4dBu | HDSP_PhoneGain0dB);
3852         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3853     }
3854 
3855     /* set a default rate so that the channel map is set up.
3856      */
3857 
3858     hdsp_set_rate(hdsp, 48000, 1);
3859 
3860     return 0;
3861 }
3862 
3863 static void hdsp_midi_work(struct work_struct *work)
3864 {
3865     struct hdsp *hdsp = container_of(work, struct hdsp, midi_work);
3866 
3867     if (hdsp->midi[0].pending)
3868         snd_hdsp_midi_input_read (&hdsp->midi[0]);
3869     if (hdsp->midi[1].pending)
3870         snd_hdsp_midi_input_read (&hdsp->midi[1]);
3871 }
3872 
3873 static irqreturn_t snd_hdsp_interrupt(int irq, void *dev_id)
3874 {
3875     struct hdsp *hdsp = (struct hdsp *) dev_id;
3876     unsigned int status;
3877     int audio;
3878     int midi0;
3879     int midi1;
3880     unsigned int midi0status;
3881     unsigned int midi1status;
3882     int schedule = 0;
3883 
3884     status = hdsp_read(hdsp, HDSP_statusRegister);
3885 
3886     audio = status & HDSP_audioIRQPending;
3887     midi0 = status & HDSP_midi0IRQPending;
3888     midi1 = status & HDSP_midi1IRQPending;
3889 
3890     if (!audio && !midi0 && !midi1)
3891         return IRQ_NONE;
3892 
3893     hdsp_write(hdsp, HDSP_interruptConfirmation, 0);
3894 
3895     midi0status = hdsp_read (hdsp, HDSP_midiStatusIn0) & 0xff;
3896     midi1status = hdsp_read (hdsp, HDSP_midiStatusIn1) & 0xff;
3897 
3898     if (!(hdsp->state & HDSP_InitializationComplete))
3899         return IRQ_HANDLED;
3900 
3901     if (audio) {
3902         if (hdsp->capture_substream)
3903             snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream);
3904 
3905         if (hdsp->playback_substream)
3906             snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream);
3907     }
3908 
3909     if (midi0 && midi0status) {
3910         if (hdsp->use_midi_work) {
3911             /* we disable interrupts for this input until processing is done */
3912             hdsp->control_register &= ~HDSP_Midi0InterruptEnable;
3913             hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3914             hdsp->midi[0].pending = 1;
3915             schedule = 1;
3916         } else {
3917             snd_hdsp_midi_input_read (&hdsp->midi[0]);
3918         }
3919     }
3920     if (hdsp->io_type != Multiface && hdsp->io_type != RPM && hdsp->io_type != H9632 && midi1 && midi1status) {
3921         if (hdsp->use_midi_work) {
3922             /* we disable interrupts for this input until processing is done */
3923             hdsp->control_register &= ~HDSP_Midi1InterruptEnable;
3924             hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3925             hdsp->midi[1].pending = 1;
3926             schedule = 1;
3927         } else {
3928             snd_hdsp_midi_input_read (&hdsp->midi[1]);
3929         }
3930     }
3931     if (hdsp->use_midi_work && schedule)
3932         queue_work(system_highpri_wq, &hdsp->midi_work);
3933     return IRQ_HANDLED;
3934 }
3935 
3936 static snd_pcm_uframes_t snd_hdsp_hw_pointer(struct snd_pcm_substream *substream)
3937 {
3938     struct hdsp *hdsp = snd_pcm_substream_chip(substream);
3939     return hdsp_hw_pointer(hdsp);
3940 }
3941 
3942 static char *hdsp_channel_buffer_location(struct hdsp *hdsp,
3943                          int stream,
3944                          int channel)
3945 
3946 {
3947     int mapped_channel;
3948 
3949         if (snd_BUG_ON(channel < 0 || channel >= hdsp->max_channels))
3950         return NULL;
3951 
3952     mapped_channel = hdsp->channel_map[channel];
3953     if (mapped_channel < 0)
3954         return NULL;
3955 
3956     if (stream == SNDRV_PCM_STREAM_CAPTURE)
3957         return hdsp->capture_buffer + (mapped_channel * HDSP_CHANNEL_BUFFER_BYTES);
3958     else
3959         return hdsp->playback_buffer + (mapped_channel * HDSP_CHANNEL_BUFFER_BYTES);
3960 }
3961 
3962 static int snd_hdsp_playback_copy(struct snd_pcm_substream *substream,
3963                   int channel, unsigned long pos,
3964                   void __user *src, unsigned long count)
3965 {
3966     struct hdsp *hdsp = snd_pcm_substream_chip(substream);
3967     char *channel_buf;
3968 
3969     if (snd_BUG_ON(pos + count > HDSP_CHANNEL_BUFFER_BYTES))
3970         return -EINVAL;
3971 
3972     channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel);
3973     if (snd_BUG_ON(!channel_buf))
3974         return -EIO;
3975     if (copy_from_user(channel_buf + pos, src, count))
3976         return -EFAULT;
3977     return 0;
3978 }
3979 
3980 static int snd_hdsp_playback_copy_kernel(struct snd_pcm_substream *substream,
3981                      int channel, unsigned long pos,
3982                      void *src, unsigned long count)
3983 {
3984     struct hdsp *hdsp = snd_pcm_substream_chip(substream);
3985     char *channel_buf;
3986 
3987     channel_buf = hdsp_channel_buffer_location(hdsp, substream->pstr->stream, channel);
3988     if (snd_BUG_ON(!channel_buf))
3989         return -EIO;
3990     memcpy(channel_buf + pos, src, count);
3991     return 0;
3992 }
3993 
3994 static int snd_hdsp_capture_copy(struct snd_pcm_substream *substream,
3995                  int channel, unsigned long pos,
3996                  void __user *dst, unsigned long count)
3997 {
3998     struct hdsp *hdsp = snd_pcm_substream_chip(substream);
3999     char *channel_buf;
4000 
4001     if (snd_BUG_ON(pos + count > HDSP_CHANNEL_BUFFER_BYTES))
4002         return -EINVAL;
4003 
4004     channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel);
4005     if (snd_BUG_ON(!channel_buf))
4006         return -EIO;
4007     if (copy_to_user(dst, channel_buf + pos, count))
4008         return -EFAULT;
4009     return 0;
4010 }
4011 
4012 static int snd_hdsp_capture_copy_kernel(struct snd_pcm_substream *substream,
4013                     int channel, unsigned long pos,
4014                     void *dst, unsigned long count)
4015 {
4016     struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4017     char *channel_buf;
4018 
4019     channel_buf = hdsp_channel_buffer_location(hdsp, substream->pstr->stream, channel);
4020     if (snd_BUG_ON(!channel_buf))
4021         return -EIO;
4022     memcpy(dst, channel_buf + pos, count);
4023     return 0;
4024 }
4025 
4026 static int snd_hdsp_hw_silence(struct snd_pcm_substream *substream,
4027                    int channel, unsigned long pos,
4028                    unsigned long count)
4029 {
4030     struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4031     char *channel_buf;
4032 
4033     channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel);
4034     if (snd_BUG_ON(!channel_buf))
4035         return -EIO;
4036     memset(channel_buf + pos, 0, count);
4037     return 0;
4038 }
4039 
4040 static int snd_hdsp_reset(struct snd_pcm_substream *substream)
4041 {
4042     struct snd_pcm_runtime *runtime = substream->runtime;
4043     struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4044     struct snd_pcm_substream *other;
4045     if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
4046         other = hdsp->capture_substream;
4047     else
4048         other = hdsp->playback_substream;
4049     if (hdsp->running)
4050         runtime->status->hw_ptr = hdsp_hw_pointer(hdsp);
4051     else
4052         runtime->status->hw_ptr = 0;
4053     if (other) {
4054         struct snd_pcm_substream *s;
4055         struct snd_pcm_runtime *oruntime = other->runtime;
4056         snd_pcm_group_for_each_entry(s, substream) {
4057             if (s == other) {
4058                 oruntime->status->hw_ptr = runtime->status->hw_ptr;
4059                 break;
4060             }
4061         }
4062     }
4063     return 0;
4064 }
4065 
4066 static int snd_hdsp_hw_params(struct snd_pcm_substream *substream,
4067                  struct snd_pcm_hw_params *params)
4068 {
4069     struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4070     int err;
4071     pid_t this_pid;
4072     pid_t other_pid;
4073 
4074     if (hdsp_check_for_iobox (hdsp))
4075         return -EIO;
4076 
4077     if (hdsp_check_for_firmware(hdsp, 1))
4078         return -EIO;
4079 
4080     spin_lock_irq(&hdsp->lock);
4081 
4082     if (substream->pstr->stream == SNDRV_PCM_STREAM_PLAYBACK) {
4083         hdsp->control_register &= ~(HDSP_SPDIFProfessional | HDSP_SPDIFNonAudio | HDSP_SPDIFEmphasis);
4084         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register |= hdsp->creg_spdif_stream);
4085         this_pid = hdsp->playback_pid;
4086         other_pid = hdsp->capture_pid;
4087     } else {
4088         this_pid = hdsp->capture_pid;
4089         other_pid = hdsp->playback_pid;
4090     }
4091 
4092     if ((other_pid > 0) && (this_pid != other_pid)) {
4093 
4094         /* The other stream is open, and not by the same
4095            task as this one. Make sure that the parameters
4096            that matter are the same.
4097          */
4098 
4099         if (params_rate(params) != hdsp->system_sample_rate) {
4100             spin_unlock_irq(&hdsp->lock);
4101             _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE);
4102             return -EBUSY;
4103         }
4104 
4105         if (params_period_size(params) != hdsp->period_bytes / 4) {
4106             spin_unlock_irq(&hdsp->lock);
4107             _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE);
4108             return -EBUSY;
4109         }
4110 
4111         /* We're fine. */
4112 
4113         spin_unlock_irq(&hdsp->lock);
4114         return 0;
4115 
4116     } else {
4117         spin_unlock_irq(&hdsp->lock);
4118     }
4119 
4120     /* how to make sure that the rate matches an externally-set one ?
4121      */
4122 
4123     spin_lock_irq(&hdsp->lock);
4124     if (! hdsp->clock_source_locked) {
4125         err = hdsp_set_rate(hdsp, params_rate(params), 0);
4126         if (err < 0) {
4127             spin_unlock_irq(&hdsp->lock);
4128             _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE);
4129             return err;
4130         }
4131     }
4132     spin_unlock_irq(&hdsp->lock);
4133 
4134     err = hdsp_set_interrupt_interval(hdsp, params_period_size(params));
4135     if (err < 0) {
4136         _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE);
4137         return err;
4138     }
4139 
4140     return 0;
4141 }
4142 
4143 static int snd_hdsp_channel_info(struct snd_pcm_substream *substream,
4144                     struct snd_pcm_channel_info *info)
4145 {
4146     struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4147     unsigned int channel = info->channel;
4148 
4149     if (snd_BUG_ON(channel >= hdsp->max_channels))
4150         return -EINVAL;
4151     channel = array_index_nospec(channel, hdsp->max_channels);
4152 
4153     if (hdsp->channel_map[channel] < 0)
4154         return -EINVAL;
4155 
4156     info->offset = hdsp->channel_map[channel] * HDSP_CHANNEL_BUFFER_BYTES;
4157     info->first = 0;
4158     info->step = 32;
4159     return 0;
4160 }
4161 
4162 static int snd_hdsp_ioctl(struct snd_pcm_substream *substream,
4163                  unsigned int cmd, void *arg)
4164 {
4165     switch (cmd) {
4166     case SNDRV_PCM_IOCTL1_RESET:
4167         return snd_hdsp_reset(substream);
4168     case SNDRV_PCM_IOCTL1_CHANNEL_INFO:
4169         return snd_hdsp_channel_info(substream, arg);
4170     default:
4171         break;
4172     }
4173 
4174     return snd_pcm_lib_ioctl(substream, cmd, arg);
4175 }
4176 
4177 static int snd_hdsp_trigger(struct snd_pcm_substream *substream, int cmd)
4178 {
4179     struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4180     struct snd_pcm_substream *other;
4181     int running;
4182 
4183     if (hdsp_check_for_iobox (hdsp))
4184         return -EIO;
4185 
4186     if (hdsp_check_for_firmware(hdsp, 0)) /* no auto-loading in trigger */
4187         return -EIO;
4188 
4189     spin_lock(&hdsp->lock);
4190     running = hdsp->running;
4191     switch (cmd) {
4192     case SNDRV_PCM_TRIGGER_START:
4193         running |= 1 << substream->stream;
4194         break;
4195     case SNDRV_PCM_TRIGGER_STOP:
4196         running &= ~(1 << substream->stream);
4197         break;
4198     default:
4199         snd_BUG();
4200         spin_unlock(&hdsp->lock);
4201         return -EINVAL;
4202     }
4203     if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
4204         other = hdsp->capture_substream;
4205     else
4206         other = hdsp->playback_substream;
4207 
4208     if (other) {
4209         struct snd_pcm_substream *s;
4210         snd_pcm_group_for_each_entry(s, substream) {
4211             if (s == other) {
4212                 snd_pcm_trigger_done(s, substream);
4213                 if (cmd == SNDRV_PCM_TRIGGER_START)
4214                     running |= 1 << s->stream;
4215                 else
4216                     running &= ~(1 << s->stream);
4217                 goto _ok;
4218             }
4219         }
4220         if (cmd == SNDRV_PCM_TRIGGER_START) {
4221             if (!(running & (1 << SNDRV_PCM_STREAM_PLAYBACK)) &&
4222                 substream->stream == SNDRV_PCM_STREAM_CAPTURE)
4223                 hdsp_silence_playback(hdsp);
4224         } else {
4225             if (running &&
4226                 substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
4227                 hdsp_silence_playback(hdsp);
4228         }
4229     } else {
4230         if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
4231                 hdsp_silence_playback(hdsp);
4232     }
4233  _ok:
4234     snd_pcm_trigger_done(substream, substream);
4235     if (!hdsp->running && running)
4236         hdsp_start_audio(hdsp);
4237     else if (hdsp->running && !running)
4238         hdsp_stop_audio(hdsp);
4239     hdsp->running = running;
4240     spin_unlock(&hdsp->lock);
4241 
4242     return 0;
4243 }
4244 
4245 static int snd_hdsp_prepare(struct snd_pcm_substream *substream)
4246 {
4247     struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4248     int result = 0;
4249 
4250     if (hdsp_check_for_iobox (hdsp))
4251         return -EIO;
4252 
4253     if (hdsp_check_for_firmware(hdsp, 1))
4254         return -EIO;
4255 
4256     spin_lock_irq(&hdsp->lock);
4257     if (!hdsp->running)
4258         hdsp_reset_hw_pointer(hdsp);
4259     spin_unlock_irq(&hdsp->lock);
4260     return result;
4261 }
4262 
4263 static const struct snd_pcm_hardware snd_hdsp_playback_subinfo =
4264 {
4265     .info =         (SNDRV_PCM_INFO_MMAP |
4266                  SNDRV_PCM_INFO_MMAP_VALID |
4267                  SNDRV_PCM_INFO_NONINTERLEAVED |
4268                  SNDRV_PCM_INFO_SYNC_START |
4269                  SNDRV_PCM_INFO_DOUBLE),
4270 #ifdef SNDRV_BIG_ENDIAN
4271     .formats =      SNDRV_PCM_FMTBIT_S32_BE,
4272 #else
4273     .formats =      SNDRV_PCM_FMTBIT_S32_LE,
4274 #endif
4275     .rates =        (SNDRV_PCM_RATE_32000 |
4276                  SNDRV_PCM_RATE_44100 |
4277                  SNDRV_PCM_RATE_48000 |
4278                  SNDRV_PCM_RATE_64000 |
4279                  SNDRV_PCM_RATE_88200 |
4280                  SNDRV_PCM_RATE_96000),
4281     .rate_min =     32000,
4282     .rate_max =     96000,
4283     .channels_min =     6,
4284     .channels_max =     HDSP_MAX_CHANNELS,
4285     .buffer_bytes_max = HDSP_CHANNEL_BUFFER_BYTES * HDSP_MAX_CHANNELS,
4286     .period_bytes_min = (64 * 4) * 10,
4287     .period_bytes_max = (8192 * 4) * HDSP_MAX_CHANNELS,
4288     .periods_min =      2,
4289     .periods_max =      2,
4290     .fifo_size =        0
4291 };
4292 
4293 static const struct snd_pcm_hardware snd_hdsp_capture_subinfo =
4294 {
4295     .info =         (SNDRV_PCM_INFO_MMAP |
4296                  SNDRV_PCM_INFO_MMAP_VALID |
4297                  SNDRV_PCM_INFO_NONINTERLEAVED |
4298                  SNDRV_PCM_INFO_SYNC_START),
4299 #ifdef SNDRV_BIG_ENDIAN
4300     .formats =      SNDRV_PCM_FMTBIT_S32_BE,
4301 #else
4302     .formats =      SNDRV_PCM_FMTBIT_S32_LE,
4303 #endif
4304     .rates =        (SNDRV_PCM_RATE_32000 |
4305                  SNDRV_PCM_RATE_44100 |
4306                  SNDRV_PCM_RATE_48000 |
4307                  SNDRV_PCM_RATE_64000 |
4308                  SNDRV_PCM_RATE_88200 |
4309                  SNDRV_PCM_RATE_96000),
4310     .rate_min =     32000,
4311     .rate_max =     96000,
4312     .channels_min =     5,
4313     .channels_max =     HDSP_MAX_CHANNELS,
4314     .buffer_bytes_max = HDSP_CHANNEL_BUFFER_BYTES * HDSP_MAX_CHANNELS,
4315     .period_bytes_min = (64 * 4) * 10,
4316     .period_bytes_max = (8192 * 4) * HDSP_MAX_CHANNELS,
4317     .periods_min =      2,
4318     .periods_max =      2,
4319     .fifo_size =        0
4320 };
4321 
4322 static const unsigned int hdsp_period_sizes[] = { 64, 128, 256, 512, 1024, 2048, 4096, 8192 };
4323 
4324 static const struct snd_pcm_hw_constraint_list hdsp_hw_constraints_period_sizes = {
4325     .count = ARRAY_SIZE(hdsp_period_sizes),
4326     .list = hdsp_period_sizes,
4327     .mask = 0
4328 };
4329 
4330 static const unsigned int hdsp_9632_sample_rates[] = { 32000, 44100, 48000, 64000, 88200, 96000, 128000, 176400, 192000 };
4331 
4332 static const struct snd_pcm_hw_constraint_list hdsp_hw_constraints_9632_sample_rates = {
4333     .count = ARRAY_SIZE(hdsp_9632_sample_rates),
4334     .list = hdsp_9632_sample_rates,
4335     .mask = 0
4336 };
4337 
4338 static int snd_hdsp_hw_rule_in_channels(struct snd_pcm_hw_params *params,
4339                     struct snd_pcm_hw_rule *rule)
4340 {
4341     struct hdsp *hdsp = rule->private;
4342     struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4343     if (hdsp->io_type == H9632) {
4344         unsigned int list[3];
4345         list[0] = hdsp->qs_in_channels;
4346         list[1] = hdsp->ds_in_channels;
4347         list[2] = hdsp->ss_in_channels;
4348         return snd_interval_list(c, 3, list, 0);
4349     } else {
4350         unsigned int list[2];
4351         list[0] = hdsp->ds_in_channels;
4352         list[1] = hdsp->ss_in_channels;
4353         return snd_interval_list(c, 2, list, 0);
4354     }
4355 }
4356 
4357 static int snd_hdsp_hw_rule_out_channels(struct snd_pcm_hw_params *params,
4358                     struct snd_pcm_hw_rule *rule)
4359 {
4360     unsigned int list[3];
4361     struct hdsp *hdsp = rule->private;
4362     struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4363     if (hdsp->io_type == H9632) {
4364         list[0] = hdsp->qs_out_channels;
4365         list[1] = hdsp->ds_out_channels;
4366         list[2] = hdsp->ss_out_channels;
4367         return snd_interval_list(c, 3, list, 0);
4368     } else {
4369         list[0] = hdsp->ds_out_channels;
4370         list[1] = hdsp->ss_out_channels;
4371     }
4372     return snd_interval_list(c, 2, list, 0);
4373 }
4374 
4375 static int snd_hdsp_hw_rule_in_channels_rate(struct snd_pcm_hw_params *params,
4376                          struct snd_pcm_hw_rule *rule)
4377 {
4378     struct hdsp *hdsp = rule->private;
4379     struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4380     struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
4381     if (r->min > 96000 && hdsp->io_type == H9632) {
4382         struct snd_interval t = {
4383             .min = hdsp->qs_in_channels,
4384             .max = hdsp->qs_in_channels,
4385             .integer = 1,
4386         };
4387         return snd_interval_refine(c, &t);
4388     } else if (r->min > 48000 && r->max <= 96000) {
4389         struct snd_interval t = {
4390             .min = hdsp->ds_in_channels,
4391             .max = hdsp->ds_in_channels,
4392             .integer = 1,
4393         };
4394         return snd_interval_refine(c, &t);
4395     } else if (r->max < 64000) {
4396         struct snd_interval t = {
4397             .min = hdsp->ss_in_channels,
4398             .max = hdsp->ss_in_channels,
4399             .integer = 1,
4400         };
4401         return snd_interval_refine(c, &t);
4402     }
4403     return 0;
4404 }
4405 
4406 static int snd_hdsp_hw_rule_out_channels_rate(struct snd_pcm_hw_params *params,
4407                          struct snd_pcm_hw_rule *rule)
4408 {
4409     struct hdsp *hdsp = rule->private;
4410     struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4411     struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
4412     if (r->min > 96000 && hdsp->io_type == H9632) {
4413         struct snd_interval t = {
4414             .min = hdsp->qs_out_channels,
4415             .max = hdsp->qs_out_channels,
4416             .integer = 1,
4417         };
4418         return snd_interval_refine(c, &t);
4419     } else if (r->min > 48000 && r->max <= 96000) {
4420         struct snd_interval t = {
4421             .min = hdsp->ds_out_channels,
4422             .max = hdsp->ds_out_channels,
4423             .integer = 1,
4424         };
4425         return snd_interval_refine(c, &t);
4426     } else if (r->max < 64000) {
4427         struct snd_interval t = {
4428             .min = hdsp->ss_out_channels,
4429             .max = hdsp->ss_out_channels,
4430             .integer = 1,
4431         };
4432         return snd_interval_refine(c, &t);
4433     }
4434     return 0;
4435 }
4436 
4437 static int snd_hdsp_hw_rule_rate_out_channels(struct snd_pcm_hw_params *params,
4438                          struct snd_pcm_hw_rule *rule)
4439 {
4440     struct hdsp *hdsp = rule->private;
4441     struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4442     struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
4443     if (c->min >= hdsp->ss_out_channels) {
4444         struct snd_interval t = {
4445             .min = 32000,
4446             .max = 48000,
4447             .integer = 1,
4448         };
4449         return snd_interval_refine(r, &t);
4450     } else if (c->max <= hdsp->qs_out_channels && hdsp->io_type == H9632) {
4451         struct snd_interval t = {
4452             .min = 128000,
4453             .max = 192000,
4454             .integer = 1,
4455         };
4456         return snd_interval_refine(r, &t);
4457     } else if (c->max <= hdsp->ds_out_channels) {
4458         struct snd_interval t = {
4459             .min = 64000,
4460             .max = 96000,
4461             .integer = 1,
4462         };
4463         return snd_interval_refine(r, &t);
4464     }
4465     return 0;
4466 }
4467 
4468 static int snd_hdsp_hw_rule_rate_in_channels(struct snd_pcm_hw_params *params,
4469                          struct snd_pcm_hw_rule *rule)
4470 {
4471     struct hdsp *hdsp = rule->private;
4472     struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4473     struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
4474     if (c->min >= hdsp->ss_in_channels) {
4475         struct snd_interval t = {
4476             .min = 32000,
4477             .max = 48000,
4478             .integer = 1,
4479         };
4480         return snd_interval_refine(r, &t);
4481     } else if (c->max <= hdsp->qs_in_channels && hdsp->io_type == H9632) {
4482         struct snd_interval t = {
4483             .min = 128000,
4484             .max = 192000,
4485             .integer = 1,
4486         };
4487         return snd_interval_refine(r, &t);
4488     } else if (c->max <= hdsp->ds_in_channels) {
4489         struct snd_interval t = {
4490             .min = 64000,
4491             .max = 96000,
4492             .integer = 1,
4493         };
4494         return snd_interval_refine(r, &t);
4495     }
4496     return 0;
4497 }
4498 
4499 static int snd_hdsp_playback_open(struct snd_pcm_substream *substream)
4500 {
4501     struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4502     struct snd_pcm_runtime *runtime = substream->runtime;
4503 
4504     if (hdsp_check_for_iobox (hdsp))
4505         return -EIO;
4506 
4507     if (hdsp_check_for_firmware(hdsp, 1))
4508         return -EIO;
4509 
4510     spin_lock_irq(&hdsp->lock);
4511 
4512     snd_pcm_set_sync(substream);
4513 
4514         runtime->hw = snd_hdsp_playback_subinfo;
4515     snd_pcm_set_runtime_buffer(substream, &hdsp->playback_dma_buf);
4516 
4517     hdsp->playback_pid = current->pid;
4518     hdsp->playback_substream = substream;
4519 
4520     spin_unlock_irq(&hdsp->lock);
4521 
4522     snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
4523     snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hdsp_hw_constraints_period_sizes);
4524     if (hdsp->clock_source_locked) {
4525         runtime->hw.rate_min = runtime->hw.rate_max = hdsp->system_sample_rate;
4526     } else if (hdsp->io_type == H9632) {
4527         runtime->hw.rate_max = 192000;
4528         runtime->hw.rates = SNDRV_PCM_RATE_KNOT;
4529         snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hdsp_hw_constraints_9632_sample_rates);
4530     }
4531     if (hdsp->io_type == H9632) {
4532         runtime->hw.channels_min = hdsp->qs_out_channels;
4533         runtime->hw.channels_max = hdsp->ss_out_channels;
4534     }
4535 
4536     snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
4537                  snd_hdsp_hw_rule_out_channels, hdsp,
4538                  SNDRV_PCM_HW_PARAM_CHANNELS, -1);
4539     snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
4540                  snd_hdsp_hw_rule_out_channels_rate, hdsp,
4541                  SNDRV_PCM_HW_PARAM_RATE, -1);
4542     snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
4543                  snd_hdsp_hw_rule_rate_out_channels, hdsp,
4544                  SNDRV_PCM_HW_PARAM_CHANNELS, -1);
4545 
4546     if (RPM != hdsp->io_type) {
4547         hdsp->creg_spdif_stream = hdsp->creg_spdif;
4548         hdsp->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
4549         snd_ctl_notify(hdsp->card, SNDRV_CTL_EVENT_MASK_VALUE |
4550             SNDRV_CTL_EVENT_MASK_INFO, &hdsp->spdif_ctl->id);
4551     }
4552     return 0;
4553 }
4554 
4555 static int snd_hdsp_playback_release(struct snd_pcm_substream *substream)
4556 {
4557     struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4558 
4559     spin_lock_irq(&hdsp->lock);
4560 
4561     hdsp->playback_pid = -1;
4562     hdsp->playback_substream = NULL;
4563 
4564     spin_unlock_irq(&hdsp->lock);
4565 
4566     if (RPM != hdsp->io_type) {
4567         hdsp->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
4568         snd_ctl_notify(hdsp->card, SNDRV_CTL_EVENT_MASK_VALUE |
4569             SNDRV_CTL_EVENT_MASK_INFO, &hdsp->spdif_ctl->id);
4570     }
4571     return 0;
4572 }
4573 
4574 
4575 static int snd_hdsp_capture_open(struct snd_pcm_substream *substream)
4576 {
4577     struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4578     struct snd_pcm_runtime *runtime = substream->runtime;
4579 
4580     if (hdsp_check_for_iobox (hdsp))
4581         return -EIO;
4582 
4583     if (hdsp_check_for_firmware(hdsp, 1))
4584         return -EIO;
4585 
4586     spin_lock_irq(&hdsp->lock);
4587 
4588     snd_pcm_set_sync(substream);
4589 
4590     runtime->hw = snd_hdsp_capture_subinfo;
4591     snd_pcm_set_runtime_buffer(substream, &hdsp->capture_dma_buf);
4592 
4593     hdsp->capture_pid = current->pid;
4594     hdsp->capture_substream = substream;
4595 
4596     spin_unlock_irq(&hdsp->lock);
4597 
4598     snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
4599     snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hdsp_hw_constraints_period_sizes);
4600     if (hdsp->io_type == H9632) {
4601         runtime->hw.channels_min = hdsp->qs_in_channels;
4602         runtime->hw.channels_max = hdsp->ss_in_channels;
4603         runtime->hw.rate_max = 192000;
4604         runtime->hw.rates = SNDRV_PCM_RATE_KNOT;
4605         snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hdsp_hw_constraints_9632_sample_rates);
4606     }
4607     snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
4608                  snd_hdsp_hw_rule_in_channels, hdsp,
4609                  SNDRV_PCM_HW_PARAM_CHANNELS, -1);
4610     snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
4611                  snd_hdsp_hw_rule_in_channels_rate, hdsp,
4612                  SNDRV_PCM_HW_PARAM_RATE, -1);
4613     snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
4614                  snd_hdsp_hw_rule_rate_in_channels, hdsp,
4615                  SNDRV_PCM_HW_PARAM_CHANNELS, -1);
4616     return 0;
4617 }
4618 
4619 static int snd_hdsp_capture_release(struct snd_pcm_substream *substream)
4620 {
4621     struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4622 
4623     spin_lock_irq(&hdsp->lock);
4624 
4625     hdsp->capture_pid = -1;
4626     hdsp->capture_substream = NULL;
4627 
4628     spin_unlock_irq(&hdsp->lock);
4629     return 0;
4630 }
4631 
4632 /* helper functions for copying meter values */
4633 static inline int copy_u32_le(void __user *dest, void __iomem *src)
4634 {
4635     u32 val = readl(src);
4636     return copy_to_user(dest, &val, 4);
4637 }
4638 
4639 static inline int copy_u64_le(void __user *dest, void __iomem *src_low, void __iomem *src_high)
4640 {
4641     u32 rms_low, rms_high;
4642     u64 rms;
4643     rms_low = readl(src_low);
4644     rms_high = readl(src_high);
4645     rms = ((u64)rms_high << 32) | rms_low;
4646     return copy_to_user(dest, &rms, 8);
4647 }
4648 
4649 static inline int copy_u48_le(void __user *dest, void __iomem *src_low, void __iomem *src_high)
4650 {
4651     u32 rms_low, rms_high;
4652     u64 rms;
4653     rms_low = readl(src_low) & 0xffffff00;
4654     rms_high = readl(src_high) & 0xffffff00;
4655     rms = ((u64)rms_high << 32) | rms_low;
4656     return copy_to_user(dest, &rms, 8);
4657 }
4658 
4659 static int hdsp_9652_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms)
4660 {
4661     int doublespeed = 0;
4662     int i, j, channels, ofs;
4663 
4664     if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DoubleSpeedStatus)
4665         doublespeed = 1;
4666     channels = doublespeed ? 14 : 26;
4667     for (i = 0, j = 0; i < 26; ++i) {
4668         if (doublespeed && (i & 4))
4669             continue;
4670         ofs = HDSP_9652_peakBase - j * 4;
4671         if (copy_u32_le(&peak_rms->input_peaks[i], hdsp->iobase + ofs))
4672             return -EFAULT;
4673         ofs -= channels * 4;
4674         if (copy_u32_le(&peak_rms->playback_peaks[i], hdsp->iobase + ofs))
4675             return -EFAULT;
4676         ofs -= channels * 4;
4677         if (copy_u32_le(&peak_rms->output_peaks[i], hdsp->iobase + ofs))
4678             return -EFAULT;
4679         ofs = HDSP_9652_rmsBase + j * 8;
4680         if (copy_u48_le(&peak_rms->input_rms[i], hdsp->iobase + ofs,
4681                 hdsp->iobase + ofs + 4))
4682             return -EFAULT;
4683         ofs += channels * 8;
4684         if (copy_u48_le(&peak_rms->playback_rms[i], hdsp->iobase + ofs,
4685                 hdsp->iobase + ofs + 4))
4686             return -EFAULT;
4687         ofs += channels * 8;
4688         if (copy_u48_le(&peak_rms->output_rms[i], hdsp->iobase + ofs,
4689                 hdsp->iobase + ofs + 4))
4690             return -EFAULT;
4691         j++;
4692     }
4693     return 0;
4694 }
4695 
4696 static int hdsp_9632_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms)
4697 {
4698     int i, j;
4699     struct hdsp_9632_meters __iomem *m;
4700     int doublespeed = 0;
4701 
4702     if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DoubleSpeedStatus)
4703         doublespeed = 1;
4704     m = (struct hdsp_9632_meters __iomem *)(hdsp->iobase+HDSP_9632_metersBase);
4705     for (i = 0, j = 0; i < 16; ++i, ++j) {
4706         if (copy_u32_le(&peak_rms->input_peaks[i], &m->input_peak[j]))
4707             return -EFAULT;
4708         if (copy_u32_le(&peak_rms->playback_peaks[i], &m->playback_peak[j]))
4709             return -EFAULT;
4710         if (copy_u32_le(&peak_rms->output_peaks[i], &m->output_peak[j]))
4711             return -EFAULT;
4712         if (copy_u64_le(&peak_rms->input_rms[i], &m->input_rms_low[j],
4713                 &m->input_rms_high[j]))
4714             return -EFAULT;
4715         if (copy_u64_le(&peak_rms->playback_rms[i], &m->playback_rms_low[j],
4716                 &m->playback_rms_high[j]))
4717             return -EFAULT;
4718         if (copy_u64_le(&peak_rms->output_rms[i], &m->output_rms_low[j],
4719                 &m->output_rms_high[j]))
4720             return -EFAULT;
4721         if (doublespeed && i == 3) i += 4;
4722     }
4723     return 0;
4724 }
4725 
4726 static int hdsp_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms)
4727 {
4728     int i;
4729 
4730     for (i = 0; i < 26; i++) {
4731         if (copy_u32_le(&peak_rms->playback_peaks[i],
4732                 hdsp->iobase + HDSP_playbackPeakLevel + i * 4))
4733             return -EFAULT;
4734         if (copy_u32_le(&peak_rms->input_peaks[i],
4735                 hdsp->iobase + HDSP_inputPeakLevel + i * 4))
4736             return -EFAULT;
4737     }
4738     for (i = 0; i < 28; i++) {
4739         if (copy_u32_le(&peak_rms->output_peaks[i],
4740                 hdsp->iobase + HDSP_outputPeakLevel + i * 4))
4741             return -EFAULT;
4742     }
4743     for (i = 0; i < 26; ++i) {
4744         if (copy_u64_le(&peak_rms->playback_rms[i],
4745                 hdsp->iobase + HDSP_playbackRmsLevel + i * 8 + 4,
4746                 hdsp->iobase + HDSP_playbackRmsLevel + i * 8))
4747             return -EFAULT;
4748         if (copy_u64_le(&peak_rms->input_rms[i],
4749                 hdsp->iobase + HDSP_inputRmsLevel + i * 8 + 4,
4750                 hdsp->iobase + HDSP_inputRmsLevel + i * 8))
4751             return -EFAULT;
4752     }
4753     return 0;
4754 }
4755 
4756 static int snd_hdsp_hwdep_ioctl(struct snd_hwdep *hw, struct file *file, unsigned int cmd, unsigned long arg)
4757 {
4758     struct hdsp *hdsp = hw->private_data;
4759     void __user *argp = (void __user *)arg;
4760     int err;
4761 
4762     switch (cmd) {
4763     case SNDRV_HDSP_IOCTL_GET_PEAK_RMS: {
4764         struct hdsp_peak_rms __user *peak_rms = (struct hdsp_peak_rms __user *)arg;
4765 
4766         err = hdsp_check_for_iobox(hdsp);
4767         if (err < 0)
4768             return err;
4769 
4770         err = hdsp_check_for_firmware(hdsp, 1);
4771         if (err < 0)
4772             return err;
4773 
4774         if (!(hdsp->state & HDSP_FirmwareLoaded)) {
4775             dev_err(hdsp->card->dev,
4776                 "firmware needs to be uploaded to the card.\n");
4777             return -EINVAL;
4778         }
4779 
4780         switch (hdsp->io_type) {
4781         case H9652:
4782             return hdsp_9652_get_peak(hdsp, peak_rms);
4783         case H9632:
4784             return hdsp_9632_get_peak(hdsp, peak_rms);
4785         default:
4786             return hdsp_get_peak(hdsp, peak_rms);
4787         }
4788     }
4789     case SNDRV_HDSP_IOCTL_GET_CONFIG_INFO: {
4790         struct hdsp_config_info info;
4791         unsigned long flags;
4792         int i;
4793 
4794         err = hdsp_check_for_iobox(hdsp);
4795         if (err < 0)
4796             return err;
4797 
4798         err = hdsp_check_for_firmware(hdsp, 1);
4799         if (err < 0)
4800             return err;
4801 
4802         memset(&info, 0, sizeof(info));
4803         spin_lock_irqsave(&hdsp->lock, flags);
4804         info.pref_sync_ref = (unsigned char)hdsp_pref_sync_ref(hdsp);
4805         info.wordclock_sync_check = (unsigned char)hdsp_wc_sync_check(hdsp);
4806         if (hdsp->io_type != H9632)
4807             info.adatsync_sync_check = (unsigned char)hdsp_adatsync_sync_check(hdsp);
4808         info.spdif_sync_check = (unsigned char)hdsp_spdif_sync_check(hdsp);
4809         for (i = 0; i < ((hdsp->io_type != Multiface && hdsp->io_type != RPM && hdsp->io_type != H9632) ? 3 : 1); ++i)
4810             info.adat_sync_check[i] = (unsigned char)hdsp_adat_sync_check(hdsp, i);
4811         info.spdif_in = (unsigned char)hdsp_spdif_in(hdsp);
4812         info.spdif_out = (unsigned char)hdsp_toggle_setting(hdsp,
4813                 HDSP_SPDIFOpticalOut);
4814         info.spdif_professional = (unsigned char)
4815             hdsp_toggle_setting(hdsp, HDSP_SPDIFProfessional);
4816         info.spdif_emphasis = (unsigned char)
4817             hdsp_toggle_setting(hdsp, HDSP_SPDIFEmphasis);
4818         info.spdif_nonaudio = (unsigned char)
4819             hdsp_toggle_setting(hdsp, HDSP_SPDIFNonAudio);
4820         info.spdif_sample_rate = hdsp_spdif_sample_rate(hdsp);
4821         info.system_sample_rate = hdsp->system_sample_rate;
4822         info.autosync_sample_rate = hdsp_external_sample_rate(hdsp);
4823         info.system_clock_mode = (unsigned char)hdsp_system_clock_mode(hdsp);
4824         info.clock_source = (unsigned char)hdsp_clock_source(hdsp);
4825         info.autosync_ref = (unsigned char)hdsp_autosync_ref(hdsp);
4826         info.line_out = (unsigned char)
4827             hdsp_toggle_setting(hdsp, HDSP_LineOut);
4828         if (hdsp->io_type == H9632) {
4829             info.da_gain = (unsigned char)hdsp_da_gain(hdsp);
4830             info.ad_gain = (unsigned char)hdsp_ad_gain(hdsp);
4831             info.phone_gain = (unsigned char)hdsp_phone_gain(hdsp);
4832             info.xlr_breakout_cable =
4833                 (unsigned char)hdsp_toggle_setting(hdsp,
4834                     HDSP_XLRBreakoutCable);
4835 
4836         } else if (hdsp->io_type == RPM) {
4837             info.da_gain = (unsigned char) hdsp_rpm_input12(hdsp);
4838             info.ad_gain = (unsigned char) hdsp_rpm_input34(hdsp);
4839         }
4840         if (hdsp->io_type == H9632 || hdsp->io_type == H9652)
4841             info.analog_extension_board =
4842                 (unsigned char)hdsp_toggle_setting(hdsp,
4843                         HDSP_AnalogExtensionBoard);
4844         spin_unlock_irqrestore(&hdsp->lock, flags);
4845         if (copy_to_user(argp, &info, sizeof(info)))
4846             return -EFAULT;
4847         break;
4848     }
4849     case SNDRV_HDSP_IOCTL_GET_9632_AEB: {
4850         struct hdsp_9632_aeb h9632_aeb;
4851 
4852         if (hdsp->io_type != H9632) return -EINVAL;
4853         h9632_aeb.aebi = hdsp->ss_in_channels - H9632_SS_CHANNELS;
4854         h9632_aeb.aebo = hdsp->ss_out_channels - H9632_SS_CHANNELS;
4855         if (copy_to_user(argp, &h9632_aeb, sizeof(h9632_aeb)))
4856             return -EFAULT;
4857         break;
4858     }
4859     case SNDRV_HDSP_IOCTL_GET_VERSION: {
4860         struct hdsp_version hdsp_version;
4861         int err;
4862 
4863         if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL;
4864         if (hdsp->io_type == Undefined) {
4865             err = hdsp_get_iobox_version(hdsp);
4866             if (err < 0)
4867                 return err;
4868         }
4869         memset(&hdsp_version, 0, sizeof(hdsp_version));
4870         hdsp_version.io_type = hdsp->io_type;
4871         hdsp_version.firmware_rev = hdsp->firmware_rev;
4872         if (copy_to_user(argp, &hdsp_version, sizeof(hdsp_version)))
4873             return -EFAULT;
4874         break;
4875     }
4876     case SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE: {
4877         struct hdsp_firmware firmware;
4878         u32 __user *firmware_data;
4879         int err;
4880 
4881         if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL;
4882         /* SNDRV_HDSP_IOCTL_GET_VERSION must have been called */
4883         if (hdsp->io_type == Undefined) return -EINVAL;
4884 
4885         if (hdsp->state & (HDSP_FirmwareCached | HDSP_FirmwareLoaded))
4886             return -EBUSY;
4887 
4888         dev_info(hdsp->card->dev,
4889              "initializing firmware upload\n");
4890         if (copy_from_user(&firmware, argp, sizeof(firmware)))
4891             return -EFAULT;
4892         firmware_data = (u32 __user *)firmware.firmware_data;
4893 
4894         if (hdsp_check_for_iobox (hdsp))
4895             return -EIO;
4896 
4897         if (!hdsp->fw_uploaded) {
4898             hdsp->fw_uploaded = vmalloc(HDSP_FIRMWARE_SIZE);
4899             if (!hdsp->fw_uploaded)
4900                 return -ENOMEM;
4901         }
4902 
4903         if (copy_from_user(hdsp->fw_uploaded, firmware_data,
4904                    HDSP_FIRMWARE_SIZE)) {
4905             vfree(hdsp->fw_uploaded);
4906             hdsp->fw_uploaded = NULL;
4907             return -EFAULT;
4908         }
4909 
4910         hdsp->state |= HDSP_FirmwareCached;
4911 
4912         err = snd_hdsp_load_firmware_from_cache(hdsp);
4913         if (err < 0)
4914             return err;
4915 
4916         if (!(hdsp->state & HDSP_InitializationComplete)) {
4917             err = snd_hdsp_enable_io(hdsp);
4918             if (err < 0)
4919                 return err;
4920 
4921             snd_hdsp_initialize_channels(hdsp);
4922             snd_hdsp_initialize_midi_flush(hdsp);
4923 
4924             err = snd_hdsp_create_alsa_devices(hdsp->card, hdsp);
4925             if (err < 0) {
4926                 dev_err(hdsp->card->dev,
4927                     "error creating alsa devices\n");
4928                 return err;
4929             }
4930         }
4931         break;
4932     }
4933     case SNDRV_HDSP_IOCTL_GET_MIXER: {
4934         struct hdsp_mixer __user *mixer = (struct hdsp_mixer __user *)argp;
4935         if (copy_to_user(mixer->matrix, hdsp->mixer_matrix, sizeof(unsigned short)*HDSP_MATRIX_MIXER_SIZE))
4936             return -EFAULT;
4937         break;
4938     }
4939     default:
4940         return -EINVAL;
4941     }
4942     return 0;
4943 }
4944 
4945 static const struct snd_pcm_ops snd_hdsp_playback_ops = {
4946     .open =     snd_hdsp_playback_open,
4947     .close =    snd_hdsp_playback_release,
4948     .ioctl =    snd_hdsp_ioctl,
4949     .hw_params =    snd_hdsp_hw_params,
4950     .prepare =  snd_hdsp_prepare,
4951     .trigger =  snd_hdsp_trigger,
4952     .pointer =  snd_hdsp_hw_pointer,
4953     .copy_user =    snd_hdsp_playback_copy,
4954     .copy_kernel =  snd_hdsp_playback_copy_kernel,
4955     .fill_silence = snd_hdsp_hw_silence,
4956 };
4957 
4958 static const struct snd_pcm_ops snd_hdsp_capture_ops = {
4959     .open =     snd_hdsp_capture_open,
4960     .close =    snd_hdsp_capture_release,
4961     .ioctl =    snd_hdsp_ioctl,
4962     .hw_params =    snd_hdsp_hw_params,
4963     .prepare =  snd_hdsp_prepare,
4964     .trigger =  snd_hdsp_trigger,
4965     .pointer =  snd_hdsp_hw_pointer,
4966     .copy_user =    snd_hdsp_capture_copy,
4967     .copy_kernel =  snd_hdsp_capture_copy_kernel,
4968 };
4969 
4970 static int snd_hdsp_create_hwdep(struct snd_card *card, struct hdsp *hdsp)
4971 {
4972     struct snd_hwdep *hw;
4973     int err;
4974 
4975     err = snd_hwdep_new(card, "HDSP hwdep", 0, &hw);
4976     if (err < 0)
4977         return err;
4978 
4979     hdsp->hwdep = hw;
4980     hw->private_data = hdsp;
4981     strcpy(hw->name, "HDSP hwdep interface");
4982 
4983     hw->ops.ioctl = snd_hdsp_hwdep_ioctl;
4984     hw->ops.ioctl_compat = snd_hdsp_hwdep_ioctl;
4985 
4986     return 0;
4987 }
4988 
4989 static int snd_hdsp_create_pcm(struct snd_card *card, struct hdsp *hdsp)
4990 {
4991     struct snd_pcm *pcm;
4992     int err;
4993 
4994     err = snd_pcm_new(card, hdsp->card_name, 0, 1, 1, &pcm);
4995     if (err < 0)
4996         return err;
4997 
4998     hdsp->pcm = pcm;
4999     pcm->private_data = hdsp;
5000     strcpy(pcm->name, hdsp->card_name);
5001 
5002     snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_hdsp_playback_ops);
5003     snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_hdsp_capture_ops);
5004 
5005     pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
5006 
5007     return 0;
5008 }
5009 
5010 static void snd_hdsp_9652_enable_mixer (struct hdsp *hdsp)
5011 {
5012         hdsp->control2_register |= HDSP_9652_ENABLE_MIXER;
5013     hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
5014 }
5015 
5016 static int snd_hdsp_enable_io (struct hdsp *hdsp)
5017 {
5018     int i;
5019 
5020     if (hdsp_fifo_wait (hdsp, 0, 100)) {
5021         dev_err(hdsp->card->dev,
5022             "enable_io fifo_wait failed\n");
5023         return -EIO;
5024     }
5025 
5026     for (i = 0; i < hdsp->max_channels; ++i) {
5027         hdsp_write (hdsp, HDSP_inputEnable + (4 * i), 1);
5028         hdsp_write (hdsp, HDSP_outputEnable + (4 * i), 1);
5029     }
5030 
5031     return 0;
5032 }
5033 
5034 static void snd_hdsp_initialize_channels(struct hdsp *hdsp)
5035 {
5036     int status, aebi_channels, aebo_channels, i;
5037 
5038     switch (hdsp->io_type) {
5039     case Digiface:
5040         hdsp->card_name = "RME Hammerfall DSP + Digiface";
5041         hdsp->ss_in_channels = hdsp->ss_out_channels = DIGIFACE_SS_CHANNELS;
5042         hdsp->ds_in_channels = hdsp->ds_out_channels = DIGIFACE_DS_CHANNELS;
5043         break;
5044 
5045     case H9652:
5046         hdsp->card_name = "RME Hammerfall HDSP 9652";
5047         hdsp->ss_in_channels = hdsp->ss_out_channels = H9652_SS_CHANNELS;
5048         hdsp->ds_in_channels = hdsp->ds_out_channels = H9652_DS_CHANNELS;
5049         break;
5050 
5051     case H9632:
5052         status = hdsp_read(hdsp, HDSP_statusRegister);
5053         /* HDSP_AEBx bits are low when AEB are connected */
5054         aebi_channels = (status & HDSP_AEBI) ? 0 : 4;
5055         aebo_channels = (status & HDSP_AEBO) ? 0 : 4;
5056         hdsp->card_name = "RME Hammerfall HDSP 9632";
5057         hdsp->ss_in_channels = H9632_SS_CHANNELS+aebi_channels;
5058         hdsp->ds_in_channels = H9632_DS_CHANNELS+aebi_channels;
5059         hdsp->qs_in_channels = H9632_QS_CHANNELS+aebi_channels;
5060         hdsp->ss_out_channels = H9632_SS_CHANNELS+aebo_channels;
5061         hdsp->ds_out_channels = H9632_DS_CHANNELS+aebo_channels;
5062         hdsp->qs_out_channels = H9632_QS_CHANNELS+aebo_channels;
5063         /* Disable loopback of output channels, as the set function
5064          * only sets on a change we fake all bits (channels) as enabled.
5065          */
5066         hdsp->io_loopback = 0xffffffff;
5067         for (i = 0; i < hdsp->max_channels; ++i)
5068             hdsp_loopback_set(hdsp, i, false);
5069         break;
5070 
5071     case Multiface:
5072         hdsp->card_name = "RME Hammerfall DSP + Multiface";
5073         hdsp->ss_in_channels = hdsp->ss_out_channels = MULTIFACE_SS_CHANNELS;
5074         hdsp->ds_in_channels = hdsp->ds_out_channels = MULTIFACE_DS_CHANNELS;
5075         break;
5076 
5077     case RPM:
5078         hdsp->card_name = "RME Hammerfall DSP + RPM";
5079         hdsp->ss_in_channels = RPM_CHANNELS-1;
5080         hdsp->ss_out_channels = RPM_CHANNELS;
5081         hdsp->ds_in_channels = RPM_CHANNELS-1;
5082         hdsp->ds_out_channels = RPM_CHANNELS;
5083         break;
5084 
5085     default:
5086         /* should never get here */
5087         break;
5088     }
5089 }
5090 
5091 static void snd_hdsp_initialize_midi_flush (struct hdsp *hdsp)
5092 {
5093     snd_hdsp_flush_midi_input (hdsp, 0);
5094     snd_hdsp_flush_midi_input (hdsp, 1);
5095 }
5096 
5097 static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp)
5098 {
5099     int err;
5100 
5101     err = snd_hdsp_create_pcm(card, hdsp);
5102     if (err < 0) {
5103         dev_err(card->dev,
5104             "Error creating pcm interface\n");
5105         return err;
5106     }
5107 
5108 
5109     err = snd_hdsp_create_midi(card, hdsp, 0);
5110     if (err < 0) {
5111         dev_err(card->dev,
5112             "Error creating first midi interface\n");
5113         return err;
5114     }
5115 
5116     if (hdsp->io_type == Digiface || hdsp->io_type == H9652) {
5117         err = snd_hdsp_create_midi(card, hdsp, 1);
5118         if (err < 0) {
5119             dev_err(card->dev,
5120                 "Error creating second midi interface\n");
5121             return err;
5122         }
5123     }
5124 
5125     err = snd_hdsp_create_controls(card, hdsp);
5126     if (err < 0) {
5127         dev_err(card->dev,
5128             "Error creating ctl interface\n");
5129         return err;
5130     }
5131 
5132     snd_hdsp_proc_init(hdsp);
5133 
5134     hdsp->system_sample_rate = -1;
5135     hdsp->playback_pid = -1;
5136     hdsp->capture_pid = -1;
5137     hdsp->capture_substream = NULL;
5138     hdsp->playback_substream = NULL;
5139 
5140     err = snd_hdsp_set_defaults(hdsp);
5141     if (err < 0) {
5142         dev_err(card->dev,
5143             "Error setting default values\n");
5144         return err;
5145     }
5146 
5147     if (!(hdsp->state & HDSP_InitializationComplete)) {
5148         strcpy(card->shortname, "Hammerfall DSP");
5149         sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name,
5150             hdsp->port, hdsp->irq);
5151 
5152         err = snd_card_register(card);
5153         if (err < 0) {
5154             dev_err(card->dev,
5155                 "error registering card\n");
5156             return err;
5157         }
5158         hdsp->state |= HDSP_InitializationComplete;
5159     }
5160 
5161     return 0;
5162 }
5163 
5164 /* load firmware via hotplug fw loader */
5165 static int hdsp_request_fw_loader(struct hdsp *hdsp)
5166 {
5167     const char *fwfile;
5168     const struct firmware *fw;
5169     int err;
5170 
5171     if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
5172         return 0;
5173     if (hdsp->io_type == Undefined) {
5174         err = hdsp_get_iobox_version(hdsp);
5175         if (err < 0)
5176             return err;
5177         if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
5178             return 0;
5179     }
5180 
5181     /* caution: max length of firmware filename is 30! */
5182     switch (hdsp->io_type) {
5183     case RPM:
5184         fwfile = "rpm_firmware.bin";
5185         break;
5186     case Multiface:
5187         if (hdsp->firmware_rev == 0xa)
5188             fwfile = "multiface_firmware.bin";
5189         else
5190             fwfile = "multiface_firmware_rev11.bin";
5191         break;
5192     case Digiface:
5193         if (hdsp->firmware_rev == 0xa)
5194             fwfile = "digiface_firmware.bin";
5195         else
5196             fwfile = "digiface_firmware_rev11.bin";
5197         break;
5198     default:
5199         dev_err(hdsp->card->dev,
5200             "invalid io_type %d\n", hdsp->io_type);
5201         return -EINVAL;
5202     }
5203 
5204     if (request_firmware(&fw, fwfile, &hdsp->pci->dev)) {
5205         dev_err(hdsp->card->dev,
5206             "cannot load firmware %s\n", fwfile);
5207         return -ENOENT;
5208     }
5209     if (fw->size < HDSP_FIRMWARE_SIZE) {
5210         dev_err(hdsp->card->dev,
5211             "too short firmware size %d (expected %d)\n",
5212                (int)fw->size, HDSP_FIRMWARE_SIZE);
5213         release_firmware(fw);
5214         return -EINVAL;
5215     }
5216 
5217     hdsp->firmware = fw;
5218 
5219     hdsp->state |= HDSP_FirmwareCached;
5220 
5221     err = snd_hdsp_load_firmware_from_cache(hdsp);
5222     if (err < 0)
5223         return err;
5224 
5225     if (!(hdsp->state & HDSP_InitializationComplete)) {
5226         err = snd_hdsp_enable_io(hdsp);
5227         if (err < 0)
5228             return err;
5229 
5230         err = snd_hdsp_create_hwdep(hdsp->card, hdsp);
5231         if (err < 0) {
5232             dev_err(hdsp->card->dev,
5233                 "error creating hwdep device\n");
5234             return err;
5235         }
5236         snd_hdsp_initialize_channels(hdsp);
5237         snd_hdsp_initialize_midi_flush(hdsp);
5238         err = snd_hdsp_create_alsa_devices(hdsp->card, hdsp);
5239         if (err < 0) {
5240             dev_err(hdsp->card->dev,
5241                 "error creating alsa devices\n");
5242             return err;
5243         }
5244     }
5245     return 0;
5246 }
5247 
5248 static int snd_hdsp_create(struct snd_card *card,
5249                struct hdsp *hdsp)
5250 {
5251     struct pci_dev *pci = hdsp->pci;
5252     int err;
5253     int is_9652 = 0;
5254     int is_9632 = 0;
5255 
5256     hdsp->irq = -1;
5257     hdsp->state = 0;
5258     hdsp->midi[0].rmidi = NULL;
5259     hdsp->midi[1].rmidi = NULL;
5260     hdsp->midi[0].input = NULL;
5261     hdsp->midi[1].input = NULL;
5262     hdsp->midi[0].output = NULL;
5263     hdsp->midi[1].output = NULL;
5264     hdsp->midi[0].pending = 0;
5265     hdsp->midi[1].pending = 0;
5266     spin_lock_init(&hdsp->midi[0].lock);
5267     spin_lock_init(&hdsp->midi[1].lock);
5268     hdsp->iobase = NULL;
5269     hdsp->control_register = 0;
5270     hdsp->control2_register = 0;
5271     hdsp->io_type = Undefined;
5272     hdsp->max_channels = 26;
5273 
5274     hdsp->card = card;
5275 
5276     spin_lock_init(&hdsp->lock);
5277 
5278     INIT_WORK(&hdsp->midi_work, hdsp_midi_work);
5279 
5280     pci_read_config_word(hdsp->pci, PCI_CLASS_REVISION, &hdsp->firmware_rev);
5281     hdsp->firmware_rev &= 0xff;
5282 
5283     /* From Martin Bjoernsen :
5284         "It is important that the card's latency timer register in
5285         the PCI configuration space is set to a value much larger
5286         than 0 by the computer's BIOS or the driver.
5287         The windows driver always sets this 8 bit register [...]
5288         to its maximum 255 to avoid problems with some computers."
5289     */
5290     pci_write_config_byte(hdsp->pci, PCI_LATENCY_TIMER, 0xFF);
5291 
5292     strcpy(card->driver, "H-DSP");
5293     strcpy(card->mixername, "Xilinx FPGA");
5294 
5295     if (hdsp->firmware_rev < 0xa)
5296         return -ENODEV;
5297     else if (hdsp->firmware_rev < 0x64)
5298         hdsp->card_name = "RME Hammerfall DSP";
5299     else if (hdsp->firmware_rev < 0x96) {
5300         hdsp->card_name = "RME HDSP 9652";
5301         is_9652 = 1;
5302     } else {
5303         hdsp->card_name = "RME HDSP 9632";
5304         hdsp->max_channels = 16;
5305         is_9632 = 1;
5306     }
5307 
5308     err = pcim_enable_device(pci);
5309     if (err < 0)
5310         return err;
5311 
5312     pci_set_master(hdsp->pci);
5313 
5314     err = pci_request_regions(pci, "hdsp");
5315     if (err < 0)
5316         return err;
5317     hdsp->port = pci_resource_start(pci, 0);
5318     hdsp->iobase = devm_ioremap(&pci->dev, hdsp->port, HDSP_IO_EXTENT);
5319     if (!hdsp->iobase) {
5320         dev_err(hdsp->card->dev, "unable to remap region 0x%lx-0x%lx\n",
5321             hdsp->port, hdsp->port + HDSP_IO_EXTENT - 1);
5322         return -EBUSY;
5323     }
5324 
5325     if (devm_request_irq(&pci->dev, pci->irq, snd_hdsp_interrupt,
5326                  IRQF_SHARED, KBUILD_MODNAME, hdsp)) {
5327         dev_err(hdsp->card->dev, "unable to use IRQ %d\n", pci->irq);
5328         return -EBUSY;
5329     }
5330 
5331     hdsp->irq = pci->irq;
5332     card->sync_irq = hdsp->irq;
5333     hdsp->precise_ptr = 0;
5334     hdsp->use_midi_work = 1;
5335     hdsp->dds_value = 0;
5336 
5337     err = snd_hdsp_initialize_memory(hdsp);
5338     if (err < 0)
5339         return err;
5340 
5341     if (!is_9652 && !is_9632) {
5342         /* we wait a maximum of 10 seconds to let freshly
5343          * inserted cardbus cards do their hardware init */
5344         err = hdsp_wait_for_iobox(hdsp, 1000, 10);
5345 
5346         if (err < 0)
5347             return err;
5348 
5349         if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
5350             err = hdsp_request_fw_loader(hdsp);
5351             if (err < 0)
5352                 /* we don't fail as this can happen
5353                    if userspace is not ready for
5354                    firmware upload
5355                 */
5356                 dev_err(hdsp->card->dev,
5357                     "couldn't get firmware from userspace. try using hdsploader\n");
5358             else
5359                 /* init is complete, we return */
5360                 return 0;
5361             /* we defer initialization */
5362             dev_info(hdsp->card->dev,
5363                  "card initialization pending : waiting for firmware\n");
5364             err = snd_hdsp_create_hwdep(card, hdsp);
5365             if (err < 0)
5366                 return err;
5367             return 0;
5368         } else {
5369             dev_info(hdsp->card->dev,
5370                  "Firmware already present, initializing card.\n");
5371             if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version2)
5372                 hdsp->io_type = RPM;
5373             else if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1)
5374                 hdsp->io_type = Multiface;
5375             else
5376                 hdsp->io_type = Digiface;
5377         }
5378     }
5379 
5380     err = snd_hdsp_enable_io(hdsp);
5381     if (err)
5382         return err;
5383 
5384     if (is_9652)
5385             hdsp->io_type = H9652;
5386 
5387     if (is_9632)
5388         hdsp->io_type = H9632;
5389 
5390     err = snd_hdsp_create_hwdep(card, hdsp);
5391     if (err < 0)
5392         return err;
5393 
5394     snd_hdsp_initialize_channels(hdsp);
5395     snd_hdsp_initialize_midi_flush(hdsp);
5396 
5397     hdsp->state |= HDSP_FirmwareLoaded;
5398 
5399     err = snd_hdsp_create_alsa_devices(card, hdsp);
5400     if (err < 0)
5401         return err;
5402 
5403     return 0;
5404 }
5405 
5406 static void snd_hdsp_card_free(struct snd_card *card)
5407 {
5408     struct hdsp *hdsp = card->private_data;
5409 
5410     if (hdsp->port) {
5411         /* stop the audio, and cancel all interrupts */
5412         cancel_work_sync(&hdsp->midi_work);
5413         hdsp->control_register &= ~(HDSP_Start|HDSP_AudioInterruptEnable|HDSP_Midi0InterruptEnable|HDSP_Midi1InterruptEnable);
5414         hdsp_write (hdsp, HDSP_controlRegister, hdsp->control_register);
5415     }
5416 
5417     release_firmware(hdsp->firmware);
5418     vfree(hdsp->fw_uploaded);
5419 }
5420 
5421 static int snd_hdsp_probe(struct pci_dev *pci,
5422               const struct pci_device_id *pci_id)
5423 {
5424     static int dev;
5425     struct hdsp *hdsp;
5426     struct snd_card *card;
5427     int err;
5428 
5429     if (dev >= SNDRV_CARDS)
5430         return -ENODEV;
5431     if (!enable[dev]) {
5432         dev++;
5433         return -ENOENT;
5434     }
5435 
5436     err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
5437                 sizeof(struct hdsp), &card);
5438     if (err < 0)
5439         return err;
5440 
5441     hdsp = card->private_data;
5442     card->private_free = snd_hdsp_card_free;
5443     hdsp->dev = dev;
5444     hdsp->pci = pci;
5445     err = snd_hdsp_create(card, hdsp);
5446     if (err)
5447         goto error;
5448 
5449     strcpy(card->shortname, "Hammerfall DSP");
5450     sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name,
5451         hdsp->port, hdsp->irq);
5452     err = snd_card_register(card);
5453     if (err)
5454         goto error;
5455     pci_set_drvdata(pci, card);
5456     dev++;
5457     return 0;
5458 
5459  error:
5460     snd_card_free(card);
5461     return err;
5462 }
5463 
5464 static struct pci_driver hdsp_driver = {
5465     .name =     KBUILD_MODNAME,
5466     .id_table = snd_hdsp_ids,
5467     .probe =    snd_hdsp_probe,
5468 };
5469 
5470 module_pci_driver(hdsp_driver);