bmGSTATE | bmIFGPIF;
}
+ /* Populate delay states */
+ if ((cmd->sample_delay_h == 0 && cmd->sample_delay_l == 0) ||
+ cmd->sample_delay_h >= 6)
+ return false;
+
if (cmd->flags & CMD_START_FLAGS_CLK_CTL2) {
- uint8_t delay_1, delay_2;
+ uint8_t delay_1, delay_2 = cmd->sample_delay_l;
/* We need a pulse where the CTL1 and CTL2 pins
- * alternate states. */
-
- /* Make the low pulse shorter then the high pulse. */
- delay_2 = cmd->sample_delay_l >> 2;
- /* Work around >12MHz case resulting in a 0 delay low pulse. */
- if (delay_2 == 0)
- delay_2 = 1;
- delay_1 = cmd->sample_delay_l - delay_2;
-
+ * alternate states */
+ if (cmd->sample_delay_h) {
+ for (i = 0; i < cmd->sample_delay_h; i++)
+ gpif_make_delay_state(pSTATE++, 0, 0x06);
+ } else {
+ delay_1 = delay_2 / 2;
+ delay_2 -= delay_1;
+ gpif_make_delay_state(pSTATE++, delay_1, 0x06);
+ }
+
+ /* cmd->sample_delay_l is always non-zero for the
+ * supported rates */
gpif_make_delay_state(pSTATE++, delay_2, 0x00);
- gpif_make_delay_state(pSTATE++, delay_1, 0x06);
} else {
- /* Populate delay states. */
- if ((cmd->sample_delay_h == 0 && cmd->sample_delay_l == 0) ||
- cmd->sample_delay_h >= 6)
- return false;
-
for (i = 0; i < cmd->sample_delay_h; i++)
gpif_make_delay_state(pSTATE++, 0, 0x00);