The current code follows the spec but uses an overlong delay. This would
be great if the hardware did. Several vendors however forget the D7
pulldown. Fortunately 0xFF isnt a sane reset state so we can use it to
skip detection as is done in drivers/ide. (ie this is a tested solution
over a long time)
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
         * status is checked.  Because waiting for "a while" before
         * checking status is fine, post SRST, we perform this magic
         * delay here as well.
+        *
+        * Old drivers/ide uses the 2mS rule and then waits for ready
         */
        msleep(150);
 
+       
+       /* Before we perform post reset processing we want to see if 
+          the bus shows 0xFF because the odd clown forgets the D7 pulldown
+          resistor */
+       
+       if (ata_check_status(ap) == 0xFF)
+               return 1;       /* Positive is failure for some reason */
+
        ata_bus_post_reset(ap, devmask);
 
        return 0;