1 /* 2 * Copyright (c) 2021 Teslabs Engineering S.L. 3 * SPDX-License-Identifier: Apache-2.0 4 */ 5 6 #ifndef DT_BINDINGS_PINCTRL_GD32_AF_H_ 7 #define DT_BINDINGS_PINCTRL_GD32_AF_H_ 8 9 /** 10 * @name GD32 AFs 11 * @{ 12 */ 13 14 /** AF0 */ 15 #define GD32_AF0 0U 16 /** AF1 */ 17 #define GD32_AF1 1U 18 /** AF2 */ 19 #define GD32_AF2 2U 20 /** AF3 */ 21 #define GD32_AF3 3U 22 /** AF4 */ 23 #define GD32_AF4 4U 24 /** AF5 */ 25 #define GD32_AF5 5U 26 /** AF6 */ 27 #define GD32_AF6 6U 28 /** AF7 */ 29 #define GD32_AF7 7U 30 /** AF8 */ 31 #define GD32_AF8 8U 32 /** AF9 */ 33 #define GD32_AF9 9U 34 /** AF10 */ 35 #define GD32_AF10 10U 36 /** AF11 */ 37 #define GD32_AF11 11U 38 /** AF12 */ 39 #define GD32_AF12 12U 40 /** AF13 */ 41 #define GD32_AF13 13U 42 /** AF14 */ 43 #define GD32_AF14 14U 44 /** AF15 */ 45 #define GD32_AF15 15U 46 /** ANALOG */ 47 #define GD32_ANALOG 16U 48 49 /** @} */ 50 51 /** 52 * @name GD32 pinmux bit field mask and positions. 53 * @{ 54 */ 55 56 /** Port field mask. */ 57 #define GD32_PORT_MSK 0xFU 58 /** Port field position. */ 59 #define GD32_PORT_POS 0U 60 /** Pin field mask. */ 61 #define GD32_PIN_MSK 0xFU 62 /** Pin field position. */ 63 #define GD32_PIN_POS 4U 64 /** AF field mask. */ 65 #define GD32_AF_MSK 0x1FU 66 /** AF field position. */ 67 #define GD32_AF_POS 8U 68 69 /** @} */ 70 71 /** 72 * Obtain port field from pinmux configuration. 73 * 74 * @param pinmux Pinmux bit field value. 75 */ 76 #define GD32_PORT_GET(pinmux) \ 77 (((pinmux) >> GD32_PORT_POS) & GD32_PORT_MSK) 78 79 /** 80 * Obtain pin field from pinmux configuration. 81 * 82 * @param pinmux Pinmux bit field value. 83 */ 84 #define GD32_PIN_GET(pinmux) \ 85 (((pinmux) >> GD32_PIN_POS) & GD32_PIN_MSK) 86 87 /** 88 * Obtain AF field from pinmux configuration. 89 * 90 * @param pinmux Pinmux bit field value. 91 */ 92 #define GD32_AF_GET(pinmux) \ 93 (((pinmux) >> GD32_AF_POS) & GD32_AF_MSK) 94 95 /** 96 * @brief Remap configuration bit field. 97 * 98 * Fields: 99 * 100 * - 0..3: port 101 * - 4..7: pin 102 * - 8..12: af 103 * 104 * @param port Port ('A'..'P') 105 * @param pin Pin (0..15) 106 * @param af Alternate function (ANALOG, AFx, x=0..15). 107 */ 108 #define GD32_PINMUX_AF(port, pin, af) \ 109 (((((port) - 'A') & GD32_PORT_MSK) << GD32_PORT_POS) | \ 110 (((pin) & GD32_PIN_MSK) << GD32_PIN_POS) | \ 111 (((GD32_ ## af) & GD32_AF_MSK) << GD32_AF_POS)) 112 113 #endif /* DT_BINDINGS_PINCTRL_GD32_AF_H_ */ 114