int32_t target_gpio_port_init()

in RISC-V_RV32_THEAD_SMART_CDS/csi_driver/smartl_rv32/devices.c [165:224]


int32_t target_gpio_port_init(port_name_e port, uint32_t *base, uint32_t *irq, void **handler, uint32_t *pin_num)
{
    int i;

    for (i = 0; i < CONFIG_GPIO_NUM; i++) {
        if (sg_gpio_config[i].port == port) {
            if (base != NULL) {
                *base = sg_gpio_config[i].base;
            }

            if (irq != NULL) {
                *irq = sg_gpio_config[i].irq;
            }

            if (pin_num != NULL) {
                *pin_num = sg_gpio_config[i].pin_num;
            }

            if (handler != NULL) {
                switch (i) {
                    case 0:
                        *handler = (void *)GPIO0_IRQHandler;
                        break;

                    case 1:
                        *handler = (void *)GPIO1_IRQHandler;
                        break;

                    case 2:
                        *handler = (void *)GPIO2_IRQHandler;
                        break;

                    case 3:
                        *handler = (void *)GPIO3_IRQHandler;
                        break;

                    case 4:
                        *handler = (void *)GPIO4_IRQHandler;
                        break;

                    case 5:
                        *handler = (void *)GPIO5_IRQHandler;
                        break;

                    case 6:
                        *handler = (void *)GPIO6_IRQHandler;
                        break;

                    case 7:
                        *handler = (void *)GPIO7_IRQHandler;
                        break;
                }
            }

            return i;
        }
    }

    return -1;
}