Загрузка данных


	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? Или надо всё переделывать?