Browse Source

Merge branch 'topic/hdsp' into for-linus

Takashi Iwai 16 years ago
parent
commit
593aff6c50
1 changed files with 265 additions and 241 deletions
  1. 265 241
      sound/pci/rme9652/hdsp.c

+ 265 - 241
sound/pci/rme9652/hdsp.c

@@ -113,7 +113,7 @@ MODULE_FIRMWARE("digiface_firmware_rev11.bin");
 
 
 /* the meters are regular i/o-mapped registers, but offset
 /* the meters are regular i/o-mapped registers, but offset
    considerably from the rest. the peak registers are reset
    considerably from the rest. the peak registers are reset
-   when read; the least-significant 4 bits are full-scale counters; 
+   when read; the least-significant 4 bits are full-scale counters;
    the actual peak value is in the most-significant 24 bits.
    the actual peak value is in the most-significant 24 bits.
 */
 */
 
 
@@ -131,7 +131,7 @@ MODULE_FIRMWARE("digiface_firmware_rev11.bin");
    26*3 values are read in ss mode
    26*3 values are read in ss mode
    14*3 in ds mode, with no gap between values
    14*3 in ds mode, with no gap between values
 */
 */
-#define HDSP_9652_peakBase	7164	
+#define HDSP_9652_peakBase	7164
 #define HDSP_9652_rmsBase	4096
 #define HDSP_9652_rmsBase	4096
 
 
 /* c.f. the hdsp_9632_meters_t struct */
 /* c.f. the hdsp_9632_meters_t struct */
@@ -173,12 +173,12 @@ MODULE_FIRMWARE("digiface_firmware_rev11.bin");
 #define HDSP_SPDIFEmphasis        (1<<10) /* 0=none, 1=on */
 #define HDSP_SPDIFEmphasis        (1<<10) /* 0=none, 1=on */
 #define HDSP_SPDIFNonAudio        (1<<11) /* 0=off, 1=on */
 #define HDSP_SPDIFNonAudio        (1<<11) /* 0=off, 1=on */
 #define HDSP_SPDIFOpticalOut      (1<<12) /* 1=use 1st ADAT connector for SPDIF, 0=do not */
 #define HDSP_SPDIFOpticalOut      (1<<12) /* 1=use 1st ADAT connector for SPDIF, 0=do not */
-#define HDSP_SyncRef2             (1<<13) 
-#define HDSP_SPDIFInputSelect0    (1<<14) 
-#define HDSP_SPDIFInputSelect1    (1<<15) 
-#define HDSP_SyncRef0             (1<<16) 
+#define HDSP_SyncRef2             (1<<13)
+#define HDSP_SPDIFInputSelect0    (1<<14)
+#define HDSP_SPDIFInputSelect1    (1<<15)
+#define HDSP_SyncRef0             (1<<16)
 #define HDSP_SyncRef1             (1<<17)
 #define HDSP_SyncRef1             (1<<17)
-#define HDSP_AnalogExtensionBoard (1<<18) /* For H9632 cards */ 
+#define HDSP_AnalogExtensionBoard (1<<18) /* For H9632 cards */
 #define HDSP_XLRBreakoutCable     (1<<20) /* For H9632 cards */
 #define HDSP_XLRBreakoutCable     (1<<20) /* For H9632 cards */
 #define HDSP_Midi0InterruptEnable (1<<22)
 #define HDSP_Midi0InterruptEnable (1<<22)
 #define HDSP_Midi1InterruptEnable (1<<23)
 #define HDSP_Midi1InterruptEnable (1<<23)
@@ -314,7 +314,7 @@ MODULE_FIRMWARE("digiface_firmware_rev11.bin");
 #define HDSP_TimecodeSync       (1<<27)
 #define HDSP_TimecodeSync       (1<<27)
 #define HDSP_AEBO          	(1<<28) /* H9632 specific Analog Extension Boards */
 #define HDSP_AEBO          	(1<<28) /* H9632 specific Analog Extension Boards */
 #define HDSP_AEBI		(1<<29) /* 0 = present, 1 = absent */
 #define HDSP_AEBI		(1<<29) /* 0 = present, 1 = absent */
-#define HDSP_midi0IRQPending    (1<<30) 
+#define HDSP_midi0IRQPending    (1<<30)
 #define HDSP_midi1IRQPending    (1<<31)
 #define HDSP_midi1IRQPending    (1<<31)
 
 
 #define HDSP_spdifFrequencyMask    (HDSP_spdifFrequency0|HDSP_spdifFrequency1|HDSP_spdifFrequency2)
 #define HDSP_spdifFrequencyMask    (HDSP_spdifFrequency0|HDSP_spdifFrequency1|HDSP_spdifFrequency2)
@@ -391,7 +391,7 @@ MODULE_FIRMWARE("digiface_firmware_rev11.bin");
 #define HDSP_CHANNEL_BUFFER_BYTES    (4*HDSP_CHANNEL_BUFFER_SAMPLES)
 #define HDSP_CHANNEL_BUFFER_BYTES    (4*HDSP_CHANNEL_BUFFER_SAMPLES)
 
 
 /* the size of the area we need to allocate for DMA transfers. the
 /* the size of the area we need to allocate for DMA transfers. the
-   size is the same regardless of the number of channels - the 
+   size is the same regardless of the number of channels - the
    Multiface still uses the same memory area.
    Multiface still uses the same memory area.
 
 
    Note that we allocate 1 more channel than is apparently needed
    Note that we allocate 1 more channel than is apparently needed
@@ -460,7 +460,7 @@ struct hdsp {
 	unsigned char	      qs_in_channels;	     /* quad speed mode for H9632 */
 	unsigned char	      qs_in_channels;	     /* quad speed mode for H9632 */
 	unsigned char         ds_in_channels;
 	unsigned char         ds_in_channels;
 	unsigned char         ss_in_channels;	    /* different for multiface/digiface */
 	unsigned char         ss_in_channels;	    /* different for multiface/digiface */
-	unsigned char	      qs_out_channels;	    
+	unsigned char	      qs_out_channels;
 	unsigned char         ds_out_channels;
 	unsigned char         ds_out_channels;
 	unsigned char         ss_out_channels;
 	unsigned char         ss_out_channels;
 
 
@@ -502,9 +502,9 @@ static char channel_map_df_ss[HDSP_MAX_CHANNELS] = {
 
 
 static char channel_map_mf_ss[HDSP_MAX_CHANNELS] = { /* Multiface */
 static char channel_map_mf_ss[HDSP_MAX_CHANNELS] = { /* Multiface */
 	/* Analog */
 	/* Analog */
-	0, 1, 2, 3, 4, 5, 6, 7, 
+	0, 1, 2, 3, 4, 5, 6, 7,
 	/* ADAT 2 */
 	/* ADAT 2 */
-	16, 17, 18, 19, 20, 21, 22, 23, 
+	16, 17, 18, 19, 20, 21, 22, 23,
 	/* SPDIF */
 	/* SPDIF */
 	24, 25,
 	24, 25,
 	-1, -1, -1, -1, -1, -1, -1, -1
 	-1, -1, -1, -1, -1, -1, -1, -1
@@ -525,11 +525,11 @@ static char channel_map_H9632_ss[HDSP_MAX_CHANNELS] = {
 	/* SPDIF */
 	/* SPDIF */
 	8, 9,
 	8, 9,
 	/* Analog */
 	/* Analog */
-	10, 11, 
+	10, 11,
 	/* AO4S-192 and AI4S-192 extension boards */
 	/* AO4S-192 and AI4S-192 extension boards */
 	12, 13, 14, 15,
 	12, 13, 14, 15,
 	/* others don't exist */
 	/* others don't exist */
-	-1, -1, -1, -1, -1, -1, -1, -1, 
+	-1, -1, -1, -1, -1, -1, -1, -1,
 	-1, -1
 	-1, -1
 };
 };
 
 
@@ -539,7 +539,7 @@ static char channel_map_H9632_ds[HDSP_MAX_CHANNELS] = {
 	/* SPDIF */
 	/* SPDIF */
 	8, 9,
 	8, 9,
 	/* Analog */
 	/* Analog */
-	10, 11, 
+	10, 11,
 	/* AO4S-192 and AI4S-192 extension boards */
 	/* AO4S-192 and AI4S-192 extension boards */
 	12, 13, 14, 15,
 	12, 13, 14, 15,
 	/* others don't exist */
 	/* others don't exist */
@@ -587,7 +587,7 @@ static void snd_hammerfall_free_buffer(struct snd_dma_buffer *dmab, struct pci_d
 static struct pci_device_id snd_hdsp_ids[] = {
 static struct pci_device_id snd_hdsp_ids[] = {
 	{
 	{
 		.vendor = PCI_VENDOR_ID_XILINX,
 		.vendor = PCI_VENDOR_ID_XILINX,
-		.device = PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP, 
+		.device = PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP,
 		.subvendor = PCI_ANY_ID,
 		.subvendor = PCI_ANY_ID,
 		.subdevice = PCI_ANY_ID,
 		.subdevice = PCI_ANY_ID,
 	}, /* RME Hammerfall-DSP */
 	}, /* RME Hammerfall-DSP */
@@ -653,7 +653,6 @@ static unsigned int hdsp_read(struct hdsp *hdsp, int reg)
 
 
 static int hdsp_check_for_iobox (struct hdsp *hdsp)
 static int hdsp_check_for_iobox (struct hdsp *hdsp)
 {
 {
-
 	if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return 0;
 	if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return 0;
 	if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_ConfigError) {
 	if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_ConfigError) {
 		snd_printk ("Hammerfall-DSP: no Digiface or Multiface connected!\n");
 		snd_printk ("Hammerfall-DSP: no Digiface or Multiface connected!\n");
@@ -661,7 +660,29 @@ static int hdsp_check_for_iobox (struct hdsp *hdsp)
 		return -EIO;
 		return -EIO;
 	}
 	}
 	return 0;
 	return 0;
+}
+
+static int hdsp_wait_for_iobox(struct hdsp *hdsp, unsigned int loops,
+			       unsigned int delay)
+{
+	unsigned int i;
+
+	if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
+		return 0;
 
 
+	for (i = 0; i != loops; ++i) {
+		if (hdsp_read(hdsp, HDSP_statusRegister) & HDSP_ConfigError)
+			msleep(delay);
+		else {
+			snd_printd("Hammerfall-DSP: iobox found after %ums!\n",
+				   i * delay);
+			return 0;
+		}
+	}
+
+	snd_printk("Hammerfall-DSP: no Digiface or Multiface connected!\n");
+	hdsp->state &= ~HDSP_FirmwareLoaded;
+	return -EIO;
 }
 }
 
 
 static int snd_hdsp_load_firmware_from_cache(struct hdsp *hdsp) {
 static int snd_hdsp_load_firmware_from_cache(struct hdsp *hdsp) {
@@ -670,19 +691,19 @@ static int snd_hdsp_load_firmware_from_cache(struct hdsp *hdsp) {
 	unsigned long flags;
 	unsigned long flags;
 
 
 	if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
 	if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
-		
+
 		snd_printk ("Hammerfall-DSP: loading firmware\n");
 		snd_printk ("Hammerfall-DSP: loading firmware\n");
 
 
 		hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_PROGRAM);
 		hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_PROGRAM);
 		hdsp_write (hdsp, HDSP_fifoData, 0);
 		hdsp_write (hdsp, HDSP_fifoData, 0);
-		
+
 		if (hdsp_fifo_wait (hdsp, 0, HDSP_LONG_WAIT)) {
 		if (hdsp_fifo_wait (hdsp, 0, HDSP_LONG_WAIT)) {
 			snd_printk ("Hammerfall-DSP: timeout waiting for download preparation\n");
 			snd_printk ("Hammerfall-DSP: timeout waiting for download preparation\n");
 			return -EIO;
 			return -EIO;
 		}
 		}
-		
+
 		hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_LOAD);
 		hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_LOAD);
-		
+
 		for (i = 0; i < 24413; ++i) {
 		for (i = 0; i < 24413; ++i) {
 			hdsp_write(hdsp, HDSP_fifoData, hdsp->firmware_cache[i]);
 			hdsp_write(hdsp, HDSP_fifoData, hdsp->firmware_cache[i]);
 			if (hdsp_fifo_wait (hdsp, 127, HDSP_LONG_WAIT)) {
 			if (hdsp_fifo_wait (hdsp, 127, HDSP_LONG_WAIT)) {
@@ -692,7 +713,7 @@ static int snd_hdsp_load_firmware_from_cache(struct hdsp *hdsp) {
 		}
 		}
 
 
 		ssleep(3);
 		ssleep(3);
-		
+
 		if (hdsp_fifo_wait (hdsp, 0, HDSP_LONG_WAIT)) {
 		if (hdsp_fifo_wait (hdsp, 0, HDSP_LONG_WAIT)) {
 			snd_printk ("Hammerfall-DSP: timeout at end of firmware loading\n");
 			snd_printk ("Hammerfall-DSP: timeout at end of firmware loading\n");
 		    	return -EIO;
 		    	return -EIO;
@@ -705,15 +726,15 @@ static int snd_hdsp_load_firmware_from_cache(struct hdsp *hdsp) {
 #endif
 #endif
 		hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
 		hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
 		snd_printk ("Hammerfall-DSP: finished firmware loading\n");
 		snd_printk ("Hammerfall-DSP: finished firmware loading\n");
-		
+
 	}
 	}
 	if (hdsp->state & HDSP_InitializationComplete) {
 	if (hdsp->state & HDSP_InitializationComplete) {
 		snd_printk(KERN_INFO "Hammerfall-DSP: firmware loaded from cache, restoring defaults\n");
 		snd_printk(KERN_INFO "Hammerfall-DSP: firmware loaded from cache, restoring defaults\n");
 		spin_lock_irqsave(&hdsp->lock, flags);
 		spin_lock_irqsave(&hdsp->lock, flags);
 		snd_hdsp_set_defaults(hdsp);
 		snd_hdsp_set_defaults(hdsp);
-		spin_unlock_irqrestore(&hdsp->lock, flags); 
+		spin_unlock_irqrestore(&hdsp->lock, flags);
 	}
 	}
-	
+
 	hdsp->state |= HDSP_FirmwareLoaded;
 	hdsp->state |= HDSP_FirmwareLoaded;
 
 
 	return 0;
 	return 0;
@@ -722,7 +743,7 @@ static int snd_hdsp_load_firmware_from_cache(struct hdsp *hdsp) {
 static int hdsp_get_iobox_version (struct hdsp *hdsp)
 static int hdsp_get_iobox_version (struct hdsp *hdsp)
 {
 {
 	if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
 	if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
-	
+
 		hdsp_write (hdsp, HDSP_control2Reg, HDSP_PROGRAM);
 		hdsp_write (hdsp, HDSP_control2Reg, HDSP_PROGRAM);
 		hdsp_write (hdsp, HDSP_fifoData, 0);
 		hdsp_write (hdsp, HDSP_fifoData, 0);
 		if (hdsp_fifo_wait (hdsp, 0, HDSP_SHORT_WAIT) < 0)
 		if (hdsp_fifo_wait (hdsp, 0, HDSP_SHORT_WAIT) < 0)
@@ -738,7 +759,7 @@ static int hdsp_get_iobox_version (struct hdsp *hdsp)
 			hdsp_fifo_wait (hdsp, 0, HDSP_SHORT_WAIT);
 			hdsp_fifo_wait (hdsp, 0, HDSP_SHORT_WAIT);
 		} else {
 		} else {
 			hdsp->io_type = Digiface;
 			hdsp->io_type = Digiface;
-		} 
+		}
 	} else {
 	} else {
 		/* firmware was already loaded, get iobox type */
 		/* firmware was already loaded, get iobox type */
 		if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1)
 		if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1)
@@ -786,13 +807,13 @@ static int hdsp_check_for_firmware (struct hdsp *hdsp, int load_on_demand)
 
 
 
 
 static int hdsp_fifo_wait(struct hdsp *hdsp, int count, int timeout)
 static int hdsp_fifo_wait(struct hdsp *hdsp, int count, int timeout)
-{    
+{
 	int i;
 	int i;
 
 
 	/* the fifoStatus registers reports on how many words
 	/* the fifoStatus registers reports on how many words
 	   are available in the command FIFO.
 	   are available in the command FIFO.
 	*/
 	*/
-	
+
 	for (i = 0; i < timeout; i++) {
 	for (i = 0; i < timeout; i++) {
 
 
 		if ((int)(hdsp_read (hdsp, HDSP_fifoStatus) & 0xff) <= count)
 		if ((int)(hdsp_read (hdsp, HDSP_fifoStatus) & 0xff) <= count)
@@ -824,11 +845,11 @@ static int hdsp_write_gain(struct hdsp *hdsp, unsigned int addr, unsigned short
 
 
 	if (addr >= HDSP_MATRIX_MIXER_SIZE)
 	if (addr >= HDSP_MATRIX_MIXER_SIZE)
 		return -1;
 		return -1;
-	
+
 	if (hdsp->io_type == H9652 || hdsp->io_type == H9632) {
 	if (hdsp->io_type == H9652 || hdsp->io_type == H9632) {
 
 
 		/* from martin bjornsen:
 		/* from martin bjornsen:
-		   
+
 		   "You can only write dwords to the
 		   "You can only write dwords to the
 		   mixer memory which contain two
 		   mixer memory which contain two
 		   mixer values in the low and high
 		   mixer values in the low and high
@@ -847,7 +868,7 @@ static int hdsp_write_gain(struct hdsp *hdsp, unsigned int addr, unsigned short
 
 
 		hdsp->mixer_matrix[addr] = data;
 		hdsp->mixer_matrix[addr] = data;
 
 
-		
+
 		/* `addr' addresses a 16-bit wide address, but
 		/* `addr' addresses a 16-bit wide address, but
 		   the address space accessed via hdsp_write
 		   the address space accessed via hdsp_write
 		   uses byte offsets. put another way, addr
 		   uses byte offsets. put another way, addr
@@ -856,17 +877,17 @@ static int hdsp_write_gain(struct hdsp *hdsp, unsigned int addr, unsigned short
 		   to access 0 to 2703 ...
 		   to access 0 to 2703 ...
 		*/
 		*/
 		ad = addr/2;
 		ad = addr/2;
-	
-		hdsp_write (hdsp, 4096 + (ad*4), 
-			    (hdsp->mixer_matrix[(addr&0x7fe)+1] << 16) + 
+
+		hdsp_write (hdsp, 4096 + (ad*4),
+			    (hdsp->mixer_matrix[(addr&0x7fe)+1] << 16) +
 			    hdsp->mixer_matrix[addr&0x7fe]);
 			    hdsp->mixer_matrix[addr&0x7fe]);
-		
+
 		return 0;
 		return 0;
 
 
 	} else {
 	} else {
 
 
 		ad = (addr << 16) + data;
 		ad = (addr << 16) + data;
-		
+
 		if (hdsp_fifo_wait(hdsp, 127, HDSP_LONG_WAIT))
 		if (hdsp_fifo_wait(hdsp, 127, HDSP_LONG_WAIT))
 			return -1;
 			return -1;
 
 
@@ -902,7 +923,7 @@ static int hdsp_spdif_sample_rate(struct hdsp *hdsp)
 
 
 	if (status & HDSP_SPDIFErrorFlag)
 	if (status & HDSP_SPDIFErrorFlag)
 		return 0;
 		return 0;
-	
+
 	switch (rate_bits) {
 	switch (rate_bits) {
 	case HDSP_spdifFrequency32KHz: return 32000;
 	case HDSP_spdifFrequency32KHz: return 32000;
 	case HDSP_spdifFrequency44_1KHz: return 44100;
 	case HDSP_spdifFrequency44_1KHz: return 44100;
@@ -910,13 +931,13 @@ static int hdsp_spdif_sample_rate(struct hdsp *hdsp)
 	case HDSP_spdifFrequency64KHz: return 64000;
 	case HDSP_spdifFrequency64KHz: return 64000;
 	case HDSP_spdifFrequency88_2KHz: return 88200;
 	case HDSP_spdifFrequency88_2KHz: return 88200;
 	case HDSP_spdifFrequency96KHz: return 96000;
 	case HDSP_spdifFrequency96KHz: return 96000;
-	case HDSP_spdifFrequency128KHz: 
+	case HDSP_spdifFrequency128KHz:
 		if (hdsp->io_type == H9632) return 128000;
 		if (hdsp->io_type == H9632) return 128000;
 		break;
 		break;
-	case HDSP_spdifFrequency176_4KHz: 
+	case HDSP_spdifFrequency176_4KHz:
 		if (hdsp->io_type == H9632) return 176400;
 		if (hdsp->io_type == H9632) return 176400;
 		break;
 		break;
-	case HDSP_spdifFrequency192KHz: 
+	case HDSP_spdifFrequency192KHz:
 		if (hdsp->io_type == H9632) return 192000;
 		if (hdsp->io_type == H9632) return 192000;
 		break;
 		break;
 	default:
 	default:
@@ -1027,7 +1048,7 @@ static void hdsp_set_dds_value(struct hdsp *hdsp, int rate)
 {
 {
 	u64 n;
 	u64 n;
 	u32 r;
 	u32 r;
-	
+
 	if (rate >= 112000)
 	if (rate >= 112000)
 		rate /= 4;
 		rate /= 4;
 	else if (rate >= 56000)
 	else if (rate >= 56000)
@@ -1053,35 +1074,35 @@ static int hdsp_set_rate(struct hdsp *hdsp, int rate, int called_internally)
 	   there is no need for it (e.g. during module
 	   there is no need for it (e.g. during module
 	   initialization).
 	   initialization).
 	*/
 	*/
-	
-	if (!(hdsp->control_register & HDSP_ClockModeMaster)) {	
+
+	if (!(hdsp->control_register & HDSP_ClockModeMaster)) {
 		if (called_internally) {
 		if (called_internally) {
 			/* request from ctl or card initialization */
 			/* request from ctl or card initialization */
 			snd_printk(KERN_ERR "Hammerfall-DSP: device is not running as a clock master: cannot set sample rate.\n");
 			snd_printk(KERN_ERR "Hammerfall-DSP: device is not running as a clock master: cannot set sample rate.\n");
 			return -1;
 			return -1;
-		} else {		
+		} else {
 			/* hw_param request while in AutoSync mode */
 			/* hw_param request while in AutoSync mode */
 			int external_freq = hdsp_external_sample_rate(hdsp);
 			int external_freq = hdsp_external_sample_rate(hdsp);
 			int spdif_freq = hdsp_spdif_sample_rate(hdsp);
 			int spdif_freq = hdsp_spdif_sample_rate(hdsp);
-		
+
 			if ((spdif_freq == external_freq*2) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1))
 			if ((spdif_freq == external_freq*2) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1))
 				snd_printk(KERN_INFO "Hammerfall-DSP: Detected ADAT in double speed mode\n");
 				snd_printk(KERN_INFO "Hammerfall-DSP: Detected ADAT in double speed mode\n");
 			else if (hdsp->io_type == H9632 && (spdif_freq == external_freq*4) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1))
 			else if (hdsp->io_type == H9632 && (spdif_freq == external_freq*4) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1))
-				snd_printk(KERN_INFO "Hammerfall-DSP: Detected ADAT in quad speed mode\n");			
+				snd_printk(KERN_INFO "Hammerfall-DSP: Detected ADAT in quad speed mode\n");
 			else if (rate != external_freq) {
 			else if (rate != external_freq) {
 				snd_printk(KERN_INFO "Hammerfall-DSP: No AutoSync source for requested rate\n");
 				snd_printk(KERN_INFO "Hammerfall-DSP: No AutoSync source for requested rate\n");
 				return -1;
 				return -1;
-			}		
-		}	
+			}
+		}
 	}
 	}
 
 
 	current_rate = hdsp->system_sample_rate;
 	current_rate = hdsp->system_sample_rate;
 
 
 	/* Changing from a "single speed" to a "double speed" rate is
 	/* Changing from a "single speed" to a "double speed" rate is
 	   not allowed if any substreams are open. This is because
 	   not allowed if any substreams are open. This is because
-	   such a change causes a shift in the location of 
+	   such a change causes a shift in the location of
 	   the DMA buffers and a reduction in the number of available
 	   the DMA buffers and a reduction in the number of available
-	   buffers. 
+	   buffers.
 
 
 	   Note that a similar but essentially insoluble problem
 	   Note that a similar but essentially insoluble problem
 	   exists for externally-driven rate changes. All we can do
 	   exists for externally-driven rate changes. All we can do
@@ -1089,7 +1110,7 @@ static int hdsp_set_rate(struct hdsp *hdsp, int rate, int called_internally)
 
 
 	if (rate > 96000 && hdsp->io_type != H9632)
 	if (rate > 96000 && hdsp->io_type != H9632)
 		return -EINVAL;
 		return -EINVAL;
-	
+
 	switch (rate) {
 	switch (rate) {
 	case 32000:
 	case 32000:
 		if (current_rate > 48000)
 		if (current_rate > 48000)
@@ -1179,7 +1200,7 @@ static int hdsp_set_rate(struct hdsp *hdsp, int rate, int called_internally)
 			break;
 			break;
 		}
 		}
 	}
 	}
-	
+
 	hdsp->system_sample_rate = rate;
 	hdsp->system_sample_rate = rate;
 
 
 	return 0;
 	return 0;
@@ -1245,16 +1266,16 @@ static int snd_hdsp_midi_output_write (struct hdsp_midi *hmidi)
 	unsigned char buf[128];
 	unsigned char buf[128];
 
 
 	/* Output is not interrupt driven */
 	/* Output is not interrupt driven */
-		
+
 	spin_lock_irqsave (&hmidi->lock, flags);
 	spin_lock_irqsave (&hmidi->lock, flags);
 	if (hmidi->output) {
 	if (hmidi->output) {
 		if (!snd_rawmidi_transmit_empty (hmidi->output)) {
 		if (!snd_rawmidi_transmit_empty (hmidi->output)) {
 			if ((n_pending = snd_hdsp_midi_output_possible (hmidi->hdsp, hmidi->id)) > 0) {
 			if ((n_pending = snd_hdsp_midi_output_possible (hmidi->hdsp, hmidi->id)) > 0) {
 				if (n_pending > (int)sizeof (buf))
 				if (n_pending > (int)sizeof (buf))
 					n_pending = sizeof (buf);
 					n_pending = sizeof (buf);
-				
+
 				if ((to_write = snd_rawmidi_transmit (hmidi->output, buf, n_pending)) > 0) {
 				if ((to_write = snd_rawmidi_transmit (hmidi->output, buf, n_pending)) > 0) {
-					for (i = 0; i < to_write; ++i) 
+					for (i = 0; i < to_write; ++i)
 						snd_hdsp_midi_write_byte (hmidi->hdsp, hmidi->id, buf[i]);
 						snd_hdsp_midi_write_byte (hmidi->hdsp, hmidi->id, buf[i]);
 				}
 				}
 			}
 			}
@@ -1325,14 +1346,14 @@ static void snd_hdsp_midi_output_timer(unsigned long data)
 {
 {
 	struct hdsp_midi *hmidi = (struct hdsp_midi *) data;
 	struct hdsp_midi *hmidi = (struct hdsp_midi *) data;
 	unsigned long flags;
 	unsigned long flags;
-	
+
 	snd_hdsp_midi_output_write(hmidi);
 	snd_hdsp_midi_output_write(hmidi);
 	spin_lock_irqsave (&hmidi->lock, flags);
 	spin_lock_irqsave (&hmidi->lock, flags);
 
 
 	/* this does not bump hmidi->istimer, because the
 	/* this does not bump hmidi->istimer, because the
 	   kernel automatically removed the timer when it
 	   kernel automatically removed the timer when it
 	   expired, and we are now adding it back, thus
 	   expired, and we are now adding it back, thus
-	   leaving istimer wherever it was set before.  
+	   leaving istimer wherever it was set before.
 	*/
 	*/
 
 
 	if (hmidi->istimer) {
 	if (hmidi->istimer) {
@@ -1501,7 +1522,7 @@ static int snd_hdsp_control_spdif_info(struct snd_kcontrol *kcontrol, struct snd
 static int snd_hdsp_control_spdif_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_control_spdif_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	snd_hdsp_convert_to_aes(&ucontrol->value.iec958, hdsp->creg_spdif);
 	snd_hdsp_convert_to_aes(&ucontrol->value.iec958, hdsp->creg_spdif);
 	return 0;
 	return 0;
 }
 }
@@ -1511,7 +1532,7 @@ static int snd_hdsp_control_spdif_put(struct snd_kcontrol *kcontrol, struct snd_
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	u32 val;
 	u32 val;
-	
+
 	val = snd_hdsp_convert_from_aes(&ucontrol->value.iec958);
 	val = snd_hdsp_convert_from_aes(&ucontrol->value.iec958);
 	spin_lock_irq(&hdsp->lock);
 	spin_lock_irq(&hdsp->lock);
 	change = val != hdsp->creg_spdif;
 	change = val != hdsp->creg_spdif;
@@ -1530,7 +1551,7 @@ static int snd_hdsp_control_spdif_stream_info(struct snd_kcontrol *kcontrol, str
 static int snd_hdsp_control_spdif_stream_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_control_spdif_stream_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	snd_hdsp_convert_to_aes(&ucontrol->value.iec958, hdsp->creg_spdif_stream);
 	snd_hdsp_convert_to_aes(&ucontrol->value.iec958, hdsp->creg_spdif_stream);
 	return 0;
 	return 0;
 }
 }
@@ -1540,7 +1561,7 @@ static int snd_hdsp_control_spdif_stream_put(struct snd_kcontrol *kcontrol, stru
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	u32 val;
 	u32 val;
-	
+
 	val = snd_hdsp_convert_from_aes(&ucontrol->value.iec958);
 	val = snd_hdsp_convert_from_aes(&ucontrol->value.iec958);
 	spin_lock_irq(&hdsp->lock);
 	spin_lock_irq(&hdsp->lock);
 	change = val != hdsp->creg_spdif_stream;
 	change = val != hdsp->creg_spdif_stream;
@@ -1602,7 +1623,7 @@ static int snd_hdsp_info_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_
 static int snd_hdsp_get_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.enumerated.item[0] = hdsp_spdif_in(hdsp);
 	ucontrol->value.enumerated.item[0] = hdsp_spdif_in(hdsp);
 	return 0;
 	return 0;
 }
 }
@@ -1612,7 +1633,7 @@ static int snd_hdsp_put_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_e
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	unsigned int val;
 	unsigned int val;
-	
+
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 		return -EBUSY;
 	val = ucontrol->value.enumerated.item[0] % ((hdsp->io_type == H9632) ? 4 : 3);
 	val = ucontrol->value.enumerated.item[0] % ((hdsp->io_type == H9632) ? 4 : 3);
@@ -1649,7 +1670,7 @@ static int hdsp_set_spdif_output(struct hdsp *hdsp, int out)
 static int snd_hdsp_get_spdif_out(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_spdif_out(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.integer.value[0] = hdsp_spdif_out(hdsp);
 	ucontrol->value.integer.value[0] = hdsp_spdif_out(hdsp);
 	return 0;
 	return 0;
 }
 }
@@ -1659,7 +1680,7 @@ static int snd_hdsp_put_spdif_out(struct snd_kcontrol *kcontrol, struct snd_ctl_
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	unsigned int val;
 	unsigned int val;
-	
+
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
 	val = ucontrol->value.integer.value[0] & 1;
@@ -1693,7 +1714,7 @@ static int hdsp_set_spdif_professional(struct hdsp *hdsp, int val)
 static int snd_hdsp_get_spdif_professional(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_spdif_professional(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.integer.value[0] = hdsp_spdif_professional(hdsp);
 	ucontrol->value.integer.value[0] = hdsp_spdif_professional(hdsp);
 	return 0;
 	return 0;
 }
 }
@@ -1703,7 +1724,7 @@ static int snd_hdsp_put_spdif_professional(struct snd_kcontrol *kcontrol, struct
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	unsigned int val;
 	unsigned int val;
-	
+
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
 	val = ucontrol->value.integer.value[0] & 1;
@@ -1737,7 +1758,7 @@ static int hdsp_set_spdif_emphasis(struct hdsp *hdsp, int val)
 static int snd_hdsp_get_spdif_emphasis(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_spdif_emphasis(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.integer.value[0] = hdsp_spdif_emphasis(hdsp);
 	ucontrol->value.integer.value[0] = hdsp_spdif_emphasis(hdsp);
 	return 0;
 	return 0;
 }
 }
@@ -1747,7 +1768,7 @@ static int snd_hdsp_put_spdif_emphasis(struct snd_kcontrol *kcontrol, struct snd
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	unsigned int val;
 	unsigned int val;
-	
+
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
 	val = ucontrol->value.integer.value[0] & 1;
@@ -1781,7 +1802,7 @@ static int hdsp_set_spdif_nonaudio(struct hdsp *hdsp, int val)
 static int snd_hdsp_get_spdif_nonaudio(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_spdif_nonaudio(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.integer.value[0] = hdsp_spdif_nonaudio(hdsp);
 	ucontrol->value.integer.value[0] = hdsp_spdif_nonaudio(hdsp);
 	return 0;
 	return 0;
 }
 }
@@ -1791,7 +1812,7 @@ static int snd_hdsp_put_spdif_nonaudio(struct snd_kcontrol *kcontrol, struct snd
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	unsigned int val;
 	unsigned int val;
-	
+
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
 	val = ucontrol->value.integer.value[0] & 1;
@@ -1828,7 +1849,7 @@ static int snd_hdsp_info_spdif_sample_rate(struct snd_kcontrol *kcontrol, struct
 static int snd_hdsp_get_spdif_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_spdif_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	switch (hdsp_spdif_sample_rate(hdsp)) {
 	switch (hdsp_spdif_sample_rate(hdsp)) {
 	case 32000:
 	case 32000:
 		ucontrol->value.enumerated.item[0] = 0;
 		ucontrol->value.enumerated.item[0] = 0;
@@ -1858,7 +1879,7 @@ static int snd_hdsp_get_spdif_sample_rate(struct snd_kcontrol *kcontrol, struct
 		ucontrol->value.enumerated.item[0] = 9;
 		ucontrol->value.enumerated.item[0] = 9;
 		break;
 		break;
 	default:
 	default:
-		ucontrol->value.enumerated.item[0] = 6;		
+		ucontrol->value.enumerated.item[0] = 6;
 	}
 	}
 	return 0;
 	return 0;
 }
 }
@@ -1882,7 +1903,7 @@ static int snd_hdsp_info_system_sample_rate(struct snd_kcontrol *kcontrol, struc
 static int snd_hdsp_get_system_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_system_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.enumerated.item[0] = hdsp->system_sample_rate;
 	ucontrol->value.enumerated.item[0] = hdsp->system_sample_rate;
 	return 0;
 	return 0;
 }
 }
@@ -1899,7 +1920,7 @@ static int snd_hdsp_get_system_sample_rate(struct snd_kcontrol *kcontrol, struct
 static int snd_hdsp_info_autosync_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
 static int snd_hdsp_info_autosync_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	static char *texts[] = {"32000", "44100", "48000", "64000", "88200", "96000", "None", "128000", "176400", "192000"};	
+	static char *texts[] = {"32000", "44100", "48000", "64000", "88200", "96000", "None", "128000", "176400", "192000"};
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->count = 1;
 	uinfo->count = 1;
 	uinfo->value.enumerated.items = (hdsp->io_type == H9632) ? 10 : 7 ;
 	uinfo->value.enumerated.items = (hdsp->io_type == H9632) ? 10 : 7 ;
@@ -1912,7 +1933,7 @@ static int snd_hdsp_info_autosync_sample_rate(struct snd_kcontrol *kcontrol, str
 static int snd_hdsp_get_autosync_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_autosync_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	switch (hdsp_external_sample_rate(hdsp)) {
 	switch (hdsp_external_sample_rate(hdsp)) {
 	case 32000:
 	case 32000:
 		ucontrol->value.enumerated.item[0] = 0;
 		ucontrol->value.enumerated.item[0] = 0;
@@ -1940,9 +1961,9 @@ static int snd_hdsp_get_autosync_sample_rate(struct snd_kcontrol *kcontrol, stru
 		break;
 		break;
 	case 192000:
 	case 192000:
 		ucontrol->value.enumerated.item[0] = 9;
 		ucontrol->value.enumerated.item[0] = 9;
-		break;	
+		break;
 	default:
 	default:
-		ucontrol->value.enumerated.item[0] = 6;		
+		ucontrol->value.enumerated.item[0] = 6;
 	}
 	}
 	return 0;
 	return 0;
 }
 }
@@ -1968,7 +1989,7 @@ static int hdsp_system_clock_mode(struct hdsp *hdsp)
 static int snd_hdsp_info_system_clock_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
 static int snd_hdsp_info_system_clock_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
 {
 {
 	static char *texts[] = {"Master", "Slave" };
 	static char *texts[] = {"Master", "Slave" };
-	
+
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->count = 1;
 	uinfo->count = 1;
 	uinfo->value.enumerated.items = 2;
 	uinfo->value.enumerated.items = 2;
@@ -1981,7 +2002,7 @@ static int snd_hdsp_info_system_clock_mode(struct snd_kcontrol *kcontrol, struct
 static int snd_hdsp_get_system_clock_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_system_clock_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.enumerated.item[0] = hdsp_system_clock_mode(hdsp);
 	ucontrol->value.enumerated.item[0] = hdsp_system_clock_mode(hdsp);
 	return 0;
 	return 0;
 }
 }
@@ -2018,7 +2039,7 @@ static int hdsp_clock_source(struct hdsp *hdsp)
 		case 192000:
 		case 192000:
 			return 9;
 			return 9;
 		default:
 		default:
-			return 3;	
+			return 3;
 		}
 		}
 	} else {
 	} else {
 		return 0;
 		return 0;
@@ -2032,7 +2053,7 @@ static int hdsp_set_clock_source(struct hdsp *hdsp, int mode)
 	case HDSP_CLOCK_SOURCE_AUTOSYNC:
 	case HDSP_CLOCK_SOURCE_AUTOSYNC:
 		if (hdsp_external_sample_rate(hdsp) != 0) {
 		if (hdsp_external_sample_rate(hdsp) != 0) {
 		    if (!hdsp_set_rate(hdsp, hdsp_external_sample_rate(hdsp), 1)) {
 		    if (!hdsp_set_rate(hdsp, hdsp_external_sample_rate(hdsp), 1)) {
-			hdsp->control_register &= ~HDSP_ClockModeMaster;		
+			hdsp->control_register &= ~HDSP_ClockModeMaster;
 			hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
 			hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
 			return 0;
 			return 0;
 		    }
 		    }
@@ -2043,7 +2064,7 @@ static int hdsp_set_clock_source(struct hdsp *hdsp, int mode)
 		break;
 		break;
 	case HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ:
 	case HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ:
 		rate = 44100;
 		rate = 44100;
-		break;	    
+		break;
 	case HDSP_CLOCK_SOURCE_INTERNAL_48KHZ:
 	case HDSP_CLOCK_SOURCE_INTERNAL_48KHZ:
 		rate = 48000;
 		rate = 48000;
 		break;
 		break;
@@ -2078,13 +2099,13 @@ static int snd_hdsp_info_clock_source(struct snd_kcontrol *kcontrol, struct snd_
 {
 {
 	static char *texts[] = {"AutoSync", "Internal 32.0 kHz", "Internal 44.1 kHz", "Internal 48.0 kHz", "Internal 64.0 kHz", "Internal 88.2 kHz", "Internal 96.0 kHz", "Internal 128 kHz", "Internal 176.4 kHz", "Internal 192.0 KHz" };
 	static char *texts[] = {"AutoSync", "Internal 32.0 kHz", "Internal 44.1 kHz", "Internal 48.0 kHz", "Internal 64.0 kHz", "Internal 88.2 kHz", "Internal 96.0 kHz", "Internal 128 kHz", "Internal 176.4 kHz", "Internal 192.0 KHz" };
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->count = 1;
 	uinfo->count = 1;
 	if (hdsp->io_type == H9632)
 	if (hdsp->io_type == H9632)
 	    uinfo->value.enumerated.items = 10;
 	    uinfo->value.enumerated.items = 10;
 	else
 	else
-	    uinfo->value.enumerated.items = 7;	
+	    uinfo->value.enumerated.items = 7;
 	if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
 	if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
 		uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
 		uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
 	strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]);
 	strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]);
@@ -2094,7 +2115,7 @@ static int snd_hdsp_info_clock_source(struct snd_kcontrol *kcontrol, struct snd_
 static int snd_hdsp_get_clock_source(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_clock_source(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.enumerated.item[0] = hdsp_clock_source(hdsp);
 	ucontrol->value.enumerated.item[0] = hdsp_clock_source(hdsp);
 	return 0;
 	return 0;
 }
 }
@@ -2104,7 +2125,7 @@ static int snd_hdsp_put_clock_source(struct snd_kcontrol *kcontrol, struct snd_c
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	int val;
 	int val;
-	
+
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 		return -EBUSY;
 	val = ucontrol->value.enumerated.item[0];
 	val = ucontrol->value.enumerated.item[0];
@@ -2130,7 +2151,7 @@ static int snd_hdsp_put_clock_source(struct snd_kcontrol *kcontrol, struct snd_c
 static int snd_hdsp_get_clock_source_lock(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_clock_source_lock(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.integer.value[0] = hdsp->clock_source_locked;
 	ucontrol->value.integer.value[0] = hdsp->clock_source_locked;
 	return 0;
 	return 0;
 }
 }
@@ -2165,7 +2186,7 @@ static int hdsp_da_gain(struct hdsp *hdsp)
 	case HDSP_DAGainMinus10dBV:
 	case HDSP_DAGainMinus10dBV:
 		return 2;
 		return 2;
 	default:
 	default:
-		return 1;	
+		return 1;
 	}
 	}
 }
 }
 
 
@@ -2180,8 +2201,8 @@ static int hdsp_set_da_gain(struct hdsp *hdsp, int mode)
 		hdsp->control_register |= HDSP_DAGainPlus4dBu;
 		hdsp->control_register |= HDSP_DAGainPlus4dBu;
 		break;
 		break;
 	case 2:
 	case 2:
-		hdsp->control_register |= HDSP_DAGainMinus10dBV;		
-		break;	    
+		hdsp->control_register |= HDSP_DAGainMinus10dBV;
+		break;
 	default:
 	default:
 		return -1;
 		return -1;
 
 
@@ -2193,7 +2214,7 @@ static int hdsp_set_da_gain(struct hdsp *hdsp, int mode)
 static int snd_hdsp_info_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
 static int snd_hdsp_info_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
 {
 {
 	static char *texts[] = {"Hi Gain", "+4 dBu", "-10 dbV"};
 	static char *texts[] = {"Hi Gain", "+4 dBu", "-10 dbV"};
-	
+
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->count = 1;
 	uinfo->count = 1;
 	uinfo->value.enumerated.items = 3;
 	uinfo->value.enumerated.items = 3;
@@ -2206,7 +2227,7 @@ static int snd_hdsp_info_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_e
 static int snd_hdsp_get_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.enumerated.item[0] = hdsp_da_gain(hdsp);
 	ucontrol->value.enumerated.item[0] = hdsp_da_gain(hdsp);
 	return 0;
 	return 0;
 }
 }
@@ -2216,7 +2237,7 @@ static int snd_hdsp_put_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_el
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	int val;
 	int val;
-	
+
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 		return -EBUSY;
 	val = ucontrol->value.enumerated.item[0];
 	val = ucontrol->value.enumerated.item[0];
@@ -2250,7 +2271,7 @@ static int hdsp_ad_gain(struct hdsp *hdsp)
 	case HDSP_ADGainLowGain:
 	case HDSP_ADGainLowGain:
 		return 2;
 		return 2;
 	default:
 	default:
-		return 1;	
+		return 1;
 	}
 	}
 }
 }
 
 
@@ -2262,11 +2283,11 @@ static int hdsp_set_ad_gain(struct hdsp *hdsp, int mode)
 		hdsp->control_register |= HDSP_ADGainMinus10dBV;
 		hdsp->control_register |= HDSP_ADGainMinus10dBV;
 		break;
 		break;
 	case 1:
 	case 1:
-		hdsp->control_register |= HDSP_ADGainPlus4dBu;		
+		hdsp->control_register |= HDSP_ADGainPlus4dBu;
 		break;
 		break;
 	case 2:
 	case 2:
-		hdsp->control_register |= HDSP_ADGainLowGain;		
-		break;	    
+		hdsp->control_register |= HDSP_ADGainLowGain;
+		break;
 	default:
 	default:
 		return -1;
 		return -1;
 
 
@@ -2278,7 +2299,7 @@ static int hdsp_set_ad_gain(struct hdsp *hdsp, int mode)
 static int snd_hdsp_info_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
 static int snd_hdsp_info_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
 {
 {
 	static char *texts[] = {"-10 dBV", "+4 dBu", "Lo Gain"};
 	static char *texts[] = {"-10 dBV", "+4 dBu", "Lo Gain"};
-	
+
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->count = 1;
 	uinfo->count = 1;
 	uinfo->value.enumerated.items = 3;
 	uinfo->value.enumerated.items = 3;
@@ -2291,7 +2312,7 @@ static int snd_hdsp_info_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_e
 static int snd_hdsp_get_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.enumerated.item[0] = hdsp_ad_gain(hdsp);
 	ucontrol->value.enumerated.item[0] = hdsp_ad_gain(hdsp);
 	return 0;
 	return 0;
 }
 }
@@ -2301,7 +2322,7 @@ static int snd_hdsp_put_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_el
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	int val;
 	int val;
-	
+
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 		return -EBUSY;
 	val = ucontrol->value.enumerated.item[0];
 	val = ucontrol->value.enumerated.item[0];
@@ -2335,7 +2356,7 @@ static int hdsp_phone_gain(struct hdsp *hdsp)
 	case HDSP_PhoneGainMinus12dB:
 	case HDSP_PhoneGainMinus12dB:
 		return 2;
 		return 2;
 	default:
 	default:
-		return 0;	
+		return 0;
 	}
 	}
 }
 }
 
 
@@ -2347,11 +2368,11 @@ static int hdsp_set_phone_gain(struct hdsp *hdsp, int mode)
 		hdsp->control_register |= HDSP_PhoneGain0dB;
 		hdsp->control_register |= HDSP_PhoneGain0dB;
 		break;
 		break;
 	case 1:
 	case 1:
-		hdsp->control_register |= HDSP_PhoneGainMinus6dB;		
+		hdsp->control_register |= HDSP_PhoneGainMinus6dB;
 		break;
 		break;
 	case 2:
 	case 2:
-		hdsp->control_register |= HDSP_PhoneGainMinus12dB;		
-		break;	    
+		hdsp->control_register |= HDSP_PhoneGainMinus12dB;
+		break;
 	default:
 	default:
 		return -1;
 		return -1;
 
 
@@ -2363,7 +2384,7 @@ static int hdsp_set_phone_gain(struct hdsp *hdsp, int mode)
 static int snd_hdsp_info_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
 static int snd_hdsp_info_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
 {
 {
 	static char *texts[] = {"0 dB", "-6 dB", "-12 dB"};
 	static char *texts[] = {"0 dB", "-6 dB", "-12 dB"};
-	
+
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->count = 1;
 	uinfo->count = 1;
 	uinfo->value.enumerated.items = 3;
 	uinfo->value.enumerated.items = 3;
@@ -2376,7 +2397,7 @@ static int snd_hdsp_info_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ct
 static int snd_hdsp_get_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.enumerated.item[0] = hdsp_phone_gain(hdsp);
 	ucontrol->value.enumerated.item[0] = hdsp_phone_gain(hdsp);
 	return 0;
 	return 0;
 }
 }
@@ -2386,7 +2407,7 @@ static int snd_hdsp_put_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	int val;
 	int val;
-	
+
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 		return -EBUSY;
 	val = ucontrol->value.enumerated.item[0];
 	val = ucontrol->value.enumerated.item[0];
@@ -2432,7 +2453,7 @@ static int hdsp_set_xlr_breakout_cable(struct hdsp *hdsp, int mode)
 static int snd_hdsp_get_xlr_breakout_cable(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_xlr_breakout_cable(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.enumerated.item[0] = hdsp_xlr_breakout_cable(hdsp);
 	ucontrol->value.enumerated.item[0] = hdsp_xlr_breakout_cable(hdsp);
 	return 0;
 	return 0;
 }
 }
@@ -2442,7 +2463,7 @@ static int snd_hdsp_put_xlr_breakout_cable(struct snd_kcontrol *kcontrol, struct
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	int val;
 	int val;
-	
+
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
 	val = ucontrol->value.integer.value[0] & 1;
@@ -2488,7 +2509,7 @@ static int hdsp_set_aeb(struct hdsp *hdsp, int mode)
 static int snd_hdsp_get_aeb(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_aeb(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.enumerated.item[0] = hdsp_aeb(hdsp);
 	ucontrol->value.enumerated.item[0] = hdsp_aeb(hdsp);
 	return 0;
 	return 0;
 }
 }
@@ -2498,7 +2519,7 @@ static int snd_hdsp_put_aeb(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_v
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	int val;
 	int val;
-	
+
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
 	val = ucontrol->value.integer.value[0] & 1;
@@ -2576,7 +2597,7 @@ static int snd_hdsp_info_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd
 {
 {
 	static char *texts[] = {"Word", "IEC958", "ADAT1", "ADAT Sync", "ADAT2", "ADAT3" };
 	static char *texts[] = {"Word", "IEC958", "ADAT1", "ADAT Sync", "ADAT2", "ADAT3" };
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->count = 1;
 	uinfo->count = 1;
 
 
@@ -2595,7 +2616,7 @@ static int snd_hdsp_info_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd
 		uinfo->value.enumerated.items = 0;
 		uinfo->value.enumerated.items = 0;
 		break;
 		break;
 	}
 	}
-		
+
 	if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
 	if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
 		uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
 		uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
 	strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]);
 	strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]);
@@ -2605,7 +2626,7 @@ static int snd_hdsp_info_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd
 static int snd_hdsp_get_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.enumerated.item[0] = hdsp_pref_sync_ref(hdsp);
 	ucontrol->value.enumerated.item[0] = hdsp_pref_sync_ref(hdsp);
 	return 0;
 	return 0;
 }
 }
@@ -2615,7 +2636,7 @@ static int snd_hdsp_put_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd_
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change, max;
 	int change, max;
 	unsigned int val;
 	unsigned int val;
-	
+
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 		return -EBUSY;
 
 
@@ -2664,7 +2685,7 @@ static int hdsp_autosync_ref(struct hdsp *hdsp)
 	case HDSP_SelSyncRef_SPDIF:
 	case HDSP_SelSyncRef_SPDIF:
 		return HDSP_AUTOSYNC_FROM_SPDIF;
 		return HDSP_AUTOSYNC_FROM_SPDIF;
 	case HDSP_SelSyncRefMask:
 	case HDSP_SelSyncRefMask:
-		return HDSP_AUTOSYNC_FROM_NONE;	
+		return HDSP_AUTOSYNC_FROM_NONE;
 	case HDSP_SelSyncRef_ADAT1:
 	case HDSP_SelSyncRef_ADAT1:
 		return HDSP_AUTOSYNC_FROM_ADAT1;
 		return HDSP_AUTOSYNC_FROM_ADAT1;
 	case HDSP_SelSyncRef_ADAT2:
 	case HDSP_SelSyncRef_ADAT2:
@@ -2680,7 +2701,7 @@ static int hdsp_autosync_ref(struct hdsp *hdsp)
 static int snd_hdsp_info_autosync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
 static int snd_hdsp_info_autosync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
 {
 {
 	static char *texts[] = {"Word", "ADAT Sync", "IEC958", "None", "ADAT1", "ADAT2", "ADAT3" };
 	static char *texts[] = {"Word", "ADAT Sync", "IEC958", "None", "ADAT1", "ADAT2", "ADAT3" };
-	
+
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->count = 1;
 	uinfo->count = 1;
 	uinfo->value.enumerated.items = 7;
 	uinfo->value.enumerated.items = 7;
@@ -2693,7 +2714,7 @@ static int snd_hdsp_info_autosync_ref(struct snd_kcontrol *kcontrol, struct snd_
 static int snd_hdsp_get_autosync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_autosync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.enumerated.item[0] = hdsp_autosync_ref(hdsp);
 	ucontrol->value.enumerated.item[0] = hdsp_autosync_ref(hdsp);
 	return 0;
 	return 0;
 }
 }
@@ -2727,7 +2748,7 @@ static int hdsp_set_line_output(struct hdsp *hdsp, int out)
 static int snd_hdsp_get_line_out(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_line_out(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	spin_lock_irq(&hdsp->lock);
 	spin_lock_irq(&hdsp->lock);
 	ucontrol->value.integer.value[0] = hdsp_line_out(hdsp);
 	ucontrol->value.integer.value[0] = hdsp_line_out(hdsp);
 	spin_unlock_irq(&hdsp->lock);
 	spin_unlock_irq(&hdsp->lock);
@@ -2739,7 +2760,7 @@ static int snd_hdsp_put_line_out(struct snd_kcontrol *kcontrol, struct snd_ctl_e
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	unsigned int val;
 	unsigned int val;
-	
+
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
 	val = ucontrol->value.integer.value[0] & 1;
@@ -2773,7 +2794,7 @@ static int hdsp_set_precise_pointer(struct hdsp *hdsp, int precise)
 static int snd_hdsp_get_precise_pointer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_precise_pointer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	spin_lock_irq(&hdsp->lock);
 	spin_lock_irq(&hdsp->lock);
 	ucontrol->value.integer.value[0] = hdsp->precise_ptr;
 	ucontrol->value.integer.value[0] = hdsp->precise_ptr;
 	spin_unlock_irq(&hdsp->lock);
 	spin_unlock_irq(&hdsp->lock);
@@ -2785,7 +2806,7 @@ static int snd_hdsp_put_precise_pointer(struct snd_kcontrol *kcontrol, struct sn
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	unsigned int val;
 	unsigned int val;
-	
+
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
 	val = ucontrol->value.integer.value[0] & 1;
@@ -2819,7 +2840,7 @@ static int hdsp_set_use_midi_tasklet(struct hdsp *hdsp, int use_tasklet)
 static int snd_hdsp_get_use_midi_tasklet(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_use_midi_tasklet(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	spin_lock_irq(&hdsp->lock);
 	spin_lock_irq(&hdsp->lock);
 	ucontrol->value.integer.value[0] = hdsp->use_midi_tasklet;
 	ucontrol->value.integer.value[0] = hdsp->use_midi_tasklet;
 	spin_unlock_irq(&hdsp->lock);
 	spin_unlock_irq(&hdsp->lock);
@@ -2831,7 +2852,7 @@ static int snd_hdsp_put_use_midi_tasklet(struct snd_kcontrol *kcontrol, struct s
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	unsigned int val;
 	unsigned int val;
-	
+
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
 	val = ucontrol->value.integer.value[0] & 1;
@@ -2873,12 +2894,12 @@ static int snd_hdsp_get_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem
 
 
 	source = ucontrol->value.integer.value[0];
 	source = ucontrol->value.integer.value[0];
 	destination = ucontrol->value.integer.value[1];
 	destination = ucontrol->value.integer.value[1];
-	
+
 	if (source >= hdsp->max_channels)
 	if (source >= hdsp->max_channels)
 		addr = hdsp_playback_to_output_key(hdsp,source-hdsp->max_channels,destination);
 		addr = hdsp_playback_to_output_key(hdsp,source-hdsp->max_channels,destination);
 	else
 	else
 		addr = hdsp_input_to_output_key(hdsp,source, destination);
 		addr = hdsp_input_to_output_key(hdsp,source, destination);
-	
+
 	spin_lock_irq(&hdsp->lock);
 	spin_lock_irq(&hdsp->lock);
 	ucontrol->value.integer.value[2] = hdsp_read_gain (hdsp, addr);
 	ucontrol->value.integer.value[2] = hdsp_read_gain (hdsp, addr);
 	spin_unlock_irq(&hdsp->lock);
 	spin_unlock_irq(&hdsp->lock);
@@ -2926,7 +2947,7 @@ static int snd_hdsp_put_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem
 
 
 static int snd_hdsp_info_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
 static int snd_hdsp_info_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
 {
 {
-	static char *texts[] = {"No Lock", "Lock", "Sync" };	
+	static char *texts[] = {"No Lock", "Lock", "Sync" };
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->count = 1;
 	uinfo->count = 1;
 	uinfo->value.enumerated.items = 3;
 	uinfo->value.enumerated.items = 3;
@@ -2971,7 +2992,7 @@ static int hdsp_spdif_sync_check(struct hdsp *hdsp)
 	int status = hdsp_read(hdsp, HDSP_statusRegister);
 	int status = hdsp_read(hdsp, HDSP_statusRegister);
 	if (status & HDSP_SPDIFErrorFlag)
 	if (status & HDSP_SPDIFErrorFlag)
 		return 0;
 		return 0;
-	else {	
+	else {
 		if (status & HDSP_SPDIFSync)
 		if (status & HDSP_SPDIFSync)
 			return 2;
 			return 2;
 		else
 		else
@@ -3007,7 +3028,7 @@ static int hdsp_adatsync_sync_check(struct hdsp *hdsp)
 			return 1;
 			return 1;
 	} else
 	} else
 		return 0;
 		return 0;
-}	
+}
 
 
 static int snd_hdsp_get_adatsync_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_adatsync_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
@@ -3025,17 +3046,17 @@ static int snd_hdsp_get_adatsync_sync_check(struct snd_kcontrol *kcontrol, struc
 }
 }
 
 
 static int hdsp_adat_sync_check(struct hdsp *hdsp, int idx)
 static int hdsp_adat_sync_check(struct hdsp *hdsp, int idx)
-{	
+{
 	int status = hdsp_read(hdsp, HDSP_statusRegister);
 	int status = hdsp_read(hdsp, HDSP_statusRegister);
-	
+
 	if (status & (HDSP_Lock0>>idx)) {
 	if (status & (HDSP_Lock0>>idx)) {
 		if (status & (HDSP_Sync0>>idx))
 		if (status & (HDSP_Sync0>>idx))
 			return 2;
 			return 2;
 		else
 		else
-			return 1;		
+			return 1;
 	} else
 	} else
 		return 0;
 		return 0;
-} 
+}
 
 
 static int snd_hdsp_get_adat_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_adat_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
@@ -3053,7 +3074,7 @@ static int snd_hdsp_get_adat_sync_check(struct snd_kcontrol *kcontrol, struct sn
 		break;
 		break;
 	case Multiface:
 	case Multiface:
 	case H9632:
 	case H9632:
-		if (offset >= 1) 
+		if (offset >= 1)
 			return -EINVAL;
 			return -EINVAL;
 		break;
 		break;
 	default:
 	default:
@@ -3115,7 +3136,7 @@ static int snd_hdsp_info_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ct
 static int snd_hdsp_get_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 static int snd_hdsp_get_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
 {
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
-	
+
 	ucontrol->value.enumerated.item[0] = hdsp_dds_offset(hdsp);
 	ucontrol->value.enumerated.item[0] = hdsp_dds_offset(hdsp);
 	return 0;
 	return 0;
 }
 }
@@ -3125,7 +3146,7 @@ static int snd_hdsp_put_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ctl
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int change;
 	int val;
 	int val;
-	
+
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 		return -EBUSY;
 	val = ucontrol->value.enumerated.item[0];
 	val = ucontrol->value.enumerated.item[0];
@@ -3170,7 +3191,7 @@ static struct snd_kcontrol_new snd_hdsp_controls[] = {
 	.get =		snd_hdsp_control_spdif_mask_get,
 	.get =		snd_hdsp_control_spdif_mask_get,
 	.private_value = IEC958_AES0_NONAUDIO |
 	.private_value = IEC958_AES0_NONAUDIO |
   			 IEC958_AES0_PROFESSIONAL |
   			 IEC958_AES0_PROFESSIONAL |
-			 IEC958_AES0_CON_EMPHASIS,	                                                                                      
+			 IEC958_AES0_CON_EMPHASIS,
 },
 },
 {
 {
 	.access =	SNDRV_CTL_ELEM_ACCESS_READ,
 	.access =	SNDRV_CTL_ELEM_ACCESS_READ,
@@ -3188,7 +3209,7 @@ HDSP_SPDIF_OUT("IEC958 Output also on ADAT1", 0),
 HDSP_SPDIF_PROFESSIONAL("IEC958 Professional Bit", 0),
 HDSP_SPDIF_PROFESSIONAL("IEC958 Professional Bit", 0),
 HDSP_SPDIF_EMPHASIS("IEC958 Emphasis Bit", 0),
 HDSP_SPDIF_EMPHASIS("IEC958 Emphasis Bit", 0),
 HDSP_SPDIF_NON_AUDIO("IEC958 Non-audio Bit", 0),
 HDSP_SPDIF_NON_AUDIO("IEC958 Non-audio Bit", 0),
-/* 'Sample Clock Source' complies with the alsa control naming scheme */ 
+/* 'Sample Clock Source' complies with the alsa control naming scheme */
 HDSP_CLOCK_SOURCE("Sample Clock Source", 0),
 HDSP_CLOCK_SOURCE("Sample Clock Source", 0),
 {
 {
 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
@@ -3240,7 +3261,7 @@ static int snd_hdsp_create_controls(struct snd_card *card, struct hdsp *hdsp)
 				return err;
 				return err;
 		}
 		}
 	}
 	}
-	
+
 	/* DA, AD and Phone gain and XLR breakout cable controls for H9632 cards */
 	/* DA, AD and Phone gain and XLR breakout cable controls for H9632 cards */
 	if (hdsp->io_type == H9632) {
 	if (hdsp->io_type == H9632) {
 		for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_9632_controls); idx++) {
 		for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_9632_controls); idx++) {
@@ -3259,7 +3280,7 @@ static int snd_hdsp_create_controls(struct snd_card *card, struct hdsp *hdsp)
 }
 }
 
 
 /*------------------------------------------------------------
 /*------------------------------------------------------------
-   /proc interface 
+   /proc interface
  ------------------------------------------------------------*/
  ------------------------------------------------------------*/
 
 
 static void
 static void
@@ -3298,7 +3319,7 @@ snd_hdsp_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
 			}
 			}
 		}
 		}
 	}
 	}
-	
+
 	status = hdsp_read(hdsp, HDSP_statusRegister);
 	status = hdsp_read(hdsp, HDSP_statusRegister);
 	status2 = hdsp_read(hdsp, HDSP_status2Register);
 	status2 = hdsp_read(hdsp, HDSP_status2Register);
 
 
@@ -3362,17 +3383,17 @@ snd_hdsp_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
 		break;
 		break;
 		case HDSP_CLOCK_SOURCE_INTERNAL_192KHZ:
 		case HDSP_CLOCK_SOURCE_INTERNAL_192KHZ:
 		clock_source = "Internal 192 kHz";
 		clock_source = "Internal 192 kHz";
-		break;	
+		break;
 	default:
 	default:
-		clock_source = "Error";		
+		clock_source = "Error";
 	}
 	}
 	snd_iprintf (buffer, "Sample Clock Source: %s\n", clock_source);
 	snd_iprintf (buffer, "Sample Clock Source: %s\n", clock_source);
-			
+
 	if (hdsp_system_clock_mode(hdsp))
 	if (hdsp_system_clock_mode(hdsp))
 		system_clock_mode = "Slave";
 		system_clock_mode = "Slave";
 	else
 	else
 		system_clock_mode = "Master";
 		system_clock_mode = "Master";
-	
+
 	switch (hdsp_pref_sync_ref (hdsp)) {
 	switch (hdsp_pref_sync_ref (hdsp)) {
 	case HDSP_SYNC_FROM_WORD:
 	case HDSP_SYNC_FROM_WORD:
 		pref_sync_ref = "Word Clock";
 		pref_sync_ref = "Word Clock";
@@ -3397,7 +3418,7 @@ snd_hdsp_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
 		break;
 		break;
 	}
 	}
 	snd_iprintf (buffer, "Preferred Sync Reference: %s\n", pref_sync_ref);
 	snd_iprintf (buffer, "Preferred Sync Reference: %s\n", pref_sync_ref);
-	
+
 	switch (hdsp_autosync_ref (hdsp)) {
 	switch (hdsp_autosync_ref (hdsp)) {
 	case HDSP_AUTOSYNC_FROM_WORD:
 	case HDSP_AUTOSYNC_FROM_WORD:
 		autosync_ref = "Word Clock";
 		autosync_ref = "Word Clock";
@@ -3410,7 +3431,7 @@ snd_hdsp_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
 		break;
 		break;
 	case HDSP_AUTOSYNC_FROM_NONE:
 	case HDSP_AUTOSYNC_FROM_NONE:
 		autosync_ref = "None";
 		autosync_ref = "None";
-		break;	
+		break;
 	case HDSP_AUTOSYNC_FROM_ADAT1:
 	case HDSP_AUTOSYNC_FROM_ADAT1:
 		autosync_ref = "ADAT1";
 		autosync_ref = "ADAT1";
 		break;
 		break;
@@ -3425,14 +3446,14 @@ snd_hdsp_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
 		break;
 		break;
 	}
 	}
 	snd_iprintf (buffer, "AutoSync Reference: %s\n", autosync_ref);
 	snd_iprintf (buffer, "AutoSync Reference: %s\n", autosync_ref);
-	
+
 	snd_iprintf (buffer, "AutoSync Frequency: %d\n", hdsp_external_sample_rate(hdsp));
 	snd_iprintf (buffer, "AutoSync Frequency: %d\n", hdsp_external_sample_rate(hdsp));
-	
+
 	snd_iprintf (buffer, "System Clock Mode: %s\n", system_clock_mode);
 	snd_iprintf (buffer, "System Clock Mode: %s\n", system_clock_mode);
 
 
 	snd_iprintf (buffer, "System Clock Frequency: %d\n", hdsp->system_sample_rate);
 	snd_iprintf (buffer, "System Clock Frequency: %d\n", hdsp->system_sample_rate);
 	snd_iprintf (buffer, "System Clock Locked: %s\n", hdsp->clock_source_locked ? "Yes" : "No");
 	snd_iprintf (buffer, "System Clock Locked: %s\n", hdsp->clock_source_locked ? "Yes" : "No");
-		
+
 	snd_iprintf(buffer, "\n");
 	snd_iprintf(buffer, "\n");
 
 
 	switch (hdsp_spdif_in(hdsp)) {
 	switch (hdsp_spdif_in(hdsp)) {
@@ -3452,7 +3473,7 @@ snd_hdsp_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
 		snd_iprintf(buffer, "IEC958 input: ???\n");
 		snd_iprintf(buffer, "IEC958 input: ???\n");
 		break;
 		break;
 	}
 	}
-	
+
 	if (hdsp->control_register & HDSP_SPDIFOpticalOut)
 	if (hdsp->control_register & HDSP_SPDIFOpticalOut)
 		snd_iprintf(buffer, "IEC958 output: Coaxial & ADAT1\n");
 		snd_iprintf(buffer, "IEC958 output: Coaxial & ADAT1\n");
 	else
 	else
@@ -3510,13 +3531,13 @@ snd_hdsp_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
 		snd_iprintf (buffer, "SPDIF: No Lock\n");
 		snd_iprintf (buffer, "SPDIF: No Lock\n");
 	else
 	else
 		snd_iprintf (buffer, "SPDIF: %s\n", x ? "Sync" : "Lock");
 		snd_iprintf (buffer, "SPDIF: %s\n", x ? "Sync" : "Lock");
-	
+
 	x = status2 & HDSP_wc_sync;
 	x = status2 & HDSP_wc_sync;
 	if (status2 & HDSP_wc_lock)
 	if (status2 & HDSP_wc_lock)
 		snd_iprintf (buffer, "Word Clock: %s\n", x ? "Sync" : "Lock");
 		snd_iprintf (buffer, "Word Clock: %s\n", x ? "Sync" : "Lock");
 	else
 	else
 		snd_iprintf (buffer, "Word Clock: No Lock\n");
 		snd_iprintf (buffer, "Word Clock: No Lock\n");
-	
+
 	x = status & HDSP_TimecodeSync;
 	x = status & HDSP_TimecodeSync;
 	if (status & HDSP_TimecodeLock)
 	if (status & HDSP_TimecodeLock)
 		snd_iprintf(buffer, "ADAT Sync: %s\n", x ? "Sync" : "Lock");
 		snd_iprintf(buffer, "ADAT Sync: %s\n", x ? "Sync" : "Lock");
@@ -3524,11 +3545,11 @@ snd_hdsp_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
 		snd_iprintf(buffer, "ADAT Sync: No Lock\n");
 		snd_iprintf(buffer, "ADAT Sync: No Lock\n");
 
 
 	snd_iprintf(buffer, "\n");
 	snd_iprintf(buffer, "\n");
-	
+
 	/* Informations about H9632 specific controls */
 	/* Informations about H9632 specific controls */
 	if (hdsp->io_type == H9632) {
 	if (hdsp->io_type == H9632) {
 		char *tmp;
 		char *tmp;
-	
+
 		switch (hdsp_ad_gain(hdsp)) {
 		switch (hdsp_ad_gain(hdsp)) {
 		case 0:
 		case 0:
 			tmp = "-10 dBV";
 			tmp = "-10 dBV";
@@ -3554,7 +3575,7 @@ snd_hdsp_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
 			break;
 			break;
 		}
 		}
 		snd_iprintf(buffer, "DA Gain : %s\n", tmp);
 		snd_iprintf(buffer, "DA Gain : %s\n", tmp);
-		
+
 		switch (hdsp_phone_gain(hdsp)) {
 		switch (hdsp_phone_gain(hdsp)) {
 		case 0:
 		case 0:
 			tmp = "0 dB";
 			tmp = "0 dB";
@@ -3568,8 +3589,8 @@ snd_hdsp_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
 		}
 		}
 		snd_iprintf(buffer, "Phones Gain : %s\n", tmp);
 		snd_iprintf(buffer, "Phones Gain : %s\n", tmp);
 
 
-		snd_iprintf(buffer, "XLR Breakout Cable : %s\n", hdsp_xlr_breakout_cable(hdsp) ? "yes" : "no");	
-		
+		snd_iprintf(buffer, "XLR Breakout Cable : %s\n", hdsp_xlr_breakout_cable(hdsp) ? "yes" : "no");
+
 		if (hdsp->control_register & HDSP_AnalogExtensionBoard)
 		if (hdsp->control_register & HDSP_AnalogExtensionBoard)
 			snd_iprintf(buffer, "AEB : on (ADAT1 internal)\n");
 			snd_iprintf(buffer, "AEB : on (ADAT1 internal)\n");
 		else
 		else
@@ -3632,18 +3653,18 @@ static int snd_hdsp_set_defaults(struct hdsp *hdsp)
 
 
 	/* set defaults:
 	/* set defaults:
 
 
-	   SPDIF Input via Coax 
+	   SPDIF Input via Coax
 	   Master clock mode
 	   Master clock mode
 	   maximum latency (7 => 2^7 = 8192 samples, 64Kbyte buffer,
 	   maximum latency (7 => 2^7 = 8192 samples, 64Kbyte buffer,
 	                    which implies 2 4096 sample, 32Kbyte periods).
 	                    which implies 2 4096 sample, 32Kbyte periods).
-           Enable line out.			    
+           Enable line out.
 	 */
 	 */
 
 
-	hdsp->control_register = HDSP_ClockModeMaster | 
-		                 HDSP_SPDIFInputCoaxial | 
-		                 hdsp_encode_latency(7) | 
+	hdsp->control_register = HDSP_ClockModeMaster |
+		                 HDSP_SPDIFInputCoaxial |
+		                 hdsp_encode_latency(7) |
 		                 HDSP_LineOut;
 		                 HDSP_LineOut;
-	
+
 
 
 	hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
 	hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
 
 
@@ -3661,7 +3682,7 @@ static int snd_hdsp_set_defaults(struct hdsp *hdsp)
 	hdsp_compute_period_size(hdsp);
 	hdsp_compute_period_size(hdsp);
 
 
 	/* silence everything */
 	/* silence everything */
-	
+
 	for (i = 0; i < HDSP_MATRIX_MIXER_SIZE; ++i)
 	for (i = 0; i < HDSP_MATRIX_MIXER_SIZE; ++i)
 		hdsp->mixer_matrix[i] = MINUS_INFINITY_GAIN;
 		hdsp->mixer_matrix[i] = MINUS_INFINITY_GAIN;
 
 
@@ -3669,7 +3690,7 @@ static int snd_hdsp_set_defaults(struct hdsp *hdsp)
 		if (hdsp_write_gain (hdsp, i, MINUS_INFINITY_GAIN))
 		if (hdsp_write_gain (hdsp, i, MINUS_INFINITY_GAIN))
 			return -EIO;
 			return -EIO;
 	}
 	}
-	
+
 	/* H9632 specific defaults */
 	/* H9632 specific defaults */
 	if (hdsp->io_type == H9632) {
 	if (hdsp->io_type == H9632) {
 		hdsp->control_register |= (HDSP_DAGainPlus4dBu | HDSP_ADGainPlus4dBu | HDSP_PhoneGain0dB);
 		hdsp->control_register |= (HDSP_DAGainPlus4dBu | HDSP_ADGainPlus4dBu | HDSP_PhoneGain0dB);
@@ -3687,12 +3708,12 @@ static int snd_hdsp_set_defaults(struct hdsp *hdsp)
 static void hdsp_midi_tasklet(unsigned long arg)
 static void hdsp_midi_tasklet(unsigned long arg)
 {
 {
 	struct hdsp *hdsp = (struct hdsp *)arg;
 	struct hdsp *hdsp = (struct hdsp *)arg;
-	
+
 	if (hdsp->midi[0].pending)
 	if (hdsp->midi[0].pending)
 		snd_hdsp_midi_input_read (&hdsp->midi[0]);
 		snd_hdsp_midi_input_read (&hdsp->midi[0]);
 	if (hdsp->midi[1].pending)
 	if (hdsp->midi[1].pending)
 		snd_hdsp_midi_input_read (&hdsp->midi[1]);
 		snd_hdsp_midi_input_read (&hdsp->midi[1]);
-} 
+}
 
 
 static irqreturn_t snd_hdsp_interrupt(int irq, void *dev_id)
 static irqreturn_t snd_hdsp_interrupt(int irq, void *dev_id)
 {
 {
@@ -3704,7 +3725,7 @@ static irqreturn_t snd_hdsp_interrupt(int irq, void *dev_id)
 	unsigned int midi0status;
 	unsigned int midi0status;
 	unsigned int midi1status;
 	unsigned int midi1status;
 	int schedule = 0;
 	int schedule = 0;
-	
+
 	status = hdsp_read(hdsp, HDSP_statusRegister);
 	status = hdsp_read(hdsp, HDSP_statusRegister);
 
 
 	audio = status & HDSP_audioIRQPending;
 	audio = status & HDSP_audioIRQPending;
@@ -3718,15 +3739,18 @@ static irqreturn_t snd_hdsp_interrupt(int irq, void *dev_id)
 
 
 	midi0status = hdsp_read (hdsp, HDSP_midiStatusIn0) & 0xff;
 	midi0status = hdsp_read (hdsp, HDSP_midiStatusIn0) & 0xff;
 	midi1status = hdsp_read (hdsp, HDSP_midiStatusIn1) & 0xff;
 	midi1status = hdsp_read (hdsp, HDSP_midiStatusIn1) & 0xff;
-	
+
+	if (!(hdsp->state & HDSP_InitializationComplete))
+		return IRQ_HANDLED;
+
 	if (audio) {
 	if (audio) {
 		if (hdsp->capture_substream)
 		if (hdsp->capture_substream)
 			snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream);
 			snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream);
-		
+
 		if (hdsp->playback_substream)
 		if (hdsp->playback_substream)
 			snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream);
 			snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream);
 	}
 	}
-	
+
 	if (midi0 && midi0status) {
 	if (midi0 && midi0status) {
 		if (hdsp->use_midi_tasklet) {
 		if (hdsp->use_midi_tasklet) {
 			/* we disable interrupts for this input until processing is done */
 			/* we disable interrupts for this input until processing is done */
@@ -3769,10 +3793,10 @@ static char *hdsp_channel_buffer_location(struct hdsp *hdsp,
 
 
         if (snd_BUG_ON(channel < 0 || channel >= hdsp->max_channels))
         if (snd_BUG_ON(channel < 0 || channel >= hdsp->max_channels))
 		return NULL;
 		return NULL;
-        
+
 	if ((mapped_channel = hdsp->channel_map[channel]) < 0)
 	if ((mapped_channel = hdsp->channel_map[channel]) < 0)
 		return NULL;
 		return NULL;
-	
+
 	if (stream == SNDRV_PCM_STREAM_CAPTURE)
 	if (stream == SNDRV_PCM_STREAM_CAPTURE)
 		return hdsp->capture_buffer + (mapped_channel * HDSP_CHANNEL_BUFFER_BYTES);
 		return hdsp->capture_buffer + (mapped_channel * HDSP_CHANNEL_BUFFER_BYTES);
 	else
 	else
@@ -3965,7 +3989,7 @@ static int snd_hdsp_trigger(struct snd_pcm_substream *substream, int cmd)
 	struct hdsp *hdsp = snd_pcm_substream_chip(substream);
 	struct hdsp *hdsp = snd_pcm_substream_chip(substream);
 	struct snd_pcm_substream *other;
 	struct snd_pcm_substream *other;
 	int running;
 	int running;
-	
+
 	if (hdsp_check_for_iobox (hdsp))
 	if (hdsp_check_for_iobox (hdsp))
 		return -EIO;
 		return -EIO;
 
 
@@ -4059,10 +4083,10 @@ static struct snd_pcm_hardware snd_hdsp_playback_subinfo =
 	.formats =		SNDRV_PCM_FMTBIT_S32_LE,
 	.formats =		SNDRV_PCM_FMTBIT_S32_LE,
 #endif
 #endif
 	.rates =		(SNDRV_PCM_RATE_32000 |
 	.rates =		(SNDRV_PCM_RATE_32000 |
-				 SNDRV_PCM_RATE_44100 | 
-				 SNDRV_PCM_RATE_48000 | 
-				 SNDRV_PCM_RATE_64000 | 
-				 SNDRV_PCM_RATE_88200 | 
+				 SNDRV_PCM_RATE_44100 |
+				 SNDRV_PCM_RATE_48000 |
+				 SNDRV_PCM_RATE_64000 |
+				 SNDRV_PCM_RATE_88200 |
 				 SNDRV_PCM_RATE_96000),
 				 SNDRV_PCM_RATE_96000),
 	.rate_min =		32000,
 	.rate_min =		32000,
 	.rate_max =		96000,
 	.rate_max =		96000,
@@ -4088,10 +4112,10 @@ static struct snd_pcm_hardware snd_hdsp_capture_subinfo =
 	.formats =		SNDRV_PCM_FMTBIT_S32_LE,
 	.formats =		SNDRV_PCM_FMTBIT_S32_LE,
 #endif
 #endif
 	.rates =		(SNDRV_PCM_RATE_32000 |
 	.rates =		(SNDRV_PCM_RATE_32000 |
-				 SNDRV_PCM_RATE_44100 | 
-				 SNDRV_PCM_RATE_48000 | 
-				 SNDRV_PCM_RATE_64000 | 
-				 SNDRV_PCM_RATE_88200 | 
+				 SNDRV_PCM_RATE_44100 |
+				 SNDRV_PCM_RATE_48000 |
+				 SNDRV_PCM_RATE_64000 |
+				 SNDRV_PCM_RATE_88200 |
 				 SNDRV_PCM_RATE_96000),
 				 SNDRV_PCM_RATE_96000),
 	.rate_min =		32000,
 	.rate_min =		32000,
 	.rate_max =		96000,
 	.rate_max =		96000,
@@ -4170,7 +4194,7 @@ static int snd_hdsp_hw_rule_in_channels_rate(struct snd_pcm_hw_params *params,
 			.max = hdsp->qs_in_channels,
 			.max = hdsp->qs_in_channels,
 			.integer = 1,
 			.integer = 1,
 		};
 		};
-		return snd_interval_refine(c, &t);	
+		return snd_interval_refine(c, &t);
 	} else if (r->min > 48000 && r->max <= 96000) {
 	} else if (r->min > 48000 && r->max <= 96000) {
 		struct snd_interval t = {
 		struct snd_interval t = {
 			.min = hdsp->ds_in_channels,
 			.min = hdsp->ds_in_channels,
@@ -4201,7 +4225,7 @@ static int snd_hdsp_hw_rule_out_channels_rate(struct snd_pcm_hw_params *params,
 			.max = hdsp->qs_out_channels,
 			.max = hdsp->qs_out_channels,
 			.integer = 1,
 			.integer = 1,
 		};
 		};
-		return snd_interval_refine(c, &t);	
+		return snd_interval_refine(c, &t);
 	} else if (r->min > 48000 && r->max <= 96000) {
 	} else if (r->min > 48000 && r->max <= 96000) {
 		struct snd_interval t = {
 		struct snd_interval t = {
 			.min = hdsp->ds_out_channels,
 			.min = hdsp->ds_out_channels,
@@ -4318,8 +4342,8 @@ static int snd_hdsp_playback_open(struct snd_pcm_substream *substream)
 	if (hdsp->io_type == H9632) {
 	if (hdsp->io_type == H9632) {
 		runtime->hw.channels_min = hdsp->qs_out_channels;
 		runtime->hw.channels_min = hdsp->qs_out_channels;
 		runtime->hw.channels_max = hdsp->ss_out_channels;
 		runtime->hw.channels_max = hdsp->ss_out_channels;
-	}	
-	
+	}
+
 	snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
 	snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
 			     snd_hdsp_hw_rule_out_channels, hdsp,
 			     snd_hdsp_hw_rule_out_channels, hdsp,
 			     SNDRV_PCM_HW_PARAM_CHANNELS, -1);
 			     SNDRV_PCM_HW_PARAM_CHANNELS, -1);
@@ -4529,7 +4553,7 @@ static int hdsp_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rm
 				hdsp->iobase + HDSP_playbackRmsLevel + i * 8 + 4,
 				hdsp->iobase + HDSP_playbackRmsLevel + i * 8 + 4,
 				hdsp->iobase + HDSP_playbackRmsLevel + i * 8))
 				hdsp->iobase + HDSP_playbackRmsLevel + i * 8))
 			return -EFAULT;
 			return -EFAULT;
-		if (copy_u64_le(&peak_rms->input_rms[i], 
+		if (copy_u64_le(&peak_rms->input_rms[i],
 				hdsp->iobase + HDSP_inputRmsLevel + i * 8 + 4,
 				hdsp->iobase + HDSP_inputRmsLevel + i * 8 + 4,
 				hdsp->iobase + HDSP_inputRmsLevel + i * 8))
 				hdsp->iobase + HDSP_inputRmsLevel + i * 8))
 			return -EFAULT;
 			return -EFAULT;
@@ -4539,7 +4563,7 @@ static int hdsp_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rm
 
 
 static int snd_hdsp_hwdep_ioctl(struct snd_hwdep *hw, struct file *file, unsigned int cmd, unsigned long arg)
 static int snd_hdsp_hwdep_ioctl(struct snd_hwdep *hw, struct file *file, unsigned int cmd, unsigned long arg)
 {
 {
-	struct hdsp *hdsp = (struct hdsp *)hw->private_data;	
+	struct hdsp *hdsp = (struct hdsp *)hw->private_data;
 	void __user *argp = (void __user *)arg;
 	void __user *argp = (void __user *)arg;
 	int err;
 	int err;
 
 
@@ -4573,7 +4597,7 @@ static int snd_hdsp_hwdep_ioctl(struct snd_hwdep *hw, struct file *file, unsigne
 		struct hdsp_config_info info;
 		struct hdsp_config_info info;
 		unsigned long flags;
 		unsigned long flags;
 		int i;
 		int i;
-		
+
 		err = hdsp_check_for_iobox(hdsp);
 		err = hdsp_check_for_iobox(hdsp);
 		if (err < 0)
 		if (err < 0)
 			return err;
 			return err;
@@ -4607,7 +4631,7 @@ static int snd_hdsp_hwdep_ioctl(struct snd_hwdep *hw, struct file *file, unsigne
 			info.ad_gain = (unsigned char)hdsp_ad_gain(hdsp);
 			info.ad_gain = (unsigned char)hdsp_ad_gain(hdsp);
 			info.phone_gain = (unsigned char)hdsp_phone_gain(hdsp);
 			info.phone_gain = (unsigned char)hdsp_phone_gain(hdsp);
 			info.xlr_breakout_cable = (unsigned char)hdsp_xlr_breakout_cable(hdsp);
 			info.xlr_breakout_cable = (unsigned char)hdsp_xlr_breakout_cable(hdsp);
-		
+
 		}
 		}
 		if (hdsp->io_type == H9632 || hdsp->io_type == H9652)
 		if (hdsp->io_type == H9632 || hdsp->io_type == H9652)
 			info.analog_extension_board = (unsigned char)hdsp_aeb(hdsp);
 			info.analog_extension_board = (unsigned char)hdsp_aeb(hdsp);
@@ -4618,7 +4642,7 @@ static int snd_hdsp_hwdep_ioctl(struct snd_hwdep *hw, struct file *file, unsigne
 	}
 	}
 	case SNDRV_HDSP_IOCTL_GET_9632_AEB: {
 	case SNDRV_HDSP_IOCTL_GET_9632_AEB: {
 		struct hdsp_9632_aeb h9632_aeb;
 		struct hdsp_9632_aeb h9632_aeb;
-		
+
 		if (hdsp->io_type != H9632) return -EINVAL;
 		if (hdsp->io_type != H9632) return -EINVAL;
 		h9632_aeb.aebi = hdsp->ss_in_channels - H9632_SS_CHANNELS;
 		h9632_aeb.aebi = hdsp->ss_in_channels - H9632_SS_CHANNELS;
 		h9632_aeb.aebo = hdsp->ss_out_channels - H9632_SS_CHANNELS;
 		h9632_aeb.aebo = hdsp->ss_out_channels - H9632_SS_CHANNELS;
@@ -4629,7 +4653,7 @@ static int snd_hdsp_hwdep_ioctl(struct snd_hwdep *hw, struct file *file, unsigne
 	case SNDRV_HDSP_IOCTL_GET_VERSION: {
 	case SNDRV_HDSP_IOCTL_GET_VERSION: {
 		struct hdsp_version hdsp_version;
 		struct hdsp_version hdsp_version;
 		int err;
 		int err;
-		
+
 		if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL;
 		if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL;
 		if (hdsp->io_type == Undefined) {
 		if (hdsp->io_type == Undefined) {
 			if ((err = hdsp_get_iobox_version(hdsp)) < 0)
 			if ((err = hdsp_get_iobox_version(hdsp)) < 0)
@@ -4645,7 +4669,7 @@ static int snd_hdsp_hwdep_ioctl(struct snd_hwdep *hw, struct file *file, unsigne
 		struct hdsp_firmware __user *firmware;
 		struct hdsp_firmware __user *firmware;
 		u32 __user *firmware_data;
 		u32 __user *firmware_data;
 		int err;
 		int err;
-		
+
 		if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL;
 		if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL;
 		/* SNDRV_HDSP_IOCTL_GET_VERSION must have been called */
 		/* SNDRV_HDSP_IOCTL_GET_VERSION must have been called */
 		if (hdsp->io_type == Undefined) return -EINVAL;
 		if (hdsp->io_type == Undefined) return -EINVAL;
@@ -4658,25 +4682,25 @@ static int snd_hdsp_hwdep_ioctl(struct snd_hwdep *hw, struct file *file, unsigne
 
 
 		if (get_user(firmware_data, &firmware->firmware_data))
 		if (get_user(firmware_data, &firmware->firmware_data))
 			return -EFAULT;
 			return -EFAULT;
-		
+
 		if (hdsp_check_for_iobox (hdsp))
 		if (hdsp_check_for_iobox (hdsp))
 			return -EIO;
 			return -EIO;
 
 
 		if (copy_from_user(hdsp->firmware_cache, firmware_data, sizeof(hdsp->firmware_cache)) != 0)
 		if (copy_from_user(hdsp->firmware_cache, firmware_data, sizeof(hdsp->firmware_cache)) != 0)
 			return -EFAULT;
 			return -EFAULT;
-		
+
 		hdsp->state |= HDSP_FirmwareCached;
 		hdsp->state |= HDSP_FirmwareCached;
 
 
 		if ((err = snd_hdsp_load_firmware_from_cache(hdsp)) < 0)
 		if ((err = snd_hdsp_load_firmware_from_cache(hdsp)) < 0)
 			return err;
 			return err;
-		
+
 		if (!(hdsp->state & HDSP_InitializationComplete)) {
 		if (!(hdsp->state & HDSP_InitializationComplete)) {
 			if ((err = snd_hdsp_enable_io(hdsp)) < 0)
 			if ((err = snd_hdsp_enable_io(hdsp)) < 0)
 				return err;
 				return err;
-			
-			snd_hdsp_initialize_channels(hdsp);		
+
+			snd_hdsp_initialize_channels(hdsp);
 			snd_hdsp_initialize_midi_flush(hdsp);
 			snd_hdsp_initialize_midi_flush(hdsp);
-	    
+
 			if ((err = snd_hdsp_create_alsa_devices(hdsp->card, hdsp)) < 0) {
 			if ((err = snd_hdsp_create_alsa_devices(hdsp->card, hdsp)) < 0) {
 				snd_printk(KERN_ERR "Hammerfall-DSP: error creating alsa devices\n");
 				snd_printk(KERN_ERR "Hammerfall-DSP: error creating alsa devices\n");
 				return err;
 				return err;
@@ -4723,16 +4747,16 @@ static int snd_hdsp_create_hwdep(struct snd_card *card, struct hdsp *hdsp)
 {
 {
 	struct snd_hwdep *hw;
 	struct snd_hwdep *hw;
 	int err;
 	int err;
-	
+
 	if ((err = snd_hwdep_new(card, "HDSP hwdep", 0, &hw)) < 0)
 	if ((err = snd_hwdep_new(card, "HDSP hwdep", 0, &hw)) < 0)
 		return err;
 		return err;
-		
+
 	hdsp->hwdep = hw;
 	hdsp->hwdep = hw;
 	hw->private_data = hdsp;
 	hw->private_data = hdsp;
 	strcpy(hw->name, "HDSP hwdep interface");
 	strcpy(hw->name, "HDSP hwdep interface");
 
 
 	hw->ops.ioctl = snd_hdsp_hwdep_ioctl;
 	hw->ops.ioctl = snd_hdsp_hwdep_ioctl;
-		
+
 	return 0;
 	return 0;
 }
 }
 
 
@@ -4765,24 +4789,24 @@ static void snd_hdsp_9652_enable_mixer (struct hdsp *hdsp)
 static int snd_hdsp_enable_io (struct hdsp *hdsp)
 static int snd_hdsp_enable_io (struct hdsp *hdsp)
 {
 {
 	int i;
 	int i;
-	
+
 	if (hdsp_fifo_wait (hdsp, 0, 100)) {
 	if (hdsp_fifo_wait (hdsp, 0, 100)) {
 		snd_printk(KERN_ERR "Hammerfall-DSP: enable_io fifo_wait failed\n");
 		snd_printk(KERN_ERR "Hammerfall-DSP: enable_io fifo_wait failed\n");
 		return -EIO;
 		return -EIO;
 	}
 	}
-	
+
 	for (i = 0; i < hdsp->max_channels; ++i) {
 	for (i = 0; i < hdsp->max_channels; ++i) {
 		hdsp_write (hdsp, HDSP_inputEnable + (4 * i), 1);
 		hdsp_write (hdsp, HDSP_inputEnable + (4 * i), 1);
 		hdsp_write (hdsp, HDSP_outputEnable + (4 * i), 1);
 		hdsp_write (hdsp, HDSP_outputEnable + (4 * i), 1);
 	}
 	}
-	
+
 	return 0;
 	return 0;
 }
 }
 
 
 static void snd_hdsp_initialize_channels(struct hdsp *hdsp)
 static void snd_hdsp_initialize_channels(struct hdsp *hdsp)
 {
 {
 	int status, aebi_channels, aebo_channels;
 	int status, aebi_channels, aebo_channels;
-	
+
 	switch (hdsp->io_type) {
 	switch (hdsp->io_type) {
 	case Digiface:
 	case Digiface:
 		hdsp->card_name = "RME Hammerfall DSP + Digiface";
 		hdsp->card_name = "RME Hammerfall DSP + Digiface";
@@ -4795,7 +4819,7 @@ static void snd_hdsp_initialize_channels(struct hdsp *hdsp)
 		hdsp->ss_in_channels = hdsp->ss_out_channels = H9652_SS_CHANNELS;
 		hdsp->ss_in_channels = hdsp->ss_out_channels = H9652_SS_CHANNELS;
 		hdsp->ds_in_channels = hdsp->ds_out_channels = H9652_DS_CHANNELS;
 		hdsp->ds_in_channels = hdsp->ds_out_channels = H9652_DS_CHANNELS;
 		break;
 		break;
-	
+
 	case H9632:
 	case H9632:
 		status = hdsp_read(hdsp, HDSP_statusRegister);
 		status = hdsp_read(hdsp, HDSP_statusRegister);
 		/* HDSP_AEBx bits are low when AEB are connected */
 		/* HDSP_AEBx bits are low when AEB are connected */
@@ -4815,7 +4839,7 @@ static void snd_hdsp_initialize_channels(struct hdsp *hdsp)
 		hdsp->ss_in_channels = hdsp->ss_out_channels = MULTIFACE_SS_CHANNELS;
 		hdsp->ss_in_channels = hdsp->ss_out_channels = MULTIFACE_SS_CHANNELS;
 		hdsp->ds_in_channels = hdsp->ds_out_channels = MULTIFACE_DS_CHANNELS;
 		hdsp->ds_in_channels = hdsp->ds_out_channels = MULTIFACE_DS_CHANNELS;
 		break;
 		break;
-		
+
 	default:
 	default:
  		/* should never get here */
  		/* should never get here */
 		break;
 		break;
@@ -4831,12 +4855,12 @@ static void snd_hdsp_initialize_midi_flush (struct hdsp *hdsp)
 static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp)
 static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp)
 {
 {
 	int err;
 	int err;
-	
+
 	if ((err = snd_hdsp_create_pcm(card, hdsp)) < 0) {
 	if ((err = snd_hdsp_create_pcm(card, hdsp)) < 0) {
 		snd_printk(KERN_ERR "Hammerfall-DSP: Error creating pcm interface\n");
 		snd_printk(KERN_ERR "Hammerfall-DSP: Error creating pcm interface\n");
 		return err;
 		return err;
 	}
 	}
-	
+
 
 
 	if ((err = snd_hdsp_create_midi(card, hdsp, 0)) < 0) {
 	if ((err = snd_hdsp_create_midi(card, hdsp, 0)) < 0) {
 		snd_printk(KERN_ERR "Hammerfall-DSP: Error creating first midi interface\n");
 		snd_printk(KERN_ERR "Hammerfall-DSP: Error creating first midi interface\n");
@@ -4867,19 +4891,19 @@ static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp
 		snd_printk(KERN_ERR "Hammerfall-DSP: Error setting default values\n");
 		snd_printk(KERN_ERR "Hammerfall-DSP: Error setting default values\n");
 		return err;
 		return err;
 	}
 	}
-	
+
 	if (!(hdsp->state & HDSP_InitializationComplete)) {
 	if (!(hdsp->state & HDSP_InitializationComplete)) {
 		strcpy(card->shortname, "Hammerfall DSP");
 		strcpy(card->shortname, "Hammerfall DSP");
-		sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name, 
+		sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name,
 			hdsp->port, hdsp->irq);
 			hdsp->port, hdsp->irq);
-	    
+
 		if ((err = snd_card_register(card)) < 0) {
 		if ((err = snd_card_register(card)) < 0) {
 			snd_printk(KERN_ERR "Hammerfall-DSP: error registering card\n");
 			snd_printk(KERN_ERR "Hammerfall-DSP: error registering card\n");
 			return err;
 			return err;
 		}
 		}
 		hdsp->state |= HDSP_InitializationComplete;
 		hdsp->state |= HDSP_InitializationComplete;
 	}
 	}
-	
+
 	return 0;
 	return 0;
 }
 }
 
 
@@ -4890,7 +4914,7 @@ static int hdsp_request_fw_loader(struct hdsp *hdsp)
 	const char *fwfile;
 	const char *fwfile;
 	const struct firmware *fw;
 	const struct firmware *fw;
 	int err;
 	int err;
-		
+
 	if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
 	if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
 		return 0;
 		return 0;
 	if (hdsp->io_type == Undefined) {
 	if (hdsp->io_type == Undefined) {
@@ -4899,7 +4923,7 @@ static int hdsp_request_fw_loader(struct hdsp *hdsp)
 		if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
 		if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
 			return 0;
 			return 0;
 	}
 	}
-	
+
 	/* caution: max length of firmware filename is 30! */
 	/* caution: max length of firmware filename is 30! */
 	switch (hdsp->io_type) {
 	switch (hdsp->io_type) {
 	case Multiface:
 	case Multiface:
@@ -4933,12 +4957,12 @@ static int hdsp_request_fw_loader(struct hdsp *hdsp)
 	memcpy(hdsp->firmware_cache, fw->data, sizeof(hdsp->firmware_cache));
 	memcpy(hdsp->firmware_cache, fw->data, sizeof(hdsp->firmware_cache));
 
 
 	release_firmware(fw);
 	release_firmware(fw);
-		
+
 	hdsp->state |= HDSP_FirmwareCached;
 	hdsp->state |= HDSP_FirmwareCached;
 
 
 	if ((err = snd_hdsp_load_firmware_from_cache(hdsp)) < 0)
 	if ((err = snd_hdsp_load_firmware_from_cache(hdsp)) < 0)
 		return err;
 		return err;
-		
+
 	if (!(hdsp->state & HDSP_InitializationComplete)) {
 	if (!(hdsp->state & HDSP_InitializationComplete)) {
 		if ((err = snd_hdsp_enable_io(hdsp)) < 0)
 		if ((err = snd_hdsp_enable_io(hdsp)) < 0)
 			return err;
 			return err;
@@ -4985,14 +5009,14 @@ static int __devinit snd_hdsp_create(struct snd_card *card,
 	hdsp->max_channels = 26;
 	hdsp->max_channels = 26;
 
 
 	hdsp->card = card;
 	hdsp->card = card;
-	
+
 	spin_lock_init(&hdsp->lock);
 	spin_lock_init(&hdsp->lock);
 
 
 	tasklet_init(&hdsp->midi_tasklet, hdsp_midi_tasklet, (unsigned long)hdsp);
 	tasklet_init(&hdsp->midi_tasklet, hdsp_midi_tasklet, (unsigned long)hdsp);
-	
+
 	pci_read_config_word(hdsp->pci, PCI_CLASS_REVISION, &hdsp->firmware_rev);
 	pci_read_config_word(hdsp->pci, PCI_CLASS_REVISION, &hdsp->firmware_rev);
 	hdsp->firmware_rev &= 0xff;
 	hdsp->firmware_rev &= 0xff;
-	
+
 	/* From Martin Bjoernsen :
 	/* From Martin Bjoernsen :
 	    "It is important that the card's latency timer register in
 	    "It is important that the card's latency timer register in
 	    the PCI configuration space is set to a value much larger
 	    the PCI configuration space is set to a value much larger
@@ -5001,7 +5025,7 @@ static int __devinit snd_hdsp_create(struct snd_card *card,
 	    to its maximum 255 to avoid problems with some computers."
 	    to its maximum 255 to avoid problems with some computers."
 	*/
 	*/
 	pci_write_config_byte(hdsp->pci, PCI_LATENCY_TIMER, 0xFF);
 	pci_write_config_byte(hdsp->pci, PCI_LATENCY_TIMER, 0xFF);
-	
+
 	strcpy(card->driver, "H-DSP");
 	strcpy(card->driver, "H-DSP");
 	strcpy(card->mixername, "Xilinx FPGA");
 	strcpy(card->mixername, "Xilinx FPGA");
 
 
@@ -5015,7 +5039,7 @@ static int __devinit snd_hdsp_create(struct snd_card *card,
 	} else {
 	} else {
 		hdsp->card_name = "RME HDSP 9632";
 		hdsp->card_name = "RME HDSP 9632";
 		hdsp->max_channels = 16;
 		hdsp->max_channels = 16;
-		is_9632 = 1;	
+		is_9632 = 1;
 	}
 	}
 
 
 	if ((err = pci_enable_device(pci)) < 0)
 	if ((err = pci_enable_device(pci)) < 0)
@@ -5044,12 +5068,12 @@ static int __devinit snd_hdsp_create(struct snd_card *card,
 
 
 	if ((err = snd_hdsp_initialize_memory(hdsp)) < 0)
 	if ((err = snd_hdsp_initialize_memory(hdsp)) < 0)
 		return err;
 		return err;
-	
+
 	if (!is_9652 && !is_9632) {
 	if (!is_9652 && !is_9632) {
-		/* we wait 2 seconds to let freshly inserted cardbus cards do their hardware init */
-		ssleep(2);
+		/* we wait a maximum of 10 seconds to let freshly
+		 * inserted cardbus cards do their hardware init */
+		err = hdsp_wait_for_iobox(hdsp, 1000, 10);
 
 
-		err = hdsp_check_for_iobox(hdsp);
 		if (err < 0)
 		if (err < 0)
 			return err;
 			return err;
 
 
@@ -5071,35 +5095,35 @@ static int __devinit snd_hdsp_create(struct snd_card *card,
 				return err;
 				return err;
 			return 0;
 			return 0;
 		} else {
 		} else {
-			snd_printk(KERN_INFO "Hammerfall-DSP: Firmware already present, initializing card.\n");	    
+			snd_printk(KERN_INFO "Hammerfall-DSP: Firmware already present, initializing card.\n");
 			if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1)
 			if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1)
 				hdsp->io_type = Multiface;
 				hdsp->io_type = Multiface;
-			else 
+			else
 				hdsp->io_type = Digiface;
 				hdsp->io_type = Digiface;
 		}
 		}
 	}
 	}
-	
+
 	if ((err = snd_hdsp_enable_io(hdsp)) != 0)
 	if ((err = snd_hdsp_enable_io(hdsp)) != 0)
 		return err;
 		return err;
-	
+
 	if (is_9652)
 	if (is_9652)
 	        hdsp->io_type = H9652;
 	        hdsp->io_type = H9652;
-	
+
 	if (is_9632)
 	if (is_9632)
 		hdsp->io_type = H9632;
 		hdsp->io_type = H9632;
 
 
 	if ((err = snd_hdsp_create_hwdep(card, hdsp)) < 0)
 	if ((err = snd_hdsp_create_hwdep(card, hdsp)) < 0)
 		return err;
 		return err;
-	
+
 	snd_hdsp_initialize_channels(hdsp);
 	snd_hdsp_initialize_channels(hdsp);
 	snd_hdsp_initialize_midi_flush(hdsp);
 	snd_hdsp_initialize_midi_flush(hdsp);
 
 
-	hdsp->state |= HDSP_FirmwareLoaded;	
+	hdsp->state |= HDSP_FirmwareLoaded;
 
 
 	if ((err = snd_hdsp_create_alsa_devices(card, hdsp)) < 0)
 	if ((err = snd_hdsp_create_alsa_devices(card, hdsp)) < 0)
 		return err;
 		return err;
 
 
-	return 0;	
+	return 0;
 }
 }
 
 
 static int snd_hdsp_free(struct hdsp *hdsp)
 static int snd_hdsp_free(struct hdsp *hdsp)
@@ -5115,13 +5139,13 @@ static int snd_hdsp_free(struct hdsp *hdsp)
 		free_irq(hdsp->irq, (void *)hdsp);
 		free_irq(hdsp->irq, (void *)hdsp);
 
 
 	snd_hdsp_free_buffers(hdsp);
 	snd_hdsp_free_buffers(hdsp);
-	
+
 	if (hdsp->iobase)
 	if (hdsp->iobase)
 		iounmap(hdsp->iobase);
 		iounmap(hdsp->iobase);
 
 
 	if (hdsp->port)
 	if (hdsp->port)
 		pci_release_regions(hdsp->pci);
 		pci_release_regions(hdsp->pci);
-		
+
 	pci_disable_device(hdsp->pci);
 	pci_disable_device(hdsp->pci);
 	return 0;
 	return 0;
 }
 }
@@ -5166,7 +5190,7 @@ static int __devinit snd_hdsp_probe(struct pci_dev *pci,
 	}
 	}
 
 
 	strcpy(card->shortname, "Hammerfall DSP");
 	strcpy(card->shortname, "Hammerfall DSP");
-	sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name, 
+	sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name,
 		hdsp->port, hdsp->irq);
 		hdsp->port, hdsp->irq);
 
 
 	if ((err = snd_card_register(card)) < 0) {
 	if ((err = snd_card_register(card)) < 0) {