| /* | 
 |  * Copyright (c) 2023 Nordic Semiconductor ASA | 
 |  * SPDX-License-Identifier: Apache-2.0 | 
 |  */ | 
 |  | 
 | #define DT_DRV_COMPAT ti_cc32xx_pinctrl | 
 |  | 
 | #include <zephyr/arch/cpu.h> | 
 | #include <zephyr/devicetree.h> | 
 | #include <zephyr/drivers/pinctrl.h> | 
 | #include <zephyr/dt-bindings/pinctrl/ti-cc32xx-pinctrl.h> | 
 |  | 
 | #define MEM_GPIO_PAD_CONFIG_MSK 0xFFFU | 
 |  | 
 | /* pin to pad mapping (255 indicates invalid pin) */ | 
 | static const uint8_t pin2pad[] = { | 
 | 	10U,  11U,  12U,  13U,  14U,  15U,  16U,  17U,  255U, 255U, 18U,  19U,  20U, | 
 | 	21U,  22U,  23U,  24U,  40U,  28U,  29U,  25U,  255U, 255U, 255U, 255U, 255U, | 
 | 	255U, 255U, 26U,  27U,  255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, | 
 | 	255U, 255U, 255U, 255U, 255U, 31U,  255U, 255U, 255U, 255U, 0U,   255U, 32U, | 
 | 	30U,  255U, 1U,   255U, 2U,   3U,   4U,   5U,   6U,   7U,   8U,   9U, | 
 | }; | 
 |  | 
 | static int pinctrl_configure_pin(pinctrl_soc_pin_t pincfg) | 
 | { | 
 | 	uint8_t pin; | 
 |  | 
 | 	pin = (pincfg >> TI_CC32XX_PIN_POS) & TI_CC32XX_PIN_MSK; | 
 | 	if ((pin >= ARRAY_SIZE(pin2pad)) || (pin2pad[pin] == 255U)) { | 
 | 		return -EINVAL; | 
 | 	} | 
 |  | 
 | 	sys_write32(pincfg & MEM_GPIO_PAD_CONFIG_MSK, DT_INST_REG_ADDR(0) + (pin2pad[pin] << 2U)); | 
 |  | 
 | 	return 0; | 
 | } | 
 |  | 
 | int pinctrl_configure_pins(const pinctrl_soc_pin_t *pins, uint8_t pin_cnt, uintptr_t reg) | 
 | { | 
 | 	ARG_UNUSED(reg); | 
 |  | 
 | 	for (uint8_t i = 0U; i < pin_cnt; i++) { | 
 | 		int ret; | 
 |  | 
 | 		ret = pinctrl_configure_pin(pins[i]); | 
 | 		if (ret < 0) { | 
 | 			return ret; | 
 | 		} | 
 | 	} | 
 |  | 
 | 	return 0; | 
 | } |