summary refs log tree commit diff
path: root/quantum/split_common
diff options
context:
space:
mode:
authorMichael Stapelberg <stapelberg@users.noreply.github.com>2021-05-19 22:43:36 +0200
committerGitHub <noreply@github.com>2021-05-20 06:43:36 +1000
commit82aa9ad4a567695d1f7d0b1e36bf8563d2967813 (patch)
tree4f27b34928fb3ddbfaf0af8cde0ce701721bd624 /quantum/split_common
parent068af97b7aac1fc787b5e9fb76d9250d48638e58 (diff)
matrix: wait for row signal to go HIGH for every row (#12945)
I noticed this discrepancy (last row of the matrix treated differently than the
others) when optimizing the input latency of my keyboard controller, see also
https://michael.stapelberg.ch/posts/2021-05-08-keyboard-input-latency-qmk-kinesis/

Before this commit, when tuning the delays I noticed ghost key presses when
pressing the F2 key, which is on the last row of the keyboard matrix: the
dead_grave key, which is on the first row of the keyboard matrix, would be
incorrectly detected as pressed.

After this commit, all keyboard matrix rows are interpreted correctly.

I suspect that my setup is more susceptible to this nuance than others because I
use GPIO_INPUT_PIN_DELAY=0 and hence don’t have another delay that might mask
the problem.
Diffstat (limited to 'quantum/split_common')
-rw-r--r--quantum/split_common/matrix.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/quantum/split_common/matrix.c b/quantum/split_common/matrix.c
index f8de17809d..039e7d9773 100644
--- a/quantum/split_common/matrix.c
+++ b/quantum/split_common/matrix.c
@@ -130,9 +130,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
 
     // Unselect row
     unselect_row(current_row);
-    if (current_row + 1 < MATRIX_ROWS) {
-        matrix_output_unselect_delay();  // wait for row signal to go HIGH
-    }
+    matrix_output_unselect_delay();  // wait for all Col signals to go HIGH
 
     // If the row has changed, store the row and return the changed flag.
     if (current_matrix[current_row] != current_row_value) {
@@ -192,9 +190,7 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
 
     // Unselect col
     unselect_col(current_col);
-    if (current_col + 1 < MATRIX_COLS) {
-        matrix_output_unselect_delay();  // wait for col signal to go HIGH
-    }
+    matrix_output_unselect_delay();  // wait for all Row signals to go HIGH
 
     return matrix_changed;
 }