Загрузка данных
kbd_matrix: kbd-matrix {
compatible = "gpio-kbd-matrix";
row-gpios = <&gpio1 26 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>,
<&gpio1 27 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>,
<&gpio1 20 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>,
<&gpio1 21 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
col-gpios = <&gpio1 23 GPIO_ACTIVE_LOW>,
<&gpio1 22 GPIO_ACTIVE_LOW>,
<&gpio1 18 GPIO_ACTIVE_LOW>,
<&gpio3 13 GPIO_ACTIVE_LOW>;
keymap {
compatible = "input-keymap";
keymap = <
MATRIX_KEY(0, 0, INPUT_KEY_1)
MATRIX_KEY(0, 1, INPUT_KEY_2)
MATRIX_KEY(0, 2, INPUT_KEY_3)
MATRIX_KEY(0, 3, INPUT_KEY_A)
MATRIX_KEY(1, 0, INPUT_KEY_4)
MATRIX_KEY(1, 1, INPUT_KEY_5)
MATRIX_KEY(1, 2, INPUT_KEY_6)
MATRIX_KEY(1, 3, INPUT_KEY_B)
MATRIX_KEY(2, 0, INPUT_KEY_7)
MATRIX_KEY(2, 1, INPUT_KEY_8)
MATRIX_KEY(2, 2, INPUT_KEY_9)
MATRIX_KEY(2, 3, INPUT_KEY_C)
MATRIX_KEY(3, 0, INPUT_KEY_DOT)
MATRIX_KEY(3, 1, INPUT_KEY_0)
MATRIX_KEY(3, 2, INPUT_KEY_T)
MATRIX_KEY(3, 3, INPUT_KEY_D)
>;
row-size = <4>;
col-size = <4>;
};
};
/* Input callback */
static void input_gpio_kbd_matrix_cb(struct input_event *evt)
{
/* Filter for EV_KEY only (type = EV_KEY) */
if (evt->type == INPUT_EV_KEY) {
if (evt->value) {
switch (evt->code) {
case INPUT_KEY_0:
input_gpio_kbd_enter_num('0');
break;
case INPUT_KEY_1:
input_gpio_kbd_enter_num('1');
break;
case INPUT_KEY_2:
input_gpio_kbd_enter_num('2');
break;
case INPUT_KEY_3:
input_gpio_kbd_enter_num('3');
break;
case INPUT_KEY_4:
input_gpio_kbd_enter_num('4');
break;
case INPUT_KEY_5:
input_gpio_kbd_enter_num('5');
break;
case INPUT_KEY_6:
input_gpio_kbd_enter_num('6');
break;
case INPUT_KEY_7:
input_gpio_kbd_enter_num('7');
break;
case INPUT_KEY_8:
input_gpio_kbd_enter_num('8');
break;
case INPUT_KEY_9:
input_gpio_kbd_enter_num('9');
break;
case INPUT_KEY_A:
input_gpio_kbd_delete_symb();
break;
case INPUT_KEY_B:
printf("Pressed: B\n");
break;
case INPUT_KEY_C:
printf("Pressed: C\n");
break;
case INPUT_KEY_D:
printf("Pressed: D\n");
break;
case INPUT_KEY_DOT:
printf("Pressed: *\n");
kbd_mode = KBD_MODE_CALL;
break;
case INPUT_KEY_T:
printf("Pressed: #\n");
memset(kbd_mass, 0, KBD_MASS_MAX);
kbd_mass_index = 0;
kbd_last_symb = 0;
kbd_mode = KBD_MODE_HANGUP;
break;
}
}
}
}
/* Register input callback */
INPUT_CALLBACK_DEFINE(NULL, input_gpio_kbd_matrix_cb, NULL);
Можно ли как-то завязаться на kbd_matrix? Или надо всё переделывать?