1 /* 2 * Copyright (c) 2021-2023 IoT.bzh 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_RENESAS_PINCTRL_RCAR_COMMON_H_ 8 #define ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_RENESAS_PINCTRL_RCAR_COMMON_H_ 9 10 /** 11 * @brief Utility macro to build IPSR property entry. 12 * IPSR: Peripheral Function Select Register 13 * Each IPSR bank can hold 8 cellules of 4 bits coded function. 14 * 15 * @param bank the IPSR register bank. 16 * @param shift the bit shift for this alternate function. 17 * @param func the 4 bits encoded alternate function. 18 * 19 * Function code [ 0 : 3 ] 20 * Function shift [ 4 : 8 ] 21 * Empty [ 9 ] 22 * IPSR bank [ 10 : 14 ] 23 * Register index [ 15 : 17 ] (S4 only) 24 */ 25 #define IPSR(bank, shift, func) (((bank) << 10U) | ((shift) << 4U) | (func)) 26 27 /* Arbitrary number to encode non capable gpio pin */ 28 #define PIN_NOGPSR_START 1024U 29 30 /** 31 * @brief Utility macro to encode a GPIO capable pin 32 * 33 * @param bank the GPIO bank 34 * @param pin the pin within the GPIO bank (0..31) 35 */ 36 #define RCAR_GP_PIN(bank, pin) (((bank) * 32U) + (pin)) 37 38 /** 39 * @brief Utility macro to encode a non capable GPIO pin 40 * 41 * @param pin the encoded pin number 42 */ 43 #define RCAR_NOGP_PIN(pin) (PIN_NOGPSR_START + pin) 44 45 /* Renesas Gen4 has IPSR registers at different base address 46 * reg is here an index for the base address. 47 * Each base address has 4 IPSR banks. 48 */ 49 #define IPnSR(bank, reg, shift, func) \ 50 IPSR(((reg) << 5U) | (bank), shift, func) 51 52 #define IP0SR0(shift, func) IPnSR(0, 0, shift, func) 53 #define IP1SR0(shift, func) IPnSR(1, 0, shift, func) 54 #define IP2SR0(shift, func) IPnSR(2, 0, shift, func) 55 #define IP3SR0(shift, func) IPnSR(3, 0, shift, func) 56 #define IP0SR1(shift, func) IPnSR(0, 1, shift, func) 57 #define IP1SR1(shift, func) IPnSR(1, 1, shift, func) 58 #define IP2SR1(shift, func) IPnSR(2, 1, shift, func) 59 #define IP3SR1(shift, func) IPnSR(3, 1, shift, func) 60 #define IP0SR2(shift, func) IPnSR(0, 2, shift, func) 61 #define IP1SR2(shift, func) IPnSR(1, 2, shift, func) 62 #define IP2SR2(shift, func) IPnSR(2, 2, shift, func) 63 #define IP3SR2(shift, func) IPnSR(3, 2, shift, func) 64 #define IP0SR3(shift, func) IPnSR(0, 3, shift, func) 65 #define IP1SR3(shift, func) IPnSR(1, 3, shift, func) 66 #define IP2SR3(shift, func) IPnSR(2, 3, shift, func) 67 #define IP3SR3(shift, func) IPnSR(3, 3, shift, func) 68 #define IP0SR4(shift, func) IPnSR(0, 4, shift, func) 69 #define IP1SR4(shift, func) IPnSR(1, 4, shift, func) 70 #define IP2SR4(shift, func) IPnSR(2, 4, shift, func) 71 #define IP3SR4(shift, func) IPnSR(3, 4, shift, func) 72 #define IP0SR5(shift, func) IPnSR(0, 5, shift, func) 73 #define IP1SR5(shift, func) IPnSR(1, 5, shift, func) 74 #define IP2SR5(shift, func) IPnSR(2, 5, shift, func) 75 #define IP3SR5(shift, func) IPnSR(3, 5, shift, func) 76 #define IP0SR6(shift, func) IPnSR(0, 6, shift, func) 77 #define IP1SR6(shift, func) IPnSR(1, 6, shift, func) 78 #define IP2SR6(shift, func) IPnSR(2, 6, shift, func) 79 #define IP3SR6(shift, func) IPnSR(3, 6, shift, func) 80 #define IP0SR7(shift, func) IPnSR(0, 7, shift, func) 81 #define IP1SR7(shift, func) IPnSR(1, 7, shift, func) 82 #define IP2SR7(shift, func) IPnSR(2, 7, shift, func) 83 #define IP3SR7(shift, func) IPnSR(3, 7, shift, func) 84 85 /** 86 * @brief Macro to define a dummy IPSR flag for a pin 87 * 88 * This macro is used to define a dummy IPSR flag for a pin in the R-Car PFC 89 * driver. It is intended for pins that do not have a specific function 90 * defined in IPSR but always act as a peripheral. The dummy IPSR flag ensures 91 * that the driver sets the 'peripheral' bit for such pins. 92 * 93 * @see RCAR_PIN_FLAGS_FUNC_DUMMY 94 */ 95 #define IPSR_DUMMY IPnSR(0x1f, 7, 0x1f, 0xf) 96 97 #define PIN_VOLTAGE_NONE 0 98 #define PIN_VOLTAGE_1P8V 1 99 #define PIN_VOLTAGE_3P3V 2 100 101 #endif /* ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_RENESAS_PINCTRL_RCAR_COMMON_H_ */ 102