- /* We need a pulse where the CTL2 pin alternates 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;
-
- gpif_make_delay_state(pSTATE++, delay_2, 0x40);
- gpif_make_delay_state(pSTATE++, delay_1, 0x46);
+ if (cmd->flags & CMD_START_FLAGS_CLK_CTL2) {
+ uint8_t delay_1, delay_2 = cmd->sample_delay_l;
+
+ /* We need a pulse where the CTL1/2 pins 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);
+ }
+
+ /* sample_delay_l is always != 0 for the supported rates. */
+ gpif_make_delay_state(pSTATE++, delay_2, 0x00);