1 /* 2 * Copyright (c) 2021 Telink Semiconductor 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_B91_PINCTRL_COMMON_H_ 8 #define ZEPHYR_B91_PINCTRL_COMMON_H_ 9 10 /* IDs for GPIO functions */ 11 12 #define B91_FUNC_A 0x00 13 #define B91_FUNC_B 0x01 14 #define B91_FUNC_C 0x02 15 16 /* IDs for GPIO Ports */ 17 18 #define B91_PORT_A 0x00 19 #define B91_PORT_B 0x01 20 #define B91_PORT_C 0x02 21 #define B91_PORT_D 0x03 22 #define B91_PORT_E 0x04 23 24 /* IDs for GPIO Pins */ 25 26 #define B91_PIN_0 0x01 27 #define B91_PIN_1 0x02 28 #define B91_PIN_2 0x04 29 #define B91_PIN_3 0x08 30 #define B91_PIN_4 0x10 31 #define B91_PIN_5 0x20 32 #define B91_PIN_6 0x40 33 #define B91_PIN_7 0x80 34 35 /* B91 pinctrl pull-up/down */ 36 37 #define B91_PULL_NONE 0 38 #define B91_PULL_DOWN 2 39 #define B91_PULL_UP 3 40 41 /* Pin function positions */ 42 43 #define B91_PIN_0_FUNC_POS 0x00 44 #define B91_PIN_1_FUNC_POS 0x02 45 #define B91_PIN_2_FUNC_POS 0x04 46 #define B91_PIN_3_FUNC_POS 0x06 47 #define B91_PIN_4_FUNC_POS 0x00 48 #define B91_PIN_5_FUNC_POS 0x02 49 #define B91_PIN_6_FUNC_POS 0x04 50 #define B91_PIN_7_FUNC_POS 0x06 51 52 /* B91 pin configuration bit field positions and masks */ 53 54 #define B91_PULL_POS 19 55 #define B91_PULL_MSK 0x3 56 #define B91_FUNC_POS 16 57 #define B91_FUNC_MSK 0x3 58 #define B91_PORT_POS 8 59 #define B91_PORT_MSK 0xFF 60 #define B91_PIN_POS 0 61 #define B91_PIN_MSK 0xFFFF 62 #define B91_PIN_ID_MSK 0xFF 63 64 /* Setters and getters */ 65 66 #define B91_PINMUX_SET(port, pin, func) ((func << B91_FUNC_POS) | \ 67 (port << B91_PORT_POS) | \ 68 (pin << B91_PIN_POS)) 69 #define B91_PINMUX_GET_PULL(pinmux) ((pinmux >> B91_PULL_POS) & B91_PULL_MSK) 70 #define B91_PINMUX_GET_FUNC(pinmux) ((pinmux >> B91_FUNC_POS) & B91_FUNC_MSK) 71 #define B91_PINMUX_GET_PIN(pinmux) ((pinmux >> B91_PIN_POS) & B91_PIN_MSK) 72 #define B91_PINMUX_GET_PIN_ID(pinmux) ((pinmux >> B91_PIN_POS) & B91_PIN_ID_MSK) 73 74 #endif /* ZEPHYR_B91_PINCTRL_COMMON_H_ */ 75