| // SPDX-License-Identifier: GPL-2.0 |
| /* |
| * Synaptics AS390 pinctrl driver |
| * |
| * Copyright (C) 2018 Synaptics Incorporated |
| * |
| * Author: Jisheng Zhang <jszhang@kernel.org> |
| */ |
| |
| #include <linux/init.h> |
| #include <linux/of_device.h> |
| #include <linux/platform_device.h> |
| #include <linux/regmap.h> |
| |
| #include "berlin.h" |
| |
| static const struct berlin_desc_group as390_soc_pinctrl_groups[] = { |
| BERLIN_PINCTRL_GROUP("DMIC0_CLK", 0x0, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "dmic0"), /* CLK */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO27 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "i2s2"), /* MCLK */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "i2srx2")), /* WS */ |
| BERLIN_PINCTRL_GROUP("DMIC0_DAT", 0x4, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "dmic0"), /* DAT */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO26 */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "i2srx2")), /* SCK */ |
| BERLIN_PINCTRL_GROUP("DMIC1_CLK", 0x8, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "dmic1"), /* CLK */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "GPIO"), /* GPIO25 */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "i2srx2")), /* SD */ |
| BERLIN_PINCTRL_GROUP("DMIC1_DAT", 0xc, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "dmic1"), /* DAT */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO24 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "i2stx2")), /* SD */ |
| BERLIN_PINCTRL_GROUP("DMIC2_DAT", 0x10, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "dmic2"), /* DAT */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO29 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "i2stx2")), /* WS */ |
| BERLIN_PINCTRL_GROUP("DMIC3_DAT", 0x14, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "dmic3"), /* DAT */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO28 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "i2stx2")), /* SCK */ |
| BERLIN_PINCTRL_GROUP("LEDPWM0_R", 0x18, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "ledpwm0"), /* R */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO23 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS10 */ |
| BERLIN_PINCTRL_GROUP("LEDPWM0_G", 0x1c, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "ledpwm0"), /* G */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO22 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS11 */ |
| BERLIN_PINCTRL_GROUP("LEDPWM0_B", 0x20, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "ledpwm0"), /* B */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO21 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS12 */ |
| BERLIN_PINCTRL_GROUP("LEDPWM1_R", 0x24, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "ledpwm1"), /* R */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO20 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS13 */ |
| BERLIN_PINCTRL_GROUP("LEDPWM1_G", 0x28, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "ledpwm1"), /* G */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO19 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS14 */ |
| BERLIN_PINCTRL_GROUP("LEDPWM1_B", 0x2c, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "ledpwm1"), /* B */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO18 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS15 */ |
| BERLIN_PINCTRL_GROUP("I3C0_SCL", 0x30, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i3c0"), /* SCL */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio")), /* GPIO31 */ |
| BERLIN_PINCTRL_GROUP("I3C0_SDA", 0x34, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i3c0"), /* SDA */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio")), /* GPIO30 */ |
| BERLIN_PINCTRL_GROUP("I2SRX0_SCK", 0x38, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i2srx0"), /* SCK */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO33 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS16 */ |
| BERLIN_PINCTRL_GROUP("I2SRX0_WS", 0x3c, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i2srx0"), /* WS */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO32 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS17 */ |
| BERLIN_PINCTRL_GROUP("I2SRX0_SD", 0x40, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i2srx0"), /* SD */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO45 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS18 */ |
| BERLIN_PINCTRL_GROUP("I2STX0_SCK", 0x44, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i2stx0"), /* SCK */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO44 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS19 */ |
| BERLIN_PINCTRL_GROUP("I2STX0_WS", 0x48, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i2stx0"), /* WS */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO43 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS20 */ |
| BERLIN_PINCTRL_GROUP("I2STX0_SD", 0x4c, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i2stx0"), /* SD */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO42 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS21 */ |
| BERLIN_PINCTRL_GROUP("I2S0_MCLK", 0x50, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i2s0"), /* MCLK */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO41 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS22 */ |
| BERLIN_PINCTRL_GROUP("I2SRX1_SCK", 0x54, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i2srx1"), /* SCK */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO40 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS23 */ |
| BERLIN_PINCTRL_GROUP("I2SRX1_WS", 0x58, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i2srx1"), /* WS */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO39 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS24 */ |
| BERLIN_PINCTRL_GROUP("I2SRX1_SD", 0x5c, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i2srx1"), /* SD */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "nand"), /* GPIO38 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS25 */ |
| BERLIN_PINCTRL_GROUP("I2STX1_SCK", 0x60, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i2stx1"), /* SCK */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO37 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "sd0"), /* WP */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS26 */ |
| BERLIN_PINCTRL_GROUP("I2STX1_WS", 0x64, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i2stx1"), /* WS */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO36 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "sd0"), /* CDn */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS27 */ |
| BERLIN_PINCTRL_GROUP("I2STX1_SD", 0x68, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i2stx1"), /* SD */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO35 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS28 */ |
| BERLIN_PINCTRL_GROUP("I2S1_MCLK", 0x6c, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i2s1"), /* MCLK */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO34 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS29 */ |
| BERLIN_PINCTRL_GROUP("NAND_RDY", 0x70, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "nand"), /* RDY */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO62 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "ospi")), /* DQS_B */ |
| BERLIN_PINCTRL_GROUP("NAND_CEn", 0x74, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "nand"), /* CEn */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO61 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "ospi")), /* SCLK_B */ |
| BERLIN_PINCTRL_GROUP("NAND_WPn", 0x78, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "nand"), /* WPn */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO60 */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "emmc")), /* CLK */ |
| BERLIN_PINCTRL_GROUP("NAND_REn", 0x7c, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "nand"), /* REn */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO59 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "ospi")), /* SS0n_B */ |
| BERLIN_PINCTRL_GROUP("NAND_WEn", 0x80, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "nand"), /* WEn */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO58 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "ospi")), /* SS1n_B */ |
| BERLIN_PINCTRL_GROUP("NAND_CLE", 0x84, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "nand"), /* CLE */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO57 */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "emmc")), /* CMD */ |
| BERLIN_PINCTRL_GROUP("NAND_ALE", 0x88, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "nand"), /* ALE */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO56 */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "emmc")), /* RSTn */ |
| BERLIN_PINCTRL_GROUP("NAND_IO7", 0x8c, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "nand"), /* IO7 */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO55 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "ospi"), /* DQ7_B */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "emmc")), /* DATA3 */ |
| BERLIN_PINCTRL_GROUP("NAND_IO6", 0x90, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "nand"), /* IO6 */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO54 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "ospi"), /* DQ6_B */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "emmc")), /* DATA2 */ |
| BERLIN_PINCTRL_GROUP("NAND_IO5", 0x94, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "nand"), /* IO5 */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO53 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "ospi"), /* DQ5_B */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "emmc")), /* DATA1 */ |
| BERLIN_PINCTRL_GROUP("NAND_IO4", 0x98, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "nand"), /* IO4 */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO52 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "ospi"), /* DQ4_B */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "emmc")), /* DATA0 */ |
| BERLIN_PINCTRL_GROUP("NAND_IO3", 0x9c, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "nand"), /* IO3 */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO51 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "ospi"), /* DQ3_B */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "emmc")), /* DATA7 */ |
| BERLIN_PINCTRL_GROUP("NAND_IO2", 0xa0, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "nand"), /* IO2 */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO50 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "ospi"), /* DQ2_B */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "emmc")), /* DATA6 */ |
| BERLIN_PINCTRL_GROUP("NAND_IO1", 0xa4, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "nand"), /* IO1 */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO49 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "ospi"), /* DQ1_B */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "emmc")), /* DATA5 */ |
| BERLIN_PINCTRL_GROUP("NAND_IO0", 0xa8, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "nand"), /* IO0 */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO48 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "ospi"), /* DQ0_B */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "emmc")), /* DATA4 */ |
| BERLIN_PINCTRL_GROUP("RSTOn", 0xac, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "rst"), /* ON */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio")), /* GPIO47 */ |
| BERLIN_PINCTRL_GROUP("PWR_OK", 0xb0, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "pwr"), /* OK */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio")), /* GPIO46 */ |
| BERLIN_PINCTRL_GROUP("SD0_CLK", 0xb4, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), /* GPIO12 */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "syspll"), /* TESTA */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "sd0"), /* CLK */ |
| BERLIN_PINCTRL_FUNCTION(0x4, "mempll"), /* LOCK */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg"), /* CLK */ |
| BERLIN_PINCTRL_FUNCTION(0x6, "apll")), /* OUT */ |
| BERLIN_PINCTRL_GROUP("SD0_DAT0", 0xb8, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "porcore"), /* RSTn */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "syspll"), /* TESTB */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "sd0"), /* DAT0 */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "gpio"), /* GPIO13 */ |
| BERLIN_PINCTRL_FUNCTION(0x4, "mempll"), /* OUT */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg"), /* BUS0 */ |
| BERLIN_PINCTRL_FUNCTION(0x6, "apll")), /* LOCK */ |
| BERLIN_PINCTRL_GROUP("SD0_DAT1", 0xbc, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "porio_1p8"), /* RSTn */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "apll"), /* TESTA */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "sd0"), /* DAT1 */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "gpio"), /* GPIO14 */ |
| BERLIN_PINCTRL_FUNCTION(0x4, "cpupll"), /* OUT */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS1 */ |
| BERLIN_PINCTRL_GROUP("SD0_DAT2", 0xc0, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), /* GPIO15 */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "syspll"), /* OUT */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "sd0"), /* DAT2 */ |
| BERLIN_PINCTRL_FUNCTION(0x4, "cpupll"), /* LOCK */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS2 */ |
| BERLIN_PINCTRL_GROUP("SD0_DAT3", 0xc4, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), /* GPIO16 */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "apll"), /* OUT */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "sd0"), /* DAT3 */ |
| BERLIN_PINCTRL_FUNCTION(0x4, "dsppll"), /* LOCK */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS3 */ |
| BERLIN_PINCTRL_GROUP("SD0_CMD", 0xc8, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), /* GPIO17 */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "apll"), /* TESTB */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "sd0"), /* CMD */ |
| BERLIN_PINCTRL_FUNCTION(0x4, "dsppll"), /* OUT */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS4 */ |
| BERLIN_PINCTRL_GROUP("CLKO_FT", 0xcc, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "clko"), /* FT */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO7 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "rcosc"), /* CLK */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS5 */ |
| BERLIN_PINCTRL_GROUP("UART1_TX", 0xd0, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "uart1"), /* TX */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO11 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS6 */ |
| BERLIN_PINCTRL_GROUP("UART1_RX", 0xd4, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "uart1"), /* RX */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO10 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS7 */ |
| BERLIN_PINCTRL_GROUP("UART1_CTSn", 0xd8, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "uart1"), /* CTSn */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO9 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "dmic2"), /* CLK */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS8 */ |
| BERLIN_PINCTRL_GROUP("UART1_RTSn", 0xdc, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "uart1"), /* RTSn */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO8 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "dmic3"), /* CLK */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS9 */ |
| BERLIN_PINCTRL_GROUP("SPI_SS0n", 0xe0, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "ospi"), /* SS0n_A */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO68 */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "spi")), /* SS0n */ |
| BERLIN_PINCTRL_GROUP("SPI_SS1n", 0xe4, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "ospi"), /* DQ2_A */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO67 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "ospi_ss1"), /* SS1n_A */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "spi"), /* SS1n */ |
| BERLIN_PINCTRL_FUNCTION(0x4, "spi_s")), /* SSn */ |
| BERLIN_PINCTRL_GROUP("SPI_SS2n", 0xe8, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "ospi"), /* DQ3_A */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO66 */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "spi"), /* SS2n */ |
| BERLIN_PINCTRL_FUNCTION(0x4, "spi_s")), /* SCLK */ |
| BERLIN_PINCTRL_GROUP("SPI_SCLK", 0xec, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "ospi"), /* SCLK_A */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO65 */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "spi")), /* SCLK */ |
| BERLIN_PINCTRL_GROUP("SPI_DO", 0xf0, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "ospi"), /* DQ0_A */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO64 */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "spi"), /* DO */ |
| BERLIN_PINCTRL_FUNCTION(0x4, "spi_s")), /* DO */ |
| BERLIN_PINCTRL_GROUP("SPI_DI", 0xf4, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "ospi"), /* DQ1_A */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO63 */ |
| BERLIN_PINCTRL_FUNCTION(0x3, "spi"), /* DI */ |
| BERLIN_PINCTRL_FUNCTION(0x4, "spi_s")), /* DI */ |
| BERLIN_PINCTRL_GROUP("I3C1_SCL", 0xf8, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i3c1"), /* SCL */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio")), /* GPIO3 */ |
| BERLIN_PINCTRL_GROUP("I3C1_SDA", 0xfc, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "i3c1"), /* SDA */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio")), /* GPIO4 */ |
| BERLIN_PINCTRL_GROUP("UART0_TX", 0x100, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "uart0"), /* TX */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO5 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS30 */ |
| BERLIN_PINCTRL_GROUP("UART0_RX", 0x104, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "uart0"), /* RX */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO6 */ |
| BERLIN_PINCTRL_FUNCTION(0x5, "dbg")), /* BUS31 */ |
| BERLIN_PINCTRL_GROUP("TMS", 0x108, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "jtag"), /* TMS */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO0 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "sd1")), /* WP */ |
| BERLIN_PINCTRL_GROUP("TDI", 0x10c, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "jtag"), /* TDI */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO1 */ |
| BERLIN_PINCTRL_FUNCTION(0x2, "sd1")), /* CDn */ |
| BERLIN_PINCTRL_GROUP("TDO", 0x110, 0x3, 0x00, |
| BERLIN_PINCTRL_FUNCTION(0x0, "jtag"), /* DTO */ |
| BERLIN_PINCTRL_FUNCTION(0x1, "gpio")), /* GPIO2 */ |
| }; |
| |
| static const struct berlin_pinctrl_desc as390_soc_pinctrl_data = { |
| .groups = as390_soc_pinctrl_groups, |
| .ngroups = ARRAY_SIZE(as390_soc_pinctrl_groups), |
| }; |
| |
| static const struct of_device_id as390_pinctrl_match[] = { |
| { |
| .compatible = "syna,as390-soc-pinctrl", |
| .data = &as390_soc_pinctrl_data, |
| }, |
| {} |
| }; |
| |
| static int as390_pinctrl_probe(struct platform_device *pdev) |
| { |
| const struct of_device_id *match = |
| of_match_device(as390_pinctrl_match, &pdev->dev); |
| struct regmap_config *rmconfig; |
| struct regmap *regmap; |
| struct resource *res; |
| void __iomem *base; |
| |
| rmconfig = devm_kzalloc(&pdev->dev, sizeof(*rmconfig), GFP_KERNEL); |
| if (!rmconfig) |
| return -ENOMEM; |
| |
| res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| base = devm_ioremap_resource(&pdev->dev, res); |
| if (IS_ERR(base)) |
| return PTR_ERR(base); |
| |
| rmconfig->reg_bits = 32, |
| rmconfig->val_bits = 32, |
| rmconfig->reg_stride = 4, |
| rmconfig->max_register = resource_size(res); |
| |
| regmap = devm_regmap_init_mmio(&pdev->dev, base, rmconfig); |
| if (IS_ERR(regmap)) |
| return PTR_ERR(regmap); |
| |
| return berlin_pinctrl_probe_regmap(pdev, match->data, regmap); |
| } |
| |
| static struct platform_driver as390_pinctrl_driver = { |
| .probe = as390_pinctrl_probe, |
| .driver = { |
| .name = "as390-pinctrl", |
| .of_match_table = as390_pinctrl_match, |
| }, |
| }; |
| builtin_platform_driver(as390_pinctrl_driver); |