- /*
- * Populate WAVEDATA.
- *
- * This is the basic algorithm implemented in our GPIF state machine:
- *
- * State 0: NDP: Sample the FIFO data bus.
- * State 1: DP: If EP2 is full, go to state 7 (the IDLE state), i.e.,
- * end the current waveform. Otherwise, go to state 0 again,
- * i.e., sample data until EP2 is full.
- * State 2: Unused.
- * State 3: Unused.
- * State 4: Unused.
- * State 5: Unused.
- * State 6: Unused.
- */
+ /* 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, 0x00, 0x40);
+ gpif_make_delay_state(pSTATE++, delay_1, 0x00, 0x46);
+ } 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, 0x00);