summaryrefslogtreecommitdiffstats
path: root/quantum/matrix.c
diff options
context:
space:
mode:
authorTakeshi ISHII <2170248+mtei@users.noreply.github.com>2021-07-13 16:50:25 +0900
committerGitHub <noreply@github.com>2021-07-13 16:50:25 +0900
commitac2e6e01f155811d0e206298f0d7cadcc9234603 (patch)
treeee70abbdb373ef7e0802173a34bb91fc6d5fefbf /quantum/matrix.c
parenta62b10176e6781f3b2e176a681b2090998c6d157 (diff)
Change the prototype of matrix_output_unselect_delay() (#13045)
The prototype of matrix_output_unselect_delay() has been changed as follows. ```c void matrix_output_unselect_delay(uint8_t line, bool key_pressed); ``` Currently, no keyboard seems to be redefining `matrix_output_unselect_delay()`, so there is no change in the system behavior. With this change, the keyboard level code can get some optimization hints, for example, the following. ```c void matrix_output_unselect_delay(uint8_t line, bool key_pressed) { /* If none of the keys are pressed, * there is no need to wait for time for the next line. */ if (key_pressed) { #ifdef MATRIX_IO_DELAY # if MATRIX_IO_DELAY > 0 wait_us(MATRIX_IO_DELAY); # endif #else wait_us(30); #endif } } ```
Diffstat (limited to 'quantum/matrix.c')
-rw-r--r--quantum/matrix.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/quantum/matrix.c b/quantum/matrix.c
index 235b16769f..d22817bf48 100644
--- a/quantum/matrix.c
+++ b/quantum/matrix.c
@@ -182,7 +182,7 @@ __attribute__((weak)) void matrix_read_cols_on_row(matrix_row_t current_matrix[]
// Unselect row
unselect_row(current_row);
- matrix_output_unselect_delay(); // wait for all Col signals to go HIGH
+ matrix_output_unselect_delay(current_row, current_row_value != 0); // wait for all Col signals to go HIGH
// Update the matrix
current_matrix[current_row] = current_row_value;
@@ -222,6 +222,8 @@ __attribute__((weak)) void matrix_init_pins(void) {
}
__attribute__((weak)) void matrix_read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
+ bool key_pressed = false;
+
// Select col
if (!select_col(current_col)) { // select col
return; // skip NO_PIN col
@@ -234,6 +236,7 @@ __attribute__((weak)) void matrix_read_rows_on_col(matrix_row_t current_matrix[]
if (readMatrixPin(row_pins[row_index]) == 0) {
// Pin LO, set col bit
current_matrix[row_index] |= (MATRIX_ROW_SHIFTER << current_col);
+ key_pressed = true;
} else {
// Pin HI, clear col bit
current_matrix[row_index] &= ~(MATRIX_ROW_SHIFTER << current_col);
@@ -242,7 +245,7 @@ __attribute__((weak)) void matrix_read_rows_on_col(matrix_row_t current_matrix[]
// Unselect col
unselect_col(current_col);
- matrix_output_unselect_delay(); // wait for all Row signals to go HIGH
+ matrix_output_unselect_delay(current_col, key_pressed); // wait for all Row signals to go HIGH
}
# else