diff -u -r cx3110x-0.8.1.workx/src/sm_drv_spi.c cx3110x-0.8.1/src/sm_drv_spi.c
--- cx3110x-0.8.1.workx/src/sm_drv_spi.c	2007-10-15 14:56:20.000000000 +0300
+++ cx3110x-0.8.1/src/sm_drv_spi.c	2007-11-02 22:23:33.000000000 +0200
@@ -99,10 +99,10 @@
 	struct net_local *lp = dev->priv;
 	uint32_t host_ints, host_ints_ack, target_ints;
 	unsigned long timeout;
-	int result;
+	int result, pass = 1;
 	
 	DEBUG(DBG_BH, "w\n");
-	
+again:;	
 	/* Here we wake the target up */
 	target_ints = SPI_TARGET_INT_WAKEUP; 
 	sm_spi_write(dev, SPI_ADRS_ARM_INTERRUPTS,
@@ -117,6 +117,12 @@
 		if (time_after(jiffies, timeout)) {
 			printk(KERN_WARNING "We haven't got a READY interrupt"
 			       " from WAKEUP. (firmware crashed?)\n");
+            if (pass == 1) {
+    			printk(KERN_WARNING "Try again...\n");
+                pass = 2;
+                goto again;
+            }
+                   
 			lp->device_state = DEVSTATE_DEAD;
 			result = -1;
 			goto exit;
@@ -132,6 +138,10 @@
 
 	result = 0;
 	
+    if (pass == 2) {
+    	printk(KERN_WARNING "succeeded!!!\n");
+    }
+
 exit:
 	DEBUG(DBG_BH, "W\n");
 	return result;
