blob: f40a60126d8d14d64dedcc681e786e97e05675f9 [file] [log] [blame]
// 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);