linux/drivers/pinctrl/pinctrl-tz1090.c
<<
>>
Prefs
   1/*
   2 * Pinctrl driver for the Toumaz Xenif TZ1090 SoC
   3 *
   4 * Copyright (c) 2013, Imagination Technologies Ltd.
   5 *
   6 * Derived from Tegra code:
   7 * Copyright (c) 2011-2012, NVIDIA CORPORATION.  All rights reserved.
   8 *
   9 * Derived from code:
  10 * Copyright (C) 2010 Google, Inc.
  11 * Copyright (C) 2010 NVIDIA Corporation
  12 * Copyright (C) 2009-2011 ST-Ericsson AB
  13 *
  14 * This program is free software; you can redistribute it and/or modify it
  15 * under the terms and conditions of the GNU General Public License,
  16 * version 2, as published by the Free Software Foundation.
  17 *
  18 * This program is distributed in the hope it will be useful, but WITHOUT
  19 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  20 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  21 * more details.
  22 */
  23
  24#include <linux/bitops.h>
  25#include <linux/io.h>
  26#include <linux/module.h>
  27#include <linux/of.h>
  28#include <linux/platform_device.h>
  29#include <linux/pinctrl/machine.h>
  30#include <linux/pinctrl/pinconf-generic.h>
  31#include <linux/pinctrl/pinctrl.h>
  32#include <linux/pinctrl/pinmux.h>
  33#include <linux/slab.h>
  34#include <linux/spinlock.h>
  35
  36/*
  37 * The registers may be shared with other threads/cores, so we need to use the
  38 * metag global lock2 for atomicity.
  39 */
  40#include <asm/global_lock.h>
  41
  42#include "core.h"
  43#include "pinconf.h"
  44
  45/* Register offsets from bank base address */
  46#define REG_PINCTRL_SELECT      0x10
  47#define REG_PINCTRL_SCHMITT     0x90
  48#define REG_PINCTRL_PU_PD       0xa0
  49#define REG_PINCTRL_SR          0xc0
  50#define REG_PINCTRL_DR          0xd0
  51#define REG_PINCTRL_IF_CTL      0xe0
  52
  53/* REG_PINCTRL_PU_PD field values */
  54#define REG_PU_PD_TRISTATE      0
  55#define REG_PU_PD_UP            1
  56#define REG_PU_PD_DOWN          2
  57#define REG_PU_PD_REPEATER      3
  58
  59/* REG_PINCTRL_DR field values */
  60#define REG_DR_2mA              0
  61#define REG_DR_4mA              1
  62#define REG_DR_8mA              2
  63#define REG_DR_12mA             3
  64
  65/**
  66 * struct tz1090_function - TZ1090 pinctrl mux function
  67 * @name:       The name of the function, exported to pinctrl core.
  68 * @groups:     An array of pin groups that may select this function.
  69 * @ngroups:    The number of entries in @groups.
  70 */
  71struct tz1090_function {
  72        const char              *name;
  73        const char * const      *groups;
  74        unsigned int            ngroups;
  75};
  76
  77/**
  78 * struct tz1090_muxdesc - TZ1090 individual mux description
  79 * @funcs:      Function for each mux value.
  80 * @reg:        Mux register offset. 0 if unsupported.
  81 * @bit:        Mux register bit. 0 if unsupported.
  82 * @width:      Mux field width. 0 if unsupported.
  83 *
  84 * A representation of a group of signals (possibly just one signal) in the
  85 * TZ1090 which can be muxed to a set of functions or sub muxes.
  86 */
  87struct tz1090_muxdesc {
  88        int     funcs[5];
  89        u16     reg;
  90        u8      bit;
  91        u8      width;
  92};
  93
  94/**
  95 * struct tz1090_pingroup - TZ1090 pin group
  96 * @name:       Name of pin group.
  97 * @pins:       Array of pin numbers in this pin group.
  98 * @npins:      Number of pins in this pin group.
  99 * @mux:        Top level mux.
 100 * @drv:        Drive control supported, 0 if unsupported.
 101 *              This means Schmitt, Slew, and Drive strength.
 102 * @slw_bit:    Slew register bit. 0 if unsupported.
 103 *              The same bit is used for Schmitt, and Drive (*2).
 104 * @func:       Currently muxed function.
 105 * @func_count: Number of pins using current mux function.
 106 *
 107 * A representation of a group of pins (possibly just one pin) in the TZ1090
 108 * pin controller. Each group allows some parameter or parameters to be
 109 * configured. The most common is mux function selection.
 110 */
 111struct tz1090_pingroup {
 112        const char              *name;
 113        const unsigned int      *pins;
 114        unsigned int            npins;
 115        struct tz1090_muxdesc   mux;
 116
 117        bool                    drv;
 118        u8                      slw_bit;
 119
 120        int                     func;
 121        unsigned int            func_count;
 122};
 123
 124/*
 125 * Most pins affected by the pinmux can also be GPIOs. Define these first.
 126 * These must match how the GPIO driver names/numbers its pins.
 127 */
 128
 129enum tz1090_pin {
 130        /* GPIO pins */
 131        TZ1090_PIN_SDIO_CLK,
 132        TZ1090_PIN_SDIO_CMD,
 133        TZ1090_PIN_SDIO_D0,
 134        TZ1090_PIN_SDIO_D1,
 135        TZ1090_PIN_SDIO_D2,
 136        TZ1090_PIN_SDIO_D3,
 137        TZ1090_PIN_SDH_CD,
 138        TZ1090_PIN_SDH_WP,
 139        TZ1090_PIN_SPI0_MCLK,
 140        TZ1090_PIN_SPI0_CS0,
 141        TZ1090_PIN_SPI0_CS1,
 142        TZ1090_PIN_SPI0_CS2,
 143        TZ1090_PIN_SPI0_DOUT,
 144        TZ1090_PIN_SPI0_DIN,
 145        TZ1090_PIN_SPI1_MCLK,
 146        TZ1090_PIN_SPI1_CS0,
 147        TZ1090_PIN_SPI1_CS1,
 148        TZ1090_PIN_SPI1_CS2,
 149        TZ1090_PIN_SPI1_DOUT,
 150        TZ1090_PIN_SPI1_DIN,
 151        TZ1090_PIN_UART0_RXD,
 152        TZ1090_PIN_UART0_TXD,
 153        TZ1090_PIN_UART0_CTS,
 154        TZ1090_PIN_UART0_RTS,
 155        TZ1090_PIN_UART1_RXD,
 156        TZ1090_PIN_UART1_TXD,
 157        TZ1090_PIN_SCB0_SDAT,
 158        TZ1090_PIN_SCB0_SCLK,
 159        TZ1090_PIN_SCB1_SDAT,
 160        TZ1090_PIN_SCB1_SCLK,
 161        TZ1090_PIN_SCB2_SDAT,
 162        TZ1090_PIN_SCB2_SCLK,
 163        TZ1090_PIN_I2S_MCLK,
 164        TZ1090_PIN_I2S_BCLK_OUT,
 165        TZ1090_PIN_I2S_LRCLK_OUT,
 166        TZ1090_PIN_I2S_DOUT0,
 167        TZ1090_PIN_I2S_DOUT1,
 168        TZ1090_PIN_I2S_DOUT2,
 169        TZ1090_PIN_I2S_DIN,
 170        TZ1090_PIN_PDM_A,
 171        TZ1090_PIN_PDM_B,
 172        TZ1090_PIN_PDM_C,
 173        TZ1090_PIN_PDM_D,
 174        TZ1090_PIN_TFT_RED0,
 175        TZ1090_PIN_TFT_RED1,
 176        TZ1090_PIN_TFT_RED2,
 177        TZ1090_PIN_TFT_RED3,
 178        TZ1090_PIN_TFT_RED4,
 179        TZ1090_PIN_TFT_RED5,
 180        TZ1090_PIN_TFT_RED6,
 181        TZ1090_PIN_TFT_RED7,
 182        TZ1090_PIN_TFT_GREEN0,
 183        TZ1090_PIN_TFT_GREEN1,
 184        TZ1090_PIN_TFT_GREEN2,
 185        TZ1090_PIN_TFT_GREEN3,
 186        TZ1090_PIN_TFT_GREEN4,
 187        TZ1090_PIN_TFT_GREEN5,
 188        TZ1090_PIN_TFT_GREEN6,
 189        TZ1090_PIN_TFT_GREEN7,
 190        TZ1090_PIN_TFT_BLUE0,
 191        TZ1090_PIN_TFT_BLUE1,
 192        TZ1090_PIN_TFT_BLUE2,
 193        TZ1090_PIN_TFT_BLUE3,
 194        TZ1090_PIN_TFT_BLUE4,
 195        TZ1090_PIN_TFT_BLUE5,
 196        TZ1090_PIN_TFT_BLUE6,
 197        TZ1090_PIN_TFT_BLUE7,
 198        TZ1090_PIN_TFT_VDDEN_GD,
 199        TZ1090_PIN_TFT_PANELCLK,
 200        TZ1090_PIN_TFT_BLANK_LS,
 201        TZ1090_PIN_TFT_VSYNC_NS,
 202        TZ1090_PIN_TFT_HSYNC_NR,
 203        TZ1090_PIN_TFT_VD12ACB,
 204        TZ1090_PIN_TFT_PWRSAVE,
 205        TZ1090_PIN_TX_ON,
 206        TZ1090_PIN_RX_ON,
 207        TZ1090_PIN_PLL_ON,
 208        TZ1090_PIN_PA_ON,
 209        TZ1090_PIN_RX_HP,
 210        TZ1090_PIN_GAIN0,
 211        TZ1090_PIN_GAIN1,
 212        TZ1090_PIN_GAIN2,
 213        TZ1090_PIN_GAIN3,
 214        TZ1090_PIN_GAIN4,
 215        TZ1090_PIN_GAIN5,
 216        TZ1090_PIN_GAIN6,
 217        TZ1090_PIN_GAIN7,
 218        TZ1090_PIN_ANT_SEL0,
 219        TZ1090_PIN_ANT_SEL1,
 220        TZ1090_PIN_SDH_CLK_IN,
 221
 222        /* Non-GPIO pins */
 223        TZ1090_PIN_TCK,
 224        TZ1090_PIN_TRST,
 225        TZ1090_PIN_TDI,
 226        TZ1090_PIN_TDO,
 227        TZ1090_PIN_TMS,
 228        TZ1090_PIN_CLK_OUT0,
 229        TZ1090_PIN_CLK_OUT1,
 230
 231        NUM_GPIOS = TZ1090_PIN_TCK,
 232};
 233
 234/* Pin names */
 235
 236static const struct pinctrl_pin_desc tz1090_pins[] = {
 237        /* GPIO pins */
 238        PINCTRL_PIN(TZ1090_PIN_SDIO_CLK,        "sdio_clk"),
 239        PINCTRL_PIN(TZ1090_PIN_SDIO_CMD,        "sdio_cmd"),
 240        PINCTRL_PIN(TZ1090_PIN_SDIO_D0,         "sdio_d0"),
 241        PINCTRL_PIN(TZ1090_PIN_SDIO_D1,         "sdio_d1"),
 242        PINCTRL_PIN(TZ1090_PIN_SDIO_D2,         "sdio_d2"),
 243        PINCTRL_PIN(TZ1090_PIN_SDIO_D3,         "sdio_d3"),
 244        PINCTRL_PIN(TZ1090_PIN_SDH_CD,          "sdh_cd"),
 245        PINCTRL_PIN(TZ1090_PIN_SDH_WP,          "sdh_wp"),
 246        PINCTRL_PIN(TZ1090_PIN_SPI0_MCLK,       "spi0_mclk"),
 247        PINCTRL_PIN(TZ1090_PIN_SPI0_CS0,        "spi0_cs0"),
 248        PINCTRL_PIN(TZ1090_PIN_SPI0_CS1,        "spi0_cs1"),
 249        PINCTRL_PIN(TZ1090_PIN_SPI0_CS2,        "spi0_cs2"),
 250        PINCTRL_PIN(TZ1090_PIN_SPI0_DOUT,       "spi0_dout"),
 251        PINCTRL_PIN(TZ1090_PIN_SPI0_DIN,        "spi0_din"),
 252        PINCTRL_PIN(TZ1090_PIN_SPI1_MCLK,       "spi1_mclk"),
 253        PINCTRL_PIN(TZ1090_PIN_SPI1_CS0,        "spi1_cs0"),
 254        PINCTRL_PIN(TZ1090_PIN_SPI1_CS1,        "spi1_cs1"),
 255        PINCTRL_PIN(TZ1090_PIN_SPI1_CS2,        "spi1_cs2"),
 256        PINCTRL_PIN(TZ1090_PIN_SPI1_DOUT,       "spi1_dout"),
 257        PINCTRL_PIN(TZ1090_PIN_SPI1_DIN,        "spi1_din"),
 258        PINCTRL_PIN(TZ1090_PIN_UART0_RXD,       "uart0_rxd"),
 259        PINCTRL_PIN(TZ1090_PIN_UART0_TXD,       "uart0_txd"),
 260        PINCTRL_PIN(TZ1090_PIN_UART0_CTS,       "uart0_cts"),
 261        PINCTRL_PIN(TZ1090_PIN_UART0_RTS,       "uart0_rts"),
 262        PINCTRL_PIN(TZ1090_PIN_UART1_RXD,       "uart1_rxd"),
 263        PINCTRL_PIN(TZ1090_PIN_UART1_TXD,       "uart1_txd"),
 264        PINCTRL_PIN(TZ1090_PIN_SCB0_SDAT,       "scb0_sdat"),
 265        PINCTRL_PIN(TZ1090_PIN_SCB0_SCLK,       "scb0_sclk"),
 266        PINCTRL_PIN(TZ1090_PIN_SCB1_SDAT,       "scb1_sdat"),
 267        PINCTRL_PIN(TZ1090_PIN_SCB1_SCLK,       "scb1_sclk"),
 268        PINCTRL_PIN(TZ1090_PIN_SCB2_SDAT,       "scb2_sdat"),
 269        PINCTRL_PIN(TZ1090_PIN_SCB2_SCLK,       "scb2_sclk"),
 270        PINCTRL_PIN(TZ1090_PIN_I2S_MCLK,        "i2s_mclk"),
 271        PINCTRL_PIN(TZ1090_PIN_I2S_BCLK_OUT,    "i2s_bclk_out"),
 272        PINCTRL_PIN(TZ1090_PIN_I2S_LRCLK_OUT,   "i2s_lrclk_out"),
 273        PINCTRL_PIN(TZ1090_PIN_I2S_DOUT0,       "i2s_dout0"),
 274        PINCTRL_PIN(TZ1090_PIN_I2S_DOUT1,       "i2s_dout1"),
 275        PINCTRL_PIN(TZ1090_PIN_I2S_DOUT2,       "i2s_dout2"),
 276        PINCTRL_PIN(TZ1090_PIN_I2S_DIN,         "i2s_din"),
 277        PINCTRL_PIN(TZ1090_PIN_PDM_A,           "pdm_a"),
 278        PINCTRL_PIN(TZ1090_PIN_PDM_B,           "pdm_b"),
 279        PINCTRL_PIN(TZ1090_PIN_PDM_C,           "pdm_c"),
 280        PINCTRL_PIN(TZ1090_PIN_PDM_D,           "pdm_d"),
 281        PINCTRL_PIN(TZ1090_PIN_TFT_RED0,        "tft_red0"),
 282        PINCTRL_PIN(TZ1090_PIN_TFT_RED1,        "tft_red1"),
 283        PINCTRL_PIN(TZ1090_PIN_TFT_RED2,        "tft_red2"),
 284        PINCTRL_PIN(TZ1090_PIN_TFT_RED3,        "tft_red3"),
 285        PINCTRL_PIN(TZ1090_PIN_TFT_RED4,        "tft_red4"),
 286        PINCTRL_PIN(TZ1090_PIN_TFT_RED5,        "tft_red5"),
 287        PINCTRL_PIN(TZ1090_PIN_TFT_RED6,        "tft_red6"),
 288        PINCTRL_PIN(TZ1090_PIN_TFT_RED7,        "tft_red7"),
 289        PINCTRL_PIN(TZ1090_PIN_TFT_GREEN0,      "tft_green0"),
 290        PINCTRL_PIN(TZ1090_PIN_TFT_GREEN1,      "tft_green1"),
 291        PINCTRL_PIN(TZ1090_PIN_TFT_GREEN2,      "tft_green2"),
 292        PINCTRL_PIN(TZ1090_PIN_TFT_GREEN3,      "tft_green3"),
 293        PINCTRL_PIN(TZ1090_PIN_TFT_GREEN4,      "tft_green4"),
 294        PINCTRL_PIN(TZ1090_PIN_TFT_GREEN5,      "tft_green5"),
 295        PINCTRL_PIN(TZ1090_PIN_TFT_GREEN6,      "tft_green6"),
 296        PINCTRL_PIN(TZ1090_PIN_TFT_GREEN7,      "tft_green7"),
 297        PINCTRL_PIN(TZ1090_PIN_TFT_BLUE0,       "tft_blue0"),
 298        PINCTRL_PIN(TZ1090_PIN_TFT_BLUE1,       "tft_blue1"),
 299        PINCTRL_PIN(TZ1090_PIN_TFT_BLUE2,       "tft_blue2"),
 300        PINCTRL_PIN(TZ1090_PIN_TFT_BLUE3,       "tft_blue3"),
 301        PINCTRL_PIN(TZ1090_PIN_TFT_BLUE4,       "tft_blue4"),
 302        PINCTRL_PIN(TZ1090_PIN_TFT_BLUE5,       "tft_blue5"),
 303        PINCTRL_PIN(TZ1090_PIN_TFT_BLUE6,       "tft_blue6"),
 304        PINCTRL_PIN(TZ1090_PIN_TFT_BLUE7,       "tft_blue7"),
 305        PINCTRL_PIN(TZ1090_PIN_TFT_VDDEN_GD,    "tft_vdden_gd"),
 306        PINCTRL_PIN(TZ1090_PIN_TFT_PANELCLK,    "tft_panelclk"),
 307        PINCTRL_PIN(TZ1090_PIN_TFT_BLANK_LS,    "tft_blank_ls"),
 308        PINCTRL_PIN(TZ1090_PIN_TFT_VSYNC_NS,    "tft_vsync_ns"),
 309        PINCTRL_PIN(TZ1090_PIN_TFT_HSYNC_NR,    "tft_hsync_nr"),
 310        PINCTRL_PIN(TZ1090_PIN_TFT_VD12ACB,     "tft_vd12acb"),
 311        PINCTRL_PIN(TZ1090_PIN_TFT_PWRSAVE,     "tft_pwrsave"),
 312        PINCTRL_PIN(TZ1090_PIN_TX_ON,           "tx_on"),
 313        PINCTRL_PIN(TZ1090_PIN_RX_ON,           "rx_on"),
 314        PINCTRL_PIN(TZ1090_PIN_PLL_ON,          "pll_on"),
 315        PINCTRL_PIN(TZ1090_PIN_PA_ON,           "pa_on"),
 316        PINCTRL_PIN(TZ1090_PIN_RX_HP,           "rx_hp"),
 317        PINCTRL_PIN(TZ1090_PIN_GAIN0,           "gain0"),
 318        PINCTRL_PIN(TZ1090_PIN_GAIN1,           "gain1"),
 319        PINCTRL_PIN(TZ1090_PIN_GAIN2,           "gain2"),
 320        PINCTRL_PIN(TZ1090_PIN_GAIN3,           "gain3"),
 321        PINCTRL_PIN(TZ1090_PIN_GAIN4,           "gain4"),
 322        PINCTRL_PIN(TZ1090_PIN_GAIN5,           "gain5"),
 323        PINCTRL_PIN(TZ1090_PIN_GAIN6,           "gain6"),
 324        PINCTRL_PIN(TZ1090_PIN_GAIN7,           "gain7"),
 325        PINCTRL_PIN(TZ1090_PIN_ANT_SEL0,        "ant_sel0"),
 326        PINCTRL_PIN(TZ1090_PIN_ANT_SEL1,        "ant_sel1"),
 327        PINCTRL_PIN(TZ1090_PIN_SDH_CLK_IN,      "sdh_clk_in"),
 328
 329        /* Non-GPIO pins */
 330        PINCTRL_PIN(TZ1090_PIN_TCK,             "tck"),
 331        PINCTRL_PIN(TZ1090_PIN_TRST,            "trst"),
 332        PINCTRL_PIN(TZ1090_PIN_TDI,             "tdi"),
 333        PINCTRL_PIN(TZ1090_PIN_TDO,             "tdo"),
 334        PINCTRL_PIN(TZ1090_PIN_TMS,             "tms"),
 335        PINCTRL_PIN(TZ1090_PIN_CLK_OUT0,        "clk_out0"),
 336        PINCTRL_PIN(TZ1090_PIN_CLK_OUT1,        "clk_out1"),
 337};
 338
 339/* Pins in each pin group */
 340
 341static const unsigned int spi1_cs2_pins[] = {
 342        TZ1090_PIN_SPI1_CS2,
 343};
 344
 345static const unsigned int pdm_d_pins[] = {
 346        TZ1090_PIN_PDM_D,
 347};
 348
 349static const unsigned int tft_pins[] = {
 350        TZ1090_PIN_TFT_RED0,
 351        TZ1090_PIN_TFT_RED1,
 352        TZ1090_PIN_TFT_RED2,
 353        TZ1090_PIN_TFT_RED3,
 354        TZ1090_PIN_TFT_RED4,
 355        TZ1090_PIN_TFT_RED5,
 356        TZ1090_PIN_TFT_RED6,
 357        TZ1090_PIN_TFT_RED7,
 358        TZ1090_PIN_TFT_GREEN0,
 359        TZ1090_PIN_TFT_GREEN1,
 360        TZ1090_PIN_TFT_GREEN2,
 361        TZ1090_PIN_TFT_GREEN3,
 362        TZ1090_PIN_TFT_GREEN4,
 363        TZ1090_PIN_TFT_GREEN5,
 364        TZ1090_PIN_TFT_GREEN6,
 365        TZ1090_PIN_TFT_GREEN7,
 366        TZ1090_PIN_TFT_BLUE0,
 367        TZ1090_PIN_TFT_BLUE1,
 368        TZ1090_PIN_TFT_BLUE2,
 369        TZ1090_PIN_TFT_BLUE3,
 370        TZ1090_PIN_TFT_BLUE4,
 371        TZ1090_PIN_TFT_BLUE5,
 372        TZ1090_PIN_TFT_BLUE6,
 373        TZ1090_PIN_TFT_BLUE7,
 374        TZ1090_PIN_TFT_VDDEN_GD,
 375        TZ1090_PIN_TFT_PANELCLK,
 376        TZ1090_PIN_TFT_BLANK_LS,
 377        TZ1090_PIN_TFT_VSYNC_NS,
 378        TZ1090_PIN_TFT_HSYNC_NR,
 379        TZ1090_PIN_TFT_VD12ACB,
 380        TZ1090_PIN_TFT_PWRSAVE,
 381};
 382
 383static const unsigned int afe_pins[] = {
 384        TZ1090_PIN_TX_ON,
 385        TZ1090_PIN_RX_ON,
 386        TZ1090_PIN_PLL_ON,
 387        TZ1090_PIN_PA_ON,
 388        TZ1090_PIN_RX_HP,
 389        TZ1090_PIN_ANT_SEL0,
 390        TZ1090_PIN_ANT_SEL1,
 391        TZ1090_PIN_GAIN0,
 392        TZ1090_PIN_GAIN1,
 393        TZ1090_PIN_GAIN2,
 394        TZ1090_PIN_GAIN3,
 395        TZ1090_PIN_GAIN4,
 396        TZ1090_PIN_GAIN5,
 397        TZ1090_PIN_GAIN6,
 398        TZ1090_PIN_GAIN7,
 399};
 400
 401static const unsigned int sdio_pins[] = {
 402        TZ1090_PIN_SDIO_CLK,
 403        TZ1090_PIN_SDIO_CMD,
 404        TZ1090_PIN_SDIO_D0,
 405        TZ1090_PIN_SDIO_D1,
 406        TZ1090_PIN_SDIO_D2,
 407        TZ1090_PIN_SDIO_D3,
 408};
 409
 410static const unsigned int sdh_pins[] = {
 411        TZ1090_PIN_SDH_CD,
 412        TZ1090_PIN_SDH_WP,
 413        TZ1090_PIN_SDH_CLK_IN,
 414};
 415
 416static const unsigned int spi0_pins[] = {
 417        TZ1090_PIN_SPI0_MCLK,
 418        TZ1090_PIN_SPI0_CS0,
 419        TZ1090_PIN_SPI0_CS1,
 420        TZ1090_PIN_SPI0_CS2,
 421        TZ1090_PIN_SPI0_DOUT,
 422        TZ1090_PIN_SPI0_DIN,
 423};
 424
 425static const unsigned int spi1_pins[] = {
 426        TZ1090_PIN_SPI1_MCLK,
 427        TZ1090_PIN_SPI1_CS0,
 428        TZ1090_PIN_SPI1_CS1,
 429        TZ1090_PIN_SPI1_CS2,
 430        TZ1090_PIN_SPI1_DOUT,
 431        TZ1090_PIN_SPI1_DIN,
 432};
 433
 434static const unsigned int uart0_pins[] = {
 435        TZ1090_PIN_UART0_RTS,
 436        TZ1090_PIN_UART0_CTS,
 437        TZ1090_PIN_UART0_TXD,
 438        TZ1090_PIN_UART0_RXD,
 439};
 440
 441static const unsigned int uart1_pins[] = {
 442        TZ1090_PIN_UART1_TXD,
 443        TZ1090_PIN_UART1_RXD,
 444};
 445
 446static const unsigned int uart_pins[] = {
 447        TZ1090_PIN_UART1_TXD,
 448        TZ1090_PIN_UART1_RXD,
 449        TZ1090_PIN_UART0_RTS,
 450        TZ1090_PIN_UART0_CTS,
 451        TZ1090_PIN_UART0_TXD,
 452        TZ1090_PIN_UART0_RXD,
 453};
 454
 455static const unsigned int scb0_pins[] = {
 456        TZ1090_PIN_SCB0_SDAT,
 457        TZ1090_PIN_SCB0_SCLK,
 458};
 459
 460static const unsigned int scb1_pins[] = {
 461        TZ1090_PIN_SCB1_SDAT,
 462        TZ1090_PIN_SCB1_SCLK,
 463};
 464
 465static const unsigned int scb2_pins[] = {
 466        TZ1090_PIN_SCB2_SDAT,
 467        TZ1090_PIN_SCB2_SCLK,
 468};
 469
 470static const unsigned int i2s_pins[] = {
 471        TZ1090_PIN_I2S_MCLK,
 472        TZ1090_PIN_I2S_BCLK_OUT,
 473        TZ1090_PIN_I2S_LRCLK_OUT,
 474        TZ1090_PIN_I2S_DOUT0,
 475        TZ1090_PIN_I2S_DOUT1,
 476        TZ1090_PIN_I2S_DOUT2,
 477        TZ1090_PIN_I2S_DIN,
 478};
 479
 480static const unsigned int jtag_pins[] = {
 481        TZ1090_PIN_TCK,
 482        TZ1090_PIN_TRST,
 483        TZ1090_PIN_TDI,
 484        TZ1090_PIN_TDO,
 485        TZ1090_PIN_TMS,
 486};
 487
 488/* Pins in each drive pin group */
 489
 490static const unsigned int drive_sdio_pins[] = {
 491        TZ1090_PIN_SDIO_CLK,
 492        TZ1090_PIN_SDIO_CMD,
 493        TZ1090_PIN_SDIO_D0,
 494        TZ1090_PIN_SDIO_D1,
 495        TZ1090_PIN_SDIO_D2,
 496        TZ1090_PIN_SDIO_D3,
 497        TZ1090_PIN_SDH_WP,
 498        TZ1090_PIN_SDH_CD,
 499        TZ1090_PIN_SDH_CLK_IN,
 500};
 501
 502static const unsigned int drive_i2s_pins[] = {
 503        TZ1090_PIN_CLK_OUT1,
 504        TZ1090_PIN_I2S_DIN,
 505        TZ1090_PIN_I2S_DOUT0,
 506        TZ1090_PIN_I2S_DOUT1,
 507        TZ1090_PIN_I2S_DOUT2,
 508        TZ1090_PIN_I2S_LRCLK_OUT,
 509        TZ1090_PIN_I2S_BCLK_OUT,
 510        TZ1090_PIN_I2S_MCLK,
 511};
 512
 513static const unsigned int drive_scb0_pins[] = {
 514        TZ1090_PIN_SCB0_SCLK,
 515        TZ1090_PIN_SCB0_SDAT,
 516        TZ1090_PIN_PDM_D,
 517        TZ1090_PIN_PDM_C,
 518};
 519
 520static const unsigned int drive_pdm_pins[] = {
 521        TZ1090_PIN_CLK_OUT0,
 522        TZ1090_PIN_PDM_B,
 523        TZ1090_PIN_PDM_A,
 524};
 525
 526/* Pin groups each function can be muxed to */
 527
 528/*
 529 * The magic "perip" function allows otherwise non-muxing pins to be enabled in
 530 * peripheral mode.
 531 */
 532static const char * const perip_groups[] = {
 533        /* non-muxing convenient gpio pingroups */
 534        "uart",
 535        "uart0",
 536        "uart1",
 537        "spi0",
 538        "spi1",
 539        "scb0",
 540        "scb1",
 541        "scb2",
 542        "i2s",
 543        /* individual pins not part of a pin mux group */
 544        "spi0_mclk",
 545        "spi0_cs0",
 546        "spi0_cs1",
 547        "spi0_cs2",
 548        "spi0_dout",
 549        "spi0_din",
 550        "spi1_mclk",
 551        "spi1_cs0",
 552        "spi1_cs1",
 553        "spi1_dout",
 554        "spi1_din",
 555        "uart0_rxd",
 556        "uart0_txd",
 557        "uart0_cts",
 558        "uart0_rts",
 559        "uart1_rxd",
 560        "uart1_txd",
 561        "scb0_sdat",
 562        "scb0_sclk",
 563        "scb1_sdat",
 564        "scb1_sclk",
 565        "scb2_sdat",
 566        "scb2_sclk",
 567        "i2s_mclk",
 568        "i2s_bclk_out",
 569        "i2s_lrclk_out",
 570        "i2s_dout0",
 571        "i2s_dout1",
 572        "i2s_dout2",
 573        "i2s_din",
 574        "pdm_a",
 575        "pdm_b",
 576        "pdm_c",
 577};
 578
 579static const char * const sdh_sdio_groups[] = {
 580        "sdh",
 581        "sdio",
 582        /* sdh pins */
 583        "sdh_cd",
 584        "sdh_wp",
 585        "sdh_clk_in",
 586        /* sdio pins */
 587        "sdio_clk",
 588        "sdio_cmd",
 589        "sdio_d0",
 590        "sdio_d1",
 591        "sdio_d2",
 592        "sdio_d3",
 593};
 594
 595static const char * const spi1_cs2_groups[] = {
 596        "spi1_cs2",
 597};
 598
 599static const char * const pdm_dac_groups[] = {
 600        "pdm_d",
 601};
 602
 603static const char * const usb_vbus_groups[] = {
 604        "spi1_cs2",
 605        "pdm_d",
 606};
 607
 608static const char * const afe_groups[] = {
 609        "afe",
 610        /* afe pins */
 611        "tx_on",
 612        "rx_on",
 613        "pll_on",
 614        "pa_on",
 615        "rx_hp",
 616        "ant_sel0",
 617        "ant_sel1",
 618        "gain0",
 619        "gain1",
 620        "gain2",
 621        "gain3",
 622        "gain4",
 623        "gain5",
 624        "gain6",
 625        "gain7",
 626};
 627
 628static const char * const tft_groups[] = {
 629        "tft",
 630        /* tft pins */
 631        "tft_red0",
 632        "tft_red1",
 633        "tft_red2",
 634        "tft_red3",
 635        "tft_red4",
 636        "tft_red5",
 637        "tft_red6",
 638        "tft_red7",
 639        "tft_green0",
 640        "tft_green1",
 641        "tft_green2",
 642        "tft_green3",
 643        "tft_green4",
 644        "tft_green5",
 645        "tft_green6",
 646        "tft_green7",
 647        "tft_blue0",
 648        "tft_blue1",
 649        "tft_blue2",
 650        "tft_blue3",
 651        "tft_blue4",
 652        "tft_blue5",
 653        "tft_blue6",
 654        "tft_blue7",
 655        "tft_vdden_gd",
 656        "tft_panelclk",
 657        "tft_blank_ls",
 658        "tft_vsync_ns",
 659        "tft_hsync_nr",
 660        "tft_vd12acb",
 661        "tft_pwrsave",
 662};
 663
 664/* Mux functions that can be used by a mux */
 665
 666enum tz1090_mux {
 667        /* internal placeholder */
 668        TZ1090_MUX_NA = -1,
 669        /* magic per-non-muxing-GPIO-pin peripheral mode mux */
 670        TZ1090_MUX_PERIP,
 671        /* SDH/SDIO mux */
 672        TZ1090_MUX_SDH,
 673        TZ1090_MUX_SDIO,
 674        /* USB_VBUS muxes */
 675        TZ1090_MUX_SPI1_CS2,
 676        TZ1090_MUX_PDM_DAC,
 677        TZ1090_MUX_USB_VBUS,
 678        /* AFE mux */
 679        TZ1090_MUX_AFE,
 680        TZ1090_MUX_TS_OUT_0,
 681        /* EXT_DAC mux */
 682        TZ1090_MUX_DAC,
 683        TZ1090_MUX_NOT_IQADC_STB,
 684        TZ1090_MUX_IQDAC_STB,
 685        /* TFT mux */
 686        TZ1090_MUX_TFT,
 687        TZ1090_MUX_EXT_DAC,
 688        TZ1090_MUX_TS_OUT_1,
 689        TZ1090_MUX_LCD_TRACE,
 690        TZ1090_MUX_PHY_RINGOSC,
 691};
 692
 693#define FUNCTION(mux, fname, group)                     \
 694        [(TZ1090_MUX_ ## mux)] = {                      \
 695                .name = #fname,                         \
 696                .groups = group##_groups,               \
 697                .ngroups = ARRAY_SIZE(group##_groups),  \
 698        }
 699/* For intermediate functions with submuxes */
 700#define NULL_FUNCTION(mux, fname)                       \
 701        [(TZ1090_MUX_ ## mux)] = {                      \
 702                .name = #fname,                         \
 703        }
 704
 705/* Must correlate with enum tz1090_mux */
 706static const struct tz1090_function tz1090_functions[] = {
 707        /*       FUNCTION       function name   pingroups */
 708        FUNCTION(PERIP,         perip,          perip),
 709        FUNCTION(SDH,           sdh,            sdh_sdio),
 710        FUNCTION(SDIO,          sdio,           sdh_sdio),
 711        FUNCTION(SPI1_CS2,      spi1_cs2,       spi1_cs2),
 712        FUNCTION(PDM_DAC,       pdm_dac,        pdm_dac),
 713        FUNCTION(USB_VBUS,      usb_vbus,       usb_vbus),
 714        FUNCTION(AFE,           afe,            afe),
 715        FUNCTION(TS_OUT_0,      ts_out_0,       afe),
 716        FUNCTION(DAC,           ext_dac,        tft),
 717        FUNCTION(NOT_IQADC_STB, not_iqadc_stb,  tft),
 718        FUNCTION(IQDAC_STB,     iqdac_stb,      tft),
 719        FUNCTION(TFT,           tft,            tft),
 720        NULL_FUNCTION(EXT_DAC,  _ext_dac),
 721        FUNCTION(TS_OUT_1,      ts_out_1,       tft),
 722        FUNCTION(LCD_TRACE,     lcd_trace,      tft),
 723        FUNCTION(PHY_RINGOSC,   phy_ringosc,    tft),
 724};
 725
 726/* Sub muxes */
 727
 728/**
 729 * MUX() - Initialise a mux description.
 730 * @f0:         Function 0 (TZ1090_MUX_ is prepended, NA for none)
 731 * @f1:         Function 1 (TZ1090_MUX_ is prepended, NA for none)
 732 * @f2:         Function 2 (TZ1090_MUX_ is prepended, NA for none)
 733 * @f3:         Function 3 (TZ1090_MUX_ is prepended, NA for none)
 734 * @f4:         Function 4 (TZ1090_MUX_ is prepended, NA for none)
 735 * @mux_r:      Mux register (REG_PINCTRL_ is prepended)
 736 * @mux_b:      Bit number in register that the mux field begins
 737 * @mux_w:      Width of mux field in register
 738 */
 739#define MUX(f0, f1, f2, f3, f4, mux_r, mux_b, mux_w)            \
 740        {                                                       \
 741                .funcs = {                                      \
 742                        TZ1090_MUX_ ## f0,                      \
 743                        TZ1090_MUX_ ## f1,                      \
 744                        TZ1090_MUX_ ## f2,                      \
 745                        TZ1090_MUX_ ## f3,                      \
 746                        TZ1090_MUX_ ## f4,                      \
 747                },                                              \
 748                .reg = (REG_PINCTRL_ ## mux_r),                 \
 749                .bit = (mux_b),                                 \
 750                .width = (mux_w),                               \
 751        }
 752
 753/**
 754 * DEFINE_SUBMUX() - Defines a submux description separate from a pin group.
 755 * @mux:        Mux name (_submux is appended)
 756 * @f0:         Function 0 (TZ1090_MUX_ is prepended, NA for none)
 757 * @f1:         Function 1 (TZ1090_MUX_ is prepended, NA for none)
 758 * @f2:         Function 2 (TZ1090_MUX_ is prepended, NA for none)
 759 * @f3:         Function 3 (TZ1090_MUX_ is prepended, NA for none)
 760 * @f4:         Function 4 (TZ1090_MUX_ is prepended, NA for none)
 761 * @mux_r:      Mux register (REG_PINCTRL_ is prepended)
 762 * @mux_b:      Bit number in register that the mux field begins
 763 * @mux_w:      Width of mux field in register
 764 *
 765 * A sub mux is a nested mux that can be bound to a magic function number used
 766 * by another mux description. For example value 4 of the top level mux might
 767 * correspond to a function which has a submux pointed to in tz1090_submux[].
 768 * The outer mux can then take on any function in the top level mux or the
 769 * submux, and if a submux function is chosen both muxes are updated to route
 770 * the signal from the submux.
 771 *
 772 * The submux can be defined with DEFINE_SUBMUX and pointed to from
 773 * tz1090_submux[] using SUBMUX.
 774 */
 775#define DEFINE_SUBMUX(mux, f0, f1, f2, f3, f4, mux_r, mux_b, mux_w)     \
 776        static struct tz1090_muxdesc mux ## _submux =                   \
 777                MUX(f0, f1, f2, f3, f4, mux_r, mux_b, mux_w)
 778
 779/**
 780 * SUBMUX() - Link a submux to a function number.
 781 * @f:          Function name (TZ1090_MUX_ is prepended)
 782 * @submux:     Submux name (_submux is appended)
 783 *
 784 * For use in tz1090_submux[] initialisation to link an intermediate function
 785 * number to a particular submux description. It indicates that when the
 786 * function is chosen the signal is connected to the submux.
 787 */
 788#define SUBMUX(f, submux)       [(TZ1090_MUX_ ## f)] = &(submux ## _submux)
 789
 790/**
 791 * MUX_PG() - Initialise a pin group with mux control
 792 * @pg_name:    Pin group name (stringified, _pins appended to get pins array)
 793 * @f0:         Function 0 (TZ1090_MUX_ is prepended, NA for none)
 794 * @f1:         Function 1 (TZ1090_MUX_ is prepended, NA for none)
 795 * @f2:         Function 2 (TZ1090_MUX_ is prepended, NA for none)
 796 * @f3:         Function 3 (TZ1090_MUX_ is prepended, NA for none)
 797 * @f4:         Function 4 (TZ1090_MUX_ is prepended, NA for none)
 798 * @mux_r:      Mux register (REG_PINCTRL_ is prepended)
 799 * @mux_b:      Bit number in register that the mux field begins
 800 * @mux_w:      Width of mux field in register
 801 */
 802#define MUX_PG(pg_name, f0, f1, f2, f3, f4,                     \
 803               mux_r, mux_b, mux_w)                             \
 804        {                                                       \
 805                .name = #pg_name,                               \
 806                .pins = pg_name##_pins,                         \
 807                .npins = ARRAY_SIZE(pg_name##_pins),            \
 808                .mux = MUX(f0, f1, f2, f3, f4,                  \
 809                           mux_r, mux_b, mux_w),                \
 810        }
 811
 812/**
 813 * SIMPLE_PG() - Initialise a simple convenience pin group
 814 * @pg_name:    Pin group name (stringified, _pins appended to get pins array)
 815 *
 816 * A simple pin group is simply used for binding pins together so they can be
 817 * referred to by a single name instead of having to list every pin
 818 * individually.
 819 */
 820#define SIMPLE_PG(pg_name)                                      \
 821        {                                                       \
 822                .name = #pg_name,                               \
 823                .pins = pg_name##_pins,                         \
 824                .npins = ARRAY_SIZE(pg_name##_pins),            \
 825        }
 826
 827/**
 828 * DRV_PG() - Initialise a pin group with drive control
 829 * @pg_name:    Pin group name (stringified, _pins appended to get pins array)
 830 * @slw_b:      Slew register bit.
 831 *              The same bit is used for Schmitt, and Drive (*2).
 832 */
 833#define DRV_PG(pg_name, slw_b)                                  \
 834        {                                                       \
 835                .name = #pg_name,                               \
 836                .pins = pg_name##_pins,                         \
 837                .npins = ARRAY_SIZE(pg_name##_pins),            \
 838                .drv = true,                                    \
 839                .slw_bit = (slw_b),                             \
 840        }
 841
 842/*
 843 * Define main muxing pin groups
 844 */
 845
 846/* submuxes */
 847
 848/*            name     f0,  f1,            f2,        f3, f4, mux r/b/w */
 849DEFINE_SUBMUX(ext_dac, DAC, NOT_IQADC_STB, IQDAC_STB, NA, NA, IF_CTL, 6, 2);
 850
 851/* bind submuxes to internal functions */
 852static struct tz1090_muxdesc *tz1090_submux[] = {
 853        SUBMUX(EXT_DAC, ext_dac),
 854};
 855
 856/*
 857 * These are the pin mux groups. Pin muxing can be enabled and disabled for each
 858 * pin individually so these groups are internal. The mapping of pins to pin mux
 859 * group is below (tz1090_mux_pins).
 860 */
 861static struct tz1090_pingroup tz1090_mux_groups[] = {
 862        /* Muxing pin groups */
 863        /*     pg_name,  f0,       f1,       f2,       f3,        f4,          mux r/b/w */
 864        MUX_PG(sdh,      SDH,      SDIO,     NA,       NA,        NA,          IF_CTL, 20, 2),
 865        MUX_PG(sdio,     SDIO,     SDH,      NA,       NA,        NA,          IF_CTL, 16, 2),
 866        MUX_PG(spi1_cs2, SPI1_CS2, USB_VBUS, NA,       NA,        NA,          IF_CTL, 10, 2),
 867        MUX_PG(pdm_d,    PDM_DAC,  USB_VBUS, NA,       NA,        NA,          IF_CTL,  8, 2),
 868        MUX_PG(afe,      AFE,      TS_OUT_0, NA,       NA,        NA,          IF_CTL,  4, 2),
 869        MUX_PG(tft,      TFT,      EXT_DAC,  TS_OUT_1, LCD_TRACE, PHY_RINGOSC, IF_CTL,  0, 3),
 870};
 871
 872/*
 873 * This is the mapping from GPIO pins to pin mux groups in tz1090_mux_groups[].
 874 * Pins which aren't muxable to multiple peripherals are set to
 875 * TZ1090_MUX_GROUP_MAX to enable the "perip" function to enable/disable
 876 * peripheral control of the pin.
 877 *
 878 * This array is initialised in tz1090_init_mux_pins().
 879 */
 880static u8 tz1090_mux_pins[NUM_GPIOS];
 881
 882/* TZ1090_MUX_GROUP_MAX is used in tz1090_mux_pins[] for non-muxing pins */
 883#define TZ1090_MUX_GROUP_MAX ARRAY_SIZE(tz1090_mux_groups)
 884
 885/**
 886 * tz1090_init_mux_pins() - Initialise GPIO pin to mux group mapping.
 887 *
 888 * Initialises the tz1090_mux_pins[] array to be the inverse of the pin lists in
 889 * each pin mux group in tz1090_mux_groups[].
 890 *
 891 * It is assumed that no pin mux groups overlap (share pins).
 892 */
 893static void __init tz1090_init_mux_pins(void)
 894{
 895        unsigned int g, p;
 896        const struct tz1090_pingroup *grp;
 897        const unsigned int *pin;
 898
 899        for (p = 0; p < NUM_GPIOS; ++p)
 900                tz1090_mux_pins[p] = TZ1090_MUX_GROUP_MAX;
 901
 902        grp = tz1090_mux_groups;
 903        for (g = 0, grp = tz1090_mux_groups;
 904             g < ARRAY_SIZE(tz1090_mux_groups); ++g, ++grp)
 905                for (pin = grp->pins, p = 0; p < grp->npins; ++p, ++pin)
 906                        tz1090_mux_pins[*pin] = g;
 907}
 908
 909/*
 910 * These are the externally visible pin groups. Some of them allow group control
 911 * of drive configuration. Some are just simple convenience pingroups. All the
 912 * internal pin mux groups in tz1090_mux_groups[] are mirrored here with the
 913 * same pins.
 914 * Pseudo pin groups follow in the group numbers after this array for each GPIO
 915 * pin. Any group used for muxing must have all pins belonging to the same pin
 916 * mux group.
 917 */
 918static struct tz1090_pingroup tz1090_groups[] = {
 919        /* Pin groups with drive control (with no out of place pins) */
 920        /*     pg_name,         slw/schmitt/drv b */
 921        DRV_PG(jtag,            11 /* 11, 22 */),
 922        DRV_PG(tft,             10 /* 10, 20 */),
 923        DRV_PG(scb2,            9  /*  9, 18 */),
 924        DRV_PG(spi0,            7  /*  7, 14 */),
 925        DRV_PG(uart,            5  /*  5, 10 */),
 926        DRV_PG(scb1,            4  /*  4,  8 */),
 927        DRV_PG(spi1,            3  /*  3,  6 */),
 928        DRV_PG(afe,             0  /*  0,  0 */),
 929
 930        /*
 931         * Drive specific pin groups (with odd combinations of pins which makes
 932         * the pin group naming somewhat arbitrary)
 933         */
 934        /*     pg_name,         slw/schmitt/drv b */
 935        DRV_PG(drive_sdio,      8  /*  8, 16 */), /* sdio_* + sdh_* */
 936        DRV_PG(drive_i2s,       6  /*  6, 12 */), /* i2s_* + clk_out1 */
 937        DRV_PG(drive_scb0,      2  /*  2,  4 */), /* scb0_* + pdm_{c,d} */
 938        DRV_PG(drive_pdm,       1  /*  1,  2 */), /* pdm_{a,b} + clk_out0 */
 939
 940        /* Convenience pin groups */
 941        /*        pg_name */
 942        SIMPLE_PG(uart0),
 943        SIMPLE_PG(uart1),
 944        SIMPLE_PG(scb0),
 945        SIMPLE_PG(i2s),
 946        SIMPLE_PG(sdh),
 947        SIMPLE_PG(sdio),
 948
 949        /* pseudo-pingroups for each GPIO pin follow */
 950};
 951
 952/**
 953 * struct tz1090_pmx - Private pinctrl data
 954 * @dev:        Platform device
 955 * @pctl:       Pin control device
 956 * @regs:       Register region
 957 * @lock:       Lock protecting coherency of pin_en, gpio_en, and SELECT regs
 958 * @pin_en:     Pins that have been enabled (32 pins packed into each element)
 959 * @gpio_en:    GPIOs that have been enabled (32 pins packed into each element)
 960 */
 961struct tz1090_pmx {
 962        struct device           *dev;
 963        struct pinctrl_dev      *pctl;
 964        void __iomem            *regs;
 965        spinlock_t              lock;
 966        u32                     pin_en[3];
 967        u32                     gpio_en[3];
 968};
 969
 970static inline u32 pmx_read(struct tz1090_pmx *pmx, u32 reg)
 971{
 972        return ioread32(pmx->regs + reg);
 973}
 974
 975static inline void pmx_write(struct tz1090_pmx *pmx, u32 val, u32 reg)
 976{
 977        iowrite32(val, pmx->regs + reg);
 978}
 979
 980/*
 981 * Pin control operations
 982 */
 983
 984/* each GPIO pin has it's own pseudo pingroup containing only itself */
 985
 986static int tz1090_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
 987{
 988        return ARRAY_SIZE(tz1090_groups) + NUM_GPIOS;
 989}
 990
 991static const char *tz1090_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
 992                                                 unsigned int group)
 993{
 994        if (group < ARRAY_SIZE(tz1090_groups)) {
 995                /* normal pingroup */
 996                return tz1090_groups[group].name;
 997        } else {
 998                /* individual gpio pin pseudo-pingroup */
 999                unsigned int pin = group - ARRAY_SIZE(tz1090_groups);
1000                return tz1090_pins[pin].name;
1001        }
1002}
1003
1004static int tz1090_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
1005                                         unsigned int group,
1006                                         const unsigned int **pins,
1007                                         unsigned int *num_pins)
1008{
1009        if (group < ARRAY_SIZE(tz1090_groups)) {
1010                /* normal pingroup */
1011                *pins = tz1090_groups[group].pins;
1012                *num_pins = tz1090_groups[group].npins;
1013        } else {
1014                /* individual gpio pin pseudo-pingroup */
1015                unsigned int pin = group - ARRAY_SIZE(tz1090_groups);
1016                *pins = &tz1090_pins[pin].number;
1017                *num_pins = 1;
1018        }
1019
1020        return 0;
1021}
1022
1023#ifdef CONFIG_DEBUG_FS
1024static void tz1090_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev,
1025                                        struct seq_file *s,
1026                                        unsigned int offset)
1027{
1028        seq_printf(s, " %s", dev_name(pctldev->dev));
1029}
1030#endif
1031
1032static int reserve_map(struct device *dev, struct pinctrl_map **map,
1033                       unsigned int *reserved_maps, unsigned int *num_maps,
1034                       unsigned int reserve)
1035{
1036        unsigned int old_num = *reserved_maps;
1037        unsigned int new_num = *num_maps + reserve;
1038        struct pinctrl_map *new_map;
1039
1040        if (old_num >= new_num)
1041                return 0;
1042
1043        new_map = krealloc(*map, sizeof(*new_map) * new_num, GFP_KERNEL);
1044        if (!new_map) {
1045                dev_err(dev, "krealloc(map) failed\n");
1046                return -ENOMEM;
1047        }
1048
1049        memset(new_map + old_num, 0, (new_num - old_num) * sizeof(*new_map));
1050
1051        *map = new_map;
1052        *reserved_maps = new_num;
1053
1054        return 0;
1055}
1056
1057static int add_map_mux(struct pinctrl_map **map, unsigned int *reserved_maps,
1058                       unsigned int *num_maps, const char *group,
1059                       const char *function)
1060{
1061        if (WARN_ON(*num_maps == *reserved_maps))
1062                return -ENOSPC;
1063
1064        (*map)[*num_maps].type = PIN_MAP_TYPE_MUX_GROUP;
1065        (*map)[*num_maps].data.mux.group = group;
1066        (*map)[*num_maps].data.mux.function = function;
1067        (*num_maps)++;
1068
1069        return 0;
1070}
1071
1072static int add_map_configs(struct device *dev,
1073                           struct pinctrl_map **map,
1074                           unsigned int *reserved_maps, unsigned int *num_maps,
1075                           const char *group, unsigned long *configs,
1076                           unsigned int num_configs)
1077{
1078        unsigned long *dup_configs;
1079
1080        if (WARN_ON(*num_maps == *reserved_maps))
1081                return -ENOSPC;
1082
1083        dup_configs = kmemdup(configs, num_configs * sizeof(*dup_configs),
1084                              GFP_KERNEL);
1085        if (!dup_configs) {
1086                dev_err(dev, "kmemdup(configs) failed\n");
1087                return -ENOMEM;
1088        }
1089
1090        (*map)[*num_maps].type = PIN_MAP_TYPE_CONFIGS_GROUP;
1091        (*map)[*num_maps].data.configs.group_or_pin = group;
1092        (*map)[*num_maps].data.configs.configs = dup_configs;
1093        (*map)[*num_maps].data.configs.num_configs = num_configs;
1094        (*num_maps)++;
1095
1096        return 0;
1097}
1098
1099static void tz1090_pinctrl_dt_free_map(struct pinctrl_dev *pctldev,
1100                                       struct pinctrl_map *map,
1101                                       unsigned int num_maps)
1102{
1103        int i;
1104
1105        for (i = 0; i < num_maps; i++)
1106                if (map[i].type == PIN_MAP_TYPE_CONFIGS_GROUP)
1107                        kfree(map[i].data.configs.configs);
1108
1109        kfree(map);
1110}
1111
1112static int tz1090_pinctrl_dt_subnode_to_map(struct device *dev,
1113                                            struct device_node *np,
1114                                            struct pinctrl_map **map,
1115                                            unsigned int *reserved_maps,
1116                                            unsigned int *num_maps)
1117{
1118        int ret;
1119        const char *function;
1120        unsigned long *configs = NULL;
1121        unsigned int num_configs = 0;
1122        unsigned int reserve;
1123        struct property *prop;
1124        const char *group;
1125
1126        ret = of_property_read_string(np, "tz1090,function", &function);
1127        if (ret < 0) {
1128                /* EINVAL=missing, which is fine since it's optional */
1129                if (ret != -EINVAL)
1130                        dev_err(dev, "could not parse property function\n");
1131                function = NULL;
1132        }
1133
1134        ret = pinconf_generic_parse_dt_config(np, NULL, &configs, &num_configs);
1135        if (ret)
1136                return ret;
1137
1138        reserve = 0;
1139        if (function != NULL)
1140                reserve++;
1141        if (num_configs)
1142                reserve++;
1143        ret = of_property_count_strings(np, "tz1090,pins");
1144        if (ret < 0) {
1145                dev_err(dev, "could not parse property pins\n");
1146                goto exit;
1147        }
1148        reserve *= ret;
1149
1150        ret = reserve_map(dev, map, reserved_maps, num_maps, reserve);
1151        if (ret < 0)
1152                goto exit;
1153
1154        of_property_for_each_string(np, "tz1090,pins", prop, group) {
1155                if (function) {
1156                        ret = add_map_mux(map, reserved_maps, num_maps,
1157                                          group, function);
1158                        if (ret < 0)
1159                                goto exit;
1160                }
1161
1162                if (num_configs) {
1163                        ret = add_map_configs(dev, map, reserved_maps,
1164                                              num_maps, group, configs,
1165                                              num_configs);
1166                        if (ret < 0)
1167                                goto exit;
1168                }
1169        }
1170
1171        ret = 0;
1172
1173exit:
1174        kfree(configs);
1175        return ret;
1176}
1177
1178static int tz1090_pinctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
1179                                         struct device_node *np_config,
1180                                         struct pinctrl_map **map,
1181                                         unsigned int *num_maps)
1182{
1183        unsigned int reserved_maps;
1184        struct device_node *np;
1185        int ret;
1186
1187        reserved_maps = 0;
1188        *map = NULL;
1189        *num_maps = 0;
1190
1191        for_each_child_of_node(np_config, np) {
1192                ret = tz1090_pinctrl_dt_subnode_to_map(pctldev->dev, np, map,
1193                                                       &reserved_maps,
1194                                                       num_maps);
1195                if (ret < 0) {
1196                        tz1090_pinctrl_dt_free_map(pctldev, *map, *num_maps);
1197                        return ret;
1198                }
1199        }
1200
1201        return 0;
1202}
1203
1204static struct pinctrl_ops tz1090_pinctrl_ops = {
1205        .get_groups_count       = tz1090_pinctrl_get_groups_count,
1206        .get_group_name         = tz1090_pinctrl_get_group_name,
1207        .get_group_pins         = tz1090_pinctrl_get_group_pins,
1208#ifdef CONFIG_DEBUG_FS
1209        .pin_dbg_show           = tz1090_pinctrl_pin_dbg_show,
1210#endif
1211        .dt_node_to_map         = tz1090_pinctrl_dt_node_to_map,
1212        .dt_free_map            = tz1090_pinctrl_dt_free_map,
1213};
1214
1215/*
1216 * Pin mux operations
1217 */
1218
1219static int tz1090_pinctrl_get_funcs_count(struct pinctrl_dev *pctldev)
1220{
1221        return ARRAY_SIZE(tz1090_functions);
1222}
1223
1224static const char *tz1090_pinctrl_get_func_name(struct pinctrl_dev *pctldev,
1225                                                unsigned int function)
1226{
1227        return tz1090_functions[function].name;
1228}
1229
1230static int tz1090_pinctrl_get_func_groups(struct pinctrl_dev *pctldev,
1231                                          unsigned int function,
1232                                          const char * const **groups,
1233                                          unsigned int * const num_groups)
1234{
1235        /* pingroup functions */
1236        *groups = tz1090_functions[function].groups;
1237        *num_groups = tz1090_functions[function].ngroups;
1238        return 0;
1239}
1240
1241/**
1242 * tz1090_pinctrl_select() - update bit in SELECT register
1243 * @pmx:                Pinmux data
1244 * @pin:                Pin number (must be within GPIO range)
1245 */
1246static void tz1090_pinctrl_select(struct tz1090_pmx *pmx,
1247                                  unsigned int pin)
1248{
1249        u32 reg, reg_shift, select, val;
1250        unsigned int pmx_index, pmx_shift;
1251        unsigned long flags;
1252
1253        /* uses base 32 instead of base 30 */
1254        pmx_index = pin >> 5;
1255        pmx_shift = pin & 0x1f;
1256
1257        /* select = !perip || gpio */
1258        select = ((~pmx->pin_en[pmx_index] |
1259                   pmx->gpio_en[pmx_index]) >> pmx_shift) & 1;
1260
1261        /* find register and bit offset (base 30) */
1262        reg = REG_PINCTRL_SELECT + 4*(pin / 30);
1263        reg_shift = pin % 30;
1264
1265        /* modify gpio select bit */
1266        __global_lock2(flags);
1267        val = pmx_read(pmx, reg);
1268        val &= ~BIT(reg_shift);
1269        val |= select << reg_shift;
1270        pmx_write(pmx, val, reg);
1271        __global_unlock2(flags);
1272}
1273
1274/**
1275 * tz1090_pinctrl_gpio_select() - enable/disable GPIO usage for a pin
1276 * @pmx:                Pinmux data
1277 * @pin:                Pin number
1278 * @gpio_select:        true to enable pin as GPIO,
1279 *                      false to leave control to whatever function is enabled
1280 *
1281 * Records that GPIO usage is enabled/disabled so that enabling a function
1282 * doesn't override the SELECT register bit.
1283 */
1284static void tz1090_pinctrl_gpio_select(struct tz1090_pmx *pmx,
1285                                       unsigned int pin,
1286                                       bool gpio_select)
1287{
1288        unsigned int index, shift;
1289        u32 gpio_en;
1290
1291        if (pin >= NUM_GPIOS)
1292                return;
1293
1294        /* uses base 32 instead of base 30 */
1295        index = pin >> 5;
1296        shift = pin & 0x1f;
1297
1298        spin_lock(&pmx->lock);
1299
1300        /* keep a record whether gpio is selected */
1301        gpio_en = pmx->gpio_en[index];
1302        gpio_en &= ~BIT(shift);
1303        if (gpio_select)
1304                gpio_en |= BIT(shift);
1305        pmx->gpio_en[index] = gpio_en;
1306
1307        /* update the select bit */
1308        tz1090_pinctrl_select(pmx, pin);
1309
1310        spin_unlock(&pmx->lock);
1311}
1312
1313/**
1314 * tz1090_pinctrl_perip_select() - enable/disable peripheral interface for a pin
1315 * @pmx:                Pinmux data
1316 * @pin:                Pin number
1317 * @perip_select:       true to enable peripheral interface when not GPIO,
1318 *                      false to leave pin in GPIO mode
1319 *
1320 * Records that peripheral usage is enabled/disabled so that SELECT register can
1321 * be set appropriately when GPIO is disabled.
1322 */
1323static void tz1090_pinctrl_perip_select(struct tz1090_pmx *pmx,
1324                                        unsigned int pin,
1325                                        bool perip_select)
1326{
1327        unsigned int index, shift;
1328        u32 pin_en;
1329
1330        if (pin >= NUM_GPIOS)
1331                return;
1332
1333        /* uses base 32 instead of base 30 */
1334        index = pin >> 5;
1335        shift = pin & 0x1f;
1336
1337        spin_lock(&pmx->lock);
1338
1339        /* keep a record whether peripheral is selected */
1340        pin_en = pmx->pin_en[index];
1341        pin_en &= ~BIT(shift);
1342        if (perip_select)
1343                pin_en |= BIT(shift);
1344        pmx->pin_en[index] = pin_en;
1345
1346        /* update the select bit */
1347        tz1090_pinctrl_select(pmx, pin);
1348
1349        spin_unlock(&pmx->lock);
1350}
1351
1352/**
1353 * tz1090_pinctrl_enable_mux() - Switch a pin mux group to a function.
1354 * @pmx:                Pinmux data
1355 * @desc:               Pinmux description
1356 * @function:           Function to switch to
1357 *
1358 * Enable a particular function on a pin mux group. Since pin mux descriptions
1359 * are nested this function is recursive.
1360 */
1361static int tz1090_pinctrl_enable_mux(struct tz1090_pmx *pmx,
1362                                     const struct tz1090_muxdesc *desc,
1363                                     unsigned int function)
1364{
1365        const int *fit;
1366        unsigned long flags;
1367        int mux;
1368        unsigned int func, ret;
1369        u32 reg, mask;
1370
1371        /* find the mux value for this function, searching recursively */
1372        for (mux = 0, fit = desc->funcs;
1373             mux < ARRAY_SIZE(desc->funcs); ++mux, ++fit) {
1374                func = *fit;
1375                if (func == function)
1376                        goto found_mux;
1377
1378                /* maybe it's a sub-mux */
1379                if (func < ARRAY_SIZE(tz1090_submux) && tz1090_submux[func]) {
1380                        ret = tz1090_pinctrl_enable_mux(pmx,
1381                                                        tz1090_submux[func],
1382                                                        function);
1383                        if (!ret)
1384                                goto found_mux;
1385                }
1386        }
1387
1388        return -EINVAL;
1389found_mux:
1390
1391        /* Set up the mux */
1392        if (desc->width) {
1393                mask = (BIT(desc->width) - 1) << desc->bit;
1394                __global_lock2(flags);
1395                reg = pmx_read(pmx, desc->reg);
1396                reg &= ~mask;
1397                reg |= (mux << desc->bit) & mask;
1398                pmx_write(pmx, reg, desc->reg);
1399                __global_unlock2(flags);
1400        }
1401
1402        return 0;
1403}
1404
1405/**
1406 * tz1090_pinctrl_enable() - Enable a function on a pin group.
1407 * @pctldev:            Pin control data
1408 * @function:           Function index to enable
1409 * @group:              Group index to enable
1410 *
1411 * Enable a particular function on a group of pins. The per GPIO pin pseudo pin
1412 * groups can be used (in which case the pin will be enabled in peripheral mode
1413 * and if it belongs to a pin mux group the mux will be switched if it isn't
1414 * already in use. Some convenience pin groups can also be used in which case
1415 * the effect is the same as enabling the function on each individual pin in the
1416 * group.
1417 */
1418static int tz1090_pinctrl_set_mux(struct pinctrl_dev *pctldev,
1419                                  unsigned int function, unsigned int group)
1420{
1421        struct tz1090_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
1422        struct tz1090_pingroup *grp;
1423        int ret;
1424        unsigned int pin_num, mux_group, i, npins;
1425        const unsigned int *pins;
1426
1427        /* group of pins? */
1428        if (group < ARRAY_SIZE(tz1090_groups)) {
1429                grp = &tz1090_groups[group];
1430                npins = grp->npins;
1431                pins = grp->pins;
1432                /*
1433                 * All pins in the group must belong to the same mux group,
1434                 * which allows us to just use the mux group of the first pin.
1435                 * By explicitly listing permitted pingroups for each function
1436                 * the pinmux core should ensure this is always the case.
1437                 */
1438        } else {
1439                pin_num = group - ARRAY_SIZE(tz1090_groups);
1440                npins = 1;
1441                pins = &pin_num;
1442        }
1443        mux_group = tz1090_mux_pins[*pins];
1444
1445        /* no mux group, but can still be individually muxed to peripheral */
1446        if (mux_group >= TZ1090_MUX_GROUP_MAX) {
1447                if (function == TZ1090_MUX_PERIP)
1448                        goto mux_pins;
1449                return -EINVAL;
1450        }
1451
1452        /* mux group already set to a different function? */
1453        grp = &tz1090_mux_groups[mux_group];
1454        if (grp->func_count && grp->func != function) {
1455                dev_err(pctldev->dev,
1456                        "%s: can't mux pin(s) to '%s', group already muxed to '%s'\n",
1457                        __func__, tz1090_functions[function].name,
1458                        tz1090_functions[grp->func].name);
1459                return -EBUSY;
1460        }
1461
1462        dev_dbg(pctldev->dev, "%s: muxing %u pin(s) in '%s' to '%s'\n",
1463                __func__, npins, grp->name, tz1090_functions[function].name);
1464
1465        /* if first pin in mux group to be enabled, enable the group mux */
1466        if (!grp->func_count) {
1467                grp->func = function;
1468                ret = tz1090_pinctrl_enable_mux(pmx, &grp->mux, function);
1469                if (ret)
1470                        return ret;
1471        }
1472        /* add pins to ref count and mux individually to peripheral */
1473        grp->func_count += npins;
1474mux_pins:
1475        for (i = 0; i < npins; ++i)
1476                tz1090_pinctrl_perip_select(pmx, pins[i], true);
1477
1478        return 0;
1479}
1480
1481/**
1482 * tz1090_pinctrl_gpio_request_enable() - Put pin in GPIO mode.
1483 * @pctldev:            Pin control data
1484 * @range:              GPIO range
1485 * @pin:                Pin number
1486 *
1487 * Puts a particular pin into GPIO mode, disabling peripheral control until it's
1488 * disabled again.
1489 */
1490static int tz1090_pinctrl_gpio_request_enable(struct pinctrl_dev *pctldev,
1491                                              struct pinctrl_gpio_range *range,
1492                                              unsigned int pin)
1493{
1494        struct tz1090_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
1495        tz1090_pinctrl_gpio_select(pmx, pin, true);
1496        return 0;
1497}
1498
1499/**
1500 * tz1090_pinctrl_gpio_disable_free() - Take pin out of GPIO mode.
1501 * @pctldev:            Pin control data
1502 * @range:              GPIO range
1503 * @pin:                Pin number
1504 *
1505 * Take a particular pin out of GPIO mode. If the pin is enabled for a
1506 * peripheral it will return to peripheral mode.
1507 */
1508static void tz1090_pinctrl_gpio_disable_free(struct pinctrl_dev *pctldev,
1509                                             struct pinctrl_gpio_range *range,
1510                                             unsigned int pin)
1511{
1512        struct tz1090_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
1513        tz1090_pinctrl_gpio_select(pmx, pin, false);
1514}
1515
1516static struct pinmux_ops tz1090_pinmux_ops = {
1517        .get_functions_count    = tz1090_pinctrl_get_funcs_count,
1518        .get_function_name      = tz1090_pinctrl_get_func_name,
1519        .get_function_groups    = tz1090_pinctrl_get_func_groups,
1520        .set_mux                = tz1090_pinctrl_set_mux,
1521        .gpio_request_enable    = tz1090_pinctrl_gpio_request_enable,
1522        .gpio_disable_free      = tz1090_pinctrl_gpio_disable_free,
1523};
1524
1525/*
1526 * Pin config operations
1527 */
1528
1529struct tz1090_pinconf_pullup {
1530        unsigned char index;
1531        unsigned char shift;
1532};
1533
1534/* The mapping of pin to pull up/down register index and shift */
1535static struct tz1090_pinconf_pullup tz1090_pinconf_pullup[] = {
1536        {5, 22}, /*  0 - TZ1090_PIN_SDIO_CLK */
1537        {0, 14}, /*  1 - TZ1090_PIN_SDIO_CMD */
1538        {0,  6}, /*  2 - TZ1090_PIN_SDIO_D0 */
1539        {0,  8}, /*  3 - TZ1090_PIN_SDIO_D1 */
1540        {0, 10}, /*  4 - TZ1090_PIN_SDIO_D2 */
1541        {0, 12}, /*  5 - TZ1090_PIN_SDIO_D3 */
1542        {0,  2}, /*  6 - TZ1090_PIN_SDH_CD */
1543        {0,  4}, /*  7 - TZ1090_PIN_SDH_WP */
1544        {0, 16}, /*  8 - TZ1090_PIN_SPI0_MCLK */
1545        {0, 18}, /*  9 - TZ1090_PIN_SPI0_CS0 */
1546        {0, 20}, /* 10 - TZ1090_PIN_SPI0_CS1 */
1547        {0, 22}, /* 11 - TZ1090_PIN_SPI0_CS2 */
1548        {0, 24}, /* 12 - TZ1090_PIN_SPI0_DOUT */
1549        {0, 26}, /* 13 - TZ1090_PIN_SPI0_DIN */
1550        {0, 28}, /* 14 - TZ1090_PIN_SPI1_MCLK */
1551        {0, 30}, /* 15 - TZ1090_PIN_SPI1_CS0 */
1552        {1,  0}, /* 16 - TZ1090_PIN_SPI1_CS1 */
1553        {1,  2}, /* 17 - TZ1090_PIN_SPI1_CS2 */
1554        {1,  4}, /* 18 - TZ1090_PIN_SPI1_DOUT */
1555        {1,  6}, /* 19 - TZ1090_PIN_SPI1_DIN */
1556        {1,  8}, /* 20 - TZ1090_PIN_UART0_RXD */
1557        {1, 10}, /* 21 - TZ1090_PIN_UART0_TXD */
1558        {1, 12}, /* 22 - TZ1090_PIN_UART0_CTS */
1559        {1, 14}, /* 23 - TZ1090_PIN_UART0_RTS */
1560        {1, 16}, /* 24 - TZ1090_PIN_UART1_RXD */
1561        {1, 18}, /* 25 - TZ1090_PIN_UART1_TXD */
1562        {1, 20}, /* 26 - TZ1090_PIN_SCB0_SDAT */
1563        {1, 22}, /* 27 - TZ1090_PIN_SCB0_SCLK */
1564        {1, 24}, /* 28 - TZ1090_PIN_SCB1_SDAT */
1565        {1, 26}, /* 29 - TZ1090_PIN_SCB1_SCLK */
1566
1567        {1, 28}, /* 30 - TZ1090_PIN_SCB2_SDAT */
1568        {1, 30}, /* 31 - TZ1090_PIN_SCB2_SCLK */
1569        {2,  0}, /* 32 - TZ1090_PIN_I2S_MCLK */
1570        {2,  2}, /* 33 - TZ1090_PIN_I2S_BCLK_OUT */
1571        {2,  4}, /* 34 - TZ1090_PIN_I2S_LRCLK_OUT */
1572        {2,  6}, /* 35 - TZ1090_PIN_I2S_DOUT0 */
1573        {2,  8}, /* 36 - TZ1090_PIN_I2S_DOUT1 */
1574        {2, 10}, /* 37 - TZ1090_PIN_I2S_DOUT2 */
1575        {2, 12}, /* 38 - TZ1090_PIN_I2S_DIN */
1576        {4, 12}, /* 39 - TZ1090_PIN_PDM_A */
1577        {4, 14}, /* 40 - TZ1090_PIN_PDM_B */
1578        {4, 18}, /* 41 - TZ1090_PIN_PDM_C */
1579        {4, 20}, /* 42 - TZ1090_PIN_PDM_D */
1580        {2, 14}, /* 43 - TZ1090_PIN_TFT_RED0 */
1581        {2, 16}, /* 44 - TZ1090_PIN_TFT_RED1 */
1582        {2, 18}, /* 45 - TZ1090_PIN_TFT_RED2 */
1583        {2, 20}, /* 46 - TZ1090_PIN_TFT_RED3 */
1584        {2, 22}, /* 47 - TZ1090_PIN_TFT_RED4 */
1585        {2, 24}, /* 48 - TZ1090_PIN_TFT_RED5 */
1586        {2, 26}, /* 49 - TZ1090_PIN_TFT_RED6 */
1587        {2, 28}, /* 50 - TZ1090_PIN_TFT_RED7 */
1588        {2, 30}, /* 51 - TZ1090_PIN_TFT_GREEN0 */
1589        {3,  0}, /* 52 - TZ1090_PIN_TFT_GREEN1 */
1590        {3,  2}, /* 53 - TZ1090_PIN_TFT_GREEN2 */
1591        {3,  4}, /* 54 - TZ1090_PIN_TFT_GREEN3 */
1592        {3,  6}, /* 55 - TZ1090_PIN_TFT_GREEN4 */
1593        {3,  8}, /* 56 - TZ1090_PIN_TFT_GREEN5 */
1594        {3, 10}, /* 57 - TZ1090_PIN_TFT_GREEN6 */
1595        {3, 12}, /* 58 - TZ1090_PIN_TFT_GREEN7 */
1596        {3, 14}, /* 59 - TZ1090_PIN_TFT_BLUE0 */
1597
1598        {3, 16}, /* 60 - TZ1090_PIN_TFT_BLUE1 */
1599        {3, 18}, /* 61 - TZ1090_PIN_TFT_BLUE2 */
1600        {3, 20}, /* 62 - TZ1090_PIN_TFT_BLUE3 */
1601        {3, 22}, /* 63 - TZ1090_PIN_TFT_BLUE4 */
1602        {3, 24}, /* 64 - TZ1090_PIN_TFT_BLUE5 */
1603        {3, 26}, /* 65 - TZ1090_PIN_TFT_BLUE6 */
1604        {3, 28}, /* 66 - TZ1090_PIN_TFT_BLUE7 */
1605        {3, 30}, /* 67 - TZ1090_PIN_TFT_VDDEN_GD */
1606        {4,  0}, /* 68 - TZ1090_PIN_TFT_PANELCLK */
1607        {4,  2}, /* 69 - TZ1090_PIN_TFT_BLANK_LS */
1608        {4,  4}, /* 70 - TZ1090_PIN_TFT_VSYNC_NS */
1609        {4,  6}, /* 71 - TZ1090_PIN_TFT_HSYNC_NR */
1610        {4,  8}, /* 72 - TZ1090_PIN_TFT_VD12ACB */
1611        {4, 10}, /* 73 - TZ1090_PIN_TFT_PWRSAVE */
1612        {4, 24}, /* 74 - TZ1090_PIN_TX_ON */
1613        {4, 26}, /* 75 - TZ1090_PIN_RX_ON */
1614        {4, 28}, /* 76 - TZ1090_PIN_PLL_ON */
1615        {4, 30}, /* 77 - TZ1090_PIN_PA_ON */
1616        {5,  0}, /* 78 - TZ1090_PIN_RX_HP */
1617        {5,  6}, /* 79 - TZ1090_PIN_GAIN0 */
1618        {5,  8}, /* 80 - TZ1090_PIN_GAIN1 */
1619        {5, 10}, /* 81 - TZ1090_PIN_GAIN2 */
1620        {5, 12}, /* 82 - TZ1090_PIN_GAIN3 */
1621        {5, 14}, /* 83 - TZ1090_PIN_GAIN4 */
1622        {5, 16}, /* 84 - TZ1090_PIN_GAIN5 */
1623        {5, 18}, /* 85 - TZ1090_PIN_GAIN6 */
1624        {5, 20}, /* 86 - TZ1090_PIN_GAIN7 */
1625        {5,  2}, /* 87 - TZ1090_PIN_ANT_SEL0 */
1626        {5,  4}, /* 88 - TZ1090_PIN_ANT_SEL1 */
1627        {0,  0}, /* 89 - TZ1090_PIN_SDH_CLK_IN */
1628
1629        {5, 24}, /* 90 - TZ1090_PIN_TCK */
1630        {5, 26}, /* 91 - TZ1090_PIN_TRST */
1631        {5, 28}, /* 92 - TZ1090_PIN_TDI */
1632        {5, 30}, /* 93 - TZ1090_PIN_TDO */
1633        {6,  0}, /* 94 - TZ1090_PIN_TMS */
1634        {4, 16}, /* 95 - TZ1090_PIN_CLK_OUT0 */
1635        {4, 22}, /* 96 - TZ1090_PIN_CLK_OUT1 */
1636};
1637
1638static int tz1090_pinconf_reg(struct pinctrl_dev *pctldev,
1639                              unsigned int pin,
1640                              enum pin_config_param param,
1641                              bool report_err,
1642                              u32 *reg, u32 *width, u32 *mask, u32 *shift,
1643                              u32 *val)
1644{
1645        struct tz1090_pinconf_pullup *pu;
1646
1647        /* All supported pins have controllable input bias */
1648        switch (param) {
1649        case PIN_CONFIG_BIAS_DISABLE:
1650        case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
1651                *val = REG_PU_PD_TRISTATE;
1652                break;
1653        case PIN_CONFIG_BIAS_PULL_UP:
1654                *val = REG_PU_PD_UP;
1655                break;
1656        case PIN_CONFIG_BIAS_PULL_DOWN:
1657                *val = REG_PU_PD_DOWN;
1658                break;
1659        case PIN_CONFIG_BIAS_BUS_HOLD:
1660                *val = REG_PU_PD_REPEATER;
1661                break;
1662        default:
1663                return -ENOTSUPP;
1664        };
1665
1666        /* Only input bias parameters supported */
1667        pu = &tz1090_pinconf_pullup[pin];
1668        *reg = REG_PINCTRL_PU_PD + 4*pu->index;
1669        *shift = pu->shift;
1670        *width = 2;
1671
1672        /* Calculate field information */
1673        *mask = (BIT(*width) - 1) << *shift;
1674
1675        return 0;
1676}
1677
1678static int tz1090_pinconf_get(struct pinctrl_dev *pctldev,
1679                              unsigned int pin, unsigned long *config)
1680{
1681        struct tz1090_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
1682        enum pin_config_param param = pinconf_to_config_param(*config);
1683        int ret;
1684        u32 reg, width, mask, shift, val, tmp, arg;
1685
1686        /* Get register information */
1687        ret = tz1090_pinconf_reg(pctldev, pin, param, true,
1688                                 &reg, &width, &mask, &shift, &val);
1689        if (ret < 0)
1690                return ret;
1691
1692        /* Extract field from register */
1693        tmp = pmx_read(pmx, reg);
1694        arg = ((tmp & mask) >> shift) == val;
1695
1696        /* Config not active */
1697        if (!arg)
1698                return -EINVAL;
1699
1700        /* And pack config */
1701        *config = pinconf_to_config_packed(param, arg);
1702
1703        return 0;
1704}
1705
1706static int tz1090_pinconf_set(struct pinctrl_dev *pctldev,
1707                              unsigned int pin, unsigned long *configs,
1708                              unsigned num_configs)
1709{
1710        struct tz1090_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
1711        enum pin_config_param param;
1712        unsigned int arg;
1713        int ret;
1714        u32 reg, width, mask, shift, val, tmp;
1715        unsigned long flags;
1716        int i;
1717
1718        for (i = 0; i < num_configs; i++) {
1719                param = pinconf_to_config_param(configs[i]);
1720                arg = pinconf_to_config_argument(configs[i]);
1721
1722                dev_dbg(pctldev->dev, "%s(pin=%s, config=%#lx)\n",
1723                        __func__, tz1090_pins[pin].name, configs[i]);
1724
1725                /* Get register information */
1726                ret = tz1090_pinconf_reg(pctldev, pin, param, true,
1727                                         &reg, &width, &mask, &shift, &val);
1728                if (ret < 0)
1729                        return ret;
1730
1731                /* Unpack argument and range check it */
1732                if (arg > 1) {
1733                        dev_dbg(pctldev->dev, "%s: arg %u out of range\n",
1734                                __func__, arg);
1735                        return -EINVAL;
1736                }
1737
1738                /* Write register field */
1739                __global_lock2(flags);
1740                tmp = pmx_read(pmx, reg);
1741                tmp &= ~mask;
1742                if (arg)
1743                        tmp |= val << shift;
1744                pmx_write(pmx, tmp, reg);
1745                __global_unlock2(flags);
1746        } /* for each config */
1747
1748        return 0;
1749}
1750
1751static const int tz1090_boolean_map[] = {
1752        [0]             = -EINVAL,
1753        [1]             = 1,
1754};
1755
1756static const int tz1090_dr_map[] = {
1757        [REG_DR_2mA]    = 2,
1758        [REG_DR_4mA]    = 4,
1759        [REG_DR_8mA]    = 8,
1760        [REG_DR_12mA]   = 12,
1761};
1762
1763static int tz1090_pinconf_group_reg(struct pinctrl_dev *pctldev,
1764                                    const struct tz1090_pingroup *g,
1765                                    enum pin_config_param param,
1766                                    bool report_err,
1767                                    u32 *reg, u32 *width, u32 *mask, u32 *shift,
1768                                    const int **map)
1769{
1770        /* Drive configuration applies in groups, but not to all groups. */
1771        if (!g->drv) {
1772                if (report_err)
1773                        dev_dbg(pctldev->dev,
1774                                "%s: group %s has no drive control\n",
1775                                __func__, g->name);
1776                return -ENOTSUPP;
1777        }
1778
1779        /* Find information about drive parameter's register */
1780        switch (param) {
1781        case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
1782                *reg = REG_PINCTRL_SCHMITT;
1783                *width = 1;
1784                *map = tz1090_boolean_map;
1785                break;
1786        case PIN_CONFIG_DRIVE_STRENGTH:
1787                *reg = REG_PINCTRL_DR;
1788                *width = 2;
1789                *map = tz1090_dr_map;
1790                break;
1791        default:
1792                return -ENOTSUPP;
1793        };
1794
1795        /* Calculate field information */
1796        *shift = g->slw_bit * *width;
1797        *mask = (BIT(*width) - 1) << *shift;
1798
1799        return 0;
1800}
1801
1802static int tz1090_pinconf_group_get(struct pinctrl_dev *pctldev,
1803                                    unsigned int group,
1804                                    unsigned long *config)
1805{
1806        struct tz1090_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
1807        const struct tz1090_pingroup *g;
1808        enum pin_config_param param = pinconf_to_config_param(*config);
1809        int ret, arg;
1810        unsigned int pin;
1811        u32 reg, width, mask, shift, val;
1812        const int *map;
1813
1814        if (group >= ARRAY_SIZE(tz1090_groups)) {
1815                pin = group - ARRAY_SIZE(tz1090_groups);
1816                return tz1090_pinconf_get(pctldev, pin, config);
1817        }
1818
1819        g = &tz1090_groups[group];
1820        if (g->npins == 1) {
1821                pin = g->pins[0];
1822                ret = tz1090_pinconf_get(pctldev, pin, config);
1823                if (ret != -ENOTSUPP)
1824                        return ret;
1825        }
1826
1827        /* Get register information */
1828        ret = tz1090_pinconf_group_reg(pctldev, g, param, true,
1829                                       &reg, &width, &mask, &shift, &map);
1830        if (ret < 0)
1831                return ret;
1832
1833        /* Extract field from register */
1834        val = pmx_read(pmx, reg);
1835        arg = map[(val & mask) >> shift];
1836        if (arg < 0)
1837                return arg;
1838
1839        /* And pack config */
1840        *config = pinconf_to_config_packed(param, arg);
1841
1842        return 0;
1843}
1844
1845static int tz1090_pinconf_group_set(struct pinctrl_dev *pctldev,
1846                                    unsigned int group, unsigned long *configs,
1847                                    unsigned num_configs)
1848{
1849        struct tz1090_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
1850        const struct tz1090_pingroup *g;
1851        enum pin_config_param param;
1852        unsigned int arg, pin, i;
1853        const unsigned int *pit;
1854        int ret;
1855        u32 reg, width, mask, shift, val;
1856        unsigned long flags;
1857        const int *map;
1858        int j;
1859
1860        if (group >= ARRAY_SIZE(tz1090_groups)) {
1861                pin = group - ARRAY_SIZE(tz1090_groups);
1862                return tz1090_pinconf_set(pctldev, pin, configs, num_configs);
1863        }
1864
1865        g = &tz1090_groups[group];
1866        if (g->npins == 1) {
1867                pin = g->pins[0];
1868                ret = tz1090_pinconf_set(pctldev, pin, configs, num_configs);
1869                if (ret != -ENOTSUPP)
1870                        return ret;
1871        }
1872
1873        for (j = 0; j < num_configs; j++) {
1874                param = pinconf_to_config_param(configs[j]);
1875
1876                dev_dbg(pctldev->dev, "%s(group=%s, config=%#lx)\n",
1877                        __func__, g->name, configs[j]);
1878
1879                /* Get register information */
1880                ret = tz1090_pinconf_group_reg(pctldev, g, param, true, &reg,
1881                                                &width, &mask, &shift, &map);
1882                if (ret < 0) {
1883                        /*
1884                         * Maybe we're trying to set a per-pin configuration
1885                         * of a group, so do the pins one by one. This is
1886                         * mainly as a convenience.
1887                         */
1888                        for (i = 0, pit = g->pins; i < g->npins; ++i, ++pit) {
1889                                ret = tz1090_pinconf_set(pctldev, *pit, configs,
1890                                        num_configs);
1891                                if (ret)
1892                                        return ret;
1893                        }
1894                        return 0;
1895                }
1896
1897                /* Unpack argument and map it to register value */
1898                arg = pinconf_to_config_argument(configs[j]);
1899                for (i = 0; i < BIT(width); ++i) {
1900                        if (map[i] == arg || (map[i] == -EINVAL && !arg)) {
1901                                /* Write register field */
1902                                __global_lock2(flags);
1903                                val = pmx_read(pmx, reg);
1904                                val &= ~mask;
1905                                val |= i << shift;
1906                                pmx_write(pmx, val, reg);
1907                                __global_unlock2(flags);
1908                                goto next_config;
1909                        }
1910                }
1911
1912                dev_dbg(pctldev->dev, "%s: arg %u not supported\n",
1913                        __func__, arg);
1914                return -EINVAL;
1915
1916next_config:
1917                ;
1918        } /* for each config */
1919
1920        return 0;
1921}
1922
1923static struct pinconf_ops tz1090_pinconf_ops = {
1924        .is_generic                     = true,
1925        .pin_config_get                 = tz1090_pinconf_get,
1926        .pin_config_set                 = tz1090_pinconf_set,
1927        .pin_config_group_get           = tz1090_pinconf_group_get,
1928        .pin_config_group_set           = tz1090_pinconf_group_set,
1929        .pin_config_config_dbg_show     = pinconf_generic_dump_config,
1930};
1931
1932/*
1933 * Pin control driver setup
1934 */
1935
1936static struct pinctrl_desc tz1090_pinctrl_desc = {
1937        .pctlops        = &tz1090_pinctrl_ops,
1938        .pmxops         = &tz1090_pinmux_ops,
1939        .confops        = &tz1090_pinconf_ops,
1940        .owner          = THIS_MODULE,
1941};
1942
1943static int tz1090_pinctrl_probe(struct platform_device *pdev)
1944{
1945        struct tz1090_pmx *pmx;
1946        struct resource *res;
1947
1948        pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL);
1949        if (!pmx) {
1950                dev_err(&pdev->dev, "Can't alloc tz1090_pmx\n");
1951                return -ENOMEM;
1952        }
1953        pmx->dev = &pdev->dev;
1954        spin_lock_init(&pmx->lock);
1955
1956        tz1090_pinctrl_desc.name = dev_name(&pdev->dev);
1957        tz1090_pinctrl_desc.pins = tz1090_pins;
1958        tz1090_pinctrl_desc.npins = ARRAY_SIZE(tz1090_pins);
1959
1960        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1961        pmx->regs = devm_ioremap_resource(&pdev->dev, res);
1962        if (IS_ERR(pmx->regs))
1963                return PTR_ERR(pmx->regs);
1964
1965        pmx->pctl = pinctrl_register(&tz1090_pinctrl_desc, &pdev->dev, pmx);
1966        if (!pmx->pctl) {
1967                dev_err(&pdev->dev, "Couldn't register pinctrl driver\n");
1968                return -ENODEV;
1969        }
1970
1971        platform_set_drvdata(pdev, pmx);
1972
1973        dev_info(&pdev->dev, "TZ1090 pinctrl driver initialised\n");
1974
1975        return 0;
1976}
1977
1978static int tz1090_pinctrl_remove(struct platform_device *pdev)
1979{
1980        struct tz1090_pmx *pmx = platform_get_drvdata(pdev);
1981
1982        pinctrl_unregister(pmx->pctl);
1983
1984        return 0;
1985}
1986
1987static const struct of_device_id tz1090_pinctrl_of_match[] = {
1988        { .compatible = "img,tz1090-pinctrl", },
1989        { },
1990};
1991
1992static struct platform_driver tz1090_pinctrl_driver = {
1993        .driver = {
1994                .name           = "tz1090-pinctrl",
1995                .of_match_table = tz1090_pinctrl_of_match,
1996        },
1997        .probe  = tz1090_pinctrl_probe,
1998        .remove = tz1090_pinctrl_remove,
1999};
2000
2001static int __init tz1090_pinctrl_init(void)
2002{
2003        tz1090_init_mux_pins();
2004        return platform_driver_register(&tz1090_pinctrl_driver);
2005}
2006arch_initcall(tz1090_pinctrl_init);
2007
2008static void __exit tz1090_pinctrl_exit(void)
2009{
2010        platform_driver_unregister(&tz1090_pinctrl_driver);
2011}
2012module_exit(tz1090_pinctrl_exit);
2013
2014MODULE_AUTHOR("Imagination Technologies Ltd.");
2015MODULE_DESCRIPTION("Toumaz Xenif TZ1090 pinctrl driver");
2016MODULE_LICENSE("GPL v2");
2017MODULE_DEVICE_TABLE(of, tz1090_pinctrl_of_match);
2018