Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Driver for the U300 pin controller
   4 *
   5 * Based on the original U300 padmux functions
   6 * Copyright (C) 2009-2011 ST-Ericsson AB
   7 * Author: Martin Persson <martin.persson@stericsson.com>
   8 * Author: Linus Walleij <linus.walleij@linaro.org>
   9 *
  10 * The DB3350 design and control registers are oriented around pads rather than
  11 * pins, so we enumerate the pads we can mux rather than actual pins. The pads
  12 * are connected to different pins in different packaging types, so it would
  13 * be confusing.
  14 */
  15#include <linux/init.h>
  16#include <linux/module.h>
  17#include <linux/mod_devicetable.h>
  18#include <linux/platform_device.h>
  19#include <linux/io.h>
  20#include <linux/slab.h>
  21#include <linux/err.h>
  22#include <linux/pinctrl/pinctrl.h>
  23#include <linux/pinctrl/pinmux.h>
  24#include <linux/pinctrl/pinconf.h>
  25#include <linux/pinctrl/pinconf-generic.h>
  26#include "pinctrl-coh901.h"
  27
  28/*
  29 * Register definitions for the U300 Padmux control registers in the
  30 * system controller
  31 */
  32
  33/* PAD MUX Control register 1 (LOW) 16bit (R/W) */
  34#define U300_SYSCON_PMC1LR					0x007C
  35#define U300_SYSCON_PMC1LR_MASK					0xFFFF
  36#define U300_SYSCON_PMC1LR_CDI_MASK				0xC000
  37#define U300_SYSCON_PMC1LR_CDI_CDI				0x0000
  38#define U300_SYSCON_PMC1LR_CDI_EMIF				0x4000
  39/* For BS335 */
  40#define U300_SYSCON_PMC1LR_CDI_CDI2				0x8000
  41#define U300_SYSCON_PMC1LR_CDI_WCDMA_APP_GPIO			0xC000
  42/* For BS365 */
  43#define U300_SYSCON_PMC1LR_CDI_GPIO				0x8000
  44#define U300_SYSCON_PMC1LR_CDI_WCDMA				0xC000
  45/* Common defs */
  46#define U300_SYSCON_PMC1LR_PDI_MASK				0x3000
  47#define U300_SYSCON_PMC1LR_PDI_PDI				0x0000
  48#define U300_SYSCON_PMC1LR_PDI_EGG				0x1000
  49#define U300_SYSCON_PMC1LR_PDI_WCDMA				0x3000
  50#define U300_SYSCON_PMC1LR_MMCSD_MASK				0x0C00
  51#define U300_SYSCON_PMC1LR_MMCSD_MMCSD				0x0000
  52#define U300_SYSCON_PMC1LR_MMCSD_MSPRO				0x0400
  53#define U300_SYSCON_PMC1LR_MMCSD_DSP				0x0800
  54#define U300_SYSCON_PMC1LR_MMCSD_WCDMA				0x0C00
  55#define U300_SYSCON_PMC1LR_ETM_MASK				0x0300
  56#define U300_SYSCON_PMC1LR_ETM_ACC				0x0000
  57#define U300_SYSCON_PMC1LR_ETM_APP				0x0100
  58#define U300_SYSCON_PMC1LR_EMIF_1_CS2_MASK			0x00C0
  59#define U300_SYSCON_PMC1LR_EMIF_1_CS2_STATIC			0x0000
  60#define U300_SYSCON_PMC1LR_EMIF_1_CS2_NFIF			0x0040
  61#define U300_SYSCON_PMC1LR_EMIF_1_CS2_SDRAM			0x0080
  62#define U300_SYSCON_PMC1LR_EMIF_1_CS2_STATIC_2GB		0x00C0
  63#define U300_SYSCON_PMC1LR_EMIF_1_CS1_MASK			0x0030
  64#define U300_SYSCON_PMC1LR_EMIF_1_CS1_STATIC			0x0000
  65#define U300_SYSCON_PMC1LR_EMIF_1_CS1_NFIF			0x0010
  66#define U300_SYSCON_PMC1LR_EMIF_1_CS1_SDRAM			0x0020
  67#define U300_SYSCON_PMC1LR_EMIF_1_CS1_SEMI			0x0030
  68#define U300_SYSCON_PMC1LR_EMIF_1_CS0_MASK			0x000C
  69#define U300_SYSCON_PMC1LR_EMIF_1_CS0_STATIC			0x0000
  70#define U300_SYSCON_PMC1LR_EMIF_1_CS0_NFIF			0x0004
  71#define U300_SYSCON_PMC1LR_EMIF_1_CS0_SDRAM			0x0008
  72#define U300_SYSCON_PMC1LR_EMIF_1_CS0_SEMI			0x000C
  73#define U300_SYSCON_PMC1LR_EMIF_1_MASK				0x0003
  74#define U300_SYSCON_PMC1LR_EMIF_1_STATIC			0x0000
  75#define U300_SYSCON_PMC1LR_EMIF_1_SDRAM0			0x0001
  76#define U300_SYSCON_PMC1LR_EMIF_1_SDRAM1			0x0002
  77#define U300_SYSCON_PMC1LR_EMIF_1				0x0003
  78/* PAD MUX Control register 2 (HIGH) 16bit (R/W) */
  79#define U300_SYSCON_PMC1HR					0x007E
  80#define U300_SYSCON_PMC1HR_MASK					0xFFFF
  81#define U300_SYSCON_PMC1HR_MISC_2_MASK				0xC000
  82#define U300_SYSCON_PMC1HR_MISC_2_APP_GPIO			0x0000
  83#define U300_SYSCON_PMC1HR_MISC_2_MSPRO				0x4000
  84#define U300_SYSCON_PMC1HR_MISC_2_DSP				0x8000
  85#define U300_SYSCON_PMC1HR_MISC_2_AAIF				0xC000
  86#define U300_SYSCON_PMC1HR_APP_GPIO_2_MASK			0x3000
  87#define U300_SYSCON_PMC1HR_APP_GPIO_2_APP_GPIO			0x0000
  88#define U300_SYSCON_PMC1HR_APP_GPIO_2_NFIF			0x1000
  89#define U300_SYSCON_PMC1HR_APP_GPIO_2_DSP			0x2000
  90#define U300_SYSCON_PMC1HR_APP_GPIO_2_AAIF			0x3000
  91#define U300_SYSCON_PMC1HR_APP_GPIO_1_MASK			0x0C00
  92#define U300_SYSCON_PMC1HR_APP_GPIO_1_APP_GPIO			0x0000
  93#define U300_SYSCON_PMC1HR_APP_GPIO_1_MMC			0x0400
  94#define U300_SYSCON_PMC1HR_APP_GPIO_1_DSP			0x0800
  95#define U300_SYSCON_PMC1HR_APP_GPIO_1_AAIF			0x0C00
  96#define U300_SYSCON_PMC1HR_APP_SPI_CS_2_MASK			0x0300
  97#define U300_SYSCON_PMC1HR_APP_SPI_CS_2_APP_GPIO		0x0000
  98#define U300_SYSCON_PMC1HR_APP_SPI_CS_2_SPI			0x0100
  99#define U300_SYSCON_PMC1HR_APP_SPI_CS_2_AAIF			0x0300
 100#define U300_SYSCON_PMC1HR_APP_SPI_CS_1_MASK			0x00C0
 101#define U300_SYSCON_PMC1HR_APP_SPI_CS_1_APP_GPIO		0x0000
 102#define U300_SYSCON_PMC1HR_APP_SPI_CS_1_SPI			0x0040
 103#define U300_SYSCON_PMC1HR_APP_SPI_CS_1_AAIF			0x00C0
 104#define U300_SYSCON_PMC1HR_APP_SPI_2_MASK			0x0030
 105#define U300_SYSCON_PMC1HR_APP_SPI_2_APP_GPIO			0x0000
 106#define U300_SYSCON_PMC1HR_APP_SPI_2_SPI			0x0010
 107#define U300_SYSCON_PMC1HR_APP_SPI_2_DSP			0x0020
 108#define U300_SYSCON_PMC1HR_APP_SPI_2_AAIF			0x0030
 109#define U300_SYSCON_PMC1HR_APP_UART0_2_MASK			0x000C
 110#define U300_SYSCON_PMC1HR_APP_UART0_2_APP_GPIO			0x0000
 111#define U300_SYSCON_PMC1HR_APP_UART0_2_UART0			0x0004
 112#define U300_SYSCON_PMC1HR_APP_UART0_2_NFIF_CS			0x0008
 113#define U300_SYSCON_PMC1HR_APP_UART0_2_AAIF			0x000C
 114#define U300_SYSCON_PMC1HR_APP_UART0_1_MASK			0x0003
 115#define U300_SYSCON_PMC1HR_APP_UART0_1_APP_GPIO			0x0000
 116#define U300_SYSCON_PMC1HR_APP_UART0_1_UART0			0x0001
 117#define U300_SYSCON_PMC1HR_APP_UART0_1_AAIF			0x0003
 118/* Padmux 2 control */
 119#define U300_SYSCON_PMC2R					0x100
 120#define U300_SYSCON_PMC2R_APP_MISC_0_MASK			0x00C0
 121#define U300_SYSCON_PMC2R_APP_MISC_0_APP_GPIO			0x0000
 122#define U300_SYSCON_PMC2R_APP_MISC_0_EMIF_SDRAM			0x0040
 123#define U300_SYSCON_PMC2R_APP_MISC_0_MMC			0x0080
 124#define U300_SYSCON_PMC2R_APP_MISC_0_CDI2			0x00C0
 125#define U300_SYSCON_PMC2R_APP_MISC_1_MASK			0x0300
 126#define U300_SYSCON_PMC2R_APP_MISC_1_APP_GPIO			0x0000
 127#define U300_SYSCON_PMC2R_APP_MISC_1_EMIF_SDRAM			0x0100
 128#define U300_SYSCON_PMC2R_APP_MISC_1_MMC			0x0200
 129#define U300_SYSCON_PMC2R_APP_MISC_1_CDI2			0x0300
 130#define U300_SYSCON_PMC2R_APP_MISC_2_MASK			0x0C00
 131#define U300_SYSCON_PMC2R_APP_MISC_2_APP_GPIO			0x0000
 132#define U300_SYSCON_PMC2R_APP_MISC_2_EMIF_SDRAM			0x0400
 133#define U300_SYSCON_PMC2R_APP_MISC_2_MMC			0x0800
 134#define U300_SYSCON_PMC2R_APP_MISC_2_CDI2			0x0C00
 135#define U300_SYSCON_PMC2R_APP_MISC_3_MASK			0x3000
 136#define U300_SYSCON_PMC2R_APP_MISC_3_APP_GPIO			0x0000
 137#define U300_SYSCON_PMC2R_APP_MISC_3_EMIF_SDRAM			0x1000
 138#define U300_SYSCON_PMC2R_APP_MISC_3_MMC			0x2000
 139#define U300_SYSCON_PMC2R_APP_MISC_3_CDI2			0x3000
 140#define U300_SYSCON_PMC2R_APP_MISC_4_MASK			0xC000
 141#define U300_SYSCON_PMC2R_APP_MISC_4_APP_GPIO			0x0000
 142#define U300_SYSCON_PMC2R_APP_MISC_4_EMIF_SDRAM			0x4000
 143#define U300_SYSCON_PMC2R_APP_MISC_4_MMC			0x8000
 144#define U300_SYSCON_PMC2R_APP_MISC_4_ACC_GPIO			0xC000
 145/* TODO: More SYSCON registers missing */
 146#define U300_SYSCON_PMC3R					0x10C
 147#define U300_SYSCON_PMC3R_APP_MISC_11_MASK			0xC000
 148#define U300_SYSCON_PMC3R_APP_MISC_11_SPI			0x4000
 149#define U300_SYSCON_PMC3R_APP_MISC_10_MASK			0x3000
 150#define U300_SYSCON_PMC3R_APP_MISC_10_SPI			0x1000
 151/* TODO: Missing other configs */
 152#define U300_SYSCON_PMC4R					0x168
 153#define U300_SYSCON_PMC4R_APP_MISC_12_MASK			0x0003
 154#define U300_SYSCON_PMC4R_APP_MISC_12_APP_GPIO			0x0000
 155#define U300_SYSCON_PMC4R_APP_MISC_13_MASK			0x000C
 156#define U300_SYSCON_PMC4R_APP_MISC_13_CDI			0x0000
 157#define U300_SYSCON_PMC4R_APP_MISC_13_SMIA			0x0004
 158#define U300_SYSCON_PMC4R_APP_MISC_13_SMIA2			0x0008
 159#define U300_SYSCON_PMC4R_APP_MISC_13_APP_GPIO			0x000C
 160#define U300_SYSCON_PMC4R_APP_MISC_14_MASK			0x0030
 161#define U300_SYSCON_PMC4R_APP_MISC_14_CDI			0x0000
 162#define U300_SYSCON_PMC4R_APP_MISC_14_SMIA			0x0010
 163#define U300_SYSCON_PMC4R_APP_MISC_14_CDI2			0x0020
 164#define U300_SYSCON_PMC4R_APP_MISC_14_APP_GPIO			0x0030
 165#define U300_SYSCON_PMC4R_APP_MISC_16_MASK			0x0300
 166#define U300_SYSCON_PMC4R_APP_MISC_16_APP_GPIO_13		0x0000
 167#define U300_SYSCON_PMC4R_APP_MISC_16_APP_UART1_CTS		0x0100
 168#define U300_SYSCON_PMC4R_APP_MISC_16_EMIF_1_STATIC_CS5_N	0x0200
 169
 170#define DRIVER_NAME "pinctrl-u300"
 171
 172/*
 173 * The DB3350 has 467 pads, I have enumerated the pads clockwise around the
 174 * edges of the silicon, finger by finger. LTCORNER upper left is pad 0.
 175 * Data taken from the PadRing chart, arranged like this:
 176 *
 177 *   0 ..... 104
 178 * 466        105
 179 *   .        .
 180 *   .        .
 181 * 358        224
 182 *  357 .... 225
 183 */
 184#define U300_NUM_PADS 467
 185
 186/* Pad names for the pinmux subsystem */
 187static const struct pinctrl_pin_desc u300_pads[] = {
 188	/* Pads along the top edge of the chip */
 189	PINCTRL_PIN(0, "P PAD VDD 28"),
 190	PINCTRL_PIN(1, "P PAD GND 28"),
 191	PINCTRL_PIN(2, "PO SIM RST N"),
 192	PINCTRL_PIN(3, "VSSIO 25"),
 193	PINCTRL_PIN(4, "VSSA ADDA ESDSUB"),
 194	PINCTRL_PIN(5, "PWR VSSCOMMON"),
 195	PINCTRL_PIN(6, "PI ADC I1 POS"),
 196	PINCTRL_PIN(7, "PI ADC I1 NEG"),
 197	PINCTRL_PIN(8, "PWR VSSAD0"),
 198	PINCTRL_PIN(9, "PWR VCCAD0"),
 199	PINCTRL_PIN(10, "PI ADC Q1 NEG"),
 200	PINCTRL_PIN(11, "PI ADC Q1 POS"),
 201	PINCTRL_PIN(12, "PWR VDDAD"),
 202	PINCTRL_PIN(13, "PWR GNDAD"),
 203	PINCTRL_PIN(14, "PI ADC I2 POS"),
 204	PINCTRL_PIN(15, "PI ADC I2 NEG"),
 205	PINCTRL_PIN(16, "PWR VSSAD1"),
 206	PINCTRL_PIN(17, "PWR VCCAD1"),
 207	PINCTRL_PIN(18, "PI ADC Q2 NEG"),
 208	PINCTRL_PIN(19, "PI ADC Q2 POS"),
 209	PINCTRL_PIN(20, "VSSA ADDA ESDSUB"),
 210	PINCTRL_PIN(21, "PWR VCCGPAD"),
 211	PINCTRL_PIN(22, "PI TX POW"),
 212	PINCTRL_PIN(23, "PWR VSSGPAD"),
 213	PINCTRL_PIN(24, "PO DAC I POS"),
 214	PINCTRL_PIN(25, "PO DAC I NEG"),
 215	PINCTRL_PIN(26, "PO DAC Q POS"),
 216	PINCTRL_PIN(27, "PO DAC Q NEG"),
 217	PINCTRL_PIN(28, "PWR VSSDA"),
 218	PINCTRL_PIN(29, "PWR VCCDA"),
 219	PINCTRL_PIN(30, "VSSA ADDA ESDSUB"),
 220	PINCTRL_PIN(31, "P PAD VDDIO 11"),
 221	PINCTRL_PIN(32, "PI PLL 26 FILTVDD"),
 222	PINCTRL_PIN(33, "PI PLL 26 VCONT"),
 223	PINCTRL_PIN(34, "PWR AGNDPLL2V5 32 13"),
 224	PINCTRL_PIN(35, "PWR AVDDPLL2V5 32 13"),
 225	PINCTRL_PIN(36, "VDDA PLL ESD"),
 226	PINCTRL_PIN(37, "VSSA PLL ESD"),
 227	PINCTRL_PIN(38, "VSS PLL"),
 228	PINCTRL_PIN(39, "VDDC PLL"),
 229	PINCTRL_PIN(40, "PWR AGNDPLL2V5 26 60"),
 230	PINCTRL_PIN(41, "PWR AVDDPLL2V5 26 60"),
 231	PINCTRL_PIN(42, "PWR AVDDPLL2V5 26 208"),
 232	PINCTRL_PIN(43, "PWR AGNDPLL2V5 26 208"),
 233	PINCTRL_PIN(44, "PWR AVDDPLL2V5 13 208"),
 234	PINCTRL_PIN(45, "PWR AGNDPLL2V5 13 208"),
 235	PINCTRL_PIN(46, "P PAD VSSIO 11"),
 236	PINCTRL_PIN(47, "P PAD VSSIO 12"),
 237	PINCTRL_PIN(48, "PI POW RST N"),
 238	PINCTRL_PIN(49, "VDDC IO"),
 239	PINCTRL_PIN(50, "P PAD VDDIO 16"),
 240	PINCTRL_PIN(51, "PO RF WCDMA EN 4"),
 241	PINCTRL_PIN(52, "PO RF WCDMA EN 3"),
 242	PINCTRL_PIN(53, "PO RF WCDMA EN 2"),
 243	PINCTRL_PIN(54, "PO RF WCDMA EN 1"),
 244	PINCTRL_PIN(55, "PO RF WCDMA EN 0"),
 245	PINCTRL_PIN(56, "PO GSM PA ENABLE"),
 246	PINCTRL_PIN(57, "PO RF DATA STRB"),
 247	PINCTRL_PIN(58, "PO RF DATA2"),
 248	PINCTRL_PIN(59, "PIO RF DATA1"),
 249	PINCTRL_PIN(60, "PIO RF DATA0"),
 250	PINCTRL_PIN(61, "P PAD VDD 11"),
 251	PINCTRL_PIN(62, "P PAD GND 11"),
 252	PINCTRL_PIN(63, "P PAD VSSIO 16"),
 253	PINCTRL_PIN(64, "P PAD VDDIO 18"),
 254	PINCTRL_PIN(65, "PO RF CTRL STRB2"),
 255	PINCTRL_PIN(66, "PO RF CTRL STRB1"),
 256	PINCTRL_PIN(67, "PO RF CTRL STRB0"),
 257	PINCTRL_PIN(68, "PIO RF CTRL DATA"),
 258	PINCTRL_PIN(69, "PO RF CTRL CLK"),
 259	PINCTRL_PIN(70, "PO TX ADC STRB"),
 260	PINCTRL_PIN(71, "PO ANT SW 2"),
 261	PINCTRL_PIN(72, "PO ANT SW 3"),
 262	PINCTRL_PIN(73, "PO ANT SW 0"),
 263	PINCTRL_PIN(74, "PO ANT SW 1"),
 264	PINCTRL_PIN(75, "PO M CLKRQ"),
 265	PINCTRL_PIN(76, "PI M CLK"),
 266	PINCTRL_PIN(77, "PI RTC CLK"),
 267	PINCTRL_PIN(78, "P PAD VDD 8"),
 268	PINCTRL_PIN(79, "P PAD GND 8"),
 269	PINCTRL_PIN(80, "P PAD VSSIO 13"),
 270	PINCTRL_PIN(81, "P PAD VDDIO 13"),
 271	PINCTRL_PIN(82, "PO SYS 1 CLK"),
 272	PINCTRL_PIN(83, "PO SYS 2 CLK"),
 273	PINCTRL_PIN(84, "PO SYS 0 CLK"),
 274	PINCTRL_PIN(85, "PI SYS 0 CLKRQ"),
 275	PINCTRL_PIN(86, "PO PWR MNGT CTRL 1"),
 276	PINCTRL_PIN(87, "PO PWR MNGT CTRL 0"),
 277	PINCTRL_PIN(88, "PO RESOUT2 RST N"),
 278	PINCTRL_PIN(89, "PO RESOUT1 RST N"),
 279	PINCTRL_PIN(90, "PO RESOUT0 RST N"),
 280	PINCTRL_PIN(91, "PI SERVICE N"),
 281	PINCTRL_PIN(92, "P PAD VDD 29"),
 282	PINCTRL_PIN(93, "P PAD GND 29"),
 283	PINCTRL_PIN(94, "P PAD VSSIO 8"),
 284	PINCTRL_PIN(95, "P PAD VDDIO 8"),
 285	PINCTRL_PIN(96, "PI EXT IRQ1 N"),
 286	PINCTRL_PIN(97, "PI EXT IRQ0 N"),
 287	PINCTRL_PIN(98, "PIO DC ON"),
 288	PINCTRL_PIN(99, "PIO ACC APP I2C DATA"),
 289	PINCTRL_PIN(100, "PIO ACC APP I2C CLK"),
 290	PINCTRL_PIN(101, "P PAD VDD 12"),
 291	PINCTRL_PIN(102, "P PAD GND 12"),
 292	PINCTRL_PIN(103, "P PAD VSSIO 14"),
 293	PINCTRL_PIN(104, "P PAD VDDIO 14"),
 294	/* Pads along the right edge of the chip */
 295	PINCTRL_PIN(105, "PIO APP I2C1 DATA"),
 296	PINCTRL_PIN(106, "PIO APP I2C1 CLK"),
 297	PINCTRL_PIN(107, "PO KEY OUT0"),
 298	PINCTRL_PIN(108, "PO KEY OUT1"),
 299	PINCTRL_PIN(109, "PO KEY OUT2"),
 300	PINCTRL_PIN(110, "PO KEY OUT3"),
 301	PINCTRL_PIN(111, "PO KEY OUT4"),
 302	PINCTRL_PIN(112, "PI KEY IN0"),
 303	PINCTRL_PIN(113, "PI KEY IN1"),
 304	PINCTRL_PIN(114, "PI KEY IN2"),
 305	PINCTRL_PIN(115, "P PAD VDDIO 15"),
 306	PINCTRL_PIN(116, "P PAD VSSIO 15"),
 307	PINCTRL_PIN(117, "P PAD GND 13"),
 308	PINCTRL_PIN(118, "P PAD VDD 13"),
 309	PINCTRL_PIN(119, "PI KEY IN3"),
 310	PINCTRL_PIN(120, "PI KEY IN4"),
 311	PINCTRL_PIN(121, "PI KEY IN5"),
 312	PINCTRL_PIN(122, "PIO APP PCM I2S1 DATA B"),
 313	PINCTRL_PIN(123, "PIO APP PCM I2S1 DATA A"),
 314	PINCTRL_PIN(124, "PIO APP PCM I2S1 WS"),
 315	PINCTRL_PIN(125, "PIO APP PCM I2S1 CLK"),
 316	PINCTRL_PIN(126, "PIO APP PCM I2S0 DATA B"),
 317	PINCTRL_PIN(127, "PIO APP PCM I2S0 DATA A"),
 318	PINCTRL_PIN(128, "PIO APP PCM I2S0 WS"),
 319	PINCTRL_PIN(129, "PIO APP PCM I2S0 CLK"),
 320	PINCTRL_PIN(130, "P PAD VDD 17"),
 321	PINCTRL_PIN(131, "P PAD GND 17"),
 322	PINCTRL_PIN(132, "P PAD VSSIO 19"),
 323	PINCTRL_PIN(133, "P PAD VDDIO 19"),
 324	PINCTRL_PIN(134, "UART0 RTS"),
 325	PINCTRL_PIN(135, "UART0 CTS"),
 326	PINCTRL_PIN(136, "UART0 TX"),
 327	PINCTRL_PIN(137, "UART0 RX"),
 328	PINCTRL_PIN(138, "PIO ACC SPI DO"),
 329	PINCTRL_PIN(139, "PIO ACC SPI DI"),
 330	PINCTRL_PIN(140, "PIO ACC SPI CS0 N"),
 331	PINCTRL_PIN(141, "PIO ACC SPI CS1 N"),
 332	PINCTRL_PIN(142, "PIO ACC SPI CS2 N"),
 333	PINCTRL_PIN(143, "PIO ACC SPI CLK"),
 334	PINCTRL_PIN(144, "PO PDI EXT RST N"),
 335	PINCTRL_PIN(145, "P PAD VDDIO 22"),
 336	PINCTRL_PIN(146, "P PAD VSSIO 22"),
 337	PINCTRL_PIN(147, "P PAD GND 18"),
 338	PINCTRL_PIN(148, "P PAD VDD 18"),
 339	PINCTRL_PIN(149, "PIO PDI C0"),
 340	PINCTRL_PIN(150, "PIO PDI C1"),
 341	PINCTRL_PIN(151, "PIO PDI C2"),
 342	PINCTRL_PIN(152, "PIO PDI C3"),
 343	PINCTRL_PIN(153, "PIO PDI C4"),
 344	PINCTRL_PIN(154, "PIO PDI C5"),
 345	PINCTRL_PIN(155, "PIO PDI D0"),
 346	PINCTRL_PIN(156, "PIO PDI D1"),
 347	PINCTRL_PIN(157, "PIO PDI D2"),
 348	PINCTRL_PIN(158, "PIO PDI D3"),
 349	PINCTRL_PIN(159, "P PAD VDDIO 21"),
 350	PINCTRL_PIN(160, "P PAD VSSIO 21"),
 351	PINCTRL_PIN(161, "PIO PDI D4"),
 352	PINCTRL_PIN(162, "PIO PDI D5"),
 353	PINCTRL_PIN(163, "PIO PDI D6"),
 354	PINCTRL_PIN(164, "PIO PDI D7"),
 355	PINCTRL_PIN(165, "PIO MS INS"),
 356	PINCTRL_PIN(166, "MMC DATA DIR LS"),
 357	PINCTRL_PIN(167, "MMC DATA 3"),
 358	PINCTRL_PIN(168, "MMC DATA 2"),
 359	PINCTRL_PIN(169, "MMC DATA 1"),
 360	PINCTRL_PIN(170, "MMC DATA 0"),
 361	PINCTRL_PIN(171, "MMC CMD DIR LS"),
 362	PINCTRL_PIN(172, "P PAD VDD 27"),
 363	PINCTRL_PIN(173, "P PAD GND 27"),
 364	PINCTRL_PIN(174, "P PAD VSSIO 20"),
 365	PINCTRL_PIN(175, "P PAD VDDIO 20"),
 366	PINCTRL_PIN(176, "MMC CMD"),
 367	PINCTRL_PIN(177, "MMC CLK"),
 368	PINCTRL_PIN(178, "PIO APP GPIO 14"),
 369	PINCTRL_PIN(179, "PIO APP GPIO 13"),
 370	PINCTRL_PIN(180, "PIO APP GPIO 11"),
 371	PINCTRL_PIN(181, "PIO APP GPIO 25"),
 372	PINCTRL_PIN(182, "PIO APP GPIO 24"),
 373	PINCTRL_PIN(183, "PIO APP GPIO 23"),
 374	PINCTRL_PIN(184, "PIO APP GPIO 22"),
 375	PINCTRL_PIN(185, "PIO APP GPIO 21"),
 376	PINCTRL_PIN(186, "PIO APP GPIO 20"),
 377	PINCTRL_PIN(187, "P PAD VDD 19"),
 378	PINCTRL_PIN(188, "P PAD GND 19"),
 379	PINCTRL_PIN(189, "P PAD VSSIO 23"),
 380	PINCTRL_PIN(190, "P PAD VDDIO 23"),
 381	PINCTRL_PIN(191, "PIO APP GPIO 19"),
 382	PINCTRL_PIN(192, "PIO APP GPIO 18"),
 383	PINCTRL_PIN(193, "PIO APP GPIO 17"),
 384	PINCTRL_PIN(194, "PIO APP GPIO 16"),
 385	PINCTRL_PIN(195, "PI CI D1"),
 386	PINCTRL_PIN(196, "PI CI D0"),
 387	PINCTRL_PIN(197, "PI CI HSYNC"),
 388	PINCTRL_PIN(198, "PI CI VSYNC"),
 389	PINCTRL_PIN(199, "PI CI EXT CLK"),
 390	PINCTRL_PIN(200, "PO CI EXT RST N"),
 391	PINCTRL_PIN(201, "P PAD VSSIO 43"),
 392	PINCTRL_PIN(202, "P PAD VDDIO 43"),
 393	PINCTRL_PIN(203, "PI CI D6"),
 394	PINCTRL_PIN(204, "PI CI D7"),
 395	PINCTRL_PIN(205, "PI CI D2"),
 396	PINCTRL_PIN(206, "PI CI D3"),
 397	PINCTRL_PIN(207, "PI CI D4"),
 398	PINCTRL_PIN(208, "PI CI D5"),
 399	PINCTRL_PIN(209, "PI CI D8"),
 400	PINCTRL_PIN(210, "PI CI D9"),
 401	PINCTRL_PIN(211, "P PAD VDD 20"),
 402	PINCTRL_PIN(212, "P PAD GND 20"),
 403	PINCTRL_PIN(213, "P PAD VSSIO 24"),
 404	PINCTRL_PIN(214, "P PAD VDDIO 24"),
 405	PINCTRL_PIN(215, "P PAD VDDIO 26"),
 406	PINCTRL_PIN(216, "PO EMIF 1 A26"),
 407	PINCTRL_PIN(217, "PO EMIF 1 A25"),
 408	PINCTRL_PIN(218, "P PAD VSSIO 26"),
 409	PINCTRL_PIN(219, "PO EMIF 1 A24"),
 410	PINCTRL_PIN(220, "PO EMIF 1 A23"),
 411	/* Pads along the bottom edge of the chip */
 412	PINCTRL_PIN(221, "PO EMIF 1 A22"),
 413	PINCTRL_PIN(222, "PO EMIF 1 A21"),
 414	PINCTRL_PIN(223, "P PAD VDD 21"),
 415	PINCTRL_PIN(224, "P PAD GND 21"),
 416	PINCTRL_PIN(225, "P PAD VSSIO 27"),
 417	PINCTRL_PIN(226, "P PAD VDDIO 27"),
 418	PINCTRL_PIN(227, "PO EMIF 1 A20"),
 419	PINCTRL_PIN(228, "PO EMIF 1 A19"),
 420	PINCTRL_PIN(229, "PO EMIF 1 A18"),
 421	PINCTRL_PIN(230, "PO EMIF 1 A17"),
 422	PINCTRL_PIN(231, "P PAD VDDIO 28"),
 423	PINCTRL_PIN(232, "P PAD VSSIO 28"),
 424	PINCTRL_PIN(233, "PO EMIF 1 A16"),
 425	PINCTRL_PIN(234, "PIO EMIF 1 D15"),
 426	PINCTRL_PIN(235, "PO EMIF 1 A15"),
 427	PINCTRL_PIN(236, "PIO EMIF 1 D14"),
 428	PINCTRL_PIN(237, "P PAD VDD 22"),
 429	PINCTRL_PIN(238, "P PAD GND 22"),
 430	PINCTRL_PIN(239, "P PAD VSSIO 29"),
 431	PINCTRL_PIN(240, "P PAD VDDIO 29"),
 432	PINCTRL_PIN(241, "PO EMIF 1 A14"),
 433	PINCTRL_PIN(242, "PIO EMIF 1 D13"),
 434	PINCTRL_PIN(243, "PO EMIF 1 A13"),
 435	PINCTRL_PIN(244, "PIO EMIF 1 D12"),
 436	PINCTRL_PIN(245, "P PAD VSSIO 30"),
 437	PINCTRL_PIN(246, "P PAD VDDIO 30"),
 438	PINCTRL_PIN(247, "PO EMIF 1 A12"),
 439	PINCTRL_PIN(248, "PIO EMIF 1 D11"),
 440	PINCTRL_PIN(249, "PO EMIF 1 A11"),
 441	PINCTRL_PIN(250, "PIO EMIF 1 D10"),
 442	PINCTRL_PIN(251, "P PAD VSSIO 31"),
 443	PINCTRL_PIN(252, "P PAD VDDIO 31"),
 444	PINCTRL_PIN(253, "PO EMIF 1 A10"),
 445	PINCTRL_PIN(254, "PIO EMIF 1 D09"),
 446	PINCTRL_PIN(255, "PO EMIF 1 A09"),
 447	PINCTRL_PIN(256, "P PAD VDDIO 32"),
 448	PINCTRL_PIN(257, "P PAD VSSIO 32"),
 449	PINCTRL_PIN(258, "P PAD GND 24"),
 450	PINCTRL_PIN(259, "P PAD VDD 24"),
 451	PINCTRL_PIN(260, "PIO EMIF 1 D08"),
 452	PINCTRL_PIN(261, "PO EMIF 1 A08"),
 453	PINCTRL_PIN(262, "PIO EMIF 1 D07"),
 454	PINCTRL_PIN(263, "PO EMIF 1 A07"),
 455	PINCTRL_PIN(264, "P PAD VDDIO 33"),
 456	PINCTRL_PIN(265, "P PAD VSSIO 33"),
 457	PINCTRL_PIN(266, "PIO EMIF 1 D06"),
 458	PINCTRL_PIN(267, "PO EMIF 1 A06"),
 459	PINCTRL_PIN(268, "PIO EMIF 1 D05"),
 460	PINCTRL_PIN(269, "PO EMIF 1 A05"),
 461	PINCTRL_PIN(270, "P PAD VDDIO 34"),
 462	PINCTRL_PIN(271, "P PAD VSSIO 34"),
 463	PINCTRL_PIN(272, "PIO EMIF 1 D04"),
 464	PINCTRL_PIN(273, "PO EMIF 1 A04"),
 465	PINCTRL_PIN(274, "PIO EMIF 1 D03"),
 466	PINCTRL_PIN(275, "PO EMIF 1 A03"),
 467	PINCTRL_PIN(276, "P PAD VDDIO 35"),
 468	PINCTRL_PIN(277, "P PAD VSSIO 35"),
 469	PINCTRL_PIN(278, "P PAD GND 23"),
 470	PINCTRL_PIN(279, "P PAD VDD 23"),
 471	PINCTRL_PIN(280, "PIO EMIF 1 D02"),
 472	PINCTRL_PIN(281, "PO EMIF 1 A02"),
 473	PINCTRL_PIN(282, "PIO EMIF 1 D01"),
 474	PINCTRL_PIN(283, "PO EMIF 1 A01"),
 475	PINCTRL_PIN(284, "P PAD VDDIO 36"),
 476	PINCTRL_PIN(285, "P PAD VSSIO 36"),
 477	PINCTRL_PIN(286, "PIO EMIF 1 D00"),
 478	PINCTRL_PIN(287, "PO EMIF 1 BE1 N"),
 479	PINCTRL_PIN(288, "PO EMIF 1 BE0 N"),
 480	PINCTRL_PIN(289, "PO EMIF 1 ADV N"),
 481	PINCTRL_PIN(290, "P PAD VDDIO 37"),
 482	PINCTRL_PIN(291, "P PAD VSSIO 37"),
 483	PINCTRL_PIN(292, "PO EMIF 1 SD CKE0"),
 484	PINCTRL_PIN(293, "PO EMIF 1 OE N"),
 485	PINCTRL_PIN(294, "PO EMIF 1 WE N"),
 486	PINCTRL_PIN(295, "P PAD VDDIO 38"),
 487	PINCTRL_PIN(296, "P PAD VSSIO 38"),
 488	PINCTRL_PIN(297, "PO EMIF 1 CLK"),
 489	PINCTRL_PIN(298, "PIO EMIF 1 SD CLK"),
 490	PINCTRL_PIN(299, "P PAD VSSIO 45 (not bonded)"),
 491	PINCTRL_PIN(300, "P PAD VDDIO 42"),
 492	PINCTRL_PIN(301, "P PAD VSSIO 42"),
 493	PINCTRL_PIN(302, "P PAD GND 31"),
 494	PINCTRL_PIN(303, "P PAD VDD 31"),
 495	PINCTRL_PIN(304, "PI EMIF 1 RET CLK"),
 496	PINCTRL_PIN(305, "PI EMIF 1 WAIT N"),
 497	PINCTRL_PIN(306, "PI EMIF 1 NFIF READY"),
 498	PINCTRL_PIN(307, "PO EMIF 1 SD CKE1"),
 499	PINCTRL_PIN(308, "PO EMIF 1 CS3 N"),
 500	PINCTRL_PIN(309, "P PAD VDD 25"),
 501	PINCTRL_PIN(310, "P PAD GND 25"),
 502	PINCTRL_PIN(311, "P PAD VSSIO 39"),
 503	PINCTRL_PIN(312, "P PAD VDDIO 39"),
 504	PINCTRL_PIN(313, "PO EMIF 1 CS2 N"),
 505	PINCTRL_PIN(314, "PO EMIF 1 CS1 N"),
 506	PINCTRL_PIN(315, "PO EMIF 1 CS0 N"),
 507	PINCTRL_PIN(316, "PO ETM TRACE PKT0"),
 508	PINCTRL_PIN(317, "PO ETM TRACE PKT1"),
 509	PINCTRL_PIN(318, "PO ETM TRACE PKT2"),
 510	PINCTRL_PIN(319, "P PAD VDD 30"),
 511	PINCTRL_PIN(320, "P PAD GND 30"),
 512	PINCTRL_PIN(321, "P PAD VSSIO 44"),
 513	PINCTRL_PIN(322, "P PAD VDDIO 44"),
 514	PINCTRL_PIN(323, "PO ETM TRACE PKT3"),
 515	PINCTRL_PIN(324, "PO ETM TRACE PKT4"),
 516	PINCTRL_PIN(325, "PO ETM TRACE PKT5"),
 517	PINCTRL_PIN(326, "PO ETM TRACE PKT6"),
 518	PINCTRL_PIN(327, "PO ETM TRACE PKT7"),
 519	PINCTRL_PIN(328, "PO ETM PIPE STAT0"),
 520	PINCTRL_PIN(329, "P PAD VDD 26"),
 521	PINCTRL_PIN(330, "P PAD GND 26"),
 522	PINCTRL_PIN(331, "P PAD VSSIO 40"),
 523	PINCTRL_PIN(332, "P PAD VDDIO 40"),
 524	PINCTRL_PIN(333, "PO ETM PIPE STAT1"),
 525	PINCTRL_PIN(334, "PO ETM PIPE STAT2"),
 526	PINCTRL_PIN(335, "PO ETM TRACE CLK"),
 527	PINCTRL_PIN(336, "PO ETM TRACE SYNC"),
 528	PINCTRL_PIN(337, "PIO ACC GPIO 33"),
 529	PINCTRL_PIN(338, "PIO ACC GPIO 32"),
 530	PINCTRL_PIN(339, "PIO ACC GPIO 30"),
 531	PINCTRL_PIN(340, "PIO ACC GPIO 29"),
 532	PINCTRL_PIN(341, "P PAD VDDIO 17"),
 533	PINCTRL_PIN(342, "P PAD VSSIO 17"),
 534	PINCTRL_PIN(343, "P PAD GND 15"),
 535	PINCTRL_PIN(344, "P PAD VDD 15"),
 536	PINCTRL_PIN(345, "PIO ACC GPIO 28"),
 537	PINCTRL_PIN(346, "PIO ACC GPIO 27"),
 538	PINCTRL_PIN(347, "PIO ACC GPIO 16"),
 539	PINCTRL_PIN(348, "PI TAP TMS"),
 540	PINCTRL_PIN(349, "PI TAP TDI"),
 541	PINCTRL_PIN(350, "PO TAP TDO"),
 542	PINCTRL_PIN(351, "PI TAP RST N"),
 543	/* Pads along the left edge of the chip */
 544	PINCTRL_PIN(352, "PI EMU MODE 0"),
 545	PINCTRL_PIN(353, "PO TAP RET CLK"),
 546	PINCTRL_PIN(354, "PI TAP CLK"),
 547	PINCTRL_PIN(355, "PO EMIF 0 SD CS N"),
 548	PINCTRL_PIN(356, "PO EMIF 0 SD CAS N"),
 549	PINCTRL_PIN(357, "PO EMIF 0 SD WE N"),
 550	PINCTRL_PIN(358, "P PAD VDDIO 1"),
 551	PINCTRL_PIN(359, "P PAD VSSIO 1"),
 552	PINCTRL_PIN(360, "P PAD GND 1"),
 553	PINCTRL_PIN(361, "P PAD VDD 1"),
 554	PINCTRL_PIN(362, "PO EMIF 0 SD CKE"),
 555	PINCTRL_PIN(363, "PO EMIF 0 SD DQML"),
 556	PINCTRL_PIN(364, "PO EMIF 0 SD DQMU"),
 557	PINCTRL_PIN(365, "PO EMIF 0 SD RAS N"),
 558	PINCTRL_PIN(366, "PIO EMIF 0 D15"),
 559	PINCTRL_PIN(367, "PO EMIF 0 A15"),
 560	PINCTRL_PIN(368, "PIO EMIF 0 D14"),
 561	PINCTRL_PIN(369, "PO EMIF 0 A14"),
 562	PINCTRL_PIN(370, "PIO EMIF 0 D13"),
 563	PINCTRL_PIN(371, "PO EMIF 0 A13"),
 564	PINCTRL_PIN(372, "P PAD VDDIO 2"),
 565	PINCTRL_PIN(373, "P PAD VSSIO 2"),
 566	PINCTRL_PIN(374, "P PAD GND 2"),
 567	PINCTRL_PIN(375, "P PAD VDD 2"),
 568	PINCTRL_PIN(376, "PIO EMIF 0 D12"),
 569	PINCTRL_PIN(377, "PO EMIF 0 A12"),
 570	PINCTRL_PIN(378, "PIO EMIF 0 D11"),
 571	PINCTRL_PIN(379, "PO EMIF 0 A11"),
 572	PINCTRL_PIN(380, "PIO EMIF 0 D10"),
 573	PINCTRL_PIN(381, "PO EMIF 0 A10"),
 574	PINCTRL_PIN(382, "PIO EMIF 0 D09"),
 575	PINCTRL_PIN(383, "PO EMIF 0 A09"),
 576	PINCTRL_PIN(384, "PIO EMIF 0 D08"),
 577	PINCTRL_PIN(385, "PO EMIF 0 A08"),
 578	PINCTRL_PIN(386, "PIO EMIF 0 D07"),
 579	PINCTRL_PIN(387, "PO EMIF 0 A07"),
 580	PINCTRL_PIN(388, "P PAD VDDIO 3"),
 581	PINCTRL_PIN(389, "P PAD VSSIO 3"),
 582	PINCTRL_PIN(390, "P PAD GND 3"),
 583	PINCTRL_PIN(391, "P PAD VDD 3"),
 584	PINCTRL_PIN(392, "PO EFUSE RDOUT1"),
 585	PINCTRL_PIN(393, "PIO EMIF 0 D06"),
 586	PINCTRL_PIN(394, "PO EMIF 0 A06"),
 587	PINCTRL_PIN(395, "PIO EMIF 0 D05"),
 588	PINCTRL_PIN(396, "PO EMIF 0 A05"),
 589	PINCTRL_PIN(397, "PIO EMIF 0 D04"),
 590	PINCTRL_PIN(398, "PO EMIF 0 A04"),
 591	PINCTRL_PIN(399, "A PADS/A VDDCO1v82v5 GND 80U SF LIN VDDCO AF"),
 592	PINCTRL_PIN(400, "PWR VDDCO AF"),
 593	PINCTRL_PIN(401, "PWR EFUSE HV1"),
 594	PINCTRL_PIN(402, "P PAD VSSIO 4"),
 595	PINCTRL_PIN(403, "P PAD VDDIO 4"),
 596	PINCTRL_PIN(404, "P PAD GND 4"),
 597	PINCTRL_PIN(405, "P PAD VDD 4"),
 598	PINCTRL_PIN(406, "PIO EMIF 0 D03"),
 599	PINCTRL_PIN(407, "PO EMIF 0 A03"),
 600	PINCTRL_PIN(408, "PWR EFUSE HV2"),
 601	PINCTRL_PIN(409, "PWR EFUSE HV3"),
 602	PINCTRL_PIN(410, "PIO EMIF 0 D02"),
 603	PINCTRL_PIN(411, "PO EMIF 0 A02"),
 604	PINCTRL_PIN(412, "PIO EMIF 0 D01"),
 605	PINCTRL_PIN(413, "P PAD VDDIO 5"),
 606	PINCTRL_PIN(414, "P PAD VSSIO 5"),
 607	PINCTRL_PIN(415, "P PAD GND 5"),
 608	PINCTRL_PIN(416, "P PAD VDD 5"),
 609	PINCTRL_PIN(417, "PO EMIF 0 A01"),
 610	PINCTRL_PIN(418, "PIO EMIF 0 D00"),
 611	PINCTRL_PIN(419, "IF 0 SD CLK"),
 612	PINCTRL_PIN(420, "APP SPI CLK"),
 613	PINCTRL_PIN(421, "APP SPI DO"),
 614	PINCTRL_PIN(422, "APP SPI DI"),
 615	PINCTRL_PIN(423, "APP SPI CS0"),
 616	PINCTRL_PIN(424, "APP SPI CS1"),
 617	PINCTRL_PIN(425, "APP SPI CS2"),
 618	PINCTRL_PIN(426, "PIO APP GPIO 10"),
 619	PINCTRL_PIN(427, "P PAD VDDIO 41"),
 620	PINCTRL_PIN(428, "P PAD VSSIO 41"),
 621	PINCTRL_PIN(429, "P PAD GND 6"),
 622	PINCTRL_PIN(430, "P PAD VDD 6"),
 623	PINCTRL_PIN(431, "PIO ACC SDIO0 CMD"),
 624	PINCTRL_PIN(432, "PIO ACC SDIO0 CK"),
 625	PINCTRL_PIN(433, "PIO ACC SDIO0 D3"),
 626	PINCTRL_PIN(434, "PIO ACC SDIO0 D2"),
 627	PINCTRL_PIN(435, "PIO ACC SDIO0 D1"),
 628	PINCTRL_PIN(436, "PIO ACC SDIO0 D0"),
 629	PINCTRL_PIN(437, "PIO USB PU"),
 630	PINCTRL_PIN(438, "PIO USB SP"),
 631	PINCTRL_PIN(439, "PIO USB DAT VP"),
 632	PINCTRL_PIN(440, "PIO USB SE0 VM"),
 633	PINCTRL_PIN(441, "PIO USB OE"),
 634	PINCTRL_PIN(442, "PIO USB SUSP"),
 635	PINCTRL_PIN(443, "P PAD VSSIO 6"),
 636	PINCTRL_PIN(444, "P PAD VDDIO 6"),
 637	PINCTRL_PIN(445, "PIO USB PUEN"),
 638	PINCTRL_PIN(446, "PIO ACC UART0 RX"),
 639	PINCTRL_PIN(447, "PIO ACC UART0 TX"),
 640	PINCTRL_PIN(448, "PIO ACC UART0 CTS"),
 641	PINCTRL_PIN(449, "PIO ACC UART0 RTS"),
 642	PINCTRL_PIN(450, "PIO ACC UART3 RX"),
 643	PINCTRL_PIN(451, "PIO ACC UART3 TX"),
 644	PINCTRL_PIN(452, "PIO ACC UART3 CTS"),
 645	PINCTRL_PIN(453, "PIO ACC UART3 RTS"),
 646	PINCTRL_PIN(454, "PIO ACC IRDA TX"),
 647	PINCTRL_PIN(455, "P PAD VDDIO 7"),
 648	PINCTRL_PIN(456, "P PAD VSSIO 7"),
 649	PINCTRL_PIN(457, "P PAD GND 7"),
 650	PINCTRL_PIN(458, "P PAD VDD 7"),
 651	PINCTRL_PIN(459, "PIO ACC IRDA RX"),
 652	PINCTRL_PIN(460, "PIO ACC PCM I2S CLK"),
 653	PINCTRL_PIN(461, "PIO ACC PCM I2S WS"),
 654	PINCTRL_PIN(462, "PIO ACC PCM I2S DATA A"),
 655	PINCTRL_PIN(463, "PIO ACC PCM I2S DATA B"),
 656	PINCTRL_PIN(464, "PO SIM CLK"),
 657	PINCTRL_PIN(465, "PIO ACC IRDA SD"),
 658	PINCTRL_PIN(466, "PIO SIM DATA"),
 659};
 660
 661/**
 662 * @dev: a pointer back to containing device
 663 * @virtbase: the offset to the controller in virtual memory
 664 */
 665struct u300_pmx {
 666	struct device *dev;
 667	struct pinctrl_dev *pctl;
 668	void __iomem *virtbase;
 669};
 670
 671/**
 672 * u300_pmx_registers - the array of registers read/written for each pinmux
 673 * shunt setting
 674 */
 675static const u32 u300_pmx_registers[] = {
 676	U300_SYSCON_PMC1LR,
 677	U300_SYSCON_PMC1HR,
 678	U300_SYSCON_PMC2R,
 679	U300_SYSCON_PMC3R,
 680	U300_SYSCON_PMC4R,
 681};
 682
 683/**
 684 * struct u300_pin_group - describes a U300 pin group
 685 * @name: the name of this specific pin group
 686 * @pins: an array of discrete physical pins used in this group, taken
 687 *	from the driver-local pin enumeration space
 688 * @num_pins: the number of pins in this group array, i.e. the number of
 689 *	elements in .pins so we can iterate over that array
 690 */
 691struct u300_pin_group {
 692	const char *name;
 693	const unsigned int *pins;
 694	const unsigned num_pins;
 695};
 696
 697/**
 698 * struct pmx_onmask - mask bits to enable/disable padmux
 699 * @mask: mask bits to disable
 700 * @val: mask bits to enable
 701 *
 702 * onmask lazy dog:
 703 * onmask = {
 704 *   {"PMC1LR" mask, "PMC1LR" value},
 705 *   {"PMC1HR" mask, "PMC1HR" value},
 706 *   {"PMC2R"  mask, "PMC2R"  value},
 707 *   {"PMC3R"  mask, "PMC3R"  value},
 708 *   {"PMC4R"  mask, "PMC4R"  value}
 709 * }
 710 */
 711struct u300_pmx_mask {
 712	u16 mask;
 713	u16 bits;
 714};
 715
 716/* The chip power pins are VDD, GND, VDDIO and VSSIO */
 717static const unsigned power_pins[] = { 0, 1, 3, 31, 46, 47, 49, 50, 61, 62, 63,
 718	64, 78, 79, 80, 81, 92, 93, 94, 95, 101, 102, 103, 104, 115, 116, 117,
 719	118, 130, 131, 132, 133, 145, 146, 147, 148, 159, 160, 172, 173, 174,
 720	175, 187, 188, 189, 190, 201, 202, 211, 212, 213, 214, 215, 218, 223,
 721	224, 225, 226, 231, 232, 237, 238, 239, 240, 245, 246, 251, 252, 256,
 722	257, 258, 259, 264, 265, 270, 271, 276, 277, 278, 279, 284, 285, 290,
 723	291, 295, 296, 299, 300, 301, 302, 303, 309, 310, 311, 312, 319, 320,
 724	321, 322, 329, 330, 331, 332, 341, 342, 343, 344, 358, 359, 360, 361,
 725	372, 373, 374, 375, 388, 389, 390, 391, 402, 403, 404, 405, 413, 414,
 726	415, 416, 427, 428, 429, 430, 443, 444, 455, 456, 457, 458 };
 727static const unsigned emif0_pins[] = { 355, 356, 357, 362, 363, 364, 365, 366,
 728	367, 368, 369, 370, 371, 376, 377, 378, 379, 380, 381, 382, 383, 384,
 729	385, 386, 387, 393, 394, 395, 396, 397, 398, 406, 407, 410, 411, 412,
 730	417, 418 };
 731static const unsigned emif1_pins[] = { 216, 217, 219, 220, 221, 222, 227, 228,
 732	229, 230, 233, 234, 235, 236, 241, 242, 243, 244, 247, 248, 249, 250,
 733	253, 254, 255, 260, 261, 262, 263, 266, 267, 268, 269, 272, 273, 274,
 734	275, 280, 281, 282, 283, 286, 287, 288, 289, 292, 293, 294, 297, 298,
 735	304, 305, 306, 307, 308, 313, 314, 315 };
 736static const unsigned uart0_pins[] = { 134, 135, 136, 137 };
 737static const unsigned mmc0_pins[] = { 166, 167, 168, 169, 170, 171, 176, 177 };
 738static const unsigned spi0_pins[] = { 420, 421, 422, 423, 424, 425 };
 739
 740static const struct u300_pmx_mask emif0_mask[] = {
 741	{0, 0},
 742	{0, 0},
 743	{0, 0},
 744	{0, 0},
 745	{0, 0},
 746};
 747
 748static const struct u300_pmx_mask emif1_mask[] = {
 749	/*
 750	 * This connects the SDRAM to CS2 and a NAND flash to
 751	 * CS0 on the EMIF.
 752	 */
 753	{
 754		U300_SYSCON_PMC1LR_EMIF_1_CS2_MASK |
 755		U300_SYSCON_PMC1LR_EMIF_1_CS1_MASK |
 756		U300_SYSCON_PMC1LR_EMIF_1_CS0_MASK |
 757		U300_SYSCON_PMC1LR_EMIF_1_MASK,
 758		U300_SYSCON_PMC1LR_EMIF_1_CS2_SDRAM |
 759		U300_SYSCON_PMC1LR_EMIF_1_CS1_STATIC |
 760		U300_SYSCON_PMC1LR_EMIF_1_CS0_NFIF |
 761		U300_SYSCON_PMC1LR_EMIF_1_SDRAM0
 762	},
 763	{0, 0},
 764	{0, 0},
 765	{0, 0},
 766	{0, 0},
 767};
 768
 769static const struct u300_pmx_mask uart0_mask[] = {
 770	{0, 0},
 771	{
 772		U300_SYSCON_PMC1HR_APP_UART0_1_MASK |
 773		U300_SYSCON_PMC1HR_APP_UART0_2_MASK,
 774		U300_SYSCON_PMC1HR_APP_UART0_1_UART0 |
 775		U300_SYSCON_PMC1HR_APP_UART0_2_UART0
 776	},
 777	{0, 0},
 778	{0, 0},
 779	{0, 0},
 780};
 781
 782static const struct u300_pmx_mask mmc0_mask[] = {
 783	{ U300_SYSCON_PMC1LR_MMCSD_MASK, U300_SYSCON_PMC1LR_MMCSD_MMCSD},
 784	{0, 0},
 785	{0, 0},
 786	{0, 0},
 787	{ U300_SYSCON_PMC4R_APP_MISC_12_MASK,
 788	  U300_SYSCON_PMC4R_APP_MISC_12_APP_GPIO }
 789};
 790
 791static const struct u300_pmx_mask spi0_mask[] = {
 792	{0, 0},
 793	{
 794		U300_SYSCON_PMC1HR_APP_SPI_2_MASK |
 795		U300_SYSCON_PMC1HR_APP_SPI_CS_1_MASK |
 796		U300_SYSCON_PMC1HR_APP_SPI_CS_2_MASK,
 797		U300_SYSCON_PMC1HR_APP_SPI_2_SPI |
 798		U300_SYSCON_PMC1HR_APP_SPI_CS_1_SPI |
 799		U300_SYSCON_PMC1HR_APP_SPI_CS_2_SPI
 800	},
 801	{0, 0},
 802	{0, 0},
 803	{0, 0}
 804};
 805
 806static const struct u300_pin_group u300_pin_groups[] = {
 807	{
 808		.name = "powergrp",
 809		.pins = power_pins,
 810		.num_pins = ARRAY_SIZE(power_pins),
 811	},
 812	{
 813		.name = "emif0grp",
 814		.pins = emif0_pins,
 815		.num_pins = ARRAY_SIZE(emif0_pins),
 816	},
 817	{
 818		.name = "emif1grp",
 819		.pins = emif1_pins,
 820		.num_pins = ARRAY_SIZE(emif1_pins),
 821	},
 822	{
 823		.name = "uart0grp",
 824		.pins = uart0_pins,
 825		.num_pins = ARRAY_SIZE(uart0_pins),
 826	},
 827	{
 828		.name = "mmc0grp",
 829		.pins = mmc0_pins,
 830		.num_pins = ARRAY_SIZE(mmc0_pins),
 831	},
 832	{
 833		.name = "spi0grp",
 834		.pins = spi0_pins,
 835		.num_pins = ARRAY_SIZE(spi0_pins),
 836	},
 837};
 838
 839static int u300_get_groups_count(struct pinctrl_dev *pctldev)
 840{
 841	return ARRAY_SIZE(u300_pin_groups);
 842}
 843
 844static const char *u300_get_group_name(struct pinctrl_dev *pctldev,
 845				       unsigned selector)
 846{
 847	return u300_pin_groups[selector].name;
 848}
 849
 850static int u300_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector,
 851			       const unsigned **pins,
 852			       unsigned *num_pins)
 853{
 854	*pins = u300_pin_groups[selector].pins;
 855	*num_pins = u300_pin_groups[selector].num_pins;
 856	return 0;
 857}
 858
 859static void u300_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
 860		   unsigned offset)
 861{
 862	seq_printf(s, " " DRIVER_NAME);
 863}
 864
 865static const struct pinctrl_ops u300_pctrl_ops = {
 866	.get_groups_count = u300_get_groups_count,
 867	.get_group_name = u300_get_group_name,
 868	.get_group_pins = u300_get_group_pins,
 869	.pin_dbg_show = u300_pin_dbg_show,
 870};
 871
 872/*
 873 * Here we define the available functions and their corresponding pin groups
 874 */
 875
 876/**
 877 * struct u300_pmx_func - describes U300 pinmux functions
 878 * @name: the name of this specific function
 879 * @groups: corresponding pin groups
 880 * @onmask: bits to set to enable this when doing pin muxing
 881 */
 882struct u300_pmx_func {
 883	const char *name;
 884	const char * const *groups;
 885	const unsigned num_groups;
 886	const struct u300_pmx_mask *mask;
 887};
 888
 889static const char * const powergrps[] = { "powergrp" };
 890static const char * const emif0grps[] = { "emif0grp" };
 891static const char * const emif1grps[] = { "emif1grp" };
 892static const char * const uart0grps[] = { "uart0grp" };
 893static const char * const mmc0grps[] = { "mmc0grp" };
 894static const char * const spi0grps[] = { "spi0grp" };
 895
 896static const struct u300_pmx_func u300_pmx_functions[] = {
 897	{
 898		.name = "power",
 899		.groups = powergrps,
 900		.num_groups = ARRAY_SIZE(powergrps),
 901		/* Mask is N/A */
 902	},
 903	{
 904		.name = "emif0",
 905		.groups = emif0grps,
 906		.num_groups = ARRAY_SIZE(emif0grps),
 907		.mask = emif0_mask,
 908	},
 909	{
 910		.name = "emif1",
 911		.groups = emif1grps,
 912		.num_groups = ARRAY_SIZE(emif1grps),
 913		.mask = emif1_mask,
 914	},
 915	{
 916		.name = "uart0",
 917		.groups = uart0grps,
 918		.num_groups = ARRAY_SIZE(uart0grps),
 919		.mask = uart0_mask,
 920	},
 921	{
 922		.name = "mmc0",
 923		.groups = mmc0grps,
 924		.num_groups = ARRAY_SIZE(mmc0grps),
 925		.mask = mmc0_mask,
 926	},
 927	{
 928		.name = "spi0",
 929		.groups = spi0grps,
 930		.num_groups = ARRAY_SIZE(spi0grps),
 931		.mask = spi0_mask,
 932	},
 933};
 934
 935static void u300_pmx_endisable(struct u300_pmx *upmx, unsigned selector,
 936			       bool enable)
 937{
 938	u16 regval, val, mask;
 939	int i;
 940	const struct u300_pmx_mask *upmx_mask;
 941
 942	upmx_mask = u300_pmx_functions[selector].mask;
 943	for (i = 0; i < ARRAY_SIZE(u300_pmx_registers); i++) {
 944		if (enable)
 945			val = upmx_mask->bits;
 946		else
 947			val = 0;
 948
 949		mask = upmx_mask->mask;
 950		if (mask != 0) {
 951			regval = readw(upmx->virtbase + u300_pmx_registers[i]);
 952			regval &= ~mask;
 953			regval |= val;
 954			writew(regval, upmx->virtbase + u300_pmx_registers[i]);
 955		}
 956		upmx_mask++;
 957	}
 958}
 959
 960static int u300_pmx_set_mux(struct pinctrl_dev *pctldev, unsigned selector,
 961			    unsigned group)
 962{
 963	struct u300_pmx *upmx;
 964
 965	/* There is nothing to do with the power pins */
 966	if (selector == 0)
 967		return 0;
 968
 969	upmx = pinctrl_dev_get_drvdata(pctldev);
 970	u300_pmx_endisable(upmx, selector, true);
 971
 972	return 0;
 973}
 974
 975static int u300_pmx_get_funcs_count(struct pinctrl_dev *pctldev)
 976{
 977	return ARRAY_SIZE(u300_pmx_functions);
 978}
 979
 980static const char *u300_pmx_get_func_name(struct pinctrl_dev *pctldev,
 981					  unsigned selector)
 982{
 983	return u300_pmx_functions[selector].name;
 984}
 985
 986static int u300_pmx_get_groups(struct pinctrl_dev *pctldev, unsigned selector,
 987			       const char * const **groups,
 988			       unsigned * const num_groups)
 989{
 990	*groups = u300_pmx_functions[selector].groups;
 991	*num_groups = u300_pmx_functions[selector].num_groups;
 992	return 0;
 993}
 994
 995static const struct pinmux_ops u300_pmx_ops = {
 996	.get_functions_count = u300_pmx_get_funcs_count,
 997	.get_function_name = u300_pmx_get_func_name,
 998	.get_function_groups = u300_pmx_get_groups,
 999	.set_mux = u300_pmx_set_mux,
1000};
1001
1002static int u300_pin_config_get(struct pinctrl_dev *pctldev, unsigned pin,
1003			       unsigned long *config)
1004{
1005	struct pinctrl_gpio_range *range =
1006		pinctrl_find_gpio_range_from_pin(pctldev, pin);
1007
1008	/* We get config for those pins we CAN get it for and that's it */
1009	if (!range)
1010		return -ENOTSUPP;
1011
1012	return u300_gpio_config_get(range->gc,
1013				    (pin - range->pin_base + range->base),
1014				    config);
1015}
1016
1017static int u300_pin_config_set(struct pinctrl_dev *pctldev, unsigned pin,
1018			       unsigned long *configs, unsigned num_configs)
1019{
1020	struct pinctrl_gpio_range *range =
1021		pinctrl_find_gpio_range_from_pin(pctldev, pin);
1022	int ret, i;
1023
1024	if (!range)
1025		return -EINVAL;
1026
1027	for (i = 0; i < num_configs; i++) {
1028		/* Note: none of these configurations take any argument */
1029		ret = u300_gpio_config_set(range->gc,
1030			(pin - range->pin_base + range->base),
1031			pinconf_to_config_param(configs[i]));
1032		if (ret)
1033			return ret;
1034	} /* for each config */
1035
1036	return 0;
1037}
1038
1039static const struct pinconf_ops u300_pconf_ops = {
1040	.is_generic = true,
1041	.pin_config_get = u300_pin_config_get,
1042	.pin_config_set = u300_pin_config_set,
1043};
1044
1045static struct pinctrl_desc u300_pmx_desc = {
1046	.name = DRIVER_NAME,
1047	.pins = u300_pads,
1048	.npins = ARRAY_SIZE(u300_pads),
1049	.pctlops = &u300_pctrl_ops,
1050	.pmxops = &u300_pmx_ops,
1051	.confops = &u300_pconf_ops,
1052	.owner = THIS_MODULE,
1053};
1054
1055static int u300_pmx_probe(struct platform_device *pdev)
1056{
1057	struct u300_pmx *upmx;
1058
1059	/* Create state holders etc for this driver */
1060	upmx = devm_kzalloc(&pdev->dev, sizeof(*upmx), GFP_KERNEL);
1061	if (!upmx)
1062		return -ENOMEM;
1063
1064	upmx->dev = &pdev->dev;
1065
1066	upmx->virtbase = devm_platform_ioremap_resource(pdev, 0);
1067	if (IS_ERR(upmx->virtbase))
1068		return PTR_ERR(upmx->virtbase);
1069
1070	upmx->pctl = devm_pinctrl_register(&pdev->dev, &u300_pmx_desc, upmx);
1071	if (IS_ERR(upmx->pctl)) {
1072		dev_err(&pdev->dev, "could not register U300 pinmux driver\n");
1073		return PTR_ERR(upmx->pctl);
1074	}
1075
1076	platform_set_drvdata(pdev, upmx);
1077
1078	dev_info(&pdev->dev, "initialized U300 pin control driver\n");
1079
1080	return 0;
1081}
1082
1083static const struct of_device_id u300_pinctrl_match[] = {
1084	{ .compatible = "stericsson,pinctrl-u300" },
1085	{},
1086};
1087
1088
1089static struct platform_driver u300_pmx_driver = {
1090	.driver = {
1091		.name = DRIVER_NAME,
1092		.of_match_table = u300_pinctrl_match,
1093	},
1094	.probe = u300_pmx_probe,
1095};
1096
1097static int __init u300_pmx_init(void)
1098{
1099	return platform_driver_register(&u300_pmx_driver);
1100}
1101arch_initcall(u300_pmx_init);
1102
1103static void __exit u300_pmx_exit(void)
1104{
1105	platform_driver_unregister(&u300_pmx_driver);
1106}
1107module_exit(u300_pmx_exit);
1108
1109MODULE_AUTHOR("Linus Walleij <linus.walleij@linaro.org>");
1110MODULE_DESCRIPTION("U300 pin control driver");
1111MODULE_LICENSE("GPL v2");