cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hdsp.c (152387B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 *   ALSA driver for RME Hammerfall DSP audio interface(s)
      4 *
      5 *      Copyright (c) 2002  Paul Davis
      6 *                          Marcus Andersson
      7 *                          Thomas Charbonnel
      8 */
      9
     10#include <linux/init.h>
     11#include <linux/delay.h>
     12#include <linux/interrupt.h>
     13#include <linux/pci.h>
     14#include <linux/firmware.h>
     15#include <linux/module.h>
     16#include <linux/math64.h>
     17#include <linux/vmalloc.h>
     18#include <linux/io.h>
     19#include <linux/nospec.h>
     20
     21#include <sound/core.h>
     22#include <sound/control.h>
     23#include <sound/pcm.h>
     24#include <sound/info.h>
     25#include <sound/asoundef.h>
     26#include <sound/rawmidi.h>
     27#include <sound/hwdep.h>
     28#include <sound/initval.h>
     29#include <sound/hdsp.h>
     30
     31#include <asm/byteorder.h>
     32#include <asm/current.h>
     33
     34static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
     35static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
     36static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;	/* Enable this card */
     37
     38module_param_array(index, int, NULL, 0444);
     39MODULE_PARM_DESC(index, "Index value for RME Hammerfall DSP interface.");
     40module_param_array(id, charp, NULL, 0444);
     41MODULE_PARM_DESC(id, "ID string for RME Hammerfall DSP interface.");
     42module_param_array(enable, bool, NULL, 0444);
     43MODULE_PARM_DESC(enable, "Enable/disable specific Hammerfall DSP soundcards.");
     44MODULE_AUTHOR("Paul Davis <paul@linuxaudiosystems.com>, Marcus Andersson, Thomas Charbonnel <thomas@undata.org>");
     45MODULE_DESCRIPTION("RME Hammerfall DSP");
     46MODULE_LICENSE("GPL");
     47MODULE_FIRMWARE("rpm_firmware.bin");
     48MODULE_FIRMWARE("multiface_firmware.bin");
     49MODULE_FIRMWARE("multiface_firmware_rev11.bin");
     50MODULE_FIRMWARE("digiface_firmware.bin");
     51MODULE_FIRMWARE("digiface_firmware_rev11.bin");
     52
     53#define HDSP_MAX_CHANNELS        26
     54#define HDSP_MAX_DS_CHANNELS     14
     55#define HDSP_MAX_QS_CHANNELS     8
     56#define DIGIFACE_SS_CHANNELS     26
     57#define DIGIFACE_DS_CHANNELS     14
     58#define MULTIFACE_SS_CHANNELS    18
     59#define MULTIFACE_DS_CHANNELS    14
     60#define H9652_SS_CHANNELS        26
     61#define H9652_DS_CHANNELS        14
     62/* This does not include possible Analog Extension Boards
     63   AEBs are detected at card initialization
     64*/
     65#define H9632_SS_CHANNELS	 12
     66#define H9632_DS_CHANNELS	 8
     67#define H9632_QS_CHANNELS	 4
     68#define RPM_CHANNELS             6
     69
     70/* Write registers. These are defined as byte-offsets from the iobase value.
     71 */
     72#define HDSP_resetPointer               0
     73#define HDSP_freqReg			0
     74#define HDSP_outputBufferAddress	32
     75#define HDSP_inputBufferAddress		36
     76#define HDSP_controlRegister		64
     77#define HDSP_interruptConfirmation	96
     78#define HDSP_outputEnable	  	128
     79#define HDSP_control2Reg		256
     80#define HDSP_midiDataOut0  		352
     81#define HDSP_midiDataOut1  		356
     82#define HDSP_fifoData  			368
     83#define HDSP_inputEnable	 	384
     84
     85/* Read registers. These are defined as byte-offsets from the iobase value
     86 */
     87
     88#define HDSP_statusRegister    0
     89#define HDSP_timecode        128
     90#define HDSP_status2Register 192
     91#define HDSP_midiDataIn0     360
     92#define HDSP_midiDataIn1     364
     93#define HDSP_midiStatusOut0  384
     94#define HDSP_midiStatusOut1  388
     95#define HDSP_midiStatusIn0   392
     96#define HDSP_midiStatusIn1   396
     97#define HDSP_fifoStatus      400
     98
     99/* the meters are regular i/o-mapped registers, but offset
    100   considerably from the rest. the peak registers are reset
    101   when read; the least-significant 4 bits are full-scale counters;
    102   the actual peak value is in the most-significant 24 bits.
    103*/
    104
    105#define HDSP_playbackPeakLevel  4096  /* 26 * 32 bit values */
    106#define HDSP_inputPeakLevel     4224  /* 26 * 32 bit values */
    107#define HDSP_outputPeakLevel    4352  /* (26+2) * 32 bit values */
    108#define HDSP_playbackRmsLevel   4612  /* 26 * 64 bit values */
    109#define HDSP_inputRmsLevel      4868  /* 26 * 64 bit values */
    110
    111
    112/* This is for H9652 cards
    113   Peak values are read downward from the base
    114   Rms values are read upward
    115   There are rms values for the outputs too
    116   26*3 values are read in ss mode
    117   14*3 in ds mode, with no gap between values
    118*/
    119#define HDSP_9652_peakBase	7164
    120#define HDSP_9652_rmsBase	4096
    121
    122/* c.f. the hdsp_9632_meters_t struct */
    123#define HDSP_9632_metersBase	4096
    124
    125#define HDSP_IO_EXTENT     7168
    126
    127/* control2 register bits */
    128
    129#define HDSP_TMS                0x01
    130#define HDSP_TCK                0x02
    131#define HDSP_TDI                0x04
    132#define HDSP_JTAG               0x08
    133#define HDSP_PWDN               0x10
    134#define HDSP_PROGRAM	        0x020
    135#define HDSP_CONFIG_MODE_0	0x040
    136#define HDSP_CONFIG_MODE_1	0x080
    137#define HDSP_VERSION_BIT	(0x100 | HDSP_S_LOAD)
    138#define HDSP_BIGENDIAN_MODE     0x200
    139#define HDSP_RD_MULTIPLE        0x400
    140#define HDSP_9652_ENABLE_MIXER  0x800
    141#define HDSP_S200		0x800
    142#define HDSP_S300		(0x100 | HDSP_S200) /* dummy, purpose of 0x100 unknown */
    143#define HDSP_CYCLIC_MODE	0x1000
    144#define HDSP_TDO                0x10000000
    145
    146#define HDSP_S_PROGRAM	    (HDSP_CYCLIC_MODE|HDSP_PROGRAM|HDSP_CONFIG_MODE_0)
    147#define HDSP_S_LOAD	    (HDSP_CYCLIC_MODE|HDSP_PROGRAM|HDSP_CONFIG_MODE_1)
    148
    149/* Control Register bits */
    150
    151#define HDSP_Start                (1<<0)  /* start engine */
    152#define HDSP_Latency0             (1<<1)  /* buffer size = 2^n where n is defined by Latency{2,1,0} */
    153#define HDSP_Latency1             (1<<2)  /* [ see above ] */
    154#define HDSP_Latency2             (1<<3)  /* [ see above ] */
    155#define HDSP_ClockModeMaster      (1<<4)  /* 1=Master, 0=Slave/Autosync */
    156#define HDSP_AudioInterruptEnable (1<<5)  /* what do you think ? */
    157#define HDSP_Frequency0           (1<<6)  /* 0=44.1kHz/88.2kHz/176.4kHz 1=48kHz/96kHz/192kHz */
    158#define HDSP_Frequency1           (1<<7)  /* 0=32kHz/64kHz/128kHz */
    159#define HDSP_DoubleSpeed          (1<<8)  /* 0=normal speed, 1=double speed */
    160#define HDSP_SPDIFProfessional    (1<<9)  /* 0=consumer, 1=professional */
    161#define HDSP_SPDIFEmphasis        (1<<10) /* 0=none, 1=on */
    162#define HDSP_SPDIFNonAudio        (1<<11) /* 0=off, 1=on */
    163#define HDSP_SPDIFOpticalOut      (1<<12) /* 1=use 1st ADAT connector for SPDIF, 0=do not */
    164#define HDSP_SyncRef2             (1<<13)
    165#define HDSP_SPDIFInputSelect0    (1<<14)
    166#define HDSP_SPDIFInputSelect1    (1<<15)
    167#define HDSP_SyncRef0             (1<<16)
    168#define HDSP_SyncRef1             (1<<17)
    169#define HDSP_AnalogExtensionBoard (1<<18) /* For H9632 cards */
    170#define HDSP_XLRBreakoutCable     (1<<20) /* For H9632 cards */
    171#define HDSP_Midi0InterruptEnable (1<<22)
    172#define HDSP_Midi1InterruptEnable (1<<23)
    173#define HDSP_LineOut              (1<<24)
    174#define HDSP_ADGain0		  (1<<25) /* From here : H9632 specific */
    175#define HDSP_ADGain1		  (1<<26)
    176#define HDSP_DAGain0		  (1<<27)
    177#define HDSP_DAGain1		  (1<<28)
    178#define HDSP_PhoneGain0		  (1<<29)
    179#define HDSP_PhoneGain1		  (1<<30)
    180#define HDSP_QuadSpeed	  	  (1<<31)
    181
    182/* RPM uses some of the registers for special purposes */
    183#define HDSP_RPM_Inp12            0x04A00
    184#define HDSP_RPM_Inp12_Phon_6dB   0x00800  /* Dolby */
    185#define HDSP_RPM_Inp12_Phon_0dB   0x00000  /* .. */
    186#define HDSP_RPM_Inp12_Phon_n6dB  0x04000  /* inp_0 */
    187#define HDSP_RPM_Inp12_Line_0dB   0x04200  /* Dolby+PRO */
    188#define HDSP_RPM_Inp12_Line_n6dB  0x00200  /* PRO */
    189
    190#define HDSP_RPM_Inp34            0x32000
    191#define HDSP_RPM_Inp34_Phon_6dB   0x20000  /* SyncRef1 */
    192#define HDSP_RPM_Inp34_Phon_0dB   0x00000  /* .. */
    193#define HDSP_RPM_Inp34_Phon_n6dB  0x02000  /* SyncRef2 */
    194#define HDSP_RPM_Inp34_Line_0dB   0x30000  /* SyncRef1+SyncRef0 */
    195#define HDSP_RPM_Inp34_Line_n6dB  0x10000  /* SyncRef0 */
    196
    197#define HDSP_RPM_Bypass           0x01000
    198
    199#define HDSP_RPM_Disconnect       0x00001
    200
    201#define HDSP_ADGainMask       (HDSP_ADGain0|HDSP_ADGain1)
    202#define HDSP_ADGainMinus10dBV  HDSP_ADGainMask
    203#define HDSP_ADGainPlus4dBu   (HDSP_ADGain0)
    204#define HDSP_ADGainLowGain     0
    205
    206#define HDSP_DAGainMask         (HDSP_DAGain0|HDSP_DAGain1)
    207#define HDSP_DAGainHighGain      HDSP_DAGainMask
    208#define HDSP_DAGainPlus4dBu     (HDSP_DAGain0)
    209#define HDSP_DAGainMinus10dBV    0
    210
    211#define HDSP_PhoneGainMask      (HDSP_PhoneGain0|HDSP_PhoneGain1)
    212#define HDSP_PhoneGain0dB        HDSP_PhoneGainMask
    213#define HDSP_PhoneGainMinus6dB  (HDSP_PhoneGain0)
    214#define HDSP_PhoneGainMinus12dB  0
    215
    216#define HDSP_LatencyMask    (HDSP_Latency0|HDSP_Latency1|HDSP_Latency2)
    217#define HDSP_FrequencyMask  (HDSP_Frequency0|HDSP_Frequency1|HDSP_DoubleSpeed|HDSP_QuadSpeed)
    218
    219#define HDSP_SPDIFInputMask    (HDSP_SPDIFInputSelect0|HDSP_SPDIFInputSelect1)
    220#define HDSP_SPDIFInputADAT1    0
    221#define HDSP_SPDIFInputCoaxial (HDSP_SPDIFInputSelect0)
    222#define HDSP_SPDIFInputCdrom   (HDSP_SPDIFInputSelect1)
    223#define HDSP_SPDIFInputAES     (HDSP_SPDIFInputSelect0|HDSP_SPDIFInputSelect1)
    224
    225#define HDSP_SyncRefMask        (HDSP_SyncRef0|HDSP_SyncRef1|HDSP_SyncRef2)
    226#define HDSP_SyncRef_ADAT1       0
    227#define HDSP_SyncRef_ADAT2      (HDSP_SyncRef0)
    228#define HDSP_SyncRef_ADAT3      (HDSP_SyncRef1)
    229#define HDSP_SyncRef_SPDIF      (HDSP_SyncRef0|HDSP_SyncRef1)
    230#define HDSP_SyncRef_WORD       (HDSP_SyncRef2)
    231#define HDSP_SyncRef_ADAT_SYNC  (HDSP_SyncRef0|HDSP_SyncRef2)
    232
    233/* Sample Clock Sources */
    234
    235#define HDSP_CLOCK_SOURCE_AUTOSYNC           0
    236#define HDSP_CLOCK_SOURCE_INTERNAL_32KHZ     1
    237#define HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ   2
    238#define HDSP_CLOCK_SOURCE_INTERNAL_48KHZ     3
    239#define HDSP_CLOCK_SOURCE_INTERNAL_64KHZ     4
    240#define HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ   5
    241#define HDSP_CLOCK_SOURCE_INTERNAL_96KHZ     6
    242#define HDSP_CLOCK_SOURCE_INTERNAL_128KHZ    7
    243#define HDSP_CLOCK_SOURCE_INTERNAL_176_4KHZ  8
    244#define HDSP_CLOCK_SOURCE_INTERNAL_192KHZ    9
    245
    246/* Preferred sync reference choices - used by "pref_sync_ref" control switch */
    247
    248#define HDSP_SYNC_FROM_WORD      0
    249#define HDSP_SYNC_FROM_SPDIF     1
    250#define HDSP_SYNC_FROM_ADAT1     2
    251#define HDSP_SYNC_FROM_ADAT_SYNC 3
    252#define HDSP_SYNC_FROM_ADAT2     4
    253#define HDSP_SYNC_FROM_ADAT3     5
    254
    255/* SyncCheck status */
    256
    257#define HDSP_SYNC_CHECK_NO_LOCK 0
    258#define HDSP_SYNC_CHECK_LOCK    1
    259#define HDSP_SYNC_CHECK_SYNC	2
    260
    261/* AutoSync references - used by "autosync_ref" control switch */
    262
    263#define HDSP_AUTOSYNC_FROM_WORD      0
    264#define HDSP_AUTOSYNC_FROM_ADAT_SYNC 1
    265#define HDSP_AUTOSYNC_FROM_SPDIF     2
    266#define HDSP_AUTOSYNC_FROM_NONE	     3
    267#define HDSP_AUTOSYNC_FROM_ADAT1     4
    268#define HDSP_AUTOSYNC_FROM_ADAT2     5
    269#define HDSP_AUTOSYNC_FROM_ADAT3     6
    270
    271/* Possible sources of S/PDIF input */
    272
    273#define HDSP_SPDIFIN_OPTICAL  0	/* optical  (ADAT1) */
    274#define HDSP_SPDIFIN_COAXIAL  1	/* coaxial (RCA) */
    275#define HDSP_SPDIFIN_INTERNAL 2	/* internal (CDROM) */
    276#define HDSP_SPDIFIN_AES      3 /* xlr for H9632 (AES)*/
    277
    278#define HDSP_Frequency32KHz    HDSP_Frequency0
    279#define HDSP_Frequency44_1KHz  HDSP_Frequency1
    280#define HDSP_Frequency48KHz    (HDSP_Frequency1|HDSP_Frequency0)
    281#define HDSP_Frequency64KHz    (HDSP_DoubleSpeed|HDSP_Frequency0)
    282#define HDSP_Frequency88_2KHz  (HDSP_DoubleSpeed|HDSP_Frequency1)
    283#define HDSP_Frequency96KHz    (HDSP_DoubleSpeed|HDSP_Frequency1|HDSP_Frequency0)
    284/* For H9632 cards */
    285#define HDSP_Frequency128KHz   (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency0)
    286#define HDSP_Frequency176_4KHz (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency1)
    287#define HDSP_Frequency192KHz   (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency1|HDSP_Frequency0)
    288/* RME says n = 104857600000000, but in the windows MADI driver, I see:
    289	return 104857600000000 / rate; // 100 MHz
    290	return 110100480000000 / rate; // 105 MHz
    291*/
    292#define DDS_NUMERATOR 104857600000000ULL  /*  =  2^20 * 10^8 */
    293
    294#define hdsp_encode_latency(x)       (((x)<<1) & HDSP_LatencyMask)
    295#define hdsp_decode_latency(x)       (((x) & HDSP_LatencyMask)>>1)
    296
    297#define hdsp_encode_spdif_in(x) (((x)&0x3)<<14)
    298#define hdsp_decode_spdif_in(x) (((x)>>14)&0x3)
    299
    300/* Status Register bits */
    301
    302#define HDSP_audioIRQPending    (1<<0)
    303#define HDSP_Lock2              (1<<1)     /* this is for Digiface and H9652 */
    304#define HDSP_spdifFrequency3	HDSP_Lock2 /* this is for H9632 only */
    305#define HDSP_Lock1              (1<<2)
    306#define HDSP_Lock0              (1<<3)
    307#define HDSP_SPDIFSync          (1<<4)
    308#define HDSP_TimecodeLock       (1<<5)
    309#define HDSP_BufferPositionMask 0x000FFC0 /* Bit 6..15 : h/w buffer pointer */
    310#define HDSP_Sync2              (1<<16)
    311#define HDSP_Sync1              (1<<17)
    312#define HDSP_Sync0              (1<<18)
    313#define HDSP_DoubleSpeedStatus  (1<<19)
    314#define HDSP_ConfigError        (1<<20)
    315#define HDSP_DllError           (1<<21)
    316#define HDSP_spdifFrequency0    (1<<22)
    317#define HDSP_spdifFrequency1    (1<<23)
    318#define HDSP_spdifFrequency2    (1<<24)
    319#define HDSP_SPDIFErrorFlag     (1<<25)
    320#define HDSP_BufferID           (1<<26)
    321#define HDSP_TimecodeSync       (1<<27)
    322#define HDSP_AEBO          	(1<<28) /* H9632 specific Analog Extension Boards */
    323#define HDSP_AEBI		(1<<29) /* 0 = present, 1 = absent */
    324#define HDSP_midi0IRQPending    (1<<30)
    325#define HDSP_midi1IRQPending    (1<<31)
    326
    327#define HDSP_spdifFrequencyMask    (HDSP_spdifFrequency0|HDSP_spdifFrequency1|HDSP_spdifFrequency2)
    328#define HDSP_spdifFrequencyMask_9632 (HDSP_spdifFrequency0|\
    329				      HDSP_spdifFrequency1|\
    330				      HDSP_spdifFrequency2|\
    331				      HDSP_spdifFrequency3)
    332
    333#define HDSP_spdifFrequency32KHz   (HDSP_spdifFrequency0)
    334#define HDSP_spdifFrequency44_1KHz (HDSP_spdifFrequency1)
    335#define HDSP_spdifFrequency48KHz   (HDSP_spdifFrequency0|HDSP_spdifFrequency1)
    336
    337#define HDSP_spdifFrequency64KHz   (HDSP_spdifFrequency2)
    338#define HDSP_spdifFrequency88_2KHz (HDSP_spdifFrequency0|HDSP_spdifFrequency2)
    339#define HDSP_spdifFrequency96KHz   (HDSP_spdifFrequency2|HDSP_spdifFrequency1)
    340
    341/* This is for H9632 cards */
    342#define HDSP_spdifFrequency128KHz   (HDSP_spdifFrequency0|\
    343				     HDSP_spdifFrequency1|\
    344				     HDSP_spdifFrequency2)
    345#define HDSP_spdifFrequency176_4KHz HDSP_spdifFrequency3
    346#define HDSP_spdifFrequency192KHz   (HDSP_spdifFrequency3|HDSP_spdifFrequency0)
    347
    348/* Status2 Register bits */
    349
    350#define HDSP_version0     (1<<0)
    351#define HDSP_version1     (1<<1)
    352#define HDSP_version2     (1<<2)
    353#define HDSP_wc_lock      (1<<3)
    354#define HDSP_wc_sync      (1<<4)
    355#define HDSP_inp_freq0    (1<<5)
    356#define HDSP_inp_freq1    (1<<6)
    357#define HDSP_inp_freq2    (1<<7)
    358#define HDSP_SelSyncRef0  (1<<8)
    359#define HDSP_SelSyncRef1  (1<<9)
    360#define HDSP_SelSyncRef2  (1<<10)
    361
    362#define HDSP_wc_valid (HDSP_wc_lock|HDSP_wc_sync)
    363
    364#define HDSP_systemFrequencyMask (HDSP_inp_freq0|HDSP_inp_freq1|HDSP_inp_freq2)
    365#define HDSP_systemFrequency32   (HDSP_inp_freq0)
    366#define HDSP_systemFrequency44_1 (HDSP_inp_freq1)
    367#define HDSP_systemFrequency48   (HDSP_inp_freq0|HDSP_inp_freq1)
    368#define HDSP_systemFrequency64   (HDSP_inp_freq2)
    369#define HDSP_systemFrequency88_2 (HDSP_inp_freq0|HDSP_inp_freq2)
    370#define HDSP_systemFrequency96   (HDSP_inp_freq1|HDSP_inp_freq2)
    371/* FIXME : more values for 9632 cards ? */
    372
    373#define HDSP_SelSyncRefMask        (HDSP_SelSyncRef0|HDSP_SelSyncRef1|HDSP_SelSyncRef2)
    374#define HDSP_SelSyncRef_ADAT1      0
    375#define HDSP_SelSyncRef_ADAT2      (HDSP_SelSyncRef0)
    376#define HDSP_SelSyncRef_ADAT3      (HDSP_SelSyncRef1)
    377#define HDSP_SelSyncRef_SPDIF      (HDSP_SelSyncRef0|HDSP_SelSyncRef1)
    378#define HDSP_SelSyncRef_WORD       (HDSP_SelSyncRef2)
    379#define HDSP_SelSyncRef_ADAT_SYNC  (HDSP_SelSyncRef0|HDSP_SelSyncRef2)
    380
    381/* Card state flags */
    382
    383#define HDSP_InitializationComplete  (1<<0)
    384#define HDSP_FirmwareLoaded	     (1<<1)
    385#define HDSP_FirmwareCached	     (1<<2)
    386
    387/* FIFO wait times, defined in terms of 1/10ths of msecs */
    388
    389#define HDSP_LONG_WAIT	 5000
    390#define HDSP_SHORT_WAIT  30
    391
    392#define UNITY_GAIN                       32768
    393#define MINUS_INFINITY_GAIN              0
    394
    395/* the size of a substream (1 mono data stream) */
    396
    397#define HDSP_CHANNEL_BUFFER_SAMPLES  (16*1024)
    398#define HDSP_CHANNEL_BUFFER_BYTES    (4*HDSP_CHANNEL_BUFFER_SAMPLES)
    399
    400/* the size of the area we need to allocate for DMA transfers. the
    401   size is the same regardless of the number of channels - the
    402   Multiface still uses the same memory area.
    403
    404   Note that we allocate 1 more channel than is apparently needed
    405   because the h/w seems to write 1 byte beyond the end of the last
    406   page. Sigh.
    407*/
    408
    409#define HDSP_DMA_AREA_BYTES ((HDSP_MAX_CHANNELS+1) * HDSP_CHANNEL_BUFFER_BYTES)
    410#define HDSP_DMA_AREA_KILOBYTES (HDSP_DMA_AREA_BYTES/1024)
    411
    412#define HDSP_FIRMWARE_SIZE	(24413 * 4)
    413
    414struct hdsp_9632_meters {
    415    u32 input_peak[16];
    416    u32 playback_peak[16];
    417    u32 output_peak[16];
    418    u32 xxx_peak[16];
    419    u32 padding[64];
    420    u32 input_rms_low[16];
    421    u32 playback_rms_low[16];
    422    u32 output_rms_low[16];
    423    u32 xxx_rms_low[16];
    424    u32 input_rms_high[16];
    425    u32 playback_rms_high[16];
    426    u32 output_rms_high[16];
    427    u32 xxx_rms_high[16];
    428};
    429
    430struct hdsp_midi {
    431    struct hdsp             *hdsp;
    432    int                      id;
    433    struct snd_rawmidi           *rmidi;
    434    struct snd_rawmidi_substream *input;
    435    struct snd_rawmidi_substream *output;
    436    char                     istimer; /* timer in use */
    437    struct timer_list	     timer;
    438    spinlock_t               lock;
    439    int			     pending;
    440};
    441
    442struct hdsp {
    443	spinlock_t            lock;
    444	struct snd_pcm_substream *capture_substream;
    445	struct snd_pcm_substream *playback_substream;
    446        struct hdsp_midi      midi[2];
    447	struct work_struct    midi_work;
    448	int		      use_midi_work;
    449	int                   precise_ptr;
    450	u32                   control_register;	     /* cached value */
    451	u32                   control2_register;     /* cached value */
    452	u32                   creg_spdif;
    453	u32                   creg_spdif_stream;
    454	int                   clock_source_locked;
    455	char                 *card_name;	 /* digiface/multiface/rpm */
    456	enum HDSP_IO_Type     io_type;               /* ditto, but for code use */
    457        unsigned short        firmware_rev;
    458	unsigned short	      state;		     /* stores state bits */
    459	const struct firmware *firmware;
    460	u32                  *fw_uploaded;
    461	size_t                period_bytes; 	     /* guess what this is */
    462	unsigned char	      max_channels;
    463	unsigned char	      qs_in_channels;	     /* quad speed mode for H9632 */
    464	unsigned char         ds_in_channels;
    465	unsigned char         ss_in_channels;	    /* different for multiface/digiface */
    466	unsigned char	      qs_out_channels;
    467	unsigned char         ds_out_channels;
    468	unsigned char         ss_out_channels;
    469	u32                   io_loopback;          /* output loopback channel states*/
    470
    471	/* DMA buffers; those are copied instances from the original snd_dma_buf
    472	 * objects (which are managed via devres) for the address alignments
    473	 */
    474	struct snd_dma_buffer capture_dma_buf;
    475	struct snd_dma_buffer playback_dma_buf;
    476	unsigned char        *capture_buffer;	    /* suitably aligned address */
    477	unsigned char        *playback_buffer;	    /* suitably aligned address */
    478
    479	pid_t                 capture_pid;
    480	pid_t                 playback_pid;
    481	int                   running;
    482	int                   system_sample_rate;
    483	const char           *channel_map;
    484	int                   dev;
    485	int                   irq;
    486	unsigned long         port;
    487        void __iomem         *iobase;
    488	struct snd_card *card;
    489	struct snd_pcm *pcm;
    490	struct snd_hwdep          *hwdep;
    491	struct pci_dev       *pci;
    492	struct snd_kcontrol *spdif_ctl;
    493        unsigned short        mixer_matrix[HDSP_MATRIX_MIXER_SIZE];
    494	unsigned int          dds_value; /* last value written to freq register */
    495};
    496
    497/* These tables map the ALSA channels 1..N to the channels that we
    498   need to use in order to find the relevant channel buffer. RME
    499   refer to this kind of mapping as between "the ADAT channel and
    500   the DMA channel." We index it using the logical audio channel,
    501   and the value is the DMA channel (i.e. channel buffer number)
    502   where the data for that channel can be read/written from/to.
    503*/
    504
    505static const char channel_map_df_ss[HDSP_MAX_CHANNELS] = {
    506	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
    507	18, 19, 20, 21, 22, 23, 24, 25
    508};
    509
    510static const char channel_map_mf_ss[HDSP_MAX_CHANNELS] = { /* Multiface */
    511	/* Analog */
    512	0, 1, 2, 3, 4, 5, 6, 7,
    513	/* ADAT 2 */
    514	16, 17, 18, 19, 20, 21, 22, 23,
    515	/* SPDIF */
    516	24, 25,
    517	-1, -1, -1, -1, -1, -1, -1, -1
    518};
    519
    520static const char channel_map_ds[HDSP_MAX_CHANNELS] = {
    521	/* ADAT channels are remapped */
    522	1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23,
    523	/* channels 12 and 13 are S/PDIF */
    524	24, 25,
    525	/* others don't exist */
    526	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
    527};
    528
    529static const char channel_map_H9632_ss[HDSP_MAX_CHANNELS] = {
    530	/* ADAT channels */
    531	0, 1, 2, 3, 4, 5, 6, 7,
    532	/* SPDIF */
    533	8, 9,
    534	/* Analog */
    535	10, 11,
    536	/* AO4S-192 and AI4S-192 extension boards */
    537	12, 13, 14, 15,
    538	/* others don't exist */
    539	-1, -1, -1, -1, -1, -1, -1, -1,
    540	-1, -1
    541};
    542
    543static const char channel_map_H9632_ds[HDSP_MAX_CHANNELS] = {
    544	/* ADAT */
    545	1, 3, 5, 7,
    546	/* SPDIF */
    547	8, 9,
    548	/* Analog */
    549	10, 11,
    550	/* AO4S-192 and AI4S-192 extension boards */
    551	12, 13, 14, 15,
    552	/* others don't exist */
    553	-1, -1, -1, -1, -1, -1, -1, -1,
    554	-1, -1, -1, -1, -1, -1
    555};
    556
    557static const char channel_map_H9632_qs[HDSP_MAX_CHANNELS] = {
    558	/* ADAT is disabled in this mode */
    559	/* SPDIF */
    560	8, 9,
    561	/* Analog */
    562	10, 11,
    563	/* AO4S-192 and AI4S-192 extension boards */
    564	12, 13, 14, 15,
    565	/* others don't exist */
    566	-1, -1, -1, -1, -1, -1, -1, -1,
    567	-1, -1, -1, -1, -1, -1, -1, -1,
    568	-1, -1
    569};
    570
    571static struct snd_dma_buffer *
    572snd_hammerfall_get_buffer(struct pci_dev *pci, size_t size)
    573{
    574	return snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, size);
    575}
    576
    577static const struct pci_device_id snd_hdsp_ids[] = {
    578	{
    579		.vendor = PCI_VENDOR_ID_XILINX,
    580		.device = PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP,
    581		.subvendor = PCI_ANY_ID,
    582		.subdevice = PCI_ANY_ID,
    583	}, /* RME Hammerfall-DSP */
    584	{ 0, },
    585};
    586
    587MODULE_DEVICE_TABLE(pci, snd_hdsp_ids);
    588
    589/* prototypes */
    590static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp);
    591static int snd_hdsp_create_pcm(struct snd_card *card, struct hdsp *hdsp);
    592static int snd_hdsp_enable_io (struct hdsp *hdsp);
    593static void snd_hdsp_initialize_midi_flush (struct hdsp *hdsp);
    594static void snd_hdsp_initialize_channels (struct hdsp *hdsp);
    595static int hdsp_fifo_wait(struct hdsp *hdsp, int count, int timeout);
    596static int hdsp_autosync_ref(struct hdsp *hdsp);
    597static int snd_hdsp_set_defaults(struct hdsp *hdsp);
    598static void snd_hdsp_9652_enable_mixer (struct hdsp *hdsp);
    599
    600static int hdsp_playback_to_output_key (struct hdsp *hdsp, int in, int out)
    601{
    602	switch (hdsp->io_type) {
    603	case Multiface:
    604	case Digiface:
    605	case RPM:
    606	default:
    607		if (hdsp->firmware_rev == 0xa)
    608			return (64 * out) + (32 + (in));
    609		else
    610			return (52 * out) + (26 + (in));
    611	case H9632:
    612		return (32 * out) + (16 + (in));
    613	case H9652:
    614		return (52 * out) + (26 + (in));
    615	}
    616}
    617
    618static int hdsp_input_to_output_key (struct hdsp *hdsp, int in, int out)
    619{
    620	switch (hdsp->io_type) {
    621	case Multiface:
    622	case Digiface:
    623	case RPM:
    624	default:
    625		if (hdsp->firmware_rev == 0xa)
    626			return (64 * out) + in;
    627		else
    628			return (52 * out) + in;
    629	case H9632:
    630		return (32 * out) + in;
    631	case H9652:
    632		return (52 * out) + in;
    633	}
    634}
    635
    636static void hdsp_write(struct hdsp *hdsp, int reg, int val)
    637{
    638	writel(val, hdsp->iobase + reg);
    639}
    640
    641static unsigned int hdsp_read(struct hdsp *hdsp, int reg)
    642{
    643	return readl (hdsp->iobase + reg);
    644}
    645
    646static int hdsp_check_for_iobox (struct hdsp *hdsp)
    647{
    648	int i;
    649
    650	if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return 0;
    651	for (i = 0; i < 500; i++) {
    652		if (0 == (hdsp_read(hdsp, HDSP_statusRegister) &
    653					HDSP_ConfigError)) {
    654			if (i) {
    655				dev_dbg(hdsp->card->dev,
    656					"IO box found after %d ms\n",
    657						(20 * i));
    658			}
    659			return 0;
    660		}
    661		msleep(20);
    662	}
    663	dev_err(hdsp->card->dev, "no IO box connected!\n");
    664	hdsp->state &= ~HDSP_FirmwareLoaded;
    665	return -EIO;
    666}
    667
    668static int hdsp_wait_for_iobox(struct hdsp *hdsp, unsigned int loops,
    669			       unsigned int delay)
    670{
    671	unsigned int i;
    672
    673	if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
    674		return 0;
    675
    676	for (i = 0; i != loops; ++i) {
    677		if (hdsp_read(hdsp, HDSP_statusRegister) & HDSP_ConfigError)
    678			msleep(delay);
    679		else {
    680			dev_dbg(hdsp->card->dev, "iobox found after %ums!\n",
    681				   i * delay);
    682			return 0;
    683		}
    684	}
    685
    686	dev_info(hdsp->card->dev, "no IO box connected!\n");
    687	hdsp->state &= ~HDSP_FirmwareLoaded;
    688	return -EIO;
    689}
    690
    691static int snd_hdsp_load_firmware_from_cache(struct hdsp *hdsp) {
    692
    693	int i;
    694	unsigned long flags;
    695	const u32 *cache;
    696
    697	if (hdsp->fw_uploaded)
    698		cache = hdsp->fw_uploaded;
    699	else {
    700		if (!hdsp->firmware)
    701			return -ENODEV;
    702		cache = (u32 *)hdsp->firmware->data;
    703		if (!cache)
    704			return -ENODEV;
    705	}
    706
    707	if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
    708
    709		dev_info(hdsp->card->dev, "loading firmware\n");
    710
    711		hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_PROGRAM);
    712		hdsp_write (hdsp, HDSP_fifoData, 0);
    713
    714		if (hdsp_fifo_wait (hdsp, 0, HDSP_LONG_WAIT)) {
    715			dev_info(hdsp->card->dev,
    716				 "timeout waiting for download preparation\n");
    717			hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200);
    718			return -EIO;
    719		}
    720
    721		hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_LOAD);
    722
    723		for (i = 0; i < HDSP_FIRMWARE_SIZE / 4; ++i) {
    724			hdsp_write(hdsp, HDSP_fifoData, cache[i]);
    725			if (hdsp_fifo_wait (hdsp, 127, HDSP_LONG_WAIT)) {
    726				dev_info(hdsp->card->dev,
    727					 "timeout during firmware loading\n");
    728				hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200);
    729				return -EIO;
    730			}
    731		}
    732
    733		hdsp_fifo_wait(hdsp, 3, HDSP_LONG_WAIT);
    734		hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200);
    735
    736		ssleep(3);
    737#ifdef SNDRV_BIG_ENDIAN
    738		hdsp->control2_register = HDSP_BIGENDIAN_MODE;
    739#else
    740		hdsp->control2_register = 0;
    741#endif
    742		hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
    743		dev_info(hdsp->card->dev, "finished firmware loading\n");
    744
    745	}
    746	if (hdsp->state & HDSP_InitializationComplete) {
    747		dev_info(hdsp->card->dev,
    748			 "firmware loaded from cache, restoring defaults\n");
    749		spin_lock_irqsave(&hdsp->lock, flags);
    750		snd_hdsp_set_defaults(hdsp);
    751		spin_unlock_irqrestore(&hdsp->lock, flags);
    752	}
    753
    754	hdsp->state |= HDSP_FirmwareLoaded;
    755
    756	return 0;
    757}
    758
    759static int hdsp_get_iobox_version (struct hdsp *hdsp)
    760{
    761	if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
    762
    763		hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
    764		hdsp_write(hdsp, HDSP_fifoData, 0);
    765
    766		if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0) {
    767			hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
    768			hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
    769		}
    770
    771		hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200 | HDSP_PROGRAM);
    772		hdsp_write (hdsp, HDSP_fifoData, 0);
    773		if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0)
    774			goto set_multi;
    775
    776		hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
    777		hdsp_write(hdsp, HDSP_fifoData, 0);
    778		if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) == 0) {
    779			hdsp->io_type = Digiface;
    780			dev_info(hdsp->card->dev, "Digiface found\n");
    781			return 0;
    782		}
    783
    784		hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
    785		hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
    786		hdsp_write(hdsp, HDSP_fifoData, 0);
    787		if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) == 0)
    788			goto set_multi;
    789
    790		hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
    791		hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
    792		hdsp_write(hdsp, HDSP_fifoData, 0);
    793		if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0)
    794			goto set_multi;
    795
    796		hdsp->io_type = RPM;
    797		dev_info(hdsp->card->dev, "RPM found\n");
    798		return 0;
    799	} else {
    800		/* firmware was already loaded, get iobox type */
    801		if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version2)
    802			hdsp->io_type = RPM;
    803		else if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1)
    804			hdsp->io_type = Multiface;
    805		else
    806			hdsp->io_type = Digiface;
    807	}
    808	return 0;
    809
    810set_multi:
    811	hdsp->io_type = Multiface;
    812	dev_info(hdsp->card->dev, "Multiface found\n");
    813	return 0;
    814}
    815
    816
    817static int hdsp_request_fw_loader(struct hdsp *hdsp);
    818
    819static int hdsp_check_for_firmware (struct hdsp *hdsp, int load_on_demand)
    820{
    821	if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
    822		return 0;
    823	if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
    824		hdsp->state &= ~HDSP_FirmwareLoaded;
    825		if (! load_on_demand)
    826			return -EIO;
    827		dev_err(hdsp->card->dev, "firmware not present.\n");
    828		/* try to load firmware */
    829		if (! (hdsp->state & HDSP_FirmwareCached)) {
    830			if (! hdsp_request_fw_loader(hdsp))
    831				return 0;
    832			dev_err(hdsp->card->dev,
    833				   "No firmware loaded nor cached, please upload firmware.\n");
    834			return -EIO;
    835		}
    836		if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) {
    837			dev_err(hdsp->card->dev,
    838				   "Firmware loading from cache failed, please upload manually.\n");
    839			return -EIO;
    840		}
    841	}
    842	return 0;
    843}
    844
    845
    846static int hdsp_fifo_wait(struct hdsp *hdsp, int count, int timeout)
    847{
    848	int i;
    849
    850	/* the fifoStatus registers reports on how many words
    851	   are available in the command FIFO.
    852	*/
    853
    854	for (i = 0; i < timeout; i++) {
    855
    856		if ((int)(hdsp_read (hdsp, HDSP_fifoStatus) & 0xff) <= count)
    857			return 0;
    858
    859		/* not very friendly, but we only do this during a firmware
    860		   load and changing the mixer, so we just put up with it.
    861		*/
    862
    863		udelay (100);
    864	}
    865
    866	dev_warn(hdsp->card->dev,
    867		 "wait for FIFO status <= %d failed after %d iterations\n",
    868		    count, timeout);
    869	return -1;
    870}
    871
    872static int hdsp_read_gain (struct hdsp *hdsp, unsigned int addr)
    873{
    874	if (addr >= HDSP_MATRIX_MIXER_SIZE)
    875		return 0;
    876
    877	return hdsp->mixer_matrix[addr];
    878}
    879
    880static int hdsp_write_gain(struct hdsp *hdsp, unsigned int addr, unsigned short data)
    881{
    882	unsigned int ad;
    883
    884	if (addr >= HDSP_MATRIX_MIXER_SIZE)
    885		return -1;
    886
    887	if (hdsp->io_type == H9652 || hdsp->io_type == H9632) {
    888
    889		/* from martin bjornsen:
    890
    891		   "You can only write dwords to the
    892		   mixer memory which contain two
    893		   mixer values in the low and high
    894		   word. So if you want to change
    895		   value 0 you have to read value 1
    896		   from the cache and write both to
    897		   the first dword in the mixer
    898		   memory."
    899		*/
    900
    901		if (hdsp->io_type == H9632 && addr >= 512)
    902			return 0;
    903
    904		if (hdsp->io_type == H9652 && addr >= 1352)
    905			return 0;
    906
    907		hdsp->mixer_matrix[addr] = data;
    908
    909
    910		/* `addr' addresses a 16-bit wide address, but
    911		   the address space accessed via hdsp_write
    912		   uses byte offsets. put another way, addr
    913		   varies from 0 to 1351, but to access the
    914		   corresponding memory location, we need
    915		   to access 0 to 2703 ...
    916		*/
    917		ad = addr/2;
    918
    919		hdsp_write (hdsp, 4096 + (ad*4),
    920			    (hdsp->mixer_matrix[(addr&0x7fe)+1] << 16) +
    921			    hdsp->mixer_matrix[addr&0x7fe]);
    922
    923		return 0;
    924
    925	} else {
    926
    927		ad = (addr << 16) + data;
    928
    929		if (hdsp_fifo_wait(hdsp, 127, HDSP_LONG_WAIT))
    930			return -1;
    931
    932		hdsp_write (hdsp, HDSP_fifoData, ad);
    933		hdsp->mixer_matrix[addr] = data;
    934
    935	}
    936
    937	return 0;
    938}
    939
    940static int snd_hdsp_use_is_exclusive(struct hdsp *hdsp)
    941{
    942	unsigned long flags;
    943	int ret = 1;
    944
    945	spin_lock_irqsave(&hdsp->lock, flags);
    946	if ((hdsp->playback_pid != hdsp->capture_pid) &&
    947	    (hdsp->playback_pid >= 0) && (hdsp->capture_pid >= 0))
    948		ret = 0;
    949	spin_unlock_irqrestore(&hdsp->lock, flags);
    950	return ret;
    951}
    952
    953static int hdsp_spdif_sample_rate(struct hdsp *hdsp)
    954{
    955	unsigned int status = hdsp_read(hdsp, HDSP_statusRegister);
    956	unsigned int rate_bits = (status & HDSP_spdifFrequencyMask);
    957
    958	/* For the 9632, the mask is different */
    959	if (hdsp->io_type == H9632)
    960		 rate_bits = (status & HDSP_spdifFrequencyMask_9632);
    961
    962	if (status & HDSP_SPDIFErrorFlag)
    963		return 0;
    964
    965	switch (rate_bits) {
    966	case HDSP_spdifFrequency32KHz: return 32000;
    967	case HDSP_spdifFrequency44_1KHz: return 44100;
    968	case HDSP_spdifFrequency48KHz: return 48000;
    969	case HDSP_spdifFrequency64KHz: return 64000;
    970	case HDSP_spdifFrequency88_2KHz: return 88200;
    971	case HDSP_spdifFrequency96KHz: return 96000;
    972	case HDSP_spdifFrequency128KHz:
    973		if (hdsp->io_type == H9632) return 128000;
    974		break;
    975	case HDSP_spdifFrequency176_4KHz:
    976		if (hdsp->io_type == H9632) return 176400;
    977		break;
    978	case HDSP_spdifFrequency192KHz:
    979		if (hdsp->io_type == H9632) return 192000;
    980		break;
    981	default:
    982		break;
    983	}
    984	dev_warn(hdsp->card->dev,
    985		 "unknown spdif frequency status; bits = 0x%x, status = 0x%x\n",
    986		 rate_bits, status);
    987	return 0;
    988}
    989
    990static int hdsp_external_sample_rate(struct hdsp *hdsp)
    991{
    992	unsigned int status2 = hdsp_read(hdsp, HDSP_status2Register);
    993	unsigned int rate_bits = status2 & HDSP_systemFrequencyMask;
    994
    995	/* For the 9632 card, there seems to be no bit for indicating external
    996	 * sample rate greater than 96kHz. The card reports the corresponding
    997	 * single speed. So the best means seems to get spdif rate when
    998	 * autosync reference is spdif */
    999	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
   1015static void hdsp_compute_period_size(struct hdsp *hdsp)
   1016{
   1017	hdsp->period_bytes = 1 << ((hdsp_decode_latency(hdsp->control_register) + 8));
   1018}
   1019
   1020static 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
   1035static 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
   1045static 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
   1051static 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
   1057static void hdsp_silence_playback(struct hdsp *hdsp)
   1058{
   1059	memset(hdsp->playback_buffer, 0, HDSP_DMA_AREA_BYTES);
   1060}
   1061
   1062static 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
   1087static 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
   1106static 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
   1258static 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
   1267static 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
   1276static 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
   1284static 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
   1299static 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
   1305static 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
   1335static 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
   1368static 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
   1392static 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
   1412static 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
   1435static 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
   1448static 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
   1460static 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
   1474static 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
   1488static 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
   1495static 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
   1502static 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
   1536static 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
   1548static 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
   1558static 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
   1565static 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
   1573static 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
   1587static 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
   1594static 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
   1602static 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
   1618static 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
   1625static 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
   1639static unsigned int hdsp_spdif_in(struct hdsp *hdsp)
   1640{
   1641	return hdsp_decode_spdif_in(hdsp->control_register & HDSP_SPDIFInputMask);
   1642}
   1643
   1644static 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
   1652static 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
   1663static 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
   1671static 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
   1697static int hdsp_toggle_setting(struct hdsp *hdsp, u32 regmask)
   1698{
   1699	return (hdsp->control_register & regmask) ? 1 : 0;
   1700}
   1701
   1702static 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
   1715static 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
   1727static 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
   1755static 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
   1767static 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
   1814static 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
   1821static 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
   1838static 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
   1850static 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
   1897static 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
   1906static 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
   1913static 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
   1930static 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
   1960static 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
   2009static 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
   2023static 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
   2031static 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
   2059static 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
   2067static 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
   2087static 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
   2101static 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
   2122static 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
   2129static 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
   2137static 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
   2166static 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
   2180static 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
   2201static 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
   2208static 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
   2216static 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
   2245static 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
   2259static 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
   2280static 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
   2287static 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
   2295static 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
   2324static 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
   2349static 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
   2378static 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
   2404static 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
   2412static 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
   2453static 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
   2479static 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
   2488static 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
   2505static 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
   2516static 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
   2526static 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
   2551static 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
   2562static 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
   2572static 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
   2600static 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
   2610static 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
   2631static 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
   2670static 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
   2677static 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
   2690static 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
   2707static 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
   2721static 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
   2738static 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
   2750static 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
   2765static 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
   2778static 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
   2815static 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
   2837static 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
   2844static 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
   2853static 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
   2861static 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
   2879static const struct snd_kcontrol_new snd_hdsp_9632_controls[] = {
   2880HDSP_DA_GAIN("DA Gain", 0),
   2881HDSP_AD_GAIN("AD Gain", 0),
   2882HDSP_PHONE_GAIN("Phones Gain", 0),
   2883HDSP_TOGGLE_SETTING("XLR Breakout Cable", HDSP_XLRBreakoutCable),
   2884HDSP_DDS_OFFSET("DDS Sample Rate Offset", 0)
   2885};
   2886
   2887static 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},
   2923HDSP_MIXER("Mixer", 0),
   2924HDSP_SPDIF_IN("IEC958 Input Connector", 0),
   2925HDSP_TOGGLE_SETTING("IEC958 Output also on ADAT1", HDSP_SPDIFOpticalOut),
   2926HDSP_TOGGLE_SETTING("IEC958 Professional Bit", HDSP_SPDIFProfessional),
   2927HDSP_TOGGLE_SETTING("IEC958 Emphasis Bit", HDSP_SPDIFEmphasis),
   2928HDSP_TOGGLE_SETTING("IEC958 Non-audio Bit", HDSP_SPDIFNonAudio),
   2929/* 'Sample Clock Source' complies with the alsa control naming scheme */
   2930HDSP_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},
   2938HDSP_SYSTEM_CLOCK_MODE("System Clock Mode", 0),
   2939HDSP_PREF_SYNC_REF("Preferred Sync Reference", 0),
   2940HDSP_AUTOSYNC_REF("AutoSync Reference", 0),
   2941HDSP_SPDIF_SAMPLE_RATE("SPDIF Sample Rate", 0),
   2942HDSP_SYSTEM_SAMPLE_RATE("System Sample Rate", 0),
   2943/* 'External Rate' complies with the alsa control naming scheme */
   2944HDSP_AUTOSYNC_SAMPLE_RATE("External Rate", 0),
   2945HDSP_WC_SYNC_CHECK("Word Clock Lock Status", 0),
   2946HDSP_SPDIF_SYNC_CHECK("SPDIF Lock Status", 0),
   2947HDSP_ADATSYNC_SYNC_CHECK("ADAT Sync Lock Status", 0),
   2948HDSP_TOGGLE_SETTING("Line Out", HDSP_LineOut),
   2949HDSP_PRECISE_POINTER("Precise Pointer", 0),
   2950HDSP_USE_MIDI_WORK("Use Midi Tasklet", 0),
   2951};
   2952
   2953
   2954static 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
   2970static 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
   2979static 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
   3006static 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
   3029static 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
   3039static 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
   3055static 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
   3064static 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
   3091static 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 */
   3115static int hdsp_rpm_bypass(struct hdsp *hdsp)
   3116{
   3117	return (hdsp->control_register & HDSP_RPM_Bypass) ? 1 : 0;
   3118}
   3119
   3120
   3121static 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
   3130static 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
   3141static 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
   3158static 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 */
   3167static int hdsp_rpm_disconnect(struct hdsp *hdsp)
   3168{
   3169	return (hdsp->control_register & HDSP_RPM_Disconnect) ? 1 : 0;
   3170}
   3171
   3172
   3173static 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
   3182static 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
   3193static 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
   3209static 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
   3216static 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
   3249static const struct snd_kcontrol_new snd_hdsp_96xx_aeb =
   3250	HDSP_TOGGLE_SETTING("Analog Extension Board",
   3251			HDSP_AnalogExtensionBoard);
   3252static struct snd_kcontrol_new snd_hdsp_adat_sync_check = HDSP_ADAT_SYNC_CHECK;
   3253
   3254
   3255static bool hdsp_loopback_get(struct hdsp *const hdsp, const u8 channel)
   3256{
   3257	return hdsp->io_loopback & (1 << channel);
   3258}
   3259
   3260static 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
   3272static 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
   3286static 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
   3299static 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
   3308static 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
   3386static void
   3387snd_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
   3763static 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
   3768static 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
   3800static 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
   3863static 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
   3873static 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
   3936static 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
   3942static 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
   3962static 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
   3980static 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
   3994static 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
   4012static 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
   4026static 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
   4040static 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
   4066static 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
   4143static 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
   4162static 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
   4177static 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
   4245static 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
   4263static 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
   4293static 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
   4322static const unsigned int hdsp_period_sizes[] = { 64, 128, 256, 512, 1024, 2048, 4096, 8192 };
   4323
   4324static 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
   4330static const unsigned int hdsp_9632_sample_rates[] = { 32000, 44100, 48000, 64000, 88200, 96000, 128000, 176400, 192000 };
   4331
   4332static 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
   4338static 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
   4357static 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
   4375static 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
   4406static 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
   4437static 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
   4468static 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
   4499static 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
   4555static 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
   4575static 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
   4619static 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 */
   4633static 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
   4639static 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
   4649static 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
   4659static 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
   4696static 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
   4726static 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
   4756static 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
   4945static 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
   4958static 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
   4970static 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
   4989static 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
   5010static 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
   5016static 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
   5034static 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
   5091static 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
   5097static 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 */
   5165static 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
   5248static 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
   5406static 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
   5421static 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
   5464static struct pci_driver hdsp_driver = {
   5465	.name =     KBUILD_MODNAME,
   5466	.id_table = snd_hdsp_ids,
   5467	.probe =    snd_hdsp_probe,
   5468};
   5469
   5470module_pci_driver(hdsp_driver);