if (bri->prepare_recovery)
                bri->prepare_recovery(adap);
 
+       /*
+        * If we can set SDA, we will always create a STOP to ensure additional
+        * pulses will do no harm. This is achieved by letting SDA follow SCL
+        * half a cycle later. Check the 'incomplete_write_byte' fault injector
+        * for details.
+        */
        bri->set_scl(adap, scl);
+       ndelay(RECOVERY_NDELAY / 2);
        if (bri->set_sda)
-               bri->set_sda(adap, 1);
-       ndelay(RECOVERY_NDELAY);
+               bri->set_sda(adap, scl);
+       ndelay(RECOVERY_NDELAY / 2);
 
        /*
         * By this time SCL is high, as we need to give 9 falling-rising edges
 
                scl = !scl;
                bri->set_scl(adap, scl);
-
-               /*
-                * If we can set SDA, we will always create STOP here to ensure
-                * the additional pulses will do no harm. This is achieved by
-                * letting SDA follow SCL half a cycle later. Check the
-                * 'incomplete_write_byte' fault injector for details.
-                */
+               /* Creating STOP again, see above */
                ndelay(RECOVERY_NDELAY / 2);
                if (bri->set_sda)
                        bri->set_sda(adap, scl);