linux/drivers/pinctrl/pinctrl-sunxi.h
<<
>>
Prefs
   1/*
   2 * Allwinner A1X SoCs pinctrl driver.
   3 *
   4 * Copyright (C) 2012 Maxime Ripard
   5 *
   6 * Maxime Ripard <maxime.ripard@free-electrons.com>
   7 *
   8 * This file is licensed under the terms of the GNU General Public
   9 * License version 2.  This program is licensed "as is" without any
  10 * warranty of any kind, whether express or implied.
  11 */
  12
  13#ifndef __PINCTRL_SUNXI_H
  14#define __PINCTRL_SUNXI_H
  15
  16#include <linux/kernel.h>
  17
  18#define PA_BASE 0
  19#define PB_BASE 32
  20#define PC_BASE 64
  21#define PD_BASE 96
  22#define PE_BASE 128
  23#define PF_BASE 160
  24#define PG_BASE 192
  25#define PH_BASE 224
  26#define PI_BASE 256
  27
  28#define SUNXI_PINCTRL_PIN_PA0   PINCTRL_PIN(PA_BASE + 0, "PA0")
  29#define SUNXI_PINCTRL_PIN_PA1   PINCTRL_PIN(PA_BASE + 1, "PA1")
  30#define SUNXI_PINCTRL_PIN_PA2   PINCTRL_PIN(PA_BASE + 2, "PA2")
  31#define SUNXI_PINCTRL_PIN_PA3   PINCTRL_PIN(PA_BASE + 3, "PA3")
  32#define SUNXI_PINCTRL_PIN_PA4   PINCTRL_PIN(PA_BASE + 4, "PA4")
  33#define SUNXI_PINCTRL_PIN_PA5   PINCTRL_PIN(PA_BASE + 5, "PA5")
  34#define SUNXI_PINCTRL_PIN_PA6   PINCTRL_PIN(PA_BASE + 6, "PA6")
  35#define SUNXI_PINCTRL_PIN_PA7   PINCTRL_PIN(PA_BASE + 7, "PA7")
  36#define SUNXI_PINCTRL_PIN_PA8   PINCTRL_PIN(PA_BASE + 8, "PA8")
  37#define SUNXI_PINCTRL_PIN_PA9   PINCTRL_PIN(PA_BASE + 9, "PA9")
  38#define SUNXI_PINCTRL_PIN_PA10  PINCTRL_PIN(PA_BASE + 10, "PA10")
  39#define SUNXI_PINCTRL_PIN_PA11  PINCTRL_PIN(PA_BASE + 11, "PA11")
  40#define SUNXI_PINCTRL_PIN_PA12  PINCTRL_PIN(PA_BASE + 12, "PA12")
  41#define SUNXI_PINCTRL_PIN_PA13  PINCTRL_PIN(PA_BASE + 13, "PA13")
  42#define SUNXI_PINCTRL_PIN_PA14  PINCTRL_PIN(PA_BASE + 14, "PA14")
  43#define SUNXI_PINCTRL_PIN_PA15  PINCTRL_PIN(PA_BASE + 15, "PA15")
  44#define SUNXI_PINCTRL_PIN_PA16  PINCTRL_PIN(PA_BASE + 16, "PA16")
  45#define SUNXI_PINCTRL_PIN_PA17  PINCTRL_PIN(PA_BASE + 17, "PA17")
  46#define SUNXI_PINCTRL_PIN_PA18  PINCTRL_PIN(PA_BASE + 18, "PA18")
  47#define SUNXI_PINCTRL_PIN_PA19  PINCTRL_PIN(PA_BASE + 19, "PA19")
  48#define SUNXI_PINCTRL_PIN_PA20  PINCTRL_PIN(PA_BASE + 20, "PA20")
  49#define SUNXI_PINCTRL_PIN_PA21  PINCTRL_PIN(PA_BASE + 21, "PA21")
  50#define SUNXI_PINCTRL_PIN_PA22  PINCTRL_PIN(PA_BASE + 22, "PA22")
  51#define SUNXI_PINCTRL_PIN_PA23  PINCTRL_PIN(PA_BASE + 23, "PA23")
  52#define SUNXI_PINCTRL_PIN_PA24  PINCTRL_PIN(PA_BASE + 24, "PA24")
  53#define SUNXI_PINCTRL_PIN_PA25  PINCTRL_PIN(PA_BASE + 25, "PA25")
  54#define SUNXI_PINCTRL_PIN_PA26  PINCTRL_PIN(PA_BASE + 26, "PA26")
  55#define SUNXI_PINCTRL_PIN_PA27  PINCTRL_PIN(PA_BASE + 27, "PA27")
  56#define SUNXI_PINCTRL_PIN_PA28  PINCTRL_PIN(PA_BASE + 28, "PA28")
  57#define SUNXI_PINCTRL_PIN_PA29  PINCTRL_PIN(PA_BASE + 29, "PA29")
  58#define SUNXI_PINCTRL_PIN_PA30  PINCTRL_PIN(PA_BASE + 30, "PA30")
  59#define SUNXI_PINCTRL_PIN_PA31  PINCTRL_PIN(PA_BASE + 31, "PA31")
  60
  61#define SUNXI_PINCTRL_PIN_PB0   PINCTRL_PIN(PB_BASE + 0, "PB0")
  62#define SUNXI_PINCTRL_PIN_PB1   PINCTRL_PIN(PB_BASE + 1, "PB1")
  63#define SUNXI_PINCTRL_PIN_PB2   PINCTRL_PIN(PB_BASE + 2, "PB2")
  64#define SUNXI_PINCTRL_PIN_PB3   PINCTRL_PIN(PB_BASE + 3, "PB3")
  65#define SUNXI_PINCTRL_PIN_PB4   PINCTRL_PIN(PB_BASE + 4, "PB4")
  66#define SUNXI_PINCTRL_PIN_PB5   PINCTRL_PIN(PB_BASE + 5, "PB5")
  67#define SUNXI_PINCTRL_PIN_PB6   PINCTRL_PIN(PB_BASE + 6, "PB6")
  68#define SUNXI_PINCTRL_PIN_PB7   PINCTRL_PIN(PB_BASE + 7, "PB7")
  69#define SUNXI_PINCTRL_PIN_PB8   PINCTRL_PIN(PB_BASE + 8, "PB8")
  70#define SUNXI_PINCTRL_PIN_PB9   PINCTRL_PIN(PB_BASE + 9, "PB9")
  71#define SUNXI_PINCTRL_PIN_PB10  PINCTRL_PIN(PB_BASE + 10, "PB10")
  72#define SUNXI_PINCTRL_PIN_PB11  PINCTRL_PIN(PB_BASE + 11, "PB11")
  73#define SUNXI_PINCTRL_PIN_PB12  PINCTRL_PIN(PB_BASE + 12, "PB12")
  74#define SUNXI_PINCTRL_PIN_PB13  PINCTRL_PIN(PB_BASE + 13, "PB13")
  75#define SUNXI_PINCTRL_PIN_PB14  PINCTRL_PIN(PB_BASE + 14, "PB14")
  76#define SUNXI_PINCTRL_PIN_PB15  PINCTRL_PIN(PB_BASE + 15, "PB15")
  77#define SUNXI_PINCTRL_PIN_PB16  PINCTRL_PIN(PB_BASE + 16, "PB16")
  78#define SUNXI_PINCTRL_PIN_PB17  PINCTRL_PIN(PB_BASE + 17, "PB17")
  79#define SUNXI_PINCTRL_PIN_PB18  PINCTRL_PIN(PB_BASE + 18, "PB18")
  80#define SUNXI_PINCTRL_PIN_PB19  PINCTRL_PIN(PB_BASE + 19, "PB19")
  81#define SUNXI_PINCTRL_PIN_PB20  PINCTRL_PIN(PB_BASE + 20, "PB20")
  82#define SUNXI_PINCTRL_PIN_PB21  PINCTRL_PIN(PB_BASE + 21, "PB21")
  83#define SUNXI_PINCTRL_PIN_PB22  PINCTRL_PIN(PB_BASE + 22, "PB22")
  84#define SUNXI_PINCTRL_PIN_PB23  PINCTRL_PIN(PB_BASE + 23, "PB23")
  85#define SUNXI_PINCTRL_PIN_PB24  PINCTRL_PIN(PB_BASE + 24, "PB24")
  86#define SUNXI_PINCTRL_PIN_PB25  PINCTRL_PIN(PB_BASE + 25, "PB25")
  87#define SUNXI_PINCTRL_PIN_PB26  PINCTRL_PIN(PB_BASE + 26, "PB26")
  88#define SUNXI_PINCTRL_PIN_PB27  PINCTRL_PIN(PB_BASE + 27, "PB27")
  89#define SUNXI_PINCTRL_PIN_PB28  PINCTRL_PIN(PB_BASE + 28, "PB28")
  90#define SUNXI_PINCTRL_PIN_PB29  PINCTRL_PIN(PB_BASE + 29, "PB29")
  91#define SUNXI_PINCTRL_PIN_PB30  PINCTRL_PIN(PB_BASE + 30, "PB30")
  92#define SUNXI_PINCTRL_PIN_PB31  PINCTRL_PIN(PB_BASE + 31, "PB31")
  93
  94#define SUNXI_PINCTRL_PIN_PC0   PINCTRL_PIN(PC_BASE + 0, "PC0")
  95#define SUNXI_PINCTRL_PIN_PC1   PINCTRL_PIN(PC_BASE + 1, "PC1")
  96#define SUNXI_PINCTRL_PIN_PC2   PINCTRL_PIN(PC_BASE + 2, "PC2")
  97#define SUNXI_PINCTRL_PIN_PC3   PINCTRL_PIN(PC_BASE + 3, "PC3")
  98#define SUNXI_PINCTRL_PIN_PC4   PINCTRL_PIN(PC_BASE + 4, "PC4")
  99#define SUNXI_PINCTRL_PIN_PC5   PINCTRL_PIN(PC_BASE + 5, "PC5")
 100#define SUNXI_PINCTRL_PIN_PC6   PINCTRL_PIN(PC_BASE + 6, "PC6")
 101#define SUNXI_PINCTRL_PIN_PC7   PINCTRL_PIN(PC_BASE + 7, "PC7")
 102#define SUNXI_PINCTRL_PIN_PC8   PINCTRL_PIN(PC_BASE + 8, "PC8")
 103#define SUNXI_PINCTRL_PIN_PC9   PINCTRL_PIN(PC_BASE + 9, "PC9")
 104#define SUNXI_PINCTRL_PIN_PC10  PINCTRL_PIN(PC_BASE + 10, "PC10")
 105#define SUNXI_PINCTRL_PIN_PC11  PINCTRL_PIN(PC_BASE + 11, "PC11")
 106#define SUNXI_PINCTRL_PIN_PC12  PINCTRL_PIN(PC_BASE + 12, "PC12")
 107#define SUNXI_PINCTRL_PIN_PC13  PINCTRL_PIN(PC_BASE + 13, "PC13")
 108#define SUNXI_PINCTRL_PIN_PC14  PINCTRL_PIN(PC_BASE + 14, "PC14")
 109#define SUNXI_PINCTRL_PIN_PC15  PINCTRL_PIN(PC_BASE + 15, "PC15")
 110#define SUNXI_PINCTRL_PIN_PC16  PINCTRL_PIN(PC_BASE + 16, "PC16")
 111#define SUNXI_PINCTRL_PIN_PC17  PINCTRL_PIN(PC_BASE + 17, "PC17")
 112#define SUNXI_PINCTRL_PIN_PC18  PINCTRL_PIN(PC_BASE + 18, "PC18")
 113#define SUNXI_PINCTRL_PIN_PC19  PINCTRL_PIN(PC_BASE + 19, "PC19")
 114#define SUNXI_PINCTRL_PIN_PC20  PINCTRL_PIN(PC_BASE + 20, "PC20")
 115#define SUNXI_PINCTRL_PIN_PC21  PINCTRL_PIN(PC_BASE + 21, "PC21")
 116#define SUNXI_PINCTRL_PIN_PC22  PINCTRL_PIN(PC_BASE + 22, "PC22")
 117#define SUNXI_PINCTRL_PIN_PC23  PINCTRL_PIN(PC_BASE + 23, "PC23")
 118#define SUNXI_PINCTRL_PIN_PC24  PINCTRL_PIN(PC_BASE + 24, "PC24")
 119#define SUNXI_PINCTRL_PIN_PC25  PINCTRL_PIN(PC_BASE + 25, "PC25")
 120#define SUNXI_PINCTRL_PIN_PC26  PINCTRL_PIN(PC_BASE + 26, "PC26")
 121#define SUNXI_PINCTRL_PIN_PC27  PINCTRL_PIN(PC_BASE + 27, "PC27")
 122#define SUNXI_PINCTRL_PIN_PC28  PINCTRL_PIN(PC_BASE + 28, "PC28")
 123#define SUNXI_PINCTRL_PIN_PC29  PINCTRL_PIN(PC_BASE + 29, "PC29")
 124#define SUNXI_PINCTRL_PIN_PC30  PINCTRL_PIN(PC_BASE + 30, "PC30")
 125#define SUNXI_PINCTRL_PIN_PC31  PINCTRL_PIN(PC_BASE + 31, "PC31")
 126
 127#define SUNXI_PINCTRL_PIN_PD0   PINCTRL_PIN(PD_BASE + 0, "PD0")
 128#define SUNXI_PINCTRL_PIN_PD1   PINCTRL_PIN(PD_BASE + 1, "PD1")
 129#define SUNXI_PINCTRL_PIN_PD2   PINCTRL_PIN(PD_BASE + 2, "PD2")
 130#define SUNXI_PINCTRL_PIN_PD3   PINCTRL_PIN(PD_BASE + 3, "PD3")
 131#define SUNXI_PINCTRL_PIN_PD4   PINCTRL_PIN(PD_BASE + 4, "PD4")
 132#define SUNXI_PINCTRL_PIN_PD5   PINCTRL_PIN(PD_BASE + 5, "PD5")
 133#define SUNXI_PINCTRL_PIN_PD6   PINCTRL_PIN(PD_BASE + 6, "PD6")
 134#define SUNXI_PINCTRL_PIN_PD7   PINCTRL_PIN(PD_BASE + 7, "PD7")
 135#define SUNXI_PINCTRL_PIN_PD8   PINCTRL_PIN(PD_BASE + 8, "PD8")
 136#define SUNXI_PINCTRL_PIN_PD9   PINCTRL_PIN(PD_BASE + 9, "PD9")
 137#define SUNXI_PINCTRL_PIN_PD10  PINCTRL_PIN(PD_BASE + 10, "PD10")
 138#define SUNXI_PINCTRL_PIN_PD11  PINCTRL_PIN(PD_BASE + 11, "PD11")
 139#define SUNXI_PINCTRL_PIN_PD12  PINCTRL_PIN(PD_BASE + 12, "PD12")
 140#define SUNXI_PINCTRL_PIN_PD13  PINCTRL_PIN(PD_BASE + 13, "PD13")
 141#define SUNXI_PINCTRL_PIN_PD14  PINCTRL_PIN(PD_BASE + 14, "PD14")
 142#define SUNXI_PINCTRL_PIN_PD15  PINCTRL_PIN(PD_BASE + 15, "PD15")
 143#define SUNXI_PINCTRL_PIN_PD16  PINCTRL_PIN(PD_BASE + 16, "PD16")
 144#define SUNXI_PINCTRL_PIN_PD17  PINCTRL_PIN(PD_BASE + 17, "PD17")
 145#define SUNXI_PINCTRL_PIN_PD18  PINCTRL_PIN(PD_BASE + 18, "PD18")
 146#define SUNXI_PINCTRL_PIN_PD19  PINCTRL_PIN(PD_BASE + 19, "PD19")
 147#define SUNXI_PINCTRL_PIN_PD20  PINCTRL_PIN(PD_BASE + 20, "PD20")
 148#define SUNXI_PINCTRL_PIN_PD21  PINCTRL_PIN(PD_BASE + 21, "PD21")
 149#define SUNXI_PINCTRL_PIN_PD22  PINCTRL_PIN(PD_BASE + 22, "PD22")
 150#define SUNXI_PINCTRL_PIN_PD23  PINCTRL_PIN(PD_BASE + 23, "PD23")
 151#define SUNXI_PINCTRL_PIN_PD24  PINCTRL_PIN(PD_BASE + 24, "PD24")
 152#define SUNXI_PINCTRL_PIN_PD25  PINCTRL_PIN(PD_BASE + 25, "PD25")
 153#define SUNXI_PINCTRL_PIN_PD26  PINCTRL_PIN(PD_BASE + 26, "PD26")
 154#define SUNXI_PINCTRL_PIN_PD27  PINCTRL_PIN(PD_BASE + 27, "PD27")
 155#define SUNXI_PINCTRL_PIN_PD28  PINCTRL_PIN(PD_BASE + 28, "PD28")
 156#define SUNXI_PINCTRL_PIN_PD29  PINCTRL_PIN(PD_BASE + 29, "PD29")
 157#define SUNXI_PINCTRL_PIN_PD30  PINCTRL_PIN(PD_BASE + 30, "PD30")
 158#define SUNXI_PINCTRL_PIN_PD31  PINCTRL_PIN(PD_BASE + 31, "PD31")
 159
 160#define SUNXI_PINCTRL_PIN_PE0   PINCTRL_PIN(PE_BASE + 0, "PE0")
 161#define SUNXI_PINCTRL_PIN_PE1   PINCTRL_PIN(PE_BASE + 1, "PE1")
 162#define SUNXI_PINCTRL_PIN_PE2   PINCTRL_PIN(PE_BASE + 2, "PE2")
 163#define SUNXI_PINCTRL_PIN_PE3   PINCTRL_PIN(PE_BASE + 3, "PE3")
 164#define SUNXI_PINCTRL_PIN_PE4   PINCTRL_PIN(PE_BASE + 4, "PE4")
 165#define SUNXI_PINCTRL_PIN_PE5   PINCTRL_PIN(PE_BASE + 5, "PE5")
 166#define SUNXI_PINCTRL_PIN_PE6   PINCTRL_PIN(PE_BASE + 6, "PE6")
 167#define SUNXI_PINCTRL_PIN_PE7   PINCTRL_PIN(PE_BASE + 7, "PE7")
 168#define SUNXI_PINCTRL_PIN_PE8   PINCTRL_PIN(PE_BASE + 8, "PE8")
 169#define SUNXI_PINCTRL_PIN_PE9   PINCTRL_PIN(PE_BASE + 9, "PE9")
 170#define SUNXI_PINCTRL_PIN_PE10  PINCTRL_PIN(PE_BASE + 10, "PE10")
 171#define SUNXI_PINCTRL_PIN_PE11  PINCTRL_PIN(PE_BASE + 11, "PE11")
 172#define SUNXI_PINCTRL_PIN_PE12  PINCTRL_PIN(PE_BASE + 12, "PE12")
 173#define SUNXI_PINCTRL_PIN_PE13  PINCTRL_PIN(PE_BASE + 13, "PE13")
 174#define SUNXI_PINCTRL_PIN_PE14  PINCTRL_PIN(PE_BASE + 14, "PE14")
 175#define SUNXI_PINCTRL_PIN_PE15  PINCTRL_PIN(PE_BASE + 15, "PE15")
 176#define SUNXI_PINCTRL_PIN_PE16  PINCTRL_PIN(PE_BASE + 16, "PE16")
 177#define SUNXI_PINCTRL_PIN_PE17  PINCTRL_PIN(PE_BASE + 17, "PE17")
 178#define SUNXI_PINCTRL_PIN_PE18  PINCTRL_PIN(PE_BASE + 18, "PE18")
 179#define SUNXI_PINCTRL_PIN_PE19  PINCTRL_PIN(PE_BASE + 19, "PE19")
 180#define SUNXI_PINCTRL_PIN_PE20  PINCTRL_PIN(PE_BASE + 20, "PE20")
 181#define SUNXI_PINCTRL_PIN_PE21  PINCTRL_PIN(PE_BASE + 21, "PE21")
 182#define SUNXI_PINCTRL_PIN_PE22  PINCTRL_PIN(PE_BASE + 22, "PE22")
 183#define SUNXI_PINCTRL_PIN_PE23  PINCTRL_PIN(PE_BASE + 23, "PE23")
 184#define SUNXI_PINCTRL_PIN_PE24  PINCTRL_PIN(PE_BASE + 24, "PE24")
 185#define SUNXI_PINCTRL_PIN_PE25  PINCTRL_PIN(PE_BASE + 25, "PE25")
 186#define SUNXI_PINCTRL_PIN_PE26  PINCTRL_PIN(PE_BASE + 26, "PE26")
 187#define SUNXI_PINCTRL_PIN_PE27  PINCTRL_PIN(PE_BASE + 27, "PE27")
 188#define SUNXI_PINCTRL_PIN_PE28  PINCTRL_PIN(PE_BASE + 28, "PE28")
 189#define SUNXI_PINCTRL_PIN_PE29  PINCTRL_PIN(PE_BASE + 29, "PE29")
 190#define SUNXI_PINCTRL_PIN_PE30  PINCTRL_PIN(PE_BASE + 30, "PE30")
 191#define SUNXI_PINCTRL_PIN_PE31  PINCTRL_PIN(PE_BASE + 31, "PE31")
 192
 193#define SUNXI_PINCTRL_PIN_PF0   PINCTRL_PIN(PF_BASE + 0, "PF0")
 194#define SUNXI_PINCTRL_PIN_PF1   PINCTRL_PIN(PF_BASE + 1, "PF1")
 195#define SUNXI_PINCTRL_PIN_PF2   PINCTRL_PIN(PF_BASE + 2, "PF2")
 196#define SUNXI_PINCTRL_PIN_PF3   PINCTRL_PIN(PF_BASE + 3, "PF3")
 197#define SUNXI_PINCTRL_PIN_PF4   PINCTRL_PIN(PF_BASE + 4, "PF4")
 198#define SUNXI_PINCTRL_PIN_PF5   PINCTRL_PIN(PF_BASE + 5, "PF5")
 199#define SUNXI_PINCTRL_PIN_PF6   PINCTRL_PIN(PF_BASE + 6, "PF6")
 200#define SUNXI_PINCTRL_PIN_PF7   PINCTRL_PIN(PF_BASE + 7, "PF7")
 201#define SUNXI_PINCTRL_PIN_PF8   PINCTRL_PIN(PF_BASE + 8, "PF8")
 202#define SUNXI_PINCTRL_PIN_PF9   PINCTRL_PIN(PF_BASE + 9, "PF9")
 203#define SUNXI_PINCTRL_PIN_PF10  PINCTRL_PIN(PF_BASE + 10, "PF10")
 204#define SUNXI_PINCTRL_PIN_PF11  PINCTRL_PIN(PF_BASE + 11, "PF11")
 205#define SUNXI_PINCTRL_PIN_PF12  PINCTRL_PIN(PF_BASE + 12, "PF12")
 206#define SUNXI_PINCTRL_PIN_PF13  PINCTRL_PIN(PF_BASE + 13, "PF13")
 207#define SUNXI_PINCTRL_PIN_PF14  PINCTRL_PIN(PF_BASE + 14, "PF14")
 208#define SUNXI_PINCTRL_PIN_PF15  PINCTRL_PIN(PF_BASE + 15, "PF15")
 209#define SUNXI_PINCTRL_PIN_PF16  PINCTRL_PIN(PF_BASE + 16, "PF16")
 210#define SUNXI_PINCTRL_PIN_PF17  PINCTRL_PIN(PF_BASE + 17, "PF17")
 211#define SUNXI_PINCTRL_PIN_PF18  PINCTRL_PIN(PF_BASE + 18, "PF18")
 212#define SUNXI_PINCTRL_PIN_PF19  PINCTRL_PIN(PF_BASE + 19, "PF19")
 213#define SUNXI_PINCTRL_PIN_PF20  PINCTRL_PIN(PF_BASE + 20, "PF20")
 214#define SUNXI_PINCTRL_PIN_PF21  PINCTRL_PIN(PF_BASE + 21, "PF21")
 215#define SUNXI_PINCTRL_PIN_PF22  PINCTRL_PIN(PF_BASE + 22, "PF22")
 216#define SUNXI_PINCTRL_PIN_PF23  PINCTRL_PIN(PF_BASE + 23, "PF23")
 217#define SUNXI_PINCTRL_PIN_PF24  PINCTRL_PIN(PF_BASE + 24, "PF24")
 218#define SUNXI_PINCTRL_PIN_PF25  PINCTRL_PIN(PF_BASE + 25, "PF25")
 219#define SUNXI_PINCTRL_PIN_PF26  PINCTRL_PIN(PF_BASE + 26, "PF26")
 220#define SUNXI_PINCTRL_PIN_PF27  PINCTRL_PIN(PF_BASE + 27, "PF27")
 221#define SUNXI_PINCTRL_PIN_PF28  PINCTRL_PIN(PF_BASE + 28, "PF28")
 222#define SUNXI_PINCTRL_PIN_PF29  PINCTRL_PIN(PF_BASE + 29, "PF29")
 223#define SUNXI_PINCTRL_PIN_PF30  PINCTRL_PIN(PF_BASE + 30, "PF30")
 224#define SUNXI_PINCTRL_PIN_PF31  PINCTRL_PIN(PF_BASE + 31, "PF31")
 225
 226#define SUNXI_PINCTRL_PIN_PG0   PINCTRL_PIN(PG_BASE + 0, "PG0")
 227#define SUNXI_PINCTRL_PIN_PG1   PINCTRL_PIN(PG_BASE + 1, "PG1")
 228#define SUNXI_PINCTRL_PIN_PG2   PINCTRL_PIN(PG_BASE + 2, "PG2")
 229#define SUNXI_PINCTRL_PIN_PG3   PINCTRL_PIN(PG_BASE + 3, "PG3")
 230#define SUNXI_PINCTRL_PIN_PG4   PINCTRL_PIN(PG_BASE + 4, "PG4")
 231#define SUNXI_PINCTRL_PIN_PG5   PINCTRL_PIN(PG_BASE + 5, "PG5")
 232#define SUNXI_PINCTRL_PIN_PG6   PINCTRL_PIN(PG_BASE + 6, "PG6")
 233#define SUNXI_PINCTRL_PIN_PG7   PINCTRL_PIN(PG_BASE + 7, "PG7")
 234#define SUNXI_PINCTRL_PIN_PG8   PINCTRL_PIN(PG_BASE + 8, "PG8")
 235#define SUNXI_PINCTRL_PIN_PG9   PINCTRL_PIN(PG_BASE + 9, "PG9")
 236#define SUNXI_PINCTRL_PIN_PG10  PINCTRL_PIN(PG_BASE + 10, "PG10")
 237#define SUNXI_PINCTRL_PIN_PG11  PINCTRL_PIN(PG_BASE + 11, "PG11")
 238#define SUNXI_PINCTRL_PIN_PG12  PINCTRL_PIN(PG_BASE + 12, "PG12")
 239#define SUNXI_PINCTRL_PIN_PG13  PINCTRL_PIN(PG_BASE + 13, "PG13")
 240#define SUNXI_PINCTRL_PIN_PG14  PINCTRL_PIN(PG_BASE + 14, "PG14")
 241#define SUNXI_PINCTRL_PIN_PG15  PINCTRL_PIN(PG_BASE + 15, "PG15")
 242#define SUNXI_PINCTRL_PIN_PG16  PINCTRL_PIN(PG_BASE + 16, "PG16")
 243#define SUNXI_PINCTRL_PIN_PG17  PINCTRL_PIN(PG_BASE + 17, "PG17")
 244#define SUNXI_PINCTRL_PIN_PG18  PINCTRL_PIN(PG_BASE + 18, "PG18")
 245#define SUNXI_PINCTRL_PIN_PG19  PINCTRL_PIN(PG_BASE + 19, "PG19")
 246#define SUNXI_PINCTRL_PIN_PG20  PINCTRL_PIN(PG_BASE + 20, "PG20")
 247#define SUNXI_PINCTRL_PIN_PG21  PINCTRL_PIN(PG_BASE + 21, "PG21")
 248#define SUNXI_PINCTRL_PIN_PG22  PINCTRL_PIN(PG_BASE + 22, "PG22")
 249#define SUNXI_PINCTRL_PIN_PG23  PINCTRL_PIN(PG_BASE + 23, "PG23")
 250#define SUNXI_PINCTRL_PIN_PG24  PINCTRL_PIN(PG_BASE + 24, "PG24")
 251#define SUNXI_PINCTRL_PIN_PG25  PINCTRL_PIN(PG_BASE + 25, "PG25")
 252#define SUNXI_PINCTRL_PIN_PG26  PINCTRL_PIN(PG_BASE + 26, "PG26")
 253#define SUNXI_PINCTRL_PIN_PG27  PINCTRL_PIN(PG_BASE + 27, "PG27")
 254#define SUNXI_PINCTRL_PIN_PG28  PINCTRL_PIN(PG_BASE + 28, "PG28")
 255#define SUNXI_PINCTRL_PIN_PG29  PINCTRL_PIN(PG_BASE + 29, "PG29")
 256#define SUNXI_PINCTRL_PIN_PG30  PINCTRL_PIN(PG_BASE + 30, "PG30")
 257#define SUNXI_PINCTRL_PIN_PG31  PINCTRL_PIN(PG_BASE + 31, "PG31")
 258
 259#define SUNXI_PINCTRL_PIN_PH0   PINCTRL_PIN(PH_BASE + 0, "PH0")
 260#define SUNXI_PINCTRL_PIN_PH1   PINCTRL_PIN(PH_BASE + 1, "PH1")
 261#define SUNXI_PINCTRL_PIN_PH2   PINCTRL_PIN(PH_BASE + 2, "PH2")
 262#define SUNXI_PINCTRL_PIN_PH3   PINCTRL_PIN(PH_BASE + 3, "PH3")
 263#define SUNXI_PINCTRL_PIN_PH4   PINCTRL_PIN(PH_BASE + 4, "PH4")
 264#define SUNXI_PINCTRL_PIN_PH5   PINCTRL_PIN(PH_BASE + 5, "PH5")
 265#define SUNXI_PINCTRL_PIN_PH6   PINCTRL_PIN(PH_BASE + 6, "PH6")
 266#define SUNXI_PINCTRL_PIN_PH7   PINCTRL_PIN(PH_BASE + 7, "PH7")
 267#define SUNXI_PINCTRL_PIN_PH8   PINCTRL_PIN(PH_BASE + 8, "PH8")
 268#define SUNXI_PINCTRL_PIN_PH9   PINCTRL_PIN(PH_BASE + 9, "PH9")
 269#define SUNXI_PINCTRL_PIN_PH10  PINCTRL_PIN(PH_BASE + 10, "PH10")
 270#define SUNXI_PINCTRL_PIN_PH11  PINCTRL_PIN(PH_BASE + 11, "PH11")
 271#define SUNXI_PINCTRL_PIN_PH12  PINCTRL_PIN(PH_BASE + 12, "PH12")
 272#define SUNXI_PINCTRL_PIN_PH13  PINCTRL_PIN(PH_BASE + 13, "PH13")
 273#define SUNXI_PINCTRL_PIN_PH14  PINCTRL_PIN(PH_BASE + 14, "PH14")
 274#define SUNXI_PINCTRL_PIN_PH15  PINCTRL_PIN(PH_BASE + 15, "PH15")
 275#define SUNXI_PINCTRL_PIN_PH16  PINCTRL_PIN(PH_BASE + 16, "PH16")
 276#define SUNXI_PINCTRL_PIN_PH17  PINCTRL_PIN(PH_BASE + 17, "PH17")
 277#define SUNXI_PINCTRL_PIN_PH18  PINCTRL_PIN(PH_BASE + 18, "PH18")
 278#define SUNXI_PINCTRL_PIN_PH19  PINCTRL_PIN(PH_BASE + 19, "PH19")
 279#define SUNXI_PINCTRL_PIN_PH20  PINCTRL_PIN(PH_BASE + 20, "PH20")
 280#define SUNXI_PINCTRL_PIN_PH21  PINCTRL_PIN(PH_BASE + 21, "PH21")
 281#define SUNXI_PINCTRL_PIN_PH22  PINCTRL_PIN(PH_BASE + 22, "PH22")
 282#define SUNXI_PINCTRL_PIN_PH23  PINCTRL_PIN(PH_BASE + 23, "PH23")
 283#define SUNXI_PINCTRL_PIN_PH24  PINCTRL_PIN(PH_BASE + 24, "PH24")
 284#define SUNXI_PINCTRL_PIN_PH25  PINCTRL_PIN(PH_BASE + 25, "PH25")
 285#define SUNXI_PINCTRL_PIN_PH26  PINCTRL_PIN(PH_BASE + 26, "PH26")
 286#define SUNXI_PINCTRL_PIN_PH27  PINCTRL_PIN(PH_BASE + 27, "PH27")
 287#define SUNXI_PINCTRL_PIN_PH28  PINCTRL_PIN(PH_BASE + 28, "PH28")
 288#define SUNXI_PINCTRL_PIN_PH29  PINCTRL_PIN(PH_BASE + 29, "PH29")
 289#define SUNXI_PINCTRL_PIN_PH30  PINCTRL_PIN(PH_BASE + 30, "PH30")
 290#define SUNXI_PINCTRL_PIN_PH31  PINCTRL_PIN(PH_BASE + 31, "PH31")
 291
 292#define SUNXI_PINCTRL_PIN_PI0   PINCTRL_PIN(PI_BASE + 0, "PI0")
 293#define SUNXI_PINCTRL_PIN_PI1   PINCTRL_PIN(PI_BASE + 1, "PI1")
 294#define SUNXI_PINCTRL_PIN_PI2   PINCTRL_PIN(PI_BASE + 2, "PI2")
 295#define SUNXI_PINCTRL_PIN_PI3   PINCTRL_PIN(PI_BASE + 3, "PI3")
 296#define SUNXI_PINCTRL_PIN_PI4   PINCTRL_PIN(PI_BASE + 4, "PI4")
 297#define SUNXI_PINCTRL_PIN_PI5   PINCTRL_PIN(PI_BASE + 5, "PI5")
 298#define SUNXI_PINCTRL_PIN_PI6   PINCTRL_PIN(PI_BASE + 6, "PI6")
 299#define SUNXI_PINCTRL_PIN_PI7   PINCTRL_PIN(PI_BASE + 7, "PI7")
 300#define SUNXI_PINCTRL_PIN_PI8   PINCTRL_PIN(PI_BASE + 8, "PI8")
 301#define SUNXI_PINCTRL_PIN_PI9   PINCTRL_PIN(PI_BASE + 9, "PI9")
 302#define SUNXI_PINCTRL_PIN_PI10  PINCTRL_PIN(PI_BASE + 10, "PI10")
 303#define SUNXI_PINCTRL_PIN_PI11  PINCTRL_PIN(PI_BASE + 11, "PI11")
 304#define SUNXI_PINCTRL_PIN_PI12  PINCTRL_PIN(PI_BASE + 12, "PI12")
 305#define SUNXI_PINCTRL_PIN_PI13  PINCTRL_PIN(PI_BASE + 13, "PI13")
 306#define SUNXI_PINCTRL_PIN_PI14  PINCTRL_PIN(PI_BASE + 14, "PI14")
 307#define SUNXI_PINCTRL_PIN_PI15  PINCTRL_PIN(PI_BASE + 15, "PI15")
 308#define SUNXI_PINCTRL_PIN_PI16  PINCTRL_PIN(PI_BASE + 16, "PI16")
 309#define SUNXI_PINCTRL_PIN_PI17  PINCTRL_PIN(PI_BASE + 17, "PI17")
 310#define SUNXI_PINCTRL_PIN_PI18  PINCTRL_PIN(PI_BASE + 18, "PI18")
 311#define SUNXI_PINCTRL_PIN_PI19  PINCTRL_PIN(PI_BASE + 19, "PI19")
 312#define SUNXI_PINCTRL_PIN_PI20  PINCTRL_PIN(PI_BASE + 20, "PI20")
 313#define SUNXI_PINCTRL_PIN_PI21  PINCTRL_PIN(PI_BASE + 21, "PI21")
 314#define SUNXI_PINCTRL_PIN_PI22  PINCTRL_PIN(PI_BASE + 22, "PI22")
 315#define SUNXI_PINCTRL_PIN_PI23  PINCTRL_PIN(PI_BASE + 23, "PI23")
 316#define SUNXI_PINCTRL_PIN_PI24  PINCTRL_PIN(PI_BASE + 24, "PI24")
 317#define SUNXI_PINCTRL_PIN_PI25  PINCTRL_PIN(PI_BASE + 25, "PI25")
 318#define SUNXI_PINCTRL_PIN_PI26  PINCTRL_PIN(PI_BASE + 26, "PI26")
 319#define SUNXI_PINCTRL_PIN_PI27  PINCTRL_PIN(PI_BASE + 27, "PI27")
 320#define SUNXI_PINCTRL_PIN_PI28  PINCTRL_PIN(PI_BASE + 28, "PI28")
 321#define SUNXI_PINCTRL_PIN_PI29  PINCTRL_PIN(PI_BASE + 29, "PI29")
 322#define SUNXI_PINCTRL_PIN_PI30  PINCTRL_PIN(PI_BASE + 30, "PI30")
 323#define SUNXI_PINCTRL_PIN_PI31  PINCTRL_PIN(PI_BASE + 31, "PI31")
 324
 325#define SUNXI_PIN_NAME_MAX_LEN  5
 326
 327#define BANK_MEM_SIZE           0x24
 328#define MUX_REGS_OFFSET         0x0
 329#define DATA_REGS_OFFSET        0x10
 330#define DLEVEL_REGS_OFFSET      0x14
 331#define PULL_REGS_OFFSET        0x1c
 332
 333#define PINS_PER_BANK           32
 334#define MUX_PINS_PER_REG        8
 335#define MUX_PINS_BITS           4
 336#define MUX_PINS_MASK           0x0f
 337#define DATA_PINS_PER_REG       32
 338#define DATA_PINS_BITS          1
 339#define DATA_PINS_MASK          0x01
 340#define DLEVEL_PINS_PER_REG     16
 341#define DLEVEL_PINS_BITS        2
 342#define DLEVEL_PINS_MASK        0x03
 343#define PULL_PINS_PER_REG       16
 344#define PULL_PINS_BITS          2
 345#define PULL_PINS_MASK          0x03
 346
 347struct sunxi_desc_function {
 348        const char      *name;
 349        u8              muxval;
 350};
 351
 352struct sunxi_desc_pin {
 353        struct pinctrl_pin_desc         pin;
 354        struct sunxi_desc_function      *functions;
 355};
 356
 357struct sunxi_pinctrl_desc {
 358        const struct sunxi_desc_pin     *pins;
 359        int                             npins;
 360        struct pinctrl_gpio_range       *ranges;
 361        int                             nranges;
 362};
 363
 364struct sunxi_pinctrl_function {
 365        const char      *name;
 366        const char      **groups;
 367        unsigned        ngroups;
 368};
 369
 370struct sunxi_pinctrl_group {
 371        const char      *name;
 372        unsigned long   config;
 373        unsigned        pin;
 374};
 375
 376struct sunxi_pinctrl {
 377        void __iomem                    *membase;
 378        struct gpio_chip                *chip;
 379        struct sunxi_pinctrl_desc       *desc;
 380        struct device                   *dev;
 381        struct sunxi_pinctrl_function   *functions;
 382        unsigned                        nfunctions;
 383        struct sunxi_pinctrl_group      *groups;
 384        unsigned                        ngroups;
 385        struct pinctrl_dev              *pctl_dev;
 386};
 387
 388#define SUNXI_PIN(_pin, ...)                                    \
 389        {                                                       \
 390                .pin = _pin,                                    \
 391                .functions = (struct sunxi_desc_function[]){    \
 392                        __VA_ARGS__, { } },                     \
 393        }
 394
 395#define SUNXI_FUNCTION(_val, _name)                             \
 396        {                                                       \
 397                .name = _name,                                  \
 398                .muxval = _val,                                 \
 399        }
 400
 401/*
 402 * The sunXi PIO registers are organized as is:
 403 * 0x00 - 0x0c  Muxing values.
 404 *              8 pins per register, each pin having a 4bits value
 405 * 0x10         Pin values
 406 *              32 bits per register, each pin corresponding to one bit
 407 * 0x14 - 0x18  Drive level
 408 *              16 pins per register, each pin having a 2bits value
 409 * 0x1c - 0x20  Pull-Up values
 410 *              16 pins per register, each pin having a 2bits value
 411 *
 412 * This is for the first bank. Each bank will have the same layout,
 413 * with an offset being a multiple of 0x24.
 414 *
 415 * The following functions calculate from the pin number the register
 416 * and the bit offset that we should access.
 417 */
 418static inline u32 sunxi_mux_reg(u16 pin)
 419{
 420        u8 bank = pin / PINS_PER_BANK;
 421        u32 offset = bank * BANK_MEM_SIZE;
 422        offset += MUX_REGS_OFFSET;
 423        offset += pin % PINS_PER_BANK / MUX_PINS_PER_REG * 0x04;
 424        return round_down(offset, 4);
 425}
 426
 427static inline u32 sunxi_mux_offset(u16 pin)
 428{
 429        u32 pin_num = pin % MUX_PINS_PER_REG;
 430        return pin_num * MUX_PINS_BITS;
 431}
 432
 433static inline u32 sunxi_data_reg(u16 pin)
 434{
 435        u8 bank = pin / PINS_PER_BANK;
 436        u32 offset = bank * BANK_MEM_SIZE;
 437        offset += DATA_REGS_OFFSET;
 438        offset += pin % PINS_PER_BANK / DATA_PINS_PER_REG * 0x04;
 439        return round_down(offset, 4);
 440}
 441
 442static inline u32 sunxi_data_offset(u16 pin)
 443{
 444        u32 pin_num = pin % DATA_PINS_PER_REG;
 445        return pin_num * DATA_PINS_BITS;
 446}
 447
 448static inline u32 sunxi_dlevel_reg(u16 pin)
 449{
 450        u8 bank = pin / PINS_PER_BANK;
 451        u32 offset = bank * BANK_MEM_SIZE;
 452        offset += DLEVEL_REGS_OFFSET;
 453        offset += pin % PINS_PER_BANK / DLEVEL_PINS_PER_REG * 0x04;
 454        return round_down(offset, 4);
 455}
 456
 457static inline u32 sunxi_dlevel_offset(u16 pin)
 458{
 459        u32 pin_num = pin % DLEVEL_PINS_PER_REG;
 460        return pin_num * DLEVEL_PINS_BITS;
 461}
 462
 463static inline u32 sunxi_pull_reg(u16 pin)
 464{
 465        u8 bank = pin / PINS_PER_BANK;
 466        u32 offset = bank * BANK_MEM_SIZE;
 467        offset += PULL_REGS_OFFSET;
 468        offset += pin % PINS_PER_BANK / PULL_PINS_PER_REG * 0x04;
 469        return round_down(offset, 4);
 470}
 471
 472static inline u32 sunxi_pull_offset(u16 pin)
 473{
 474        u32 pin_num = pin % PULL_PINS_PER_REG;
 475        return pin_num * PULL_PINS_BITS;
 476}
 477
 478#endif /* __PINCTRL_SUNXI_H */
 479