1badbb63cSNobuhiro Iwamatsu /* 2badbb63cSNobuhiro Iwamatsu * arch/arm/cpu/armv7/rmobile/pfc-r8a7790.h 3badbb63cSNobuhiro Iwamatsu * 4badbb63cSNobuhiro Iwamatsu * Copyright (C) 2013 Renesas Electronics Corporation 5badbb63cSNobuhiro Iwamatsu * 6badbb63cSNobuhiro Iwamatsu * SPDX-License-Identifier: GPL-2.0 7badbb63cSNobuhiro Iwamatsu */ 8badbb63cSNobuhiro Iwamatsu 9badbb63cSNobuhiro Iwamatsu #ifndef __PFC_R8A7790_H__ 10badbb63cSNobuhiro Iwamatsu #define __PFC_R8A7790_H__ 11badbb63cSNobuhiro Iwamatsu 12badbb63cSNobuhiro Iwamatsu #include <sh_pfc.h> 13badbb63cSNobuhiro Iwamatsu #include <asm/gpio.h> 14badbb63cSNobuhiro Iwamatsu 15badbb63cSNobuhiro Iwamatsu #define CPU_32_PORT(fn, pfx, sfx) \ 16badbb63cSNobuhiro Iwamatsu PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \ 17badbb63cSNobuhiro Iwamatsu PORT_10(fn, pfx##2, sfx), PORT_1(fn, pfx##30, sfx), \ 18badbb63cSNobuhiro Iwamatsu PORT_1(fn, pfx##31, sfx) 19badbb63cSNobuhiro Iwamatsu 20badbb63cSNobuhiro Iwamatsu #define CPU_32_PORT2(fn, pfx, sfx) \ 21badbb63cSNobuhiro Iwamatsu PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \ 22badbb63cSNobuhiro Iwamatsu PORT_10(fn, pfx##2, sfx) 23badbb63cSNobuhiro Iwamatsu 24badbb63cSNobuhiro Iwamatsu #if defined(CONFIG_R8A7790) 25badbb63cSNobuhiro Iwamatsu #define CPU_32_PORT1(fn, pfx, sfx) \ 26badbb63cSNobuhiro Iwamatsu PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \ 27badbb63cSNobuhiro Iwamatsu PORT_10(fn, pfx##2, sfx) \ 28badbb63cSNobuhiro Iwamatsu /* GP_0_0_DATA -> GP_5_31_DATA (except for GP1[30],GP1[31],GP2[30],GP2[31]) */ 29badbb63cSNobuhiro Iwamatsu #define CPU_ALL_PORT(fn, pfx, sfx) \ 30badbb63cSNobuhiro Iwamatsu CPU_32_PORT(fn, pfx##_0_, sfx), \ 31badbb63cSNobuhiro Iwamatsu CPU_32_PORT1(fn, pfx##_1_, sfx), \ 32badbb63cSNobuhiro Iwamatsu CPU_32_PORT2(fn, pfx##_2_, sfx), \ 33badbb63cSNobuhiro Iwamatsu CPU_32_PORT(fn, pfx##_3_, sfx), \ 34badbb63cSNobuhiro Iwamatsu CPU_32_PORT(fn, pfx##_4_, sfx), \ 35badbb63cSNobuhiro Iwamatsu CPU_32_PORT(fn, pfx##_5_, sfx) 36badbb63cSNobuhiro Iwamatsu 37badbb63cSNobuhiro Iwamatsu #elif defined(CONFIG_R8A7791) 38badbb63cSNobuhiro Iwamatsu #define CPU_32_PORT1(fn, pfx, sfx) \ 39badbb63cSNobuhiro Iwamatsu PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \ 40badbb63cSNobuhiro Iwamatsu PORT_1(fn, pfx##20, sfx), PORT_1(fn, pfx##21, sfx), \ 41badbb63cSNobuhiro Iwamatsu PORT_1(fn, pfx##22, sfx), PORT_1(fn, pfx##23, sfx), \ 42badbb63cSNobuhiro Iwamatsu PORT_1(fn, pfx##24, sfx), PORT_1(fn, pfx##25, sfx) 43badbb63cSNobuhiro Iwamatsu 44badbb63cSNobuhiro Iwamatsu /* 45badbb63cSNobuhiro Iwamatsu * GP_0_0_DATA -> GP_7_25_DATA 46badbb63cSNobuhiro Iwamatsu * (except for GP1[26],GP1[27],GP1[28],GP1[29]),GP1[30]),GP1[31] 47badbb63cSNobuhiro Iwamatsu * GP7[26],GP7[27],GP7[28],GP7[29]),GP7[30]),GP7[31]) 48badbb63cSNobuhiro Iwamatsu */ 49badbb63cSNobuhiro Iwamatsu #define CPU_ALL_PORT(fn, pfx, sfx) \ 50badbb63cSNobuhiro Iwamatsu CPU_32_PORT(fn, pfx##_0_, sfx), \ 51badbb63cSNobuhiro Iwamatsu CPU_32_PORT1(fn, pfx##_1_, sfx), \ 52badbb63cSNobuhiro Iwamatsu CPU_32_PORT(fn, pfx##_2_, sfx), \ 53badbb63cSNobuhiro Iwamatsu CPU_32_PORT(fn, pfx##_3_, sfx), \ 54badbb63cSNobuhiro Iwamatsu CPU_32_PORT(fn, pfx##_4_, sfx), \ 55badbb63cSNobuhiro Iwamatsu CPU_32_PORT(fn, pfx##_5_, sfx), \ 56badbb63cSNobuhiro Iwamatsu CPU_32_PORT(fn, pfx##_6_, sfx), \ 57badbb63cSNobuhiro Iwamatsu CPU_32_PORT1(fn, pfx##_7_, sfx) 58*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 59*6f107e4cSmasakazu.mochizuki.wd@hitachi.com #elif defined(CONFIG_R8A7792) 60*6f107e4cSmasakazu.mochizuki.wd@hitachi.com /* 61*6f107e4cSmasakazu.mochizuki.wd@hitachi.com * GP_0_0_DATA -> GP_11_29_DATA 62*6f107e4cSmasakazu.mochizuki.wd@hitachi.com * (except for GP0[29..31],GP1[23..31],GP3[28..31],GP4[17..31],GP5[17..31] 63*6f107e4cSmasakazu.mochizuki.wd@hitachi.com * GP6[17..31],GP7[17..31],GP8[17..31],GP9[17..31],GP11[30..31]) 64*6f107e4cSmasakazu.mochizuki.wd@hitachi.com */ 65*6f107e4cSmasakazu.mochizuki.wd@hitachi.com #define CPU_32_PORT0_28(fn, pfx, sfx) \ 66*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \ 67*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_1(fn, pfx##20, sfx), PORT_1(fn, pfx##21, sfx), \ 68*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_1(fn, pfx##22, sfx), PORT_1(fn, pfx##23, sfx), \ 69*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_1(fn, pfx##24, sfx), PORT_1(fn, pfx##25, sfx), \ 70*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_1(fn, pfx##26, sfx), PORT_1(fn, pfx##27, sfx), \ 71*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_1(fn, pfx##28, sfx) 72*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 73*6f107e4cSmasakazu.mochizuki.wd@hitachi.com #define CPU_32_PORT0_22(fn, pfx, sfx) \ 74*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \ 75*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_1(fn, pfx##20, sfx), PORT_1(fn, pfx##21, sfx), \ 76*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_1(fn, pfx##22, sfx) 77*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 78*6f107e4cSmasakazu.mochizuki.wd@hitachi.com #define CPU_32_PORT0_27(fn, pfx, sfx) \ 79*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \ 80*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_1(fn, pfx##20, sfx), PORT_1(fn, pfx##21, sfx), \ 81*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_1(fn, pfx##22, sfx), PORT_1(fn, pfx##23, sfx), \ 82*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_1(fn, pfx##24, sfx), PORT_1(fn, pfx##25, sfx), \ 83*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_1(fn, pfx##26, sfx), PORT_1(fn, pfx##27, sfx) 84*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 85*6f107e4cSmasakazu.mochizuki.wd@hitachi.com #define CPU_32_PORT0_16(fn, pfx, sfx) \ 86*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_10(fn, pfx, sfx), \ 87*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_1(fn, pfx##10, sfx),PORT_1(fn, pfx##11, sfx), \ 88*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_1(fn, pfx##12, sfx), PORT_1(fn, pfx##13, sfx), \ 89*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_1(fn, pfx##14, sfx), PORT_1(fn, pfx##15, sfx), \ 90*6f107e4cSmasakazu.mochizuki.wd@hitachi.com PORT_1(fn, pfx##16, sfx) 91*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 92*6f107e4cSmasakazu.mochizuki.wd@hitachi.com #define CPU_ALL_PORT(fn, pfx, sfx) \ 93*6f107e4cSmasakazu.mochizuki.wd@hitachi.com CPU_32_PORT0_28(fn, pfx##_0_, sfx), \ 94*6f107e4cSmasakazu.mochizuki.wd@hitachi.com CPU_32_PORT0_22(fn, pfx##_1_, sfx), \ 95*6f107e4cSmasakazu.mochizuki.wd@hitachi.com CPU_32_PORT(fn, pfx##_2_, sfx), \ 96*6f107e4cSmasakazu.mochizuki.wd@hitachi.com CPU_32_PORT0_27(fn, pfx##_3_, sfx), \ 97*6f107e4cSmasakazu.mochizuki.wd@hitachi.com CPU_32_PORT0_16(fn, pfx##_4_, sfx), \ 98*6f107e4cSmasakazu.mochizuki.wd@hitachi.com CPU_32_PORT0_16(fn, pfx##_5_, sfx), \ 99*6f107e4cSmasakazu.mochizuki.wd@hitachi.com CPU_32_PORT0_16(fn, pfx##_6_, sfx), \ 100*6f107e4cSmasakazu.mochizuki.wd@hitachi.com CPU_32_PORT0_16(fn, pfx##_7_, sfx), \ 101*6f107e4cSmasakazu.mochizuki.wd@hitachi.com CPU_32_PORT0_16(fn, pfx##_8_, sfx), \ 102*6f107e4cSmasakazu.mochizuki.wd@hitachi.com CPU_32_PORT0_16(fn, pfx##_9_, sfx), \ 103*6f107e4cSmasakazu.mochizuki.wd@hitachi.com CPU_32_PORT(fn, pfx##_10_, sfx), \ 104*6f107e4cSmasakazu.mochizuki.wd@hitachi.com CPU_32_PORT2(fn, pfx##_11_, sfx) 105*6f107e4cSmasakazu.mochizuki.wd@hitachi.com 106badbb63cSNobuhiro Iwamatsu #else 107badbb63cSNobuhiro Iwamatsu #error "NO support" 108badbb63cSNobuhiro Iwamatsu #endif 109badbb63cSNobuhiro Iwamatsu 110badbb63cSNobuhiro Iwamatsu #define _GP_GPIO(pfx, sfx) PINMUX_GPIO(GPIO_GP##pfx, GP##pfx##_DATA) 111badbb63cSNobuhiro Iwamatsu #define _GP_DATA(pfx, sfx) PINMUX_DATA(GP##pfx##_DATA, GP##pfx##_FN, \ 112badbb63cSNobuhiro Iwamatsu GP##pfx##_IN, GP##pfx##_OUT) 113badbb63cSNobuhiro Iwamatsu 114badbb63cSNobuhiro Iwamatsu #define _GP_INOUTSEL(pfx, sfx) GP##pfx##_IN, GP##pfx##_OUT 115badbb63cSNobuhiro Iwamatsu #define _GP_INDT(pfx, sfx) GP##pfx##_DATA 116badbb63cSNobuhiro Iwamatsu 117badbb63cSNobuhiro Iwamatsu #define GP_ALL(str) CPU_ALL_PORT(_PORT_ALL, GP, str) 118badbb63cSNobuhiro Iwamatsu #define PINMUX_GPIO_GP_ALL() CPU_ALL_PORT(_GP_GPIO, , unused) 119badbb63cSNobuhiro Iwamatsu #define PINMUX_DATA_GP_ALL() CPU_ALL_PORT(_GP_DATA, , unused) 120badbb63cSNobuhiro Iwamatsu 121badbb63cSNobuhiro Iwamatsu #define PORT_10_REV(fn, pfx, sfx) \ 122badbb63cSNobuhiro Iwamatsu PORT_1(fn, pfx##9, sfx), PORT_1(fn, pfx##8, sfx), \ 123badbb63cSNobuhiro Iwamatsu PORT_1(fn, pfx##7, sfx), PORT_1(fn, pfx##6, sfx), \ 124badbb63cSNobuhiro Iwamatsu PORT_1(fn, pfx##5, sfx), PORT_1(fn, pfx##4, sfx), \ 125badbb63cSNobuhiro Iwamatsu PORT_1(fn, pfx##3, sfx), PORT_1(fn, pfx##2, sfx), \ 126badbb63cSNobuhiro Iwamatsu PORT_1(fn, pfx##1, sfx), PORT_1(fn, pfx##0, sfx) 127badbb63cSNobuhiro Iwamatsu 128badbb63cSNobuhiro Iwamatsu #define CPU_32_PORT_REV(fn, pfx, sfx) \ 129badbb63cSNobuhiro Iwamatsu PORT_1(fn, pfx##31, sfx), PORT_1(fn, pfx##30, sfx), \ 130badbb63cSNobuhiro Iwamatsu PORT_10_REV(fn, pfx##2, sfx), PORT_10_REV(fn, pfx##1, sfx), \ 131badbb63cSNobuhiro Iwamatsu PORT_10_REV(fn, pfx, sfx) 132badbb63cSNobuhiro Iwamatsu 133badbb63cSNobuhiro Iwamatsu #define GP_INOUTSEL(bank) CPU_32_PORT_REV(_GP_INOUTSEL, _##bank##_, unused) 134badbb63cSNobuhiro Iwamatsu #define GP_INDT(bank) CPU_32_PORT_REV(_GP_INDT, _##bank##_, unused) 135badbb63cSNobuhiro Iwamatsu 136badbb63cSNobuhiro Iwamatsu #define PINMUX_IPSR_DATA(ipsr, fn) PINMUX_DATA(fn##_MARK, FN_##ipsr, FN_##fn) 137badbb63cSNobuhiro Iwamatsu #define PINMUX_IPSR_MODSEL_DATA(ipsr, fn, ms) PINMUX_DATA(fn##_MARK, FN_##ms, \ 138badbb63cSNobuhiro Iwamatsu FN_##ipsr, FN_##fn) 139badbb63cSNobuhiro Iwamatsu 140badbb63cSNobuhiro Iwamatsu #endif /* __PFC_R8A7790_H__ */ 141