// SPDX-License-Identifier: GPL-2.0 // // Copyright (C) 2016 Freescale Semiconductor, Inc. // Copyright 2017-2018 NXP. #include <linux/err.h> #include <linux/init.h> #include <linux/io.h> #include <linux/module.h> #include <linux/mod_devicetable.h> #include <linux/platform_device.h> #include <linux/pinctrl/pinctrl.h> #include "pinctrl-imx.h" enum imx6sll_pads { MX6SLL_PAD_RESERVE0 = 0, MX6SLL_PAD_RESERVE1 = 1, MX6SLL_PAD_RESERVE2 = 2, MX6SLL_PAD_RESERVE3 = 3, MX6SLL_PAD_RESERVE4 = 4, MX6SLL_PAD_WDOG_B = 5, MX6SLL_PAD_REF_CLK_24M = 6, MX6SLL_PAD_REF_CLK_32K = 7, MX6SLL_PAD_PWM1 = 8, MX6SLL_PAD_KEY_COL0 = 9, MX6SLL_PAD_KEY_ROW0 = 10, MX6SLL_PAD_KEY_COL1 = 11, MX6SLL_PAD_KEY_ROW1 = 12, MX6SLL_PAD_KEY_COL2 = 13, MX6SLL_PAD_KEY_ROW2 = 14, MX6SLL_PAD_KEY_COL3 = 15, MX6SLL_PAD_KEY_ROW3 = 16, MX6SLL_PAD_KEY_COL4 = 17, MX6SLL_PAD_KEY_ROW4 = 18, MX6SLL_PAD_KEY_COL5 = 19, MX6SLL_PAD_KEY_ROW5 = 20, MX6SLL_PAD_KEY_COL6 = 21, MX6SLL_PAD_KEY_ROW6 = 22, MX6SLL_PAD_KEY_COL7 = 23, MX6SLL_PAD_KEY_ROW7 = 24, MX6SLL_PAD_EPDC_DATA00 = 25, MX6SLL_PAD_EPDC_DATA01 = 26, MX6SLL_PAD_EPDC_DATA02 = 27, MX6SLL_PAD_EPDC_DATA03 = 28, MX6SLL_PAD_EPDC_DATA04 = 29, MX6SLL_PAD_EPDC_DATA05 = 30, MX6SLL_PAD_EPDC_DATA06 = 31, MX6SLL_PAD_EPDC_DATA07 = 32, MX6SLL_PAD_EPDC_DATA08 = 33, MX6SLL_PAD_EPDC_DATA09 = 34, MX6SLL_PAD_EPDC_DATA10 = 35, MX6SLL_PAD_EPDC_DATA11 = 36, MX6SLL_PAD_EPDC_DATA12 = 37, MX6SLL_PAD_EPDC_DATA13 = 38, MX6SLL_PAD_EPDC_DATA14 = 39, MX6SLL_PAD_EPDC_DATA15 = 40, MX6SLL_PAD_EPDC_SDCLK = 41, MX6SLL_PAD_EPDC_SDLE = 42, MX6SLL_PAD_EPDC_SDOE = 43, MX6SLL_PAD_EPDC_SDSHR = 44, MX6SLL_PAD_EPDC_SDCE0 = 45, MX6SLL_PAD_EPDC_SDCE1 = 46, MX6SLL_PAD_EPDC_SDCE2 = 47, MX6SLL_PAD_EPDC_SDCE3 = 48, MX6SLL_PAD_EPDC_GDCLK = 49, MX6SLL_PAD_EPDC_GDOE = 50, MX6SLL_PAD_EPDC_GDRL = 51, MX6SLL_PAD_EPDC_GDSP = 52, MX6SLL_PAD_EPDC_VCOM0 = 53, MX6SLL_PAD_EPDC_VCOM1 = 54, MX6SLL_PAD_EPDC_BDR0 = 55, MX6SLL_PAD_EPDC_BDR1 = 56, MX6SLL_PAD_EPDC_PWR_CTRL0 = 57, MX6SLL_PAD_EPDC_PWR_CTRL1 = 58, MX6SLL_PAD_EPDC_PWR_CTRL2 = 59, MX6SLL_PAD_EPDC_PWR_CTRL3 = 60, MX6SLL_PAD_EPDC_PWR_COM = 61, MX6SLL_PAD_EPDC_PWR_INT = 62, MX6SLL_PAD_EPDC_PWR_STAT = 63, MX6SLL_PAD_EPDC_PWR_WAKE = 64, MX6SLL_PAD_LCD_CLK = 65, MX6SLL_PAD_LCD_ENABLE = 66, MX6SLL_PAD_LCD_HSYNC = 67, MX6SLL_PAD_LCD_VSYNC = 68, MX6SLL_PAD_LCD_RESET = 69, MX6SLL_PAD_LCD_DATA00 = 70, MX6SLL_PAD_LCD_DATA01 = 71, MX6SLL_PAD_LCD_DATA02 = 72, MX6SLL_PAD_LCD_DATA03 = 73, MX6SLL_PAD_LCD_DATA04 = 74, MX6SLL_PAD_LCD_DATA05 = 75, MX6SLL_PAD_LCD_DATA06 = 76, MX6SLL_PAD_LCD_DATA07 = 77, MX6SLL_PAD_LCD_DATA08 = 78, MX6SLL_PAD_LCD_DATA09 = 79, MX6SLL_PAD_LCD_DATA10 = 80, MX6SLL_PAD_LCD_DATA11 = 81, MX6SLL_PAD_LCD_DATA12 = 82, MX6SLL_PAD_LCD_DATA13 = 83, MX6SLL_PAD_LCD_DATA14 = 84, MX6SLL_PAD_LCD_DATA15 = 85, MX6SLL_PAD_LCD_DATA16 = 86, MX6SLL_PAD_LCD_DATA17 = 87, MX6SLL_PAD_LCD_DATA18 = 88, MX6SLL_PAD_LCD_DATA19 = 89, MX6SLL_PAD_LCD_DATA20 = 90, MX6SLL_PAD_LCD_DATA21 = 91, MX6SLL_PAD_LCD_DATA22 = 92, MX6SLL_PAD_LCD_DATA23 = 93, MX6SLL_PAD_AUD_RXFS = 94, MX6SLL_PAD_AUD_RXC = 95, MX6SLL_PAD_AUD_RXD = 96, MX6SLL_PAD_AUD_TXC = 97, MX6SLL_PAD_AUD_TXFS = 98, MX6SLL_PAD_AUD_TXD = 99, MX6SLL_PAD_AUD_MCLK = 100, MX6SLL_PAD_UART1_RXD = 101, MX6SLL_PAD_UART1_TXD = 102, MX6SLL_PAD_I2C1_SCL = 103, MX6SLL_PAD_I2C1_SDA = 104, MX6SLL_PAD_I2C2_SCL = 105, MX6SLL_PAD_I2C2_SDA = 106, MX6SLL_PAD_ECSPI1_SCLK = 107, MX6SLL_PAD_ECSPI1_MOSI = 108, MX6SLL_PAD_ECSPI1_MISO = 109, MX6SLL_PAD_ECSPI1_SS0 = 110, MX6SLL_PAD_ECSPI2_SCLK = 111, MX6SLL_PAD_ECSPI2_MOSI = 112, MX6SLL_PAD_ECSPI2_MISO = 113, MX6SLL_PAD_ECSPI2_SS0 = 114, MX6SLL_PAD_SD1_CLK = 115, MX6SLL_PAD_SD1_CMD = 116, MX6SLL_PAD_SD1_DATA0 = 117, MX6SLL_PAD_SD1_DATA1 = 118, MX6SLL_PAD_SD1_DATA2 = 119, MX6SLL_PAD_SD1_DATA3 = 120, MX6SLL_PAD_SD1_DATA4 = 121, MX6SLL_PAD_SD1_DATA5 = 122, MX6SLL_PAD_SD1_DATA6 = 123, MX6SLL_PAD_SD1_DATA7 = 124, MX6SLL_PAD_SD2_RESET = 125, MX6SLL_PAD_SD2_CLK = 126, MX6SLL_PAD_SD2_CMD = 127, MX6SLL_PAD_SD2_DATA0 = 128, MX6SLL_PAD_SD2_DATA1 = 129, MX6SLL_PAD_SD2_DATA2 = 130, MX6SLL_PAD_SD2_DATA3 = 131, MX6SLL_PAD_SD2_DATA4 = 132, MX6SLL_PAD_SD2_DATA5 = 133, MX6SLL_PAD_SD2_DATA6 = 134, MX6SLL_PAD_SD2_DATA7 = 135, MX6SLL_PAD_SD3_CLK = 136, MX6SLL_PAD_SD3_CMD = 137, MX6SLL_PAD_SD3_DATA0 = 138, MX6SLL_PAD_SD3_DATA1 = 139, MX6SLL_PAD_SD3_DATA2 = 140, MX6SLL_PAD_SD3_DATA3 = 141, MX6SLL_PAD_GPIO4_IO20 = 142, MX6SLL_PAD_GPIO4_IO21 = 143, MX6SLL_PAD_GPIO4_IO19 = 144, MX6SLL_PAD_GPIO4_IO25 = 145, MX6SLL_PAD_GPIO4_IO18 = 146, MX6SLL_PAD_GPIO4_IO24 = 147, MX6SLL_PAD_GPIO4_IO23 = 148, MX6SLL_PAD_GPIO4_IO17 = 149, MX6SLL_PAD_GPIO4_IO22 = 150, MX6SLL_PAD_GPIO4_IO16 = 151, MX6SLL_PAD_GPIO4_IO26 = 152, }; /* Pad names for the pinmux subsystem */ static const struct pinctrl_pin_desc imx6sll_pinctrl_pads[] = { IMX_PINCTRL_PIN(MX6SLL_PAD_RESERVE0), IMX_PINCTRL_PIN(MX6SLL_PAD_RESERVE1), IMX_PINCTRL_PIN(MX6SLL_PAD_RESERVE2), IMX_PINCTRL_PIN(MX6SLL_PAD_RESERVE3), IMX_PINCTRL_PIN(MX6SLL_PAD_RESERVE4), IMX_PINCTRL_PIN(MX6SLL_PAD_WDOG_B), IMX_PINCTRL_PIN(MX6SLL_PAD_REF_CLK_24M), IMX_PINCTRL_PIN(MX6SLL_PAD_REF_CLK_32K), IMX_PINCTRL_PIN(MX6SLL_PAD_PWM1), IMX_PINCTRL_PIN(MX6SLL_PAD_KEY_COL0), IMX_PINCTRL_PIN(MX6SLL_PAD_KEY_ROW0), IMX_PINCTRL_PIN(MX6SLL_PAD_KEY_COL1), IMX_PINCTRL_PIN(MX6SLL_PAD_KEY_ROW1), IMX_PINCTRL_PIN(MX6SLL_PAD_KEY_COL2), IMX_PINCTRL_PIN(MX6SLL_PAD_KEY_ROW2), IMX_PINCTRL_PIN(MX6SLL_PAD_KEY_COL3), IMX_PINCTRL_PIN(MX6SLL_PAD_KEY_ROW3), IMX_PINCTRL_PIN(MX6SLL_PAD_KEY_COL4), IMX_PINCTRL_PIN(MX6SLL_PAD_KEY_ROW4), IMX_PINCTRL_PIN(MX6SLL_PAD_KEY_COL5), IMX_PINCTRL_PIN(MX6SLL_PAD_KEY_ROW5), IMX_PINCTRL_PIN(MX6SLL_PAD_KEY_COL6), IMX_PINCTRL_PIN(MX6SLL_PAD_KEY_ROW6), IMX_PINCTRL_PIN(MX6SLL_PAD_KEY_COL7), IMX_PINCTRL_PIN(MX6SLL_PAD_KEY_ROW7), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_DATA00), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_DATA01), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_DATA02), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_DATA03), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_DATA04), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_DATA05), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_DATA06), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_DATA07), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_DATA08), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_DATA09), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_DATA10), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_DATA11), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_DATA12), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_DATA13), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_DATA14), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_DATA15), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_SDCLK), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_SDLE), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_SDOE), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_SDSHR), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_SDCE0), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_SDCE1), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_SDCE2), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_SDCE3), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_GDCLK), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_GDOE), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_GDRL), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_GDSP), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_VCOM0), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_VCOM1), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_BDR0), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_BDR1), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_PWR_CTRL0), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_PWR_CTRL1), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_PWR_CTRL2), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_PWR_CTRL3), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_PWR_COM), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_PWR_INT), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_PWR_STAT), IMX_PINCTRL_PIN(MX6SLL_PAD_EPDC_PWR_WAKE), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_CLK), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_ENABLE), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_HSYNC), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_VSYNC), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_RESET), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA00), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA01), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA02), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA03), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA04), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA05), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA06), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA07), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA08), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA09), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA10), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA11), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA12), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA13), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA14), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA15), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA16), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA17), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA18), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA19), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA20), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA21), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA22), IMX_PINCTRL_PIN(MX6SLL_PAD_LCD_DATA23), IMX_PINCTRL_PIN(MX6SLL_PAD_AUD_RXFS), IMX_PINCTRL_PIN(MX6SLL_PAD_AUD_RXC), IMX_PINCTRL_PIN(MX6SLL_PAD_AUD_RXD), IMX_PINCTRL_PIN(MX6SLL_PAD_AUD_TXC), IMX_PINCTRL_PIN(MX6SLL_PAD_AUD_TXFS), IMX_PINCTRL_PIN(MX6SLL_PAD_AUD_TXD), IMX_PINCTRL_PIN(MX6SLL_PAD_AUD_MCLK), IMX_PINCTRL_PIN(MX6SLL_PAD_UART1_RXD), IMX_PINCTRL_PIN(MX6SLL_PAD_UART1_TXD), IMX_PINCTRL_PIN(MX6SLL_PAD_I2C1_SCL), IMX_PINCTRL_PIN(MX6SLL_PAD_I2C1_SDA), IMX_PINCTRL_PIN(MX6SLL_PAD_I2C2_SCL), IMX_PINCTRL_PIN(MX6SLL_PAD_I2C2_SDA), IMX_PINCTRL_PIN(MX6SLL_PAD_ECSPI1_SCLK), IMX_PINCTRL_PIN(MX6SLL_PAD_ECSPI1_MOSI), IMX_PINCTRL_PIN(MX6SLL_PAD_ECSPI1_MISO), IMX_PINCTRL_PIN(MX6SLL_PAD_ECSPI1_SS0), IMX_PINCTRL_PIN(MX6SLL_PAD_ECSPI2_SCLK), IMX_PINCTRL_PIN(MX6SLL_PAD_ECSPI2_MOSI), IMX_PINCTRL_PIN(MX6SLL_PAD_ECSPI2_MISO), IMX_PINCTRL_PIN(MX6SLL_PAD_ECSPI2_SS0), IMX_PINCTRL_PIN(MX6SLL_PAD_SD1_CLK), IMX_PINCTRL_PIN(MX6SLL_PAD_SD1_CMD), IMX_PINCTRL_PIN(MX6SLL_PAD_SD1_DATA0), IMX_PINCTRL_PIN(MX6SLL_PAD_SD1_DATA1), IMX_PINCTRL_PIN(MX6SLL_PAD_SD1_DATA2), IMX_PINCTRL_PIN(MX6SLL_PAD_SD1_DATA3), IMX_PINCTRL_PIN(MX6SLL_PAD_SD1_DATA4), IMX_PINCTRL_PIN(MX6SLL_PAD_SD1_DATA5), IMX_PINCTRL_PIN(MX6SLL_PAD_SD1_DATA6), IMX_PINCTRL_PIN(MX6SLL_PAD_SD1_DATA7), IMX_PINCTRL_PIN(MX6SLL_PAD_SD2_RESET), IMX_PINCTRL_PIN(MX6SLL_PAD_SD2_CLK), IMX_PINCTRL_PIN(MX6SLL_PAD_SD2_CMD), IMX_PINCTRL_PIN(MX6SLL_PAD_SD2_DATA0), IMX_PINCTRL_PIN(MX6SLL_PAD_SD2_DATA1), IMX_PINCTRL_PIN(MX6SLL_PAD_SD2_DATA2), IMX_PINCTRL_PIN(MX6SLL_PAD_SD2_DATA3), IMX_PINCTRL_PIN(MX6SLL_PAD_SD2_DATA4), IMX_PINCTRL_PIN(MX6SLL_PAD_SD2_DATA5), IMX_PINCTRL_PIN(MX6SLL_PAD_SD2_DATA6), IMX_PINCTRL_PIN(MX6SLL_PAD_SD2_DATA7), IMX_PINCTRL_PIN(MX6SLL_PAD_SD3_CLK), IMX_PINCTRL_PIN(MX6SLL_PAD_SD3_CMD), IMX_PINCTRL_PIN(MX6SLL_PAD_SD3_DATA0), IMX_PINCTRL_PIN(MX6SLL_PAD_SD3_DATA1), IMX_PINCTRL_PIN(MX6SLL_PAD_SD3_DATA2), IMX_PINCTRL_PIN(MX6SLL_PAD_SD3_DATA3), IMX_PINCTRL_PIN(MX6SLL_PAD_GPIO4_IO20), IMX_PINCTRL_PIN(MX6SLL_PAD_GPIO4_IO21), IMX_PINCTRL_PIN(MX6SLL_PAD_GPIO4_IO19), IMX_PINCTRL_PIN(MX6SLL_PAD_GPIO4_IO25), IMX_PINCTRL_PIN(MX6SLL_PAD_GPIO4_IO18), IMX_PINCTRL_PIN(MX6SLL_PAD_GPIO4_IO24), IMX_PINCTRL_PIN(MX6SLL_PAD_GPIO4_IO23), IMX_PINCTRL_PIN(MX6SLL_PAD_GPIO4_IO17), IMX_PINCTRL_PIN(MX6SLL_PAD_GPIO4_IO22), IMX_PINCTRL_PIN(MX6SLL_PAD_GPIO4_IO16), IMX_PINCTRL_PIN(MX6SLL_PAD_GPIO4_IO26), }; static const struct imx_pinctrl_soc_info imx6sll_pinctrl_info = { .pins = imx6sll_pinctrl_pads, .npins = ARRAY_SIZE(imx6sll_pinctrl_pads), .gpr_compatible = "fsl,imx6sll-iomuxc-gpr", }; static const struct of_device_id imx6sll_pinctrl_of_match[] = { { .compatible = "fsl,imx6sll-iomuxc", .data = &imx6sll_pinctrl_info, }, { /* sentinel */ } }; static int imx6sll_pinctrl_probe(struct platform_device *pdev) { return imx_pinctrl_probe(pdev, &imx6sll_pinctrl_info); } static struct platform_driver imx6sll_pinctrl_driver = { .driver = { .name = "imx6sll-pinctrl", .of_match_table = imx6sll_pinctrl_of_match, .suppress_bind_attrs = true, }, .probe = imx6sll_pinctrl_probe, }; static int __init imx6sll_pinctrl_init(void) { return platform_driver_register(&imx6sll_pinctrl_driver); } arch_initcall(imx6sll_pinctrl_init);