void gpio_init()

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");
			}
		}
	}
}