*
  * This code is GPL
  *
- * $Id: cfi_cmdset_0002.c,v 1.120 2005/07/20 21:01:13 tpoynor Exp $
+ * $Id: cfi_cmdset_0002.c,v 1.121 2005/11/07 09:00:01 gleixner Exp $
  *
  */
 
                        continue;
                }
 
-               if (chip_ready(map, adr))
-                       break;
-
-               if (time_after(jiffies, timeo)) {
+               if (time_after(jiffies, timeo) && !chip_ready(map, adr)){
                        xip_enable(map, chip, adr);
                        printk(KERN_WARNING "MTD %s(): software timeout\n", __func__);
                        xip_disable(map, chip, adr);
-                        break;
+                       break;
                }
 
+               if (chip_ready(map, adr))
+                       break;
+
                /* Latency issues. Drop the lock, wait a while and retry */
                UDELAY(map, chip, adr, 1);
        }
                        continue;
                }
 
+               if (time_after(jiffies, timeo) && !chip_ready(map, adr))
+                       break;
+
                if (chip_ready(map, adr)) {
                        xip_enable(map, chip, adr);
                        goto op_done;
                }
-                   
-               if( time_after(jiffies, timeo))
-                       break;
 
                /* Latency issues. Drop the lock, wait a while and retry */
                UDELAY(map, chip, adr, 1);