1 /* 2 * Copyright 2025 Arm Limited and/or its affiliates <open-source-office@arm.com> 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #include "zephyr/device.h" 8 #include "zephyr/drivers/gpio.h" 9 #include <zephyr/drivers/pinctrl.h> 10 #include <zephyr/devicetree/gpio.h> 11 #include <zephyr/drivers/gpio/gpio_cmsdk_ahb.h> 12 13 static const struct device *const gpio_ports[] = {DEVICE_DT_GET_OR_NULL(DT_NODELABEL(gpio0)), 14 DEVICE_DT_GET_OR_NULL(DT_NODELABEL(gpio1)), 15 DEVICE_DT_GET_OR_NULL(DT_NODELABEL(gpio2))}; 16 pinctrl_configure_pin(const pinctrl_soc_pin_t * pin)17static int pinctrl_configure_pin(const pinctrl_soc_pin_t *pin) 18 { 19 uint32_t flags = pin->input_enable ? GPIO_INPUT : GPIO_OUTPUT; 20 21 /* Each gpio has 16 pins, so divide by 16 to get specific gpio*/ 22 const struct device *gpio_dev = gpio_ports[pin->pin_num >> 4]; 23 24 return cmsdk_ahb_gpio_config(gpio_dev, pin->pin_num % 16, flags); 25 } 26 pinctrl_configure_pins(const pinctrl_soc_pin_t * pins,uint8_t pin_cnt,uintptr_t reg)27int pinctrl_configure_pins(const pinctrl_soc_pin_t *pins, uint8_t pin_cnt, uintptr_t reg) 28 { 29 ARG_UNUSED(reg); 30 for (uint8_t i = 0U; i < pin_cnt; i++) { 31 if (pinctrl_configure_pin(pins++) == -ENOTSUP) { 32 return -ENOTSUP; 33 } 34 } 35 36 return 0; 37 } 38