diff options
author | Takeshi ISHII <2170248+mtei@users.noreply.github.com> | 2021-01-13 10:46:22 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-13 12:46:22 +1100 |
commit | 302b35c2a0ac90208e523944e8cc4b44a793d8d5 (patch) | |
tree | 473bf6d47b42125027fde59c409971b0b1c925c6 /quantum/matrix.c | |
parent | 017aa5988af308ae6d585b4afea6f28c28e2d238 (diff) | |
download | qmk_firmware-302b35c2a0ac90208e523944e8cc4b44a793d8d5.tar.gz qmk_firmware-302b35c2a0ac90208e523944e8cc4b44a793d8d5.zip |
fix matrix_io_delay() timing in quantum/matrix.c (#9603)
* fix matrix_io_delay() timing in quantum/matrix.c
* Updated comments explaining the need for matrix_io_delay() in quantum/matrix.c
* fix matrix_io_delay() timing in quantum/split_common/matrix.c
* Update quantum/matrix.c
Co-authored-by: Ryan <fauxpark@gmail.com>
* Update quantum/split_common/matrix.c
Co-authored-by: Ryan <fauxpark@gmail.com>
* Update quantum/matrix.c
Co-authored-by: Ryan <fauxpark@gmail.com>
* Update quantum/split_common/matrix.c
Co-authored-by: Ryan <fauxpark@gmail.com>
* add waitOutputPinValid() and wait_cpuclock() into quantum/quantum.h and tmk_core/common/wait.h
* add matrix_output_select_delay() and matrix_output_unselect_delay()
* fix quantum/matrix_common.c, tmk_core/common/matrix.h
* fix tmk_core/common/wait.h
* fix quantum/quantum.h, tmk_core/common/wait.h
* waitOutputPinValid() rename to waitInputPinDelay() in quantum/quantum.h.
* waitOutputPinValid() rename to waitInputPinDelay() in quantum/matrix_common.c
* update tmk_core/common/wait.h
* update comment in quantum/matrix.c, quantum/split_common/matrix.c
* update quantum/quantum.h: Make more margin in the GPIO_INPUT_PIN_DELAY default value.
Co-authored-by: Ryan <fauxpark@gmail.com>
Diffstat (limited to 'quantum/matrix.c')
-rw-r--r-- | quantum/matrix.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/quantum/matrix.c b/quantum/matrix.c index 9083ff386..c027b7bf2 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c | |||
@@ -101,9 +101,9 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) | |||
101 | // Start with a clear matrix row | 101 | // Start with a clear matrix row |
102 | matrix_row_t current_row_value = 0; | 102 | matrix_row_t current_row_value = 0; |
103 | 103 | ||
104 | // Select row and wait for row selecton to stabilize | 104 | // Select row |
105 | select_row(current_row); | 105 | select_row(current_row); |
106 | matrix_io_delay(); | 106 | matrix_output_select_delay(); |
107 | 107 | ||
108 | // For each col... | 108 | // For each col... |
109 | for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) { | 109 | for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) { |
@@ -116,6 +116,9 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) | |||
116 | 116 | ||
117 | // Unselect row | 117 | // Unselect row |
118 | unselect_row(current_row); | 118 | unselect_row(current_row); |
119 | if (current_row + 1 < MATRIX_ROWS) { | ||
120 | matrix_output_unselect_delay(); // wait for row signal to go HIGH | ||
121 | } | ||
119 | 122 | ||
120 | // If the row has changed, store the row and return the changed flag. | 123 | // If the row has changed, store the row and return the changed flag. |
121 | if (current_matrix[current_row] != current_row_value) { | 124 | if (current_matrix[current_row] != current_row_value) { |
@@ -147,9 +150,9 @@ static void init_pins(void) { | |||
147 | static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) { | 150 | static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) { |
148 | bool matrix_changed = false; | 151 | bool matrix_changed = false; |
149 | 152 | ||
150 | // Select col and wait for col selecton to stabilize | 153 | // Select col |
151 | select_col(current_col); | 154 | select_col(current_col); |
152 | matrix_io_delay(); | 155 | matrix_output_select_delay(); |
153 | 156 | ||
154 | // For each row... | 157 | // For each row... |
155 | for (uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) { | 158 | for (uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) { |
@@ -175,6 +178,9 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) | |||
175 | 178 | ||
176 | // Unselect col | 179 | // Unselect col |
177 | unselect_col(current_col); | 180 | unselect_col(current_col); |
181 | if (current_col + 1 < MATRIX_COLS) { | ||
182 | matrix_output_unselect_delay(); // wait for col signal to go HIGH | ||
183 | } | ||
178 | 184 | ||
179 | return matrix_changed; | 185 | return matrix_changed; |
180 | } | 186 | } |