in common/util/hal_gpio.c [185:225]
void gpio_init(void)
{
uint8_t i;
pal_load_gpio_config();
init_gpio_dev();
gpio_index_to_num();
// gpio init is much earily than main init seq
// set boot source here to skip gpio init for latched gpios
set_boot_source();
k_work_queue_start(&gpio_work_queue, gpio_work_stack, STACK_SIZE,
K_PRIO_PREEMPT(CONFIG_MAIN_THREAD_PRIORITY), NULL);
k_thread_name_set(&gpio_work_queue.thread, "gpio_workq");
for (i = 0; i < total_gpio_num; i++) {
if (gpio_cfg[i].is_init == ENABLE) {
if (gpio_cfg[i].is_latch == ENABLE && !get_boot_source_ACon()) {
continue;
}
if (gpio_cfg[i].chip == chip_gpio) {
gpio_set(gpio_cfg[i].number, gpio_cfg[i].status);
if (gpio_cfg[i].property ==
PUSH_PULL) { // OD config is set during status set
gpio_conf(gpio_cfg[i].number, gpio_cfg[i].direction);
}
gpio_set(gpio_cfg[i].number, gpio_cfg[i].status);
if ((gpio_cfg[i].int_type == GPIO_INT_EDGE_RISING) ||
(gpio_cfg[i].int_type == GPIO_INT_EDGE_FALLING) ||
(gpio_cfg[i].int_type == GPIO_INT_EDGE_BOTH) ||
(gpio_cfg[i].int_type == GPIO_INT_LEVEL_LOW) ||
(gpio_cfg[i].int_type == GPIO_INT_LEVEL_HIGH)) {
gpio_cb_irq_init(gpio_cfg[i].number, gpio_cfg[i].int_type);
}
} else {
printf("TODO: add sgpio handler\n");
}
}
}
}