linux/drivers/pinctrl/freescale/pinctrl-imx1.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2//
   3// i.MX1 pinctrl driver based on imx pinmux core
   4//
   5// Copyright (C) 2014 Alexander Shiyan <shc_work@mail.ru>
   6
   7#include <linux/init.h>
   8#include <linux/of.h>
   9#include <linux/platform_device.h>
  10#include <linux/pinctrl/pinctrl.h>
  11
  12#include "pinctrl-imx1.h"
  13
  14#define PAD_ID(port, pin)       ((port) * 32 + (pin))
  15#define PA      0
  16#define PB      1
  17#define PC      2
  18#define PD      3
  19
  20enum imx1_pads {
  21        MX1_PAD_A24             = PAD_ID(PA, 0),
  22        MX1_PAD_TIN             = PAD_ID(PA, 1),
  23        MX1_PAD_PWMO            = PAD_ID(PA, 2),
  24        MX1_PAD_CSI_MCLK        = PAD_ID(PA, 3),
  25        MX1_PAD_CSI_D0          = PAD_ID(PA, 4),
  26        MX1_PAD_CSI_D1          = PAD_ID(PA, 5),
  27        MX1_PAD_CSI_D2          = PAD_ID(PA, 6),
  28        MX1_PAD_CSI_D3          = PAD_ID(PA, 7),
  29        MX1_PAD_CSI_D4          = PAD_ID(PA, 8),
  30        MX1_PAD_CSI_D5          = PAD_ID(PA, 9),
  31        MX1_PAD_CSI_D6          = PAD_ID(PA, 10),
  32        MX1_PAD_CSI_D7          = PAD_ID(PA, 11),
  33        MX1_PAD_CSI_VSYNC       = PAD_ID(PA, 12),
  34        MX1_PAD_CSI_HSYNC       = PAD_ID(PA, 13),
  35        MX1_PAD_CSI_PIXCLK      = PAD_ID(PA, 14),
  36        MX1_PAD_I2C_SDA         = PAD_ID(PA, 15),
  37        MX1_PAD_I2C_SCL         = PAD_ID(PA, 16),
  38        MX1_PAD_DTACK           = PAD_ID(PA, 17),
  39        MX1_PAD_BCLK            = PAD_ID(PA, 18),
  40        MX1_PAD_LBA             = PAD_ID(PA, 19),
  41        MX1_PAD_ECB             = PAD_ID(PA, 20),
  42        MX1_PAD_A0              = PAD_ID(PA, 21),
  43        MX1_PAD_CS4             = PAD_ID(PA, 22),
  44        MX1_PAD_CS5             = PAD_ID(PA, 23),
  45        MX1_PAD_A16             = PAD_ID(PA, 24),
  46        MX1_PAD_A17             = PAD_ID(PA, 25),
  47        MX1_PAD_A18             = PAD_ID(PA, 26),
  48        MX1_PAD_A19             = PAD_ID(PA, 27),
  49        MX1_PAD_A20             = PAD_ID(PA, 28),
  50        MX1_PAD_A21             = PAD_ID(PA, 29),
  51        MX1_PAD_A22             = PAD_ID(PA, 30),
  52        MX1_PAD_A23             = PAD_ID(PA, 31),
  53        MX1_PAD_SD_DAT0         = PAD_ID(PB, 8),
  54        MX1_PAD_SD_DAT1         = PAD_ID(PB, 9),
  55        MX1_PAD_SD_DAT2         = PAD_ID(PB, 10),
  56        MX1_PAD_SD_DAT3         = PAD_ID(PB, 11),
  57        MX1_PAD_SD_SCLK         = PAD_ID(PB, 12),
  58        MX1_PAD_SD_CMD          = PAD_ID(PB, 13),
  59        MX1_PAD_SIM_SVEN        = PAD_ID(PB, 14),
  60        MX1_PAD_SIM_PD          = PAD_ID(PB, 15),
  61        MX1_PAD_SIM_TX          = PAD_ID(PB, 16),
  62        MX1_PAD_SIM_RX          = PAD_ID(PB, 17),
  63        MX1_PAD_SIM_RST         = PAD_ID(PB, 18),
  64        MX1_PAD_SIM_CLK         = PAD_ID(PB, 19),
  65        MX1_PAD_USBD_AFE        = PAD_ID(PB, 20),
  66        MX1_PAD_USBD_OE         = PAD_ID(PB, 21),
  67        MX1_PAD_USBD_RCV        = PAD_ID(PB, 22),
  68        MX1_PAD_USBD_SUSPND     = PAD_ID(PB, 23),
  69        MX1_PAD_USBD_VP         = PAD_ID(PB, 24),
  70        MX1_PAD_USBD_VM         = PAD_ID(PB, 25),
  71        MX1_PAD_USBD_VPO        = PAD_ID(PB, 26),
  72        MX1_PAD_USBD_VMO        = PAD_ID(PB, 27),
  73        MX1_PAD_UART2_CTS       = PAD_ID(PB, 28),
  74        MX1_PAD_UART2_RTS       = PAD_ID(PB, 29),
  75        MX1_PAD_UART2_TXD       = PAD_ID(PB, 30),
  76        MX1_PAD_UART2_RXD       = PAD_ID(PB, 31),
  77        MX1_PAD_SSI_RXFS        = PAD_ID(PC, 3),
  78        MX1_PAD_SSI_RXCLK       = PAD_ID(PC, 4),
  79        MX1_PAD_SSI_RXDAT       = PAD_ID(PC, 5),
  80        MX1_PAD_SSI_TXDAT       = PAD_ID(PC, 6),
  81        MX1_PAD_SSI_TXFS        = PAD_ID(PC, 7),
  82        MX1_PAD_SSI_TXCLK       = PAD_ID(PC, 8),
  83        MX1_PAD_UART1_CTS       = PAD_ID(PC, 9),
  84        MX1_PAD_UART1_RTS       = PAD_ID(PC, 10),
  85        MX1_PAD_UART1_TXD       = PAD_ID(PC, 11),
  86        MX1_PAD_UART1_RXD       = PAD_ID(PC, 12),
  87        MX1_PAD_SPI1_RDY        = PAD_ID(PC, 13),
  88        MX1_PAD_SPI1_SCLK       = PAD_ID(PC, 14),
  89        MX1_PAD_SPI1_SS         = PAD_ID(PC, 15),
  90        MX1_PAD_SPI1_MISO       = PAD_ID(PC, 16),
  91        MX1_PAD_SPI1_MOSI       = PAD_ID(PC, 17),
  92        MX1_PAD_BT13            = PAD_ID(PC, 19),
  93        MX1_PAD_BT12            = PAD_ID(PC, 20),
  94        MX1_PAD_BT11            = PAD_ID(PC, 21),
  95        MX1_PAD_BT10            = PAD_ID(PC, 22),
  96        MX1_PAD_BT9             = PAD_ID(PC, 23),
  97        MX1_PAD_BT8             = PAD_ID(PC, 24),
  98        MX1_PAD_BT7             = PAD_ID(PC, 25),
  99        MX1_PAD_BT6             = PAD_ID(PC, 26),
 100        MX1_PAD_BT5             = PAD_ID(PC, 27),
 101        MX1_PAD_BT4             = PAD_ID(PC, 28),
 102        MX1_PAD_BT3             = PAD_ID(PC, 29),
 103        MX1_PAD_BT2             = PAD_ID(PC, 30),
 104        MX1_PAD_BT1             = PAD_ID(PC, 31),
 105        MX1_PAD_LSCLK           = PAD_ID(PD, 6),
 106        MX1_PAD_REV             = PAD_ID(PD, 7),
 107        MX1_PAD_CLS             = PAD_ID(PD, 8),
 108        MX1_PAD_PS              = PAD_ID(PD, 9),
 109        MX1_PAD_SPL_SPR         = PAD_ID(PD, 10),
 110        MX1_PAD_CONTRAST        = PAD_ID(PD, 11),
 111        MX1_PAD_ACD_OE          = PAD_ID(PD, 12),
 112        MX1_PAD_LP_HSYNC        = PAD_ID(PD, 13),
 113        MX1_PAD_FLM_VSYNC       = PAD_ID(PD, 14),
 114        MX1_PAD_LD0             = PAD_ID(PD, 15),
 115        MX1_PAD_LD1             = PAD_ID(PD, 16),
 116        MX1_PAD_LD2             = PAD_ID(PD, 17),
 117        MX1_PAD_LD3             = PAD_ID(PD, 18),
 118        MX1_PAD_LD4             = PAD_ID(PD, 19),
 119        MX1_PAD_LD5             = PAD_ID(PD, 20),
 120        MX1_PAD_LD6             = PAD_ID(PD, 21),
 121        MX1_PAD_LD7             = PAD_ID(PD, 22),
 122        MX1_PAD_LD8             = PAD_ID(PD, 23),
 123        MX1_PAD_LD9             = PAD_ID(PD, 24),
 124        MX1_PAD_LD10            = PAD_ID(PD, 25),
 125        MX1_PAD_LD11            = PAD_ID(PD, 26),
 126        MX1_PAD_LD12            = PAD_ID(PD, 27),
 127        MX1_PAD_LD13            = PAD_ID(PD, 28),
 128        MX1_PAD_LD14            = PAD_ID(PD, 29),
 129        MX1_PAD_LD15            = PAD_ID(PD, 30),
 130        MX1_PAD_TMR2OUT         = PAD_ID(PD, 31),
 131};
 132
 133/* Pad names for the pinmux subsystem */
 134static const struct pinctrl_pin_desc imx1_pinctrl_pads[] = {
 135        IMX_PINCTRL_PIN(MX1_PAD_A24),
 136        IMX_PINCTRL_PIN(MX1_PAD_TIN),
 137        IMX_PINCTRL_PIN(MX1_PAD_PWMO),
 138        IMX_PINCTRL_PIN(MX1_PAD_CSI_MCLK),
 139        IMX_PINCTRL_PIN(MX1_PAD_CSI_D0),
 140        IMX_PINCTRL_PIN(MX1_PAD_CSI_D1),
 141        IMX_PINCTRL_PIN(MX1_PAD_CSI_D2),
 142        IMX_PINCTRL_PIN(MX1_PAD_CSI_D3),
 143        IMX_PINCTRL_PIN(MX1_PAD_CSI_D4),
 144        IMX_PINCTRL_PIN(MX1_PAD_CSI_D5),
 145        IMX_PINCTRL_PIN(MX1_PAD_CSI_D6),
 146        IMX_PINCTRL_PIN(MX1_PAD_CSI_D7),
 147        IMX_PINCTRL_PIN(MX1_PAD_CSI_VSYNC),
 148        IMX_PINCTRL_PIN(MX1_PAD_CSI_HSYNC),
 149        IMX_PINCTRL_PIN(MX1_PAD_CSI_PIXCLK),
 150        IMX_PINCTRL_PIN(MX1_PAD_I2C_SDA),
 151        IMX_PINCTRL_PIN(MX1_PAD_I2C_SCL),
 152        IMX_PINCTRL_PIN(MX1_PAD_DTACK),
 153        IMX_PINCTRL_PIN(MX1_PAD_BCLK),
 154        IMX_PINCTRL_PIN(MX1_PAD_LBA),
 155        IMX_PINCTRL_PIN(MX1_PAD_ECB),
 156        IMX_PINCTRL_PIN(MX1_PAD_A0),
 157        IMX_PINCTRL_PIN(MX1_PAD_CS4),
 158        IMX_PINCTRL_PIN(MX1_PAD_CS5),
 159        IMX_PINCTRL_PIN(MX1_PAD_A16),
 160        IMX_PINCTRL_PIN(MX1_PAD_A17),
 161        IMX_PINCTRL_PIN(MX1_PAD_A18),
 162        IMX_PINCTRL_PIN(MX1_PAD_A19),
 163        IMX_PINCTRL_PIN(MX1_PAD_A20),
 164        IMX_PINCTRL_PIN(MX1_PAD_A21),
 165        IMX_PINCTRL_PIN(MX1_PAD_A22),
 166        IMX_PINCTRL_PIN(MX1_PAD_A23),
 167        IMX_PINCTRL_PIN(MX1_PAD_SD_DAT0),
 168        IMX_PINCTRL_PIN(MX1_PAD_SD_DAT1),
 169        IMX_PINCTRL_PIN(MX1_PAD_SD_DAT2),
 170        IMX_PINCTRL_PIN(MX1_PAD_SD_DAT3),
 171        IMX_PINCTRL_PIN(MX1_PAD_SD_SCLK),
 172        IMX_PINCTRL_PIN(MX1_PAD_SD_CMD),
 173        IMX_PINCTRL_PIN(MX1_PAD_SIM_SVEN),
 174        IMX_PINCTRL_PIN(MX1_PAD_SIM_PD),
 175        IMX_PINCTRL_PIN(MX1_PAD_SIM_TX),
 176        IMX_PINCTRL_PIN(MX1_PAD_SIM_RX),
 177        IMX_PINCTRL_PIN(MX1_PAD_SIM_CLK),
 178        IMX_PINCTRL_PIN(MX1_PAD_USBD_AFE),
 179        IMX_PINCTRL_PIN(MX1_PAD_USBD_OE),
 180        IMX_PINCTRL_PIN(MX1_PAD_USBD_RCV),
 181        IMX_PINCTRL_PIN(MX1_PAD_USBD_SUSPND),
 182        IMX_PINCTRL_PIN(MX1_PAD_USBD_VP),
 183        IMX_PINCTRL_PIN(MX1_PAD_USBD_VM),
 184        IMX_PINCTRL_PIN(MX1_PAD_USBD_VPO),
 185        IMX_PINCTRL_PIN(MX1_PAD_USBD_VMO),
 186        IMX_PINCTRL_PIN(MX1_PAD_UART2_CTS),
 187        IMX_PINCTRL_PIN(MX1_PAD_UART2_RTS),
 188        IMX_PINCTRL_PIN(MX1_PAD_UART2_TXD),
 189        IMX_PINCTRL_PIN(MX1_PAD_UART2_RXD),
 190        IMX_PINCTRL_PIN(MX1_PAD_SSI_RXFS),
 191        IMX_PINCTRL_PIN(MX1_PAD_SSI_RXCLK),
 192        IMX_PINCTRL_PIN(MX1_PAD_SSI_RXDAT),
 193        IMX_PINCTRL_PIN(MX1_PAD_SSI_TXDAT),
 194        IMX_PINCTRL_PIN(MX1_PAD_SSI_TXFS),
 195        IMX_PINCTRL_PIN(MX1_PAD_SSI_TXCLK),
 196        IMX_PINCTRL_PIN(MX1_PAD_UART1_CTS),
 197        IMX_PINCTRL_PIN(MX1_PAD_UART1_RTS),
 198        IMX_PINCTRL_PIN(MX1_PAD_UART1_TXD),
 199        IMX_PINCTRL_PIN(MX1_PAD_UART1_RXD),
 200        IMX_PINCTRL_PIN(MX1_PAD_SPI1_RDY),
 201        IMX_PINCTRL_PIN(MX1_PAD_SPI1_SCLK),
 202        IMX_PINCTRL_PIN(MX1_PAD_SPI1_SS),
 203        IMX_PINCTRL_PIN(MX1_PAD_SPI1_MISO),
 204        IMX_PINCTRL_PIN(MX1_PAD_SPI1_MOSI),
 205        IMX_PINCTRL_PIN(MX1_PAD_BT13),
 206        IMX_PINCTRL_PIN(MX1_PAD_BT12),
 207        IMX_PINCTRL_PIN(MX1_PAD_BT11),
 208        IMX_PINCTRL_PIN(MX1_PAD_BT10),
 209        IMX_PINCTRL_PIN(MX1_PAD_BT9),
 210        IMX_PINCTRL_PIN(MX1_PAD_BT8),
 211        IMX_PINCTRL_PIN(MX1_PAD_BT7),
 212        IMX_PINCTRL_PIN(MX1_PAD_BT6),
 213        IMX_PINCTRL_PIN(MX1_PAD_BT5),
 214        IMX_PINCTRL_PIN(MX1_PAD_BT4),
 215        IMX_PINCTRL_PIN(MX1_PAD_BT3),
 216        IMX_PINCTRL_PIN(MX1_PAD_BT2),
 217        IMX_PINCTRL_PIN(MX1_PAD_BT1),
 218        IMX_PINCTRL_PIN(MX1_PAD_LSCLK),
 219        IMX_PINCTRL_PIN(MX1_PAD_REV),
 220        IMX_PINCTRL_PIN(MX1_PAD_CLS),
 221        IMX_PINCTRL_PIN(MX1_PAD_PS),
 222        IMX_PINCTRL_PIN(MX1_PAD_SPL_SPR),
 223        IMX_PINCTRL_PIN(MX1_PAD_CONTRAST),
 224        IMX_PINCTRL_PIN(MX1_PAD_ACD_OE),
 225        IMX_PINCTRL_PIN(MX1_PAD_LP_HSYNC),
 226        IMX_PINCTRL_PIN(MX1_PAD_FLM_VSYNC),
 227        IMX_PINCTRL_PIN(MX1_PAD_LD0),
 228        IMX_PINCTRL_PIN(MX1_PAD_LD1),
 229        IMX_PINCTRL_PIN(MX1_PAD_LD2),
 230        IMX_PINCTRL_PIN(MX1_PAD_LD3),
 231        IMX_PINCTRL_PIN(MX1_PAD_LD4),
 232        IMX_PINCTRL_PIN(MX1_PAD_LD5),
 233        IMX_PINCTRL_PIN(MX1_PAD_LD6),
 234        IMX_PINCTRL_PIN(MX1_PAD_LD7),
 235        IMX_PINCTRL_PIN(MX1_PAD_LD8),
 236        IMX_PINCTRL_PIN(MX1_PAD_LD9),
 237        IMX_PINCTRL_PIN(MX1_PAD_LD10),
 238        IMX_PINCTRL_PIN(MX1_PAD_LD11),
 239        IMX_PINCTRL_PIN(MX1_PAD_LD12),
 240        IMX_PINCTRL_PIN(MX1_PAD_LD13),
 241        IMX_PINCTRL_PIN(MX1_PAD_LD14),
 242        IMX_PINCTRL_PIN(MX1_PAD_LD15),
 243        IMX_PINCTRL_PIN(MX1_PAD_TMR2OUT),
 244};
 245
 246static struct imx1_pinctrl_soc_info imx1_pinctrl_info = {
 247        .pins   = imx1_pinctrl_pads,
 248        .npins  = ARRAY_SIZE(imx1_pinctrl_pads),
 249};
 250
 251static int __init imx1_pinctrl_probe(struct platform_device *pdev)
 252{
 253        return imx1_pinctrl_core_probe(pdev, &imx1_pinctrl_info);
 254}
 255
 256static const struct of_device_id imx1_pinctrl_of_match[] = {
 257        { .compatible = "fsl,imx1-iomuxc", },
 258        { }
 259};
 260
 261static struct platform_driver imx1_pinctrl_driver = {
 262        .driver = {
 263                .name           = "imx1-pinctrl",
 264                .of_match_table = imx1_pinctrl_of_match,
 265        },
 266};
 267builtin_platform_driver_probe(imx1_pinctrl_driver, imx1_pinctrl_probe);
 268