linux/drivers/pinctrl/intel/pinctrl-baytrail.c
<<
>>
Prefs
   1/*
   2 * Pinctrl GPIO driver for Intel Baytrail
   3 * Copyright (c) 2012-2013, Intel Corporation.
   4 *
   5 * Author: Mathias Nyman <mathias.nyman@linux.intel.com>
   6 *
   7 * This program is free software; you can redistribute it and/or modify it
   8 * under the terms and conditions of the GNU General Public License,
   9 * version 2, as published by the Free Software Foundation.
  10 *
  11 * This program is distributed in the hope it will be useful, but WITHOUT
  12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  14 * more details.
  15 */
  16
  17#include <linux/kernel.h>
  18#include <linux/init.h>
  19#include <linux/types.h>
  20#include <linux/bitops.h>
  21#include <linux/interrupt.h>
  22#include <linux/gpio.h>
  23#include <linux/gpio/driver.h>
  24#include <linux/acpi.h>
  25#include <linux/platform_device.h>
  26#include <linux/seq_file.h>
  27#include <linux/io.h>
  28#include <linux/pm_runtime.h>
  29#include <linux/pinctrl/pinctrl.h>
  30#include <linux/pinctrl/pinmux.h>
  31#include <linux/pinctrl/pinconf.h>
  32#include <linux/pinctrl/pinconf-generic.h>
  33
  34/* memory mapped register offsets */
  35#define BYT_CONF0_REG           0x000
  36#define BYT_CONF1_REG           0x004
  37#define BYT_VAL_REG             0x008
  38#define BYT_DFT_REG             0x00c
  39#define BYT_INT_STAT_REG        0x800
  40#define BYT_DEBOUNCE_REG        0x9d0
  41
  42/* BYT_CONF0_REG register bits */
  43#define BYT_IODEN               BIT(31)
  44#define BYT_DIRECT_IRQ_EN       BIT(27)
  45#define BYT_TRIG_NEG            BIT(26)
  46#define BYT_TRIG_POS            BIT(25)
  47#define BYT_TRIG_LVL            BIT(24)
  48#define BYT_DEBOUNCE_EN         BIT(20)
  49#define BYT_GLITCH_FILTER_EN    BIT(19)
  50#define BYT_GLITCH_F_SLOW_CLK   BIT(17)
  51#define BYT_GLITCH_F_FAST_CLK   BIT(16)
  52#define BYT_PULL_STR_SHIFT      9
  53#define BYT_PULL_STR_MASK       (3 << BYT_PULL_STR_SHIFT)
  54#define BYT_PULL_STR_2K         (0 << BYT_PULL_STR_SHIFT)
  55#define BYT_PULL_STR_10K        (1 << BYT_PULL_STR_SHIFT)
  56#define BYT_PULL_STR_20K        (2 << BYT_PULL_STR_SHIFT)
  57#define BYT_PULL_STR_40K        (3 << BYT_PULL_STR_SHIFT)
  58#define BYT_PULL_ASSIGN_SHIFT   7
  59#define BYT_PULL_ASSIGN_MASK    (3 << BYT_PULL_ASSIGN_SHIFT)
  60#define BYT_PULL_ASSIGN_UP      (1 << BYT_PULL_ASSIGN_SHIFT)
  61#define BYT_PULL_ASSIGN_DOWN    (2 << BYT_PULL_ASSIGN_SHIFT)
  62#define BYT_PIN_MUX             0x07
  63
  64/* BYT_VAL_REG register bits */
  65#define BYT_INPUT_EN            BIT(2)  /* 0: input enabled (active low)*/
  66#define BYT_OUTPUT_EN           BIT(1)  /* 0: output enabled (active low)*/
  67#define BYT_LEVEL               BIT(0)
  68
  69#define BYT_DIR_MASK            (BIT(1) | BIT(2))
  70#define BYT_TRIG_MASK           (BIT(26) | BIT(25) | BIT(24))
  71
  72#define BYT_CONF0_RESTORE_MASK  (BYT_DIRECT_IRQ_EN | BYT_TRIG_MASK | \
  73                                 BYT_PIN_MUX)
  74#define BYT_VAL_RESTORE_MASK    (BYT_DIR_MASK | BYT_LEVEL)
  75
  76/* BYT_DEBOUNCE_REG bits */
  77#define BYT_DEBOUNCE_PULSE_MASK         0x7
  78#define BYT_DEBOUNCE_PULSE_375US        1
  79#define BYT_DEBOUNCE_PULSE_750US        2
  80#define BYT_DEBOUNCE_PULSE_1500US       3
  81#define BYT_DEBOUNCE_PULSE_3MS          4
  82#define BYT_DEBOUNCE_PULSE_6MS          5
  83#define BYT_DEBOUNCE_PULSE_12MS         6
  84#define BYT_DEBOUNCE_PULSE_24MS         7
  85
  86#define BYT_NGPIO_SCORE         102
  87#define BYT_NGPIO_NCORE         28
  88#define BYT_NGPIO_SUS           44
  89
  90#define BYT_SCORE_ACPI_UID      "1"
  91#define BYT_NCORE_ACPI_UID      "2"
  92#define BYT_SUS_ACPI_UID        "3"
  93
  94/*
  95 * This is the function value most pins have for GPIO muxing. If the value
  96 * differs from the default one, it must be explicitly mentioned. Otherwise, the
  97 * pin control implementation will set the muxing value to default GPIO if it
  98 * does not find a match for the requested function.
  99 */
 100#define BYT_DEFAULT_GPIO_MUX    0
 101
 102struct byt_gpio_pin_context {
 103        u32 conf0;
 104        u32 val;
 105};
 106
 107struct byt_simple_func_mux {
 108        const char *name;
 109        unsigned short func;
 110};
 111
 112struct byt_mixed_func_mux {
 113        const char *name;
 114        const unsigned short *func_values;
 115};
 116
 117struct byt_pingroup {
 118        const char *name;
 119        const unsigned int *pins;
 120        size_t npins;
 121        unsigned short has_simple_funcs;
 122        union {
 123                const struct byt_simple_func_mux *simple_funcs;
 124                const struct byt_mixed_func_mux *mixed_funcs;
 125        };
 126        size_t nfuncs;
 127};
 128
 129struct byt_function {
 130        const char *name;
 131        const char * const *groups;
 132        size_t ngroups;
 133};
 134
 135struct byt_community {
 136        unsigned int pin_base;
 137        size_t npins;
 138        const unsigned int *pad_map;
 139        void __iomem *reg_base;
 140};
 141
 142#define SIMPLE_FUNC(n, f)       \
 143        {                       \
 144                .name   = (n),  \
 145                .func   = (f),  \
 146        }
 147#define MIXED_FUNC(n, f)                \
 148        {                               \
 149                .name           = (n),  \
 150                .func_values    = (f),  \
 151        }
 152
 153#define PIN_GROUP_SIMPLE(n, p, f)                               \
 154        {                                                       \
 155                .name                   = (n),                  \
 156                .pins                   = (p),                  \
 157                .npins                  = ARRAY_SIZE((p)),      \
 158                .has_simple_funcs       = 1,                    \
 159                {                                               \
 160                        .simple_funcs           = (f),          \
 161                },                                              \
 162                .nfuncs                 = ARRAY_SIZE((f)),      \
 163        }
 164#define PIN_GROUP_MIXED(n, p, f)                                \
 165        {                                                       \
 166                .name                   = (n),                  \
 167                .pins                   = (p),                  \
 168                .npins                  = ARRAY_SIZE((p)),      \
 169                .has_simple_funcs       = 0,                    \
 170                {                                               \
 171                        .mixed_funcs            = (f),          \
 172                },                                              \
 173                .nfuncs                 = ARRAY_SIZE((f)),      \
 174        }
 175
 176#define FUNCTION(n, g)                                  \
 177        {                                               \
 178                .name           = (n),                  \
 179                .groups         = (g),                  \
 180                .ngroups        = ARRAY_SIZE((g)),      \
 181        }
 182
 183#define COMMUNITY(p, n, map)            \
 184        {                               \
 185                .pin_base       = (p),  \
 186                .npins          = (n),  \
 187                .pad_map        = (map),\
 188        }
 189
 190struct byt_pinctrl_soc_data {
 191        const char *uid;
 192        const struct pinctrl_pin_desc *pins;
 193        size_t npins;
 194        const struct byt_pingroup *groups;
 195        size_t ngroups;
 196        const struct byt_function *functions;
 197        size_t nfunctions;
 198        const struct byt_community *communities;
 199        size_t ncommunities;
 200};
 201
 202struct byt_gpio {
 203        struct gpio_chip chip;
 204        struct platform_device *pdev;
 205        struct pinctrl_dev *pctl_dev;
 206        struct pinctrl_desc pctl_desc;
 207        raw_spinlock_t lock;
 208        const struct byt_pinctrl_soc_data *soc_data;
 209        struct byt_community *communities_copy;
 210        struct byt_gpio_pin_context *saved_context;
 211};
 212
 213/* SCORE pins, aka GPIOC_<pin_no> or GPIO_S0_SC[<pin_no>] */
 214static const struct pinctrl_pin_desc byt_score_pins[] = {
 215        PINCTRL_PIN(0, "SATA_GP0"),
 216        PINCTRL_PIN(1, "SATA_GP1"),
 217        PINCTRL_PIN(2, "SATA_LED#"),
 218        PINCTRL_PIN(3, "PCIE_CLKREQ0"),
 219        PINCTRL_PIN(4, "PCIE_CLKREQ1"),
 220        PINCTRL_PIN(5, "PCIE_CLKREQ2"),
 221        PINCTRL_PIN(6, "PCIE_CLKREQ3"),
 222        PINCTRL_PIN(7, "SD3_WP"),
 223        PINCTRL_PIN(8, "HDA_RST"),
 224        PINCTRL_PIN(9, "HDA_SYNC"),
 225        PINCTRL_PIN(10, "HDA_CLK"),
 226        PINCTRL_PIN(11, "HDA_SDO"),
 227        PINCTRL_PIN(12, "HDA_SDI0"),
 228        PINCTRL_PIN(13, "HDA_SDI1"),
 229        PINCTRL_PIN(14, "GPIO_S0_SC14"),
 230        PINCTRL_PIN(15, "GPIO_S0_SC15"),
 231        PINCTRL_PIN(16, "MMC1_CLK"),
 232        PINCTRL_PIN(17, "MMC1_D0"),
 233        PINCTRL_PIN(18, "MMC1_D1"),
 234        PINCTRL_PIN(19, "MMC1_D2"),
 235        PINCTRL_PIN(20, "MMC1_D3"),
 236        PINCTRL_PIN(21, "MMC1_D4"),
 237        PINCTRL_PIN(22, "MMC1_D5"),
 238        PINCTRL_PIN(23, "MMC1_D6"),
 239        PINCTRL_PIN(24, "MMC1_D7"),
 240        PINCTRL_PIN(25, "MMC1_CMD"),
 241        PINCTRL_PIN(26, "MMC1_RST"),
 242        PINCTRL_PIN(27, "SD2_CLK"),
 243        PINCTRL_PIN(28, "SD2_D0"),
 244        PINCTRL_PIN(29, "SD2_D1"),
 245        PINCTRL_PIN(30, "SD2_D2"),
 246        PINCTRL_PIN(31, "SD2_D3_CD"),
 247        PINCTRL_PIN(32, "SD2_CMD"),
 248        PINCTRL_PIN(33, "SD3_CLK"),
 249        PINCTRL_PIN(34, "SD3_D0"),
 250        PINCTRL_PIN(35, "SD3_D1"),
 251        PINCTRL_PIN(36, "SD3_D2"),
 252        PINCTRL_PIN(37, "SD3_D3"),
 253        PINCTRL_PIN(38, "SD3_CD"),
 254        PINCTRL_PIN(39, "SD3_CMD"),
 255        PINCTRL_PIN(40, "SD3_1P8EN"),
 256        PINCTRL_PIN(41, "SD3_PWREN#"),
 257        PINCTRL_PIN(42, "ILB_LPC_AD0"),
 258        PINCTRL_PIN(43, "ILB_LPC_AD1"),
 259        PINCTRL_PIN(44, "ILB_LPC_AD2"),
 260        PINCTRL_PIN(45, "ILB_LPC_AD3"),
 261        PINCTRL_PIN(46, "ILB_LPC_FRAME"),
 262        PINCTRL_PIN(47, "ILB_LPC_CLK0"),
 263        PINCTRL_PIN(48, "ILB_LPC_CLK1"),
 264        PINCTRL_PIN(49, "ILB_LPC_CLKRUN"),
 265        PINCTRL_PIN(50, "ILB_LPC_SERIRQ"),
 266        PINCTRL_PIN(51, "PCU_SMB_DATA"),
 267        PINCTRL_PIN(52, "PCU_SMB_CLK"),
 268        PINCTRL_PIN(53, "PCU_SMB_ALERT"),
 269        PINCTRL_PIN(54, "ILB_8254_SPKR"),
 270        PINCTRL_PIN(55, "GPIO_S0_SC55"),
 271        PINCTRL_PIN(56, "GPIO_S0_SC56"),
 272        PINCTRL_PIN(57, "GPIO_S0_SC57"),
 273        PINCTRL_PIN(58, "GPIO_S0_SC58"),
 274        PINCTRL_PIN(59, "GPIO_S0_SC59"),
 275        PINCTRL_PIN(60, "GPIO_S0_SC60"),
 276        PINCTRL_PIN(61, "GPIO_S0_SC61"),
 277        PINCTRL_PIN(62, "LPE_I2S2_CLK"),
 278        PINCTRL_PIN(63, "LPE_I2S2_FRM"),
 279        PINCTRL_PIN(64, "LPE_I2S2_DATAIN"),
 280        PINCTRL_PIN(65, "LPE_I2S2_DATAOUT"),
 281        PINCTRL_PIN(66, "SIO_SPI_CS"),
 282        PINCTRL_PIN(67, "SIO_SPI_MISO"),
 283        PINCTRL_PIN(68, "SIO_SPI_MOSI"),
 284        PINCTRL_PIN(69, "SIO_SPI_CLK"),
 285        PINCTRL_PIN(70, "SIO_UART1_RXD"),
 286        PINCTRL_PIN(71, "SIO_UART1_TXD"),
 287        PINCTRL_PIN(72, "SIO_UART1_RTS"),
 288        PINCTRL_PIN(73, "SIO_UART1_CTS"),
 289        PINCTRL_PIN(74, "SIO_UART2_RXD"),
 290        PINCTRL_PIN(75, "SIO_UART2_TXD"),
 291        PINCTRL_PIN(76, "SIO_UART2_RTS"),
 292        PINCTRL_PIN(77, "SIO_UART2_CTS"),
 293        PINCTRL_PIN(78, "SIO_I2C0_DATA"),
 294        PINCTRL_PIN(79, "SIO_I2C0_CLK"),
 295        PINCTRL_PIN(80, "SIO_I2C1_DATA"),
 296        PINCTRL_PIN(81, "SIO_I2C1_CLK"),
 297        PINCTRL_PIN(82, "SIO_I2C2_DATA"),
 298        PINCTRL_PIN(83, "SIO_I2C2_CLK"),
 299        PINCTRL_PIN(84, "SIO_I2C3_DATA"),
 300        PINCTRL_PIN(85, "SIO_I2C3_CLK"),
 301        PINCTRL_PIN(86, "SIO_I2C4_DATA"),
 302        PINCTRL_PIN(87, "SIO_I2C4_CLK"),
 303        PINCTRL_PIN(88, "SIO_I2C5_DATA"),
 304        PINCTRL_PIN(89, "SIO_I2C5_CLK"),
 305        PINCTRL_PIN(90, "SIO_I2C6_DATA"),
 306        PINCTRL_PIN(91, "SIO_I2C6_CLK"),
 307        PINCTRL_PIN(92, "GPIO_S0_SC92"),
 308        PINCTRL_PIN(93, "GPIO_S0_SC93"),
 309        PINCTRL_PIN(94, "SIO_PWM0"),
 310        PINCTRL_PIN(95, "SIO_PWM1"),
 311        PINCTRL_PIN(96, "PMC_PLT_CLK0"),
 312        PINCTRL_PIN(97, "PMC_PLT_CLK1"),
 313        PINCTRL_PIN(98, "PMC_PLT_CLK2"),
 314        PINCTRL_PIN(99, "PMC_PLT_CLK3"),
 315        PINCTRL_PIN(100, "PMC_PLT_CLK4"),
 316        PINCTRL_PIN(101, "PMC_PLT_CLK5"),
 317};
 318
 319static const unsigned int byt_score_pins_map[BYT_NGPIO_SCORE] = {
 320        85, 89, 93, 96, 99, 102, 98, 101, 34, 37,
 321        36, 38, 39, 35, 40, 84, 62, 61, 64, 59,
 322        54, 56, 60, 55, 63, 57, 51, 50, 53, 47,
 323        52, 49, 48, 43, 46, 41, 45, 42, 58, 44,
 324        95, 105, 70, 68, 67, 66, 69, 71, 65, 72,
 325        86, 90, 88, 92, 103, 77, 79, 83, 78, 81,
 326        80, 82, 13, 12, 15, 14, 17, 18, 19, 16,
 327        2, 1, 0, 4, 6, 7, 9, 8, 33, 32,
 328        31, 30, 29, 27, 25, 28, 26, 23, 21, 20,
 329        24, 22, 5, 3, 10, 11, 106, 87, 91, 104,
 330        97, 100,
 331};
 332
 333/* SCORE groups */
 334static const unsigned int byt_score_uart1_pins[] = { 70, 71, 72, 73 };
 335static const unsigned int byt_score_uart2_pins[] = { 74, 75, 76, 77 };
 336static const struct byt_simple_func_mux byt_score_uart_mux[] = {
 337        SIMPLE_FUNC("uart", 1),
 338};
 339
 340static const unsigned int byt_score_pwm0_pins[] = { 94 };
 341static const unsigned int byt_score_pwm1_pins[] = { 95 };
 342static const struct byt_simple_func_mux byt_score_pwm_mux[] = {
 343        SIMPLE_FUNC("pwm", 1),
 344};
 345
 346static const unsigned int byt_score_sio_spi_pins[] = { 66, 67, 68, 69 };
 347static const struct byt_simple_func_mux byt_score_spi_mux[] = {
 348        SIMPLE_FUNC("spi", 1),
 349};
 350
 351static const unsigned int byt_score_i2c5_pins[] = { 88, 89 };
 352static const unsigned int byt_score_i2c6_pins[] = { 90, 91 };
 353static const unsigned int byt_score_i2c4_pins[] = { 86, 87 };
 354static const unsigned int byt_score_i2c3_pins[] = { 84, 85 };
 355static const unsigned int byt_score_i2c2_pins[] = { 82, 83 };
 356static const unsigned int byt_score_i2c1_pins[] = { 80, 81 };
 357static const unsigned int byt_score_i2c0_pins[] = { 78, 79 };
 358static const struct byt_simple_func_mux byt_score_i2c_mux[] = {
 359        SIMPLE_FUNC("i2c", 1),
 360};
 361
 362static const unsigned int byt_score_ssp0_pins[] = { 8, 9, 10, 11 };
 363static const unsigned int byt_score_ssp1_pins[] = { 12, 13, 14, 15 };
 364static const unsigned int byt_score_ssp2_pins[] = { 62, 63, 64, 65 };
 365static const struct byt_simple_func_mux byt_score_ssp_mux[] = {
 366        SIMPLE_FUNC("ssp", 1),
 367};
 368
 369static const unsigned int byt_score_sdcard_pins[] = {
 370        7, 33, 34, 35, 36, 37, 38, 39, 40, 41,
 371};
 372static const unsigned short byt_score_sdcard_mux_values[] = {
 373        2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 374};
 375static const struct byt_mixed_func_mux byt_score_sdcard_mux[] = {
 376        MIXED_FUNC("sdcard", byt_score_sdcard_mux_values),
 377};
 378
 379static const unsigned int byt_score_sdio_pins[] = { 27, 28, 29, 30, 31, 32 };
 380static const struct byt_simple_func_mux byt_score_sdio_mux[] = {
 381        SIMPLE_FUNC("sdio", 1),
 382};
 383
 384static const unsigned int byt_score_emmc_pins[] = {
 385        16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
 386};
 387static const struct byt_simple_func_mux byt_score_emmc_mux[] = {
 388        SIMPLE_FUNC("emmc", 1),
 389};
 390
 391static const unsigned int byt_score_ilb_lpc_pins[] = {
 392        42, 43, 44, 45, 46, 47, 48, 49, 50,
 393};
 394static const struct byt_simple_func_mux byt_score_lpc_mux[] = {
 395        SIMPLE_FUNC("lpc", 1),
 396};
 397
 398static const unsigned int byt_score_sata_pins[] = { 0, 1, 2 };
 399static const struct byt_simple_func_mux byt_score_sata_mux[] = {
 400        SIMPLE_FUNC("sata", 1),
 401};
 402
 403static const unsigned int byt_score_plt_clk0_pins[] = { 96 };
 404static const unsigned int byt_score_plt_clk1_pins[] = { 97 };
 405static const unsigned int byt_score_plt_clk2_pins[] = { 98 };
 406static const unsigned int byt_score_plt_clk3_pins[] = { 99 };
 407static const unsigned int byt_score_plt_clk4_pins[] = { 100 };
 408static const unsigned int byt_score_plt_clk5_pins[] = { 101 };
 409static const struct byt_simple_func_mux byt_score_plt_clk_mux[] = {
 410        SIMPLE_FUNC("plt_clk", 1),
 411};
 412
 413static const unsigned int byt_score_smbus_pins[] = { 51, 52, 53 };
 414static const struct byt_simple_func_mux byt_score_smbus_mux[] = {
 415        SIMPLE_FUNC("smbus", 1),
 416};
 417
 418static const struct byt_pingroup byt_score_groups[] = {
 419        PIN_GROUP_SIMPLE("uart1_grp",
 420                         byt_score_uart1_pins, byt_score_uart_mux),
 421        PIN_GROUP_SIMPLE("uart2_grp",
 422                         byt_score_uart2_pins, byt_score_uart_mux),
 423        PIN_GROUP_SIMPLE("pwm0_grp",
 424                         byt_score_pwm0_pins, byt_score_pwm_mux),
 425        PIN_GROUP_SIMPLE("pwm1_grp",
 426                         byt_score_pwm1_pins, byt_score_pwm_mux),
 427        PIN_GROUP_SIMPLE("ssp2_grp",
 428                         byt_score_ssp2_pins, byt_score_pwm_mux),
 429        PIN_GROUP_SIMPLE("sio_spi_grp",
 430                         byt_score_sio_spi_pins, byt_score_spi_mux),
 431        PIN_GROUP_SIMPLE("i2c5_grp",
 432                         byt_score_i2c5_pins, byt_score_i2c_mux),
 433        PIN_GROUP_SIMPLE("i2c6_grp",
 434                         byt_score_i2c6_pins, byt_score_i2c_mux),
 435        PIN_GROUP_SIMPLE("i2c4_grp",
 436                         byt_score_i2c4_pins, byt_score_i2c_mux),
 437        PIN_GROUP_SIMPLE("i2c3_grp",
 438                         byt_score_i2c3_pins, byt_score_i2c_mux),
 439        PIN_GROUP_SIMPLE("i2c2_grp",
 440                         byt_score_i2c2_pins, byt_score_i2c_mux),
 441        PIN_GROUP_SIMPLE("i2c1_grp",
 442                         byt_score_i2c1_pins, byt_score_i2c_mux),
 443        PIN_GROUP_SIMPLE("i2c0_grp",
 444                         byt_score_i2c0_pins, byt_score_i2c_mux),
 445        PIN_GROUP_SIMPLE("ssp0_grp",
 446                         byt_score_ssp0_pins, byt_score_ssp_mux),
 447        PIN_GROUP_SIMPLE("ssp1_grp",
 448                         byt_score_ssp1_pins, byt_score_ssp_mux),
 449        PIN_GROUP_MIXED("sdcard_grp",
 450                        byt_score_sdcard_pins, byt_score_sdcard_mux),
 451        PIN_GROUP_SIMPLE("sdio_grp",
 452                         byt_score_sdio_pins, byt_score_sdio_mux),
 453        PIN_GROUP_SIMPLE("emmc_grp",
 454                         byt_score_emmc_pins, byt_score_emmc_mux),
 455        PIN_GROUP_SIMPLE("lpc_grp",
 456                         byt_score_ilb_lpc_pins, byt_score_lpc_mux),
 457        PIN_GROUP_SIMPLE("sata_grp",
 458                         byt_score_sata_pins, byt_score_sata_mux),
 459        PIN_GROUP_SIMPLE("plt_clk0_grp",
 460                         byt_score_plt_clk0_pins, byt_score_plt_clk_mux),
 461        PIN_GROUP_SIMPLE("plt_clk1_grp",
 462                         byt_score_plt_clk1_pins, byt_score_plt_clk_mux),
 463        PIN_GROUP_SIMPLE("plt_clk2_grp",
 464                         byt_score_plt_clk2_pins, byt_score_plt_clk_mux),
 465        PIN_GROUP_SIMPLE("plt_clk3_grp",
 466                         byt_score_plt_clk3_pins, byt_score_plt_clk_mux),
 467        PIN_GROUP_SIMPLE("plt_clk4_grp",
 468                         byt_score_plt_clk4_pins, byt_score_plt_clk_mux),
 469        PIN_GROUP_SIMPLE("plt_clk5_grp",
 470                         byt_score_plt_clk5_pins, byt_score_plt_clk_mux),
 471        PIN_GROUP_SIMPLE("smbus_grp",
 472                         byt_score_smbus_pins, byt_score_smbus_mux),
 473};
 474
 475static const char * const byt_score_uart_groups[] = {
 476        "uart1_grp", "uart2_grp",
 477};
 478static const char * const byt_score_pwm_groups[] = {
 479        "pwm0_grp", "pwm1_grp",
 480};
 481static const char * const byt_score_ssp_groups[] = {
 482        "ssp0_grp", "ssp1_grp", "ssp2_grp",
 483};
 484static const char * const byt_score_spi_groups[] = { "sio_spi_grp" };
 485static const char * const byt_score_i2c_groups[] = {
 486        "i2c0_grp", "i2c1_grp", "i2c2_grp", "i2c3_grp", "i2c4_grp", "i2c5_grp",
 487        "i2c6_grp",
 488};
 489static const char * const byt_score_sdcard_groups[] = { "sdcard_grp" };
 490static const char * const byt_score_sdio_groups[] = { "sdio_grp" };
 491static const char * const byt_score_emmc_groups[] = { "emmc_grp" };
 492static const char * const byt_score_lpc_groups[] = { "lpc_grp" };
 493static const char * const byt_score_sata_groups[] = { "sata_grp" };
 494static const char * const byt_score_plt_clk_groups[] = {
 495        "plt_clk0_grp", "plt_clk1_grp", "plt_clk2_grp", "plt_clk3_grp",
 496        "plt_clk4_grp", "plt_clk5_grp",
 497};
 498static const char * const byt_score_smbus_groups[] = { "smbus_grp" };
 499static const char * const byt_score_gpio_groups[] = {
 500        "uart1_grp", "uart2_grp", "pwm0_grp", "pwm1_grp", "ssp0_grp",
 501        "ssp1_grp", "ssp2_grp", "sio_spi_grp", "i2c0_grp", "i2c1_grp",
 502        "i2c2_grp", "i2c3_grp", "i2c4_grp", "i2c5_grp", "i2c6_grp",
 503        "sdcard_grp", "sdio_grp", "emmc_grp", "lpc_grp", "sata_grp",
 504        "plt_clk0_grp", "plt_clk1_grp", "plt_clk2_grp", "plt_clk3_grp",
 505        "plt_clk4_grp", "plt_clk5_grp", "smbus_grp",
 506
 507};
 508
 509static const struct byt_function byt_score_functions[] = {
 510        FUNCTION("uart", byt_score_uart_groups),
 511        FUNCTION("pwm", byt_score_pwm_groups),
 512        FUNCTION("ssp", byt_score_ssp_groups),
 513        FUNCTION("spi", byt_score_spi_groups),
 514        FUNCTION("i2c", byt_score_i2c_groups),
 515        FUNCTION("sdcard", byt_score_sdcard_groups),
 516        FUNCTION("sdio", byt_score_sdio_groups),
 517        FUNCTION("emmc", byt_score_emmc_groups),
 518        FUNCTION("lpc", byt_score_lpc_groups),
 519        FUNCTION("sata", byt_score_sata_groups),
 520        FUNCTION("plt_clk", byt_score_plt_clk_groups),
 521        FUNCTION("smbus", byt_score_smbus_groups),
 522        FUNCTION("gpio", byt_score_gpio_groups),
 523};
 524
 525static const struct byt_community byt_score_communities[] = {
 526        COMMUNITY(0, BYT_NGPIO_SCORE, byt_score_pins_map),
 527};
 528
 529static const struct byt_pinctrl_soc_data byt_score_soc_data = {
 530        .uid            = BYT_SCORE_ACPI_UID,
 531        .pins           = byt_score_pins,
 532        .npins          = ARRAY_SIZE(byt_score_pins),
 533        .groups         = byt_score_groups,
 534        .ngroups        = ARRAY_SIZE(byt_score_groups),
 535        .functions      = byt_score_functions,
 536        .nfunctions     = ARRAY_SIZE(byt_score_functions),
 537        .communities    = byt_score_communities,
 538        .ncommunities   = ARRAY_SIZE(byt_score_communities),
 539};
 540
 541/* SUS pins, aka GPIOS_<pin_no> or GPIO_S5[<pin_no>]  */
 542static const struct pinctrl_pin_desc byt_sus_pins[] = {
 543        PINCTRL_PIN(0, "GPIO_S50"),
 544        PINCTRL_PIN(1, "GPIO_S51"),
 545        PINCTRL_PIN(2, "GPIO_S52"),
 546        PINCTRL_PIN(3, "GPIO_S53"),
 547        PINCTRL_PIN(4, "GPIO_S54"),
 548        PINCTRL_PIN(5, "GPIO_S55"),
 549        PINCTRL_PIN(6, "GPIO_S56"),
 550        PINCTRL_PIN(7, "GPIO_S57"),
 551        PINCTRL_PIN(8, "GPIO_S58"),
 552        PINCTRL_PIN(9, "GPIO_S59"),
 553        PINCTRL_PIN(10, "GPIO_S510"),
 554        PINCTRL_PIN(11, "PMC_SUSPWRDNACK"),
 555        PINCTRL_PIN(12, "PMC_SUSCLK0"),
 556        PINCTRL_PIN(13, "GPIO_S513"),
 557        PINCTRL_PIN(14, "USB_ULPI_RST"),
 558        PINCTRL_PIN(15, "PMC_WAKE_PCIE0#"),
 559        PINCTRL_PIN(16, "PMC_PWRBTN"),
 560        PINCTRL_PIN(17, "GPIO_S517"),
 561        PINCTRL_PIN(18, "PMC_SUS_STAT"),
 562        PINCTRL_PIN(19, "USB_OC0"),
 563        PINCTRL_PIN(20, "USB_OC1"),
 564        PINCTRL_PIN(21, "PCU_SPI_CS1"),
 565        PINCTRL_PIN(22, "GPIO_S522"),
 566        PINCTRL_PIN(23, "GPIO_S523"),
 567        PINCTRL_PIN(24, "GPIO_S524"),
 568        PINCTRL_PIN(25, "GPIO_S525"),
 569        PINCTRL_PIN(26, "GPIO_S526"),
 570        PINCTRL_PIN(27, "GPIO_S527"),
 571        PINCTRL_PIN(28, "GPIO_S528"),
 572        PINCTRL_PIN(29, "GPIO_S529"),
 573        PINCTRL_PIN(30, "GPIO_S530"),
 574        PINCTRL_PIN(31, "USB_ULPI_CLK"),
 575        PINCTRL_PIN(32, "USB_ULPI_DATA0"),
 576        PINCTRL_PIN(33, "USB_ULPI_DATA1"),
 577        PINCTRL_PIN(34, "USB_ULPI_DATA2"),
 578        PINCTRL_PIN(35, "USB_ULPI_DATA3"),
 579        PINCTRL_PIN(36, "USB_ULPI_DATA4"),
 580        PINCTRL_PIN(37, "USB_ULPI_DATA5"),
 581        PINCTRL_PIN(38, "USB_ULPI_DATA6"),
 582        PINCTRL_PIN(39, "USB_ULPI_DATA7"),
 583        PINCTRL_PIN(40, "USB_ULPI_DIR"),
 584        PINCTRL_PIN(41, "USB_ULPI_NXT"),
 585        PINCTRL_PIN(42, "USB_ULPI_STP"),
 586        PINCTRL_PIN(43, "USB_ULPI_REFCLK"),
 587};
 588
 589static const unsigned int byt_sus_pins_map[BYT_NGPIO_SUS] = {
 590        29, 33, 30, 31, 32, 34, 36, 35, 38, 37,
 591        18, 7, 11, 20, 17, 1, 8, 10, 19, 12,
 592        0, 2, 23, 39, 28, 27, 22, 21, 24, 25,
 593        26, 51, 56, 54, 49, 55, 48, 57, 50, 58,
 594        52, 53, 59, 40,
 595};
 596
 597static const unsigned int byt_sus_usb_over_current_pins[] = { 19, 20 };
 598static const struct byt_simple_func_mux byt_sus_usb_oc_mux[] = {
 599        SIMPLE_FUNC("usb", 0),
 600        SIMPLE_FUNC("gpio", 1),
 601};
 602
 603static const unsigned int byt_sus_usb_ulpi_pins[] = {
 604        14, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
 605};
 606static const unsigned short byt_sus_usb_ulpi_mode_values[] = {
 607        2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 608};
 609static const unsigned short byt_sus_usb_ulpi_gpio_mode_values[] = {
 610        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 611};
 612static const struct byt_mixed_func_mux byt_sus_usb_ulpi_mux[] = {
 613        MIXED_FUNC("usb", byt_sus_usb_ulpi_mode_values),
 614        MIXED_FUNC("gpio", byt_sus_usb_ulpi_gpio_mode_values),
 615};
 616
 617static const unsigned int byt_sus_pcu_spi_pins[] = { 21 };
 618static const struct byt_simple_func_mux byt_sus_pcu_spi_mux[] = {
 619        SIMPLE_FUNC("spi", 0),
 620        SIMPLE_FUNC("gpio", 1),
 621};
 622
 623static const struct byt_pingroup byt_sus_groups[] = {
 624        PIN_GROUP_SIMPLE("usb_oc_grp",
 625                        byt_sus_usb_over_current_pins, byt_sus_usb_oc_mux),
 626        PIN_GROUP_MIXED("usb_ulpi_grp",
 627                        byt_sus_usb_ulpi_pins, byt_sus_usb_ulpi_mux),
 628        PIN_GROUP_SIMPLE("pcu_spi_grp",
 629                        byt_sus_pcu_spi_pins, byt_sus_pcu_spi_mux),
 630};
 631
 632static const char * const byt_sus_usb_groups[] = {
 633        "usb_oc_grp", "usb_ulpi_grp",
 634};
 635static const char * const byt_sus_spi_groups[] = { "pcu_spi_grp" };
 636static const char * const byt_sus_gpio_groups[] = {
 637        "usb_oc_grp", "usb_ulpi_grp", "pcu_spi_grp",
 638};
 639
 640static const struct byt_function byt_sus_functions[] = {
 641        FUNCTION("usb", byt_sus_usb_groups),
 642        FUNCTION("spi", byt_sus_spi_groups),
 643        FUNCTION("gpio", byt_sus_gpio_groups),
 644};
 645
 646static const struct byt_community byt_sus_communities[] = {
 647        COMMUNITY(0, BYT_NGPIO_SUS, byt_sus_pins_map),
 648};
 649
 650static const struct byt_pinctrl_soc_data byt_sus_soc_data = {
 651        .uid            = BYT_SUS_ACPI_UID,
 652        .pins           = byt_sus_pins,
 653        .npins          = ARRAY_SIZE(byt_sus_pins),
 654        .groups         = byt_sus_groups,
 655        .ngroups        = ARRAY_SIZE(byt_sus_groups),
 656        .functions      = byt_sus_functions,
 657        .nfunctions     = ARRAY_SIZE(byt_sus_functions),
 658        .communities    = byt_sus_communities,
 659        .ncommunities   = ARRAY_SIZE(byt_sus_communities),
 660};
 661
 662static const struct pinctrl_pin_desc byt_ncore_pins[] = {
 663        PINCTRL_PIN(0, "GPIO_NCORE0"),
 664        PINCTRL_PIN(1, "GPIO_NCORE1"),
 665        PINCTRL_PIN(2, "GPIO_NCORE2"),
 666        PINCTRL_PIN(3, "GPIO_NCORE3"),
 667        PINCTRL_PIN(4, "GPIO_NCORE4"),
 668        PINCTRL_PIN(5, "GPIO_NCORE5"),
 669        PINCTRL_PIN(6, "GPIO_NCORE6"),
 670        PINCTRL_PIN(7, "GPIO_NCORE7"),
 671        PINCTRL_PIN(8, "GPIO_NCORE8"),
 672        PINCTRL_PIN(9, "GPIO_NCORE9"),
 673        PINCTRL_PIN(10, "GPIO_NCORE10"),
 674        PINCTRL_PIN(11, "GPIO_NCORE11"),
 675        PINCTRL_PIN(12, "GPIO_NCORE12"),
 676        PINCTRL_PIN(13, "GPIO_NCORE13"),
 677        PINCTRL_PIN(14, "GPIO_NCORE14"),
 678        PINCTRL_PIN(15, "GPIO_NCORE15"),
 679        PINCTRL_PIN(16, "GPIO_NCORE16"),
 680        PINCTRL_PIN(17, "GPIO_NCORE17"),
 681        PINCTRL_PIN(18, "GPIO_NCORE18"),
 682        PINCTRL_PIN(19, "GPIO_NCORE19"),
 683        PINCTRL_PIN(20, "GPIO_NCORE20"),
 684        PINCTRL_PIN(21, "GPIO_NCORE21"),
 685        PINCTRL_PIN(22, "GPIO_NCORE22"),
 686        PINCTRL_PIN(23, "GPIO_NCORE23"),
 687        PINCTRL_PIN(24, "GPIO_NCORE24"),
 688        PINCTRL_PIN(25, "GPIO_NCORE25"),
 689        PINCTRL_PIN(26, "GPIO_NCORE26"),
 690        PINCTRL_PIN(27, "GPIO_NCORE27"),
 691};
 692
 693static unsigned const byt_ncore_pins_map[BYT_NGPIO_NCORE] = {
 694        19, 18, 17, 20, 21, 22, 24, 25, 23, 16,
 695        14, 15, 12, 26, 27, 1, 4, 8, 11, 0,
 696        3, 6, 10, 13, 2, 5, 9, 7,
 697};
 698
 699static const struct byt_community byt_ncore_communities[] = {
 700        COMMUNITY(0, BYT_NGPIO_NCORE, byt_ncore_pins_map),
 701};
 702
 703static const struct byt_pinctrl_soc_data byt_ncore_soc_data = {
 704        .uid            = BYT_NCORE_ACPI_UID,
 705        .pins           = byt_ncore_pins,
 706        .npins          = ARRAY_SIZE(byt_ncore_pins),
 707        .communities    = byt_ncore_communities,
 708        .ncommunities   = ARRAY_SIZE(byt_ncore_communities),
 709};
 710
 711static const struct byt_pinctrl_soc_data *byt_soc_data[] = {
 712        &byt_score_soc_data,
 713        &byt_sus_soc_data,
 714        &byt_ncore_soc_data,
 715        NULL,
 716};
 717
 718static struct byt_community *byt_get_community(struct byt_gpio *vg,
 719                                               unsigned int pin)
 720{
 721        struct byt_community *comm;
 722        int i;
 723
 724        for (i = 0; i < vg->soc_data->ncommunities; i++) {
 725                comm = vg->communities_copy + i;
 726                if (pin < comm->pin_base + comm->npins && pin >= comm->pin_base)
 727                        return comm;
 728        }
 729
 730        return NULL;
 731}
 732
 733static void __iomem *byt_gpio_reg(struct byt_gpio *vg, unsigned int offset,
 734                                  int reg)
 735{
 736        struct byt_community *comm = byt_get_community(vg, offset);
 737        u32 reg_offset;
 738
 739        if (!comm)
 740                return NULL;
 741
 742        offset -= comm->pin_base;
 743        switch (reg) {
 744        case BYT_INT_STAT_REG:
 745                reg_offset = (offset / 32) * 4;
 746                break;
 747        case BYT_DEBOUNCE_REG:
 748                reg_offset = 0;
 749                break;
 750        default:
 751                reg_offset = comm->pad_map[offset] * 16;
 752                break;
 753        }
 754
 755        return comm->reg_base + reg_offset + reg;
 756}
 757
 758static int byt_get_groups_count(struct pinctrl_dev *pctldev)
 759{
 760        struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev);
 761
 762        return vg->soc_data->ngroups;
 763}
 764
 765static const char *byt_get_group_name(struct pinctrl_dev *pctldev,
 766                                      unsigned int selector)
 767{
 768        struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev);
 769
 770        return vg->soc_data->groups[selector].name;
 771}
 772
 773static int byt_get_group_pins(struct pinctrl_dev *pctldev,
 774                              unsigned int selector,
 775                              const unsigned int **pins,
 776                              unsigned int *num_pins)
 777{
 778        struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev);
 779
 780        *pins           = vg->soc_data->groups[selector].pins;
 781        *num_pins       = vg->soc_data->groups[selector].npins;
 782
 783        return 0;
 784}
 785
 786static const struct pinctrl_ops byt_pinctrl_ops = {
 787        .get_groups_count       = byt_get_groups_count,
 788        .get_group_name         = byt_get_group_name,
 789        .get_group_pins         = byt_get_group_pins,
 790};
 791
 792static int byt_get_functions_count(struct pinctrl_dev *pctldev)
 793{
 794        struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev);
 795
 796        return vg->soc_data->nfunctions;
 797}
 798
 799static const char *byt_get_function_name(struct pinctrl_dev *pctldev,
 800                                         unsigned int selector)
 801{
 802        struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev);
 803
 804        return vg->soc_data->functions[selector].name;
 805}
 806
 807static int byt_get_function_groups(struct pinctrl_dev *pctldev,
 808                                   unsigned int selector,
 809                                   const char * const **groups,
 810                                   unsigned int *num_groups)
 811{
 812        struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev);
 813
 814        *groups         = vg->soc_data->functions[selector].groups;
 815        *num_groups     = vg->soc_data->functions[selector].ngroups;
 816
 817        return 0;
 818}
 819
 820static int byt_get_group_simple_mux(const struct byt_pingroup group,
 821                                    const char *func_name,
 822                                    unsigned short *func)
 823{
 824        int i;
 825
 826        for (i = 0; i < group.nfuncs; i++) {
 827                if (!strcmp(group.simple_funcs[i].name, func_name)) {
 828                        *func = group.simple_funcs[i].func;
 829                        return 0;
 830                }
 831        }
 832
 833        return 1;
 834}
 835
 836static int byt_get_group_mixed_mux(const struct byt_pingroup group,
 837                                   const char *func_name,
 838                                   const unsigned short **func)
 839{
 840        int i;
 841
 842        for (i = 0; i < group.nfuncs; i++) {
 843                if (!strcmp(group.mixed_funcs[i].name, func_name)) {
 844                        *func = group.mixed_funcs[i].func_values;
 845                        return 0;
 846                }
 847        }
 848
 849        return 1;
 850}
 851
 852static void byt_set_group_simple_mux(struct byt_gpio *vg,
 853                                     const struct byt_pingroup group,
 854                                     unsigned short func)
 855{
 856        unsigned long flags;
 857        int i;
 858
 859        raw_spin_lock_irqsave(&vg->lock, flags);
 860
 861        for (i = 0; i < group.npins; i++) {
 862                void __iomem *padcfg0;
 863                u32 value;
 864
 865                padcfg0 = byt_gpio_reg(vg, group.pins[i], BYT_CONF0_REG);
 866                if (!padcfg0) {
 867                        dev_warn(&vg->pdev->dev,
 868                                 "Group %s, pin %i not muxed (no padcfg0)\n",
 869                                 group.name, i);
 870                        continue;
 871                }
 872
 873                value = readl(padcfg0);
 874                value &= ~BYT_PIN_MUX;
 875                value |= func;
 876                writel(value, padcfg0);
 877        }
 878
 879        raw_spin_unlock_irqrestore(&vg->lock, flags);
 880}
 881
 882static void byt_set_group_mixed_mux(struct byt_gpio *vg,
 883                                    const struct byt_pingroup group,
 884                                    const unsigned short *func)
 885{
 886        unsigned long flags;
 887        int i;
 888
 889        raw_spin_lock_irqsave(&vg->lock, flags);
 890
 891        for (i = 0; i < group.npins; i++) {
 892                void __iomem *padcfg0;
 893                u32 value;
 894
 895                padcfg0 = byt_gpio_reg(vg, group.pins[i], BYT_CONF0_REG);
 896                if (!padcfg0) {
 897                        dev_warn(&vg->pdev->dev,
 898                                 "Group %s, pin %i not muxed (no padcfg0)\n",
 899                                 group.name, i);
 900                        continue;
 901                }
 902
 903                value = readl(padcfg0);
 904                value &= ~BYT_PIN_MUX;
 905                value |= func[i];
 906                writel(value, padcfg0);
 907        }
 908
 909        raw_spin_unlock_irqrestore(&vg->lock, flags);
 910}
 911
 912static int byt_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector,
 913                       unsigned int group_selector)
 914{
 915        struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev);
 916        const struct byt_function func = vg->soc_data->functions[func_selector];
 917        const struct byt_pingroup group = vg->soc_data->groups[group_selector];
 918        const unsigned short *mixed_func;
 919        unsigned short simple_func;
 920        int ret = 1;
 921
 922        if (group.has_simple_funcs)
 923                ret = byt_get_group_simple_mux(group, func.name, &simple_func);
 924        else
 925                ret = byt_get_group_mixed_mux(group, func.name, &mixed_func);
 926
 927        if (ret)
 928                byt_set_group_simple_mux(vg, group, BYT_DEFAULT_GPIO_MUX);
 929        else if (group.has_simple_funcs)
 930                byt_set_group_simple_mux(vg, group, simple_func);
 931        else
 932                byt_set_group_mixed_mux(vg, group, mixed_func);
 933
 934        return 0;
 935}
 936
 937static u32 byt_get_gpio_mux(struct byt_gpio *vg, unsigned offset)
 938{
 939        /* SCORE pin 92-93 */
 940        if (!strcmp(vg->soc_data->uid, BYT_SCORE_ACPI_UID) &&
 941            offset >= 92 && offset <= 93)
 942                return 1;
 943
 944        /* SUS pin 11-21 */
 945        if (!strcmp(vg->soc_data->uid, BYT_SUS_ACPI_UID) &&
 946            offset >= 11 && offset <= 21)
 947                return 1;
 948
 949        return 0;
 950}
 951
 952static void byt_gpio_clear_triggering(struct byt_gpio *vg, unsigned int offset)
 953{
 954        void __iomem *reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
 955        unsigned long flags;
 956        u32 value;
 957
 958        raw_spin_lock_irqsave(&vg->lock, flags);
 959        value = readl(reg);
 960        value &= ~(BYT_TRIG_POS | BYT_TRIG_NEG | BYT_TRIG_LVL);
 961        writel(value, reg);
 962        raw_spin_unlock_irqrestore(&vg->lock, flags);
 963}
 964
 965static int byt_gpio_request_enable(struct pinctrl_dev *pctl_dev,
 966                                   struct pinctrl_gpio_range *range,
 967                                   unsigned int offset)
 968{
 969        struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctl_dev);
 970        void __iomem *reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
 971        u32 value, gpio_mux;
 972        unsigned long flags;
 973
 974        raw_spin_lock_irqsave(&vg->lock, flags);
 975
 976        /*
 977         * In most cases, func pin mux 000 means GPIO function.
 978         * But, some pins may have func pin mux 001 represents
 979         * GPIO function.
 980         *
 981         * Because there are devices out there where some pins were not
 982         * configured correctly we allow changing the mux value from
 983         * request (but print out warning about that).
 984         */
 985        value = readl(reg) & BYT_PIN_MUX;
 986        gpio_mux = byt_get_gpio_mux(vg, offset);
 987        if (gpio_mux != value) {
 988                value = readl(reg) & ~BYT_PIN_MUX;
 989                value |= gpio_mux;
 990                writel(value, reg);
 991
 992                dev_warn(&vg->pdev->dev, FW_BUG
 993                         "pin %u forcibly re-configured as GPIO\n", offset);
 994        }
 995
 996        raw_spin_unlock_irqrestore(&vg->lock, flags);
 997
 998        pm_runtime_get(&vg->pdev->dev);
 999
1000        return 0;
1001}
1002
1003static void byt_gpio_disable_free(struct pinctrl_dev *pctl_dev,
1004                                  struct pinctrl_gpio_range *range,
1005                                  unsigned int offset)
1006{
1007        struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctl_dev);
1008
1009        byt_gpio_clear_triggering(vg, offset);
1010        pm_runtime_put(&vg->pdev->dev);
1011}
1012
1013static int byt_gpio_set_direction(struct pinctrl_dev *pctl_dev,
1014                                  struct pinctrl_gpio_range *range,
1015                                  unsigned int offset,
1016                                  bool input)
1017{
1018        struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctl_dev);
1019        void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1020        void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
1021        unsigned long flags;
1022        u32 value;
1023
1024        raw_spin_lock_irqsave(&vg->lock, flags);
1025
1026        value = readl(val_reg);
1027        value &= ~BYT_DIR_MASK;
1028        if (input)
1029                value |= BYT_OUTPUT_EN;
1030        else
1031                /*
1032                 * Before making any direction modifications, do a check if gpio
1033                 * is set for direct IRQ.  On baytrail, setting GPIO to output
1034                 * does not make sense, so let's at least warn the caller before
1035                 * they shoot themselves in the foot.
1036                 */
1037                WARN(readl(conf_reg) & BYT_DIRECT_IRQ_EN,
1038                     "Potential Error: Setting GPIO with direct_irq_en to output");
1039        writel(value, val_reg);
1040
1041        raw_spin_unlock_irqrestore(&vg->lock, flags);
1042
1043        return 0;
1044}
1045
1046static const struct pinmux_ops byt_pinmux_ops = {
1047        .get_functions_count    = byt_get_functions_count,
1048        .get_function_name      = byt_get_function_name,
1049        .get_function_groups    = byt_get_function_groups,
1050        .set_mux                = byt_set_mux,
1051        .gpio_request_enable    = byt_gpio_request_enable,
1052        .gpio_disable_free      = byt_gpio_disable_free,
1053        .gpio_set_direction     = byt_gpio_set_direction,
1054};
1055
1056static void byt_get_pull_strength(u32 reg, u16 *strength)
1057{
1058        switch (reg & BYT_PULL_STR_MASK) {
1059        case BYT_PULL_STR_2K:
1060                *strength = 2000;
1061                break;
1062        case BYT_PULL_STR_10K:
1063                *strength = 10000;
1064                break;
1065        case BYT_PULL_STR_20K:
1066                *strength = 20000;
1067                break;
1068        case BYT_PULL_STR_40K:
1069                *strength = 40000;
1070                break;
1071        }
1072}
1073
1074static int byt_set_pull_strength(u32 *reg, u16 strength)
1075{
1076        *reg &= ~BYT_PULL_STR_MASK;
1077
1078        switch (strength) {
1079        case 2000:
1080                *reg |= BYT_PULL_STR_2K;
1081                break;
1082        case 10000:
1083                *reg |= BYT_PULL_STR_10K;
1084                break;
1085        case 20000:
1086                *reg |= BYT_PULL_STR_20K;
1087                break;
1088        case 40000:
1089                *reg |= BYT_PULL_STR_40K;
1090                break;
1091        default:
1092                return -EINVAL;
1093        }
1094
1095        return 0;
1096}
1097
1098static int byt_pin_config_get(struct pinctrl_dev *pctl_dev, unsigned int offset,
1099                              unsigned long *config)
1100{
1101        struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctl_dev);
1102        enum pin_config_param param = pinconf_to_config_param(*config);
1103        void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
1104        void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1105        void __iomem *db_reg = byt_gpio_reg(vg, offset, BYT_DEBOUNCE_REG);
1106        unsigned long flags;
1107        u32 conf, pull, val, debounce;
1108        u16 arg = 0;
1109
1110        raw_spin_lock_irqsave(&vg->lock, flags);
1111        conf = readl(conf_reg);
1112        pull = conf & BYT_PULL_ASSIGN_MASK;
1113        val = readl(val_reg);
1114        raw_spin_unlock_irqrestore(&vg->lock, flags);
1115
1116        switch (param) {
1117        case PIN_CONFIG_BIAS_DISABLE:
1118                if (pull)
1119                        return -EINVAL;
1120                break;
1121        case PIN_CONFIG_BIAS_PULL_DOWN:
1122                /* Pull assignment is only applicable in input mode */
1123                if ((val & BYT_INPUT_EN) || pull != BYT_PULL_ASSIGN_DOWN)
1124                        return -EINVAL;
1125
1126                byt_get_pull_strength(conf, &arg);
1127
1128                break;
1129        case PIN_CONFIG_BIAS_PULL_UP:
1130                /* Pull assignment is only applicable in input mode */
1131                if ((val & BYT_INPUT_EN) || pull != BYT_PULL_ASSIGN_UP)
1132                        return -EINVAL;
1133
1134                byt_get_pull_strength(conf, &arg);
1135
1136                break;
1137        case PIN_CONFIG_INPUT_DEBOUNCE:
1138                if (!(conf & BYT_DEBOUNCE_EN))
1139                        return -EINVAL;
1140
1141                raw_spin_lock_irqsave(&vg->lock, flags);
1142                debounce = readl(db_reg);
1143                raw_spin_unlock_irqrestore(&vg->lock, flags);
1144
1145                switch (debounce & BYT_DEBOUNCE_PULSE_MASK) {
1146                case BYT_DEBOUNCE_PULSE_375US:
1147                        arg = 375;
1148                        break;
1149                case BYT_DEBOUNCE_PULSE_750US:
1150                        arg = 750;
1151                        break;
1152                case BYT_DEBOUNCE_PULSE_1500US:
1153                        arg = 1500;
1154                        break;
1155                case BYT_DEBOUNCE_PULSE_3MS:
1156                        arg = 3000;
1157                        break;
1158                case BYT_DEBOUNCE_PULSE_6MS:
1159                        arg = 6000;
1160                        break;
1161                case BYT_DEBOUNCE_PULSE_12MS:
1162                        arg = 12000;
1163                        break;
1164                case BYT_DEBOUNCE_PULSE_24MS:
1165                        arg = 24000;
1166                        break;
1167                default:
1168                        return -EINVAL;
1169                }
1170
1171                break;
1172        default:
1173                return -ENOTSUPP;
1174        }
1175
1176        *config = pinconf_to_config_packed(param, arg);
1177
1178        return 0;
1179}
1180
1181static int byt_pin_config_set(struct pinctrl_dev *pctl_dev,
1182                              unsigned int offset,
1183                              unsigned long *configs,
1184                              unsigned int num_configs)
1185{
1186        struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctl_dev);
1187        unsigned int param, arg;
1188        void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
1189        void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1190        void __iomem *db_reg = byt_gpio_reg(vg, offset, BYT_DEBOUNCE_REG);
1191        unsigned long flags;
1192        u32 conf, val, debounce;
1193        int i, ret = 0;
1194
1195        raw_spin_lock_irqsave(&vg->lock, flags);
1196
1197        conf = readl(conf_reg);
1198        val = readl(val_reg);
1199
1200        for (i = 0; i < num_configs; i++) {
1201                param = pinconf_to_config_param(configs[i]);
1202                arg = pinconf_to_config_argument(configs[i]);
1203
1204                switch (param) {
1205                case PIN_CONFIG_BIAS_DISABLE:
1206                        conf &= ~BYT_PULL_ASSIGN_MASK;
1207                        break;
1208                case PIN_CONFIG_BIAS_PULL_DOWN:
1209                        /* Set default strength value in case none is given */
1210                        if (arg == 1)
1211                                arg = 2000;
1212
1213                        /*
1214                         * Pull assignment is only applicable in input mode. If
1215                         * chip is not in input mode, set it and warn about it.
1216                         */
1217                        if (val & BYT_INPUT_EN) {
1218                                val &= ~BYT_INPUT_EN;
1219                                writel(val, val_reg);
1220                                dev_warn(&vg->pdev->dev,
1221                                         "pin %u forcibly set to input mode\n",
1222                                         offset);
1223                        }
1224
1225                        conf &= ~BYT_PULL_ASSIGN_MASK;
1226                        conf |= BYT_PULL_ASSIGN_DOWN;
1227                        ret = byt_set_pull_strength(&conf, arg);
1228
1229                        break;
1230                case PIN_CONFIG_BIAS_PULL_UP:
1231                        /* Set default strength value in case none is given */
1232                        if (arg == 1)
1233                                arg = 2000;
1234
1235                        /*
1236                         * Pull assignment is only applicable in input mode. If
1237                         * chip is not in input mode, set it and warn about it.
1238                         */
1239                        if (val & BYT_INPUT_EN) {
1240                                val &= ~BYT_INPUT_EN;
1241                                writel(val, val_reg);
1242                                dev_warn(&vg->pdev->dev,
1243                                         "pin %u forcibly set to input mode\n",
1244                                         offset);
1245                        }
1246
1247                        conf &= ~BYT_PULL_ASSIGN_MASK;
1248                        conf |= BYT_PULL_ASSIGN_UP;
1249                        ret = byt_set_pull_strength(&conf, arg);
1250
1251                        break;
1252                case PIN_CONFIG_INPUT_DEBOUNCE:
1253                        debounce = readl(db_reg);
1254                        debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
1255
1256                        if (arg)
1257                                conf |= BYT_DEBOUNCE_EN;
1258                        else
1259                                conf &= ~BYT_DEBOUNCE_EN;
1260
1261                        switch (arg) {
1262                        case 375:
1263                                debounce |= BYT_DEBOUNCE_PULSE_375US;
1264                                break;
1265                        case 750:
1266                                debounce |= BYT_DEBOUNCE_PULSE_750US;
1267                                break;
1268                        case 1500:
1269                                debounce |= BYT_DEBOUNCE_PULSE_1500US;
1270                                break;
1271                        case 3000:
1272                                debounce |= BYT_DEBOUNCE_PULSE_3MS;
1273                                break;
1274                        case 6000:
1275                                debounce |= BYT_DEBOUNCE_PULSE_6MS;
1276                                break;
1277                        case 12000:
1278                                debounce |= BYT_DEBOUNCE_PULSE_12MS;
1279                                break;
1280                        case 24000:
1281                                debounce |= BYT_DEBOUNCE_PULSE_24MS;
1282                                break;
1283                        default:
1284                                if (arg)
1285                                        ret = -EINVAL;
1286                                break;
1287                        }
1288
1289                        if (!ret)
1290                                writel(debounce, db_reg);
1291                        break;
1292                default:
1293                        ret = -ENOTSUPP;
1294                }
1295
1296                if (ret)
1297                        break;
1298        }
1299
1300        if (!ret)
1301                writel(conf, conf_reg);
1302
1303        raw_spin_unlock_irqrestore(&vg->lock, flags);
1304
1305        return ret;
1306}
1307
1308static const struct pinconf_ops byt_pinconf_ops = {
1309        .is_generic     = true,
1310        .pin_config_get = byt_pin_config_get,
1311        .pin_config_set = byt_pin_config_set,
1312};
1313
1314static const struct pinctrl_desc byt_pinctrl_desc = {
1315        .pctlops        = &byt_pinctrl_ops,
1316        .pmxops         = &byt_pinmux_ops,
1317        .confops        = &byt_pinconf_ops,
1318        .owner          = THIS_MODULE,
1319};
1320
1321static int byt_gpio_get(struct gpio_chip *chip, unsigned offset)
1322{
1323        struct byt_gpio *vg = gpiochip_get_data(chip);
1324        void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1325        unsigned long flags;
1326        u32 val;
1327
1328        raw_spin_lock_irqsave(&vg->lock, flags);
1329        val = readl(reg);
1330        raw_spin_unlock_irqrestore(&vg->lock, flags);
1331
1332        return !!(val & BYT_LEVEL);
1333}
1334
1335static void byt_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
1336{
1337        struct byt_gpio *vg = gpiochip_get_data(chip);
1338        void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1339        unsigned long flags;
1340        u32 old_val;
1341
1342        if (!reg)
1343                return;
1344
1345        raw_spin_lock_irqsave(&vg->lock, flags);
1346        old_val = readl(reg);
1347        if (value)
1348                writel(old_val | BYT_LEVEL, reg);
1349        else
1350                writel(old_val & ~BYT_LEVEL, reg);
1351        raw_spin_unlock_irqrestore(&vg->lock, flags);
1352}
1353
1354static int byt_gpio_get_direction(struct gpio_chip *chip, unsigned int offset)
1355{
1356        struct byt_gpio *vg = gpiochip_get_data(chip);
1357        void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1358        unsigned long flags;
1359        u32 value;
1360
1361        if (!reg)
1362                return -EINVAL;
1363
1364        raw_spin_lock_irqsave(&vg->lock, flags);
1365        value = readl(reg);
1366        raw_spin_unlock_irqrestore(&vg->lock, flags);
1367
1368        if (!(value & BYT_OUTPUT_EN))
1369                return GPIOF_DIR_OUT;
1370        if (!(value & BYT_INPUT_EN))
1371                return GPIOF_DIR_IN;
1372
1373        return -EINVAL;
1374}
1375
1376static int byt_gpio_direction_input(struct gpio_chip *chip, unsigned int offset)
1377{
1378        return pinctrl_gpio_direction_input(chip->base + offset);
1379}
1380
1381static int byt_gpio_direction_output(struct gpio_chip *chip,
1382                                     unsigned int offset, int value)
1383{
1384        int ret = pinctrl_gpio_direction_output(chip->base + offset);
1385
1386        if (ret)
1387                return ret;
1388
1389        byt_gpio_set(chip, offset, value);
1390
1391        return 0;
1392}
1393
1394static void byt_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
1395{
1396        struct byt_gpio *vg = gpiochip_get_data(chip);
1397        int i;
1398        u32 conf0, val;
1399
1400        for (i = 0; i < vg->soc_data->npins; i++) {
1401                const struct byt_community *comm;
1402                const char *pull_str = NULL;
1403                const char *pull = NULL;
1404                void __iomem *reg;
1405                unsigned long flags;
1406                const char *label;
1407                unsigned int pin;
1408
1409                raw_spin_lock_irqsave(&vg->lock, flags);
1410                pin = vg->soc_data->pins[i].number;
1411                reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
1412                if (!reg) {
1413                        seq_printf(s,
1414                                   "Could not retrieve pin %i conf0 reg\n",
1415                                   pin);
1416                        raw_spin_unlock_irqrestore(&vg->lock, flags);
1417                        continue;
1418                }
1419                conf0 = readl(reg);
1420
1421                reg = byt_gpio_reg(vg, pin, BYT_VAL_REG);
1422                if (!reg) {
1423                        seq_printf(s,
1424                                   "Could not retrieve pin %i val reg\n", pin);
1425                        raw_spin_unlock_irqrestore(&vg->lock, flags);
1426                        continue;
1427                }
1428                val = readl(reg);
1429                raw_spin_unlock_irqrestore(&vg->lock, flags);
1430
1431                comm = byt_get_community(vg, pin);
1432                if (!comm) {
1433                        seq_printf(s,
1434                                   "Could not get community for pin %i\n", pin);
1435                        continue;
1436                }
1437                label = gpiochip_is_requested(chip, i);
1438                if (!label)
1439                        label = "Unrequested";
1440
1441                switch (conf0 & BYT_PULL_ASSIGN_MASK) {
1442                case BYT_PULL_ASSIGN_UP:
1443                        pull = "up";
1444                        break;
1445                case BYT_PULL_ASSIGN_DOWN:
1446                        pull = "down";
1447                        break;
1448                }
1449
1450                switch (conf0 & BYT_PULL_STR_MASK) {
1451                case BYT_PULL_STR_2K:
1452                        pull_str = "2k";
1453                        break;
1454                case BYT_PULL_STR_10K:
1455                        pull_str = "10k";
1456                        break;
1457                case BYT_PULL_STR_20K:
1458                        pull_str = "20k";
1459                        break;
1460                case BYT_PULL_STR_40K:
1461                        pull_str = "40k";
1462                        break;
1463                }
1464
1465                seq_printf(s,
1466                           " gpio-%-3d (%-20.20s) %s %s %s pad-%-3d offset:0x%03x mux:%d %s%s%s",
1467                           pin,
1468                           label,
1469                           val & BYT_INPUT_EN ? "  " : "in",
1470                           val & BYT_OUTPUT_EN ? "   " : "out",
1471                           val & BYT_LEVEL ? "hi" : "lo",
1472                           comm->pad_map[i], comm->pad_map[i] * 16,
1473                           conf0 & 0x7,
1474                           conf0 & BYT_TRIG_NEG ? " fall" : "     ",
1475                           conf0 & BYT_TRIG_POS ? " rise" : "     ",
1476                           conf0 & BYT_TRIG_LVL ? " level" : "      ");
1477
1478                if (pull && pull_str)
1479                        seq_printf(s, " %-4s %-3s", pull, pull_str);
1480                else
1481                        seq_puts(s, "          ");
1482
1483                if (conf0 & BYT_IODEN)
1484                        seq_puts(s, " open-drain");
1485
1486                seq_puts(s, "\n");
1487        }
1488}
1489
1490static const struct gpio_chip byt_gpio_chip = {
1491        .owner                  = THIS_MODULE,
1492        .request                = gpiochip_generic_request,
1493        .free                   = gpiochip_generic_free,
1494        .get_direction          = byt_gpio_get_direction,
1495        .direction_input        = byt_gpio_direction_input,
1496        .direction_output       = byt_gpio_direction_output,
1497        .get                    = byt_gpio_get,
1498        .set                    = byt_gpio_set,
1499        .dbg_show               = byt_gpio_dbg_show,
1500};
1501
1502static void byt_irq_ack(struct irq_data *d)
1503{
1504        struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1505        struct byt_gpio *vg = gpiochip_get_data(gc);
1506        unsigned offset = irqd_to_hwirq(d);
1507        void __iomem *reg;
1508
1509        reg = byt_gpio_reg(vg, offset, BYT_INT_STAT_REG);
1510        if (!reg)
1511                return;
1512
1513        raw_spin_lock(&vg->lock);
1514        writel(BIT(offset % 32), reg);
1515        raw_spin_unlock(&vg->lock);
1516}
1517
1518static void byt_irq_mask(struct irq_data *d)
1519{
1520        struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1521        struct byt_gpio *vg = gpiochip_get_data(gc);
1522
1523        byt_gpio_clear_triggering(vg, irqd_to_hwirq(d));
1524}
1525
1526static void byt_irq_unmask(struct irq_data *d)
1527{
1528        struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1529        struct byt_gpio *vg = gpiochip_get_data(gc);
1530        unsigned offset = irqd_to_hwirq(d);
1531        unsigned long flags;
1532        void __iomem *reg;
1533        u32 value;
1534
1535        reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
1536        if (!reg)
1537                return;
1538
1539        raw_spin_lock_irqsave(&vg->lock, flags);
1540        value = readl(reg);
1541
1542        switch (irqd_get_trigger_type(d)) {
1543        case IRQ_TYPE_LEVEL_HIGH:
1544                value |= BYT_TRIG_LVL;
1545        case IRQ_TYPE_EDGE_RISING:
1546                value |= BYT_TRIG_POS;
1547                break;
1548        case IRQ_TYPE_LEVEL_LOW:
1549                value |= BYT_TRIG_LVL;
1550        case IRQ_TYPE_EDGE_FALLING:
1551                value |= BYT_TRIG_NEG;
1552                break;
1553        case IRQ_TYPE_EDGE_BOTH:
1554                value |= (BYT_TRIG_NEG | BYT_TRIG_POS);
1555                break;
1556        }
1557
1558        writel(value, reg);
1559
1560        raw_spin_unlock_irqrestore(&vg->lock, flags);
1561}
1562
1563static int byt_irq_type(struct irq_data *d, unsigned int type)
1564{
1565        struct byt_gpio *vg = gpiochip_get_data(irq_data_get_irq_chip_data(d));
1566        u32 offset = irqd_to_hwirq(d);
1567        u32 value;
1568        unsigned long flags;
1569        void __iomem *reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
1570
1571        if (!reg || offset >= vg->chip.ngpio)
1572                return -EINVAL;
1573
1574        raw_spin_lock_irqsave(&vg->lock, flags);
1575        value = readl(reg);
1576
1577        WARN(value & BYT_DIRECT_IRQ_EN,
1578             "Bad pad config for io mode, force direct_irq_en bit clearing");
1579
1580        /* For level trigges the BYT_TRIG_POS and BYT_TRIG_NEG bits
1581         * are used to indicate high and low level triggering
1582         */
1583        value &= ~(BYT_DIRECT_IRQ_EN | BYT_TRIG_POS | BYT_TRIG_NEG |
1584                   BYT_TRIG_LVL);
1585        /* Enable glitch filtering */
1586        value |= BYT_GLITCH_FILTER_EN | BYT_GLITCH_F_SLOW_CLK |
1587                 BYT_GLITCH_F_FAST_CLK;
1588
1589        writel(value, reg);
1590
1591        if (type & IRQ_TYPE_EDGE_BOTH)
1592                irq_set_handler_locked(d, handle_edge_irq);
1593        else if (type & IRQ_TYPE_LEVEL_MASK)
1594                irq_set_handler_locked(d, handle_level_irq);
1595
1596        raw_spin_unlock_irqrestore(&vg->lock, flags);
1597
1598        return 0;
1599}
1600
1601static struct irq_chip byt_irqchip = {
1602        .name           = "BYT-GPIO",
1603        .irq_ack        = byt_irq_ack,
1604        .irq_mask       = byt_irq_mask,
1605        .irq_unmask     = byt_irq_unmask,
1606        .irq_set_type   = byt_irq_type,
1607        .flags          = IRQCHIP_SKIP_SET_WAKE,
1608};
1609
1610static void byt_gpio_irq_handler(struct irq_desc *desc)
1611{
1612        struct irq_data *data = irq_desc_get_irq_data(desc);
1613        struct byt_gpio *vg = gpiochip_get_data(
1614                                irq_desc_get_handler_data(desc));
1615        struct irq_chip *chip = irq_data_get_irq_chip(data);
1616        u32 base, pin;
1617        void __iomem *reg;
1618        unsigned long pending;
1619        unsigned int virq;
1620
1621        /* check from GPIO controller which pin triggered the interrupt */
1622        for (base = 0; base < vg->chip.ngpio; base += 32) {
1623                reg = byt_gpio_reg(vg, base, BYT_INT_STAT_REG);
1624
1625                if (!reg) {
1626                        dev_warn(&vg->pdev->dev,
1627                                 "Pin %i: could not retrieve interrupt status register\n",
1628                                 base);
1629                        continue;
1630                }
1631
1632                raw_spin_lock(&vg->lock);
1633                pending = readl(reg);
1634                raw_spin_unlock(&vg->lock);
1635                for_each_set_bit(pin, &pending, 32) {
1636                        virq = irq_find_mapping(vg->chip.irq.domain, base + pin);
1637                        generic_handle_irq(virq);
1638                }
1639        }
1640        chip->irq_eoi(data);
1641}
1642
1643static void byt_gpio_irq_init_hw(struct byt_gpio *vg)
1644{
1645        struct gpio_chip *gc = &vg->chip;
1646        struct device *dev = &vg->pdev->dev;
1647        void __iomem *reg;
1648        u32 base, value;
1649        int i;
1650
1651        /*
1652         * Clear interrupt triggers for all pins that are GPIOs and
1653         * do not use direct IRQ mode. This will prevent spurious
1654         * interrupts from misconfigured pins.
1655         */
1656        for (i = 0; i < vg->soc_data->npins; i++) {
1657                unsigned int pin = vg->soc_data->pins[i].number;
1658
1659                reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
1660                if (!reg) {
1661                        dev_warn(&vg->pdev->dev,
1662                                 "Pin %i: could not retrieve conf0 register\n",
1663                                 i);
1664                        continue;
1665                }
1666
1667                value = readl(reg);
1668                if (value & BYT_DIRECT_IRQ_EN) {
1669                        clear_bit(i, gc->irq.valid_mask);
1670                        dev_dbg(dev, "excluding GPIO %d from IRQ domain\n", i);
1671                } else if ((value & BYT_PIN_MUX) == byt_get_gpio_mux(vg, i)) {
1672                        byt_gpio_clear_triggering(vg, i);
1673                        dev_dbg(dev, "disabling GPIO %d\n", i);
1674                }
1675        }
1676
1677        /* clear interrupt status trigger registers */
1678        for (base = 0; base < vg->soc_data->npins; base += 32) {
1679                reg = byt_gpio_reg(vg, base, BYT_INT_STAT_REG);
1680
1681                if (!reg) {
1682                        dev_warn(&vg->pdev->dev,
1683                                 "Pin %i: could not retrieve irq status reg\n",
1684                                 base);
1685                        continue;
1686                }
1687
1688                writel(0xffffffff, reg);
1689                /* make sure trigger bits are cleared, if not then a pin
1690                   might be misconfigured in bios */
1691                value = readl(reg);
1692                if (value)
1693                        dev_err(&vg->pdev->dev,
1694                                "GPIO interrupt error, pins misconfigured\n");
1695        }
1696}
1697
1698static int byt_gpio_probe(struct byt_gpio *vg)
1699{
1700        struct gpio_chip *gc;
1701        struct resource *irq_rc;
1702        int ret;
1703
1704        /* Set up gpio chip */
1705        vg->chip        = byt_gpio_chip;
1706        gc              = &vg->chip;
1707        gc->label       = dev_name(&vg->pdev->dev);
1708        gc->base        = -1;
1709        gc->can_sleep   = false;
1710        gc->parent      = &vg->pdev->dev;
1711        gc->ngpio       = vg->soc_data->npins;
1712        gc->irq.need_valid_mask = true;
1713
1714#ifdef CONFIG_PM_SLEEP
1715        vg->saved_context = devm_kcalloc(&vg->pdev->dev, gc->ngpio,
1716                                       sizeof(*vg->saved_context), GFP_KERNEL);
1717#endif
1718        ret = devm_gpiochip_add_data(&vg->pdev->dev, gc, vg);
1719        if (ret) {
1720                dev_err(&vg->pdev->dev, "failed adding byt-gpio chip\n");
1721                return ret;
1722        }
1723
1724        ret = gpiochip_add_pin_range(&vg->chip, dev_name(&vg->pdev->dev),
1725                                     0, 0, vg->soc_data->npins);
1726        if (ret) {
1727                dev_err(&vg->pdev->dev, "failed to add GPIO pin range\n");
1728                return ret;
1729        }
1730
1731        /* set up interrupts  */
1732        irq_rc = platform_get_resource(vg->pdev, IORESOURCE_IRQ, 0);
1733        if (irq_rc && irq_rc->start) {
1734                byt_gpio_irq_init_hw(vg);
1735                ret = gpiochip_irqchip_add(gc, &byt_irqchip, 0,
1736                                           handle_bad_irq, IRQ_TYPE_NONE);
1737                if (ret) {
1738                        dev_err(&vg->pdev->dev, "failed to add irqchip\n");
1739                        return ret;
1740                }
1741
1742                gpiochip_set_chained_irqchip(gc, &byt_irqchip,
1743                                             (unsigned)irq_rc->start,
1744                                             byt_gpio_irq_handler);
1745        }
1746
1747        return ret;
1748}
1749
1750static int byt_set_soc_data(struct byt_gpio *vg,
1751                            const struct byt_pinctrl_soc_data *soc_data)
1752{
1753        int i;
1754
1755        vg->soc_data = soc_data;
1756        vg->communities_copy = devm_kcalloc(&vg->pdev->dev,
1757                                            soc_data->ncommunities,
1758                                            sizeof(*vg->communities_copy),
1759                                            GFP_KERNEL);
1760        if (!vg->communities_copy)
1761                return -ENOMEM;
1762
1763        for (i = 0; i < soc_data->ncommunities; i++) {
1764                struct byt_community *comm = vg->communities_copy + i;
1765                struct resource *mem_rc;
1766
1767                *comm = vg->soc_data->communities[i];
1768
1769                mem_rc = platform_get_resource(vg->pdev, IORESOURCE_MEM, 0);
1770                comm->reg_base = devm_ioremap_resource(&vg->pdev->dev, mem_rc);
1771                if (IS_ERR(comm->reg_base))
1772                        return PTR_ERR(comm->reg_base);
1773        }
1774
1775        return 0;
1776}
1777
1778static const struct acpi_device_id byt_gpio_acpi_match[] = {
1779        { "INT33B2", (kernel_ulong_t)byt_soc_data },
1780        { "INT33FC", (kernel_ulong_t)byt_soc_data },
1781        { }
1782};
1783MODULE_DEVICE_TABLE(acpi, byt_gpio_acpi_match);
1784
1785static int byt_pinctrl_probe(struct platform_device *pdev)
1786{
1787        const struct byt_pinctrl_soc_data *soc_data = NULL;
1788        const struct byt_pinctrl_soc_data **soc_table;
1789        const struct acpi_device_id *acpi_id;
1790        struct acpi_device *acpi_dev;
1791        struct byt_gpio *vg;
1792        int i, ret;
1793
1794        acpi_dev = ACPI_COMPANION(&pdev->dev);
1795        if (!acpi_dev)
1796                return -ENODEV;
1797
1798        acpi_id = acpi_match_device(byt_gpio_acpi_match, &pdev->dev);
1799        if (!acpi_id)
1800                return -ENODEV;
1801
1802        soc_table = (const struct byt_pinctrl_soc_data **)acpi_id->driver_data;
1803
1804        for (i = 0; soc_table[i]; i++) {
1805                if (!strcmp(acpi_dev->pnp.unique_id, soc_table[i]->uid)) {
1806                        soc_data = soc_table[i];
1807                        break;
1808                }
1809        }
1810
1811        if (!soc_data)
1812                return -ENODEV;
1813
1814        vg = devm_kzalloc(&pdev->dev, sizeof(*vg), GFP_KERNEL);
1815        if (!vg)
1816                return -ENOMEM;
1817
1818        vg->pdev = pdev;
1819        ret = byt_set_soc_data(vg, soc_data);
1820        if (ret) {
1821                dev_err(&pdev->dev, "failed to set soc data\n");
1822                return ret;
1823        }
1824
1825        vg->pctl_desc           = byt_pinctrl_desc;
1826        vg->pctl_desc.name      = dev_name(&pdev->dev);
1827        vg->pctl_desc.pins      = vg->soc_data->pins;
1828        vg->pctl_desc.npins     = vg->soc_data->npins;
1829
1830        vg->pctl_dev = devm_pinctrl_register(&pdev->dev, &vg->pctl_desc, vg);
1831        if (IS_ERR(vg->pctl_dev)) {
1832                dev_err(&pdev->dev, "failed to register pinctrl driver\n");
1833                return PTR_ERR(vg->pctl_dev);
1834        }
1835
1836        raw_spin_lock_init(&vg->lock);
1837
1838        ret = byt_gpio_probe(vg);
1839        if (ret)
1840                return ret;
1841
1842        platform_set_drvdata(pdev, vg);
1843        pm_runtime_enable(&pdev->dev);
1844
1845        return 0;
1846}
1847
1848#ifdef CONFIG_PM_SLEEP
1849static int byt_gpio_suspend(struct device *dev)
1850{
1851        struct platform_device *pdev = to_platform_device(dev);
1852        struct byt_gpio *vg = platform_get_drvdata(pdev);
1853        int i;
1854
1855        for (i = 0; i < vg->soc_data->npins; i++) {
1856                void __iomem *reg;
1857                u32 value;
1858                unsigned int pin = vg->soc_data->pins[i].number;
1859
1860                reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
1861                if (!reg) {
1862                        dev_warn(&vg->pdev->dev,
1863                                 "Pin %i: could not retrieve conf0 register\n",
1864                                 i);
1865                        continue;
1866                }
1867                value = readl(reg) & BYT_CONF0_RESTORE_MASK;
1868                vg->saved_context[i].conf0 = value;
1869
1870                reg = byt_gpio_reg(vg, pin, BYT_VAL_REG);
1871                value = readl(reg) & BYT_VAL_RESTORE_MASK;
1872                vg->saved_context[i].val = value;
1873        }
1874
1875        return 0;
1876}
1877
1878static int byt_gpio_resume(struct device *dev)
1879{
1880        struct platform_device *pdev = to_platform_device(dev);
1881        struct byt_gpio *vg = platform_get_drvdata(pdev);
1882        int i;
1883
1884        for (i = 0; i < vg->soc_data->npins; i++) {
1885                void __iomem *reg;
1886                u32 value;
1887                unsigned int pin = vg->soc_data->pins[i].number;
1888
1889                reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
1890                if (!reg) {
1891                        dev_warn(&vg->pdev->dev,
1892                                 "Pin %i: could not retrieve conf0 register\n",
1893                                 i);
1894                        continue;
1895                }
1896                value = readl(reg);
1897                if ((value & BYT_CONF0_RESTORE_MASK) !=
1898                     vg->saved_context[i].conf0) {
1899                        value &= ~BYT_CONF0_RESTORE_MASK;
1900                        value |= vg->saved_context[i].conf0;
1901                        writel(value, reg);
1902                        dev_info(dev, "restored pin %d conf0 %#08x", i, value);
1903                }
1904
1905                reg = byt_gpio_reg(vg, pin, BYT_VAL_REG);
1906                value = readl(reg);
1907                if ((value & BYT_VAL_RESTORE_MASK) !=
1908                     vg->saved_context[i].val) {
1909                        u32 v;
1910
1911                        v = value & ~BYT_VAL_RESTORE_MASK;
1912                        v |= vg->saved_context[i].val;
1913                        if (v != value) {
1914                                writel(v, reg);
1915                                dev_dbg(dev, "restored pin %d val %#08x\n",
1916                                        i, v);
1917                        }
1918                }
1919        }
1920
1921        return 0;
1922}
1923#endif
1924
1925#ifdef CONFIG_PM
1926static int byt_gpio_runtime_suspend(struct device *dev)
1927{
1928        return 0;
1929}
1930
1931static int byt_gpio_runtime_resume(struct device *dev)
1932{
1933        return 0;
1934}
1935#endif
1936
1937static const struct dev_pm_ops byt_gpio_pm_ops = {
1938        SET_LATE_SYSTEM_SLEEP_PM_OPS(byt_gpio_suspend, byt_gpio_resume)
1939        SET_RUNTIME_PM_OPS(byt_gpio_runtime_suspend, byt_gpio_runtime_resume,
1940                           NULL)
1941};
1942
1943static struct platform_driver byt_gpio_driver = {
1944        .probe          = byt_pinctrl_probe,
1945        .driver         = {
1946                .name                   = "byt_gpio",
1947                .pm                     = &byt_gpio_pm_ops,
1948                .suppress_bind_attrs    = true,
1949
1950                .acpi_match_table = ACPI_PTR(byt_gpio_acpi_match),
1951        },
1952};
1953
1954static int __init byt_gpio_init(void)
1955{
1956        return platform_driver_register(&byt_gpio_driver);
1957}
1958subsys_initcall(byt_gpio_init);
1959