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


// inst — это индекс устройства (например, 0). 
// DT_INST_CHILD(inst, input_keymap) получает внутренний ID дочернего узла input_keymap.
#define CH455G_KEYMAP_INIT(inst) \
    static const uint16_t ch455g_keymap_##inst[] = \
        DT_PROP(DT_INST_CHILD(inst, input_keymap), keymap);

DT_INST_FOREACH_STATUS_OKAY(CH455G_KEYMAP_INIT)

#define CH455G_KBD_DEVICE(inst)                                            \
    static const struct ch455g_config ch455g_cfg_##inst = {                \
        .i2c = I2C_DT_SPEC_GET(DT_DRV_INST(inst)),                         \
        .int_gpio = GPIO_DT_SPEC_GET(DT_DRV_INST(inst), int_gpios),        \
    };                                                                     \
    static struct ch455g_data ch455g_data_##inst = {                       \
        .keymap = (uint16_t *)ch455g_keymap_##inst,                        \
        .keymap_size = ARRAY_SIZE(ch455g_keymap_##inst),                   \
    };                                                                     \
    DEVICE_DT_INST_DEFINE(inst, ch455g_kbd_init, NULL,                     \
                          &ch455g_data_##inst, &ch455g_cfg_##inst,         \
                          POST_KERNEL, CONFIG_APPLICATION_INIT_PRIORITY, NULL);

DT_INST_FOREACH_STATUS_OKAY(CH455G_KBD_DEVICE)