/* * Copyright (c) 2021 Telink Semiconductor * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_B91_PINCTRL_COMMON_H_ #define ZEPHYR_B91_PINCTRL_COMMON_H_ /* IDs for GPIO functions */ #define B91_FUNC_A 0x00 #define B91_FUNC_B 0x01 #define B91_FUNC_C 0x02 /* IDs for GPIO Ports */ #define B91_PORT_A 0x00 #define B91_PORT_B 0x01 #define B91_PORT_C 0x02 #define B91_PORT_D 0x03 #define B91_PORT_E 0x04 /* IDs for GPIO Pins */ #define B91_PIN_0 0x01 #define B91_PIN_1 0x02 #define B91_PIN_2 0x04 #define B91_PIN_3 0x08 #define B91_PIN_4 0x10 #define B91_PIN_5 0x20 #define B91_PIN_6 0x40 #define B91_PIN_7 0x80 /* B91 pinctrl pull-up/down */ #define B91_PULL_NONE 0 #define B91_PULL_DOWN 2 #define B91_PULL_UP 3 /* Pin function positions */ #define B91_PIN_0_FUNC_POS 0x00 #define B91_PIN_1_FUNC_POS 0x02 #define B91_PIN_2_FUNC_POS 0x04 #define B91_PIN_3_FUNC_POS 0x06 #define B91_PIN_4_FUNC_POS 0x00 #define B91_PIN_5_FUNC_POS 0x02 #define B91_PIN_6_FUNC_POS 0x04 #define B91_PIN_7_FUNC_POS 0x06 /* B91 pin configuration bit field positions and masks */ #define B91_PULL_POS 19 #define B91_PULL_MSK 0x3 #define B91_FUNC_POS 16 #define B91_FUNC_MSK 0x3 #define B91_PORT_POS 8 #define B91_PORT_MSK 0xFF #define B91_PIN_POS 0 #define B91_PIN_MSK 0xFFFF #define B91_PIN_ID_MSK 0xFF /* Setters and getters */ #define B91_PINMUX_SET(port, pin, func) ((func << B91_FUNC_POS) | \ (port << B91_PORT_POS) | \ (pin << B91_PIN_POS)) #define B91_PINMUX_GET_PULL(pinmux) ((pinmux >> B91_PULL_POS) & B91_PULL_MSK) #define B91_PINMUX_GET_FUNC(pinmux) ((pinmux >> B91_FUNC_POS) & B91_FUNC_MSK) #define B91_PINMUX_GET_PIN(pinmux) ((pinmux >> B91_PIN_POS) & B91_PIN_MSK) #define B91_PINMUX_GET_PIN_ID(pinmux) ((pinmux >> B91_PIN_POS) & B91_PIN_ID_MSK) #endif /* ZEPHYR_B91_PINCTRL_COMMON_H_ */