* [PATCH 1/2] dt-bindings: add binding for i.MX8MQ IOMUXC @ 2018-01-17 18:28 Lucas Stach 2018-01-17 18:28 ` [PATCH 2/2] pinctrl: imx: add driver for i.MX8MQ Lucas Stach 0 siblings, 1 reply; 4+ messages in thread From: Lucas Stach @ 2018-01-17 18:28 UTC (permalink / raw) To: Linus Walleij, Rob Herring, Mark Rutland Cc: linux-gpio, linux-arm-kernel, kernel, patchwork-lst This adds the binding for the i.MX8MQ pin controller, in the same fashion as earlier i.MX SoCs. Signed-off-by: Lucas Stach <l.stach@pengutronix.de> --- .../bindings/pinctrl/nxp,imx8mq-pinctrl.txt | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Documentation/devicetree/bindings/pinctrl/nxp,imx8mq-pinctrl.txt diff --git a/Documentation/devicetree/bindings/pinctrl/nxp,imx8mq-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/nxp,imx8mq-pinctrl.txt new file mode 100644 index 000000000000..2f7e88356321 --- /dev/null +++ b/Documentation/devicetree/bindings/pinctrl/nxp,imx8mq-pinctrl.txt @@ -0,0 +1,33 @@ +* NXP IMX8MQ IOMUX Controller + +Please refer to fsl,imx-pinctrl.txt in this directory for common binding part +and usage. + +Required properties: +- compatible: "nxp,imx8mq-iomuxc" +- fsl,pins: two integers array, represents a group of pins mux and config + setting. The format is fsl,pins = <PIN_FUNC_ID CONFIG>, PIN_FUNC_ID is a + pin working on a specific function, CONFIG is the pad setting value like + pull-up for this pin. Please refer to imx8mq datasheet for the valid pad + config settings. + +CONFIG bits definition: +PAD_CTL_LVTTL (1 << 8) +PAD_CTL_HYS (1 << 7) +PAD_CTL_PUE (1 << 6) +PAD_CTL_ODE (1 << 5) +PAD_CTL_SRE_MAX (3 << 3) +PAD_CTL_SRE_FAST (2 << 3) +PAD_CTL_SRE_MEDIUM (1 << 3) +PAD_CTL_SRE_SLOW (0 << 3) +PAD_CTL_DSE_DISABLE (0 << 0) +PAD_CTL_DSE_255ohm (1 << 0) +PAD_CTL_DSE_105ohm (2 << 0) +PAD_CTL_DSE_75ohm (3 << 0) +PAD_CTL_DSE_85ohm (4 << 0) +PAD_CTL_DSE_65ohm (5 << 0) +PAD_CTL_DSE_45ohm (6 << 0) +PAD_CTL_DSE_40ohm (7 << 0) + +Refer to imx8mq-pinfunc.h in device tree source folder for all available +imx8mq PIN_FUNC_ID. -- 2.11.0 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] pinctrl: imx: add driver for i.MX8MQ 2018-01-17 18:28 [PATCH 1/2] dt-bindings: add binding for i.MX8MQ IOMUXC Lucas Stach @ 2018-01-17 18:28 ` Lucas Stach 2018-01-18 12:41 ` stefan 0 siblings, 1 reply; 4+ messages in thread From: Lucas Stach @ 2018-01-17 18:28 UTC (permalink / raw) To: Linus Walleij, Rob Herring, Mark Rutland Cc: linux-gpio, linux-arm-kernel, kernel, patchwork-lst The i.MX8MQ pincontrol works in a similar way to the earlier i.MX SoCs. The driver code is largely copied from NXP's downstream driver written by Anson Huang. Only some small changes for upstream adaption are done by myself. Signed-off-by: Lucas Stach <l.stach@pengutronix.de> --- drivers/pinctrl/freescale/Kconfig | 7 + drivers/pinctrl/freescale/Makefile | 1 + drivers/pinctrl/freescale/pinctrl-imx8mq.c | 368 +++++++++++++++++++++++++++++ 3 files changed, 376 insertions(+) create mode 100644 drivers/pinctrl/freescale/pinctrl-imx8mq.c diff --git a/drivers/pinctrl/freescale/Kconfig b/drivers/pinctrl/freescale/Kconfig index 4dbc576ae27c..b0b62964e8ac 100644 --- a/drivers/pinctrl/freescale/Kconfig +++ b/drivers/pinctrl/freescale/Kconfig @@ -110,6 +110,13 @@ config PINCTRL_IMX7ULP help Say Y here to enable the imx7ulp pinctrl driver +config PINCTRL_IMX8MQ + bool "IMX8MQ pinctrl driver" + depends on SOC_IMX8MQ + select PINCTRL_IMX + help + Say Y here to enable the imx8mq pinctrl driver + config PINCTRL_VF610 bool "Freescale Vybrid VF610 pinctrl driver" depends on SOC_VF610 diff --git a/drivers/pinctrl/freescale/Makefile b/drivers/pinctrl/freescale/Makefile index 19bb9a55a567..2b2b89bb8454 100644 --- a/drivers/pinctrl/freescale/Makefile +++ b/drivers/pinctrl/freescale/Makefile @@ -16,6 +16,7 @@ obj-$(CONFIG_PINCTRL_IMX6SX) += pinctrl-imx6sx.o obj-$(CONFIG_PINCTRL_IMX6UL) += pinctrl-imx6ul.o obj-$(CONFIG_PINCTRL_IMX7D) += pinctrl-imx7d.o obj-$(CONFIG_PINCTRL_IMX7ULP) += pinctrl-imx7ulp.o +obj-$(CONFIG_PINCTRL_IMX8MQ) += pinctrl-imx8mq.o obj-$(CONFIG_PINCTRL_VF610) += pinctrl-vf610.o obj-$(CONFIG_PINCTRL_MXS) += pinctrl-mxs.o obj-$(CONFIG_PINCTRL_IMX23) += pinctrl-imx23.o diff --git a/drivers/pinctrl/freescale/pinctrl-imx8mq.c b/drivers/pinctrl/freescale/pinctrl-imx8mq.c new file mode 100644 index 000000000000..a469cc669a73 --- /dev/null +++ b/drivers/pinctrl/freescale/pinctrl-imx8mq.c @@ -0,0 +1,368 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * Copyright 2017 NXP + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include <linux/err.h> +#include <linux/init.h> +#include <linux/io.h> +#include <linux/of.h> +#include <linux/of_device.h> +#include <linux/pinctrl/pinctrl.h> + +#include "pinctrl-imx.h" + +enum imx8mq_pads { + MX8MQ_PAD_RESERVE0 = 0, + MX8MQ_PAD_RESERVE1 = 1, + MX8MQ_PAD_RESERVE2 = 2, + MX8MQ_PAD_RESERVE3 = 3, + MX8MQ_PAD_RESERVE4 = 4, + MX8MQ_IOMUXC_PMIC_STBY_REQ_CCMSRCGPCMIX = 5, + MX8MQ_IOMUXC_PMIC_ON_REQ_SNVSMIX = 6, + MX8MQ_IOMUXC_ONOFF_SNVSMIX = 7, + MX8MQ_IOMUXC_POR_B_SNVSMIX = 8, + MX8MQ_IOMUXC_RTC_RESET_B_SNVSMIX = 9, + MX8MQ_IOMUXC_GPIO1_IO00 = 10, + MX8MQ_IOMUXC_GPIO1_IO01 = 11, + MX8MQ_IOMUXC_GPIO1_IO02 = 12, + MX8MQ_IOMUXC_GPIO1_IO03 = 13, + MX8MQ_IOMUXC_GPIO1_IO04 = 14, + MX8MQ_IOMUXC_GPIO1_IO05 = 15, + MX8MQ_IOMUXC_GPIO1_IO06 = 16, + MX8MQ_IOMUXC_GPIO1_IO07 = 17, + MX8MQ_IOMUXC_GPIO1_IO08 = 18, + MX8MQ_IOMUXC_GPIO1_IO09 = 19, + MX8MQ_IOMUXC_GPIO1_IO10 = 20, + MX8MQ_IOMUXC_GPIO1_IO11 = 21, + MX8MQ_IOMUXC_GPIO1_IO12 = 22, + MX8MQ_IOMUXC_GPIO1_IO13 = 23, + MX8MQ_IOMUXC_GPIO1_IO14 = 24, + MX8MQ_IOMUXC_GPIO1_IO15 = 25, + MX8MQ_IOMUXC_ENET_MDC = 26, + MX8MQ_IOMUXC_ENET_MDIO = 27, + MX8MQ_IOMUXC_ENET_TD3 = 28, + MX8MQ_IOMUXC_ENET_TD2 = 29, + MX8MQ_IOMUXC_ENET_TD1 = 30, + MX8MQ_IOMUXC_ENET_TD0 = 31, + MX8MQ_IOMUXC_ENET_TX_CTL = 32, + MX8MQ_IOMUXC_ENET_TXC = 33, + MX8MQ_IOMUXC_ENET_RX_CTL = 34, + MX8MQ_IOMUXC_ENET_RXC = 35, + MX8MQ_IOMUXC_ENET_RD0 = 36, + MX8MQ_IOMUXC_ENET_RD1 = 37, + MX8MQ_IOMUXC_ENET_RD2 = 38, + MX8MQ_IOMUXC_ENET_RD3 = 39, + MX8MQ_IOMUXC_SD1_CLK = 40, + MX8MQ_IOMUXC_SD1_CMD = 41, + MX8MQ_IOMUXC_SD1_DATA0 = 42, + MX8MQ_IOMUXC_SD1_DATA1 = 43, + MX8MQ_IOMUXC_SD1_DATA2 = 44, + MX8MQ_IOMUXC_SD1_DATA3 = 45, + MX8MQ_IOMUXC_SD1_DATA4 = 46, + MX8MQ_IOMUXC_SD1_DATA5 = 47, + MX8MQ_IOMUXC_SD1_DATA6 = 48, + MX8MQ_IOMUXC_SD1_DATA7 = 49, + MX8MQ_IOMUXC_SD1_RESET_B = 50, + MX8MQ_IOMUXC_SD1_STROBE = 51, + MX8MQ_IOMUXC_SD2_CD_B = 52, + MX8MQ_IOMUXC_SD2_CLK = 53, + MX8MQ_IOMUXC_SD2_CMD = 54, + MX8MQ_IOMUXC_SD2_DATA0 = 55, + MX8MQ_IOMUXC_SD2_DATA1 = 56, + MX8MQ_IOMUXC_SD2_DATA2 = 57, + MX8MQ_IOMUXC_SD2_DATA3 = 58, + MX8MQ_IOMUXC_SD2_RESET_B = 59, + MX8MQ_IOMUXC_SD2_WP = 60, + MX8MQ_IOMUXC_NAND_ALE = 61, + MX8MQ_IOMUXC_NAND_CE0_B = 62, + MX8MQ_IOMUXC_NAND_CE1_B = 63, + MX8MQ_IOMUXC_NAND_CE2_B = 64, + MX8MQ_IOMUXC_NAND_CE3_B = 65, + MX8MQ_IOMUXC_NAND_CLE = 66, + MX8MQ_IOMUXC_NAND_DATA00 = 67, + MX8MQ_IOMUXC_NAND_DATA01 = 68, + MX8MQ_IOMUXC_NAND_DATA02 = 69, + MX8MQ_IOMUXC_NAND_DATA03 = 70, + MX8MQ_IOMUXC_NAND_DATA04 = 71, + MX8MQ_IOMUXC_NAND_DATA05 = 72, + MX8MQ_IOMUXC_NAND_DATA06 = 73, + MX8MQ_IOMUXC_NAND_DATA07 = 74, + MX8MQ_IOMUXC_NAND_DQS = 75, + MX8MQ_IOMUXC_NAND_RE_B = 76, + MX8MQ_IOMUXC_NAND_READY_B = 77, + MX8MQ_IOMUXC_NAND_WE_B = 78, + MX8MQ_IOMUXC_NAND_WP_B = 79, + MX8MQ_IOMUXC_SAI5_RXFS = 80, + MX8MQ_IOMUXC_SAI5_RXC = 81, + MX8MQ_IOMUXC_SAI5_RXD0 = 82, + MX8MQ_IOMUXC_SAI5_RXD1 = 83, + MX8MQ_IOMUXC_SAI5_RXD2 = 84, + MX8MQ_IOMUXC_SAI5_RXD3 = 85, + MX8MQ_IOMUXC_SAI5_MCLK = 86, + MX8MQ_IOMUXC_SAI1_RXFS = 87, + MX8MQ_IOMUXC_SAI1_RXC = 88, + MX8MQ_IOMUXC_SAI1_RXD0 = 89, + MX8MQ_IOMUXC_SAI1_RXD1 = 90, + MX8MQ_IOMUXC_SAI1_RXD2 = 91, + MX8MQ_IOMUXC_SAI1_RXD3 = 92, + MX8MQ_IOMUXC_SAI1_RXD4 = 93, + MX8MQ_IOMUXC_SAI1_RXD5 = 94, + MX8MQ_IOMUXC_SAI1_RXD6 = 95, + MX8MQ_IOMUXC_SAI1_RXD7 = 96, + MX8MQ_IOMUXC_SAI1_TXFS = 97, + MX8MQ_IOMUXC_SAI1_TXC = 98, + MX8MQ_IOMUXC_SAI1_TXD0 = 99, + MX8MQ_IOMUXC_SAI1_TXD1 = 100, + MX8MQ_IOMUXC_SAI1_TXD2 = 101, + MX8MQ_IOMUXC_SAI1_TXD3 = 102, + MX8MQ_IOMUXC_SAI1_TXD4 = 103, + MX8MQ_IOMUXC_SAI1_TXD5 = 104, + MX8MQ_IOMUXC_SAI1_TXD6 = 105, + MX8MQ_IOMUXC_SAI1_TXD7 = 106, + MX8MQ_IOMUXC_SAI1_MCLK = 107, + MX8MQ_IOMUXC_SAI2_RXFS = 108, + MX8MQ_IOMUXC_SAI2_RXC = 109, + MX8MQ_IOMUXC_SAI2_RXD0 = 110, + MX8MQ_IOMUXC_SAI2_TXFS = 111, + MX8MQ_IOMUXC_SAI2_TXC = 112, + MX8MQ_IOMUXC_SAI2_TXD0 = 113, + MX8MQ_IOMUXC_SAI2_MCLK = 114, + MX8MQ_IOMUXC_SAI3_RXFS = 115, + MX8MQ_IOMUXC_SAI3_RXC = 116, + MX8MQ_IOMUXC_SAI3_RXD = 117, + MX8MQ_IOMUXC_SAI3_TXFS = 118, + MX8MQ_IOMUXC_SAI3_TXC = 119, + MX8MQ_IOMUXC_SAI3_TXD = 120, + MX8MQ_IOMUXC_SAI3_MCLK = 121, + MX8MQ_IOMUXC_SPDIF_TX = 122, + MX8MQ_IOMUXC_SPDIF_RX = 123, + MX8MQ_IOMUXC_SPDIF_EXT_CLK = 124, + MX8MQ_IOMUXC_ECSPI1_SCLK = 125, + MX8MQ_IOMUXC_ECSPI1_MOSI = 126, + MX8MQ_IOMUXC_ECSPI1_MISO = 127, + MX8MQ_IOMUXC_ECSPI1_SS0 = 128, + MX8MQ_IOMUXC_ECSPI2_SCLK = 129, + MX8MQ_IOMUXC_ECSPI2_MOSI = 130, + MX8MQ_IOMUXC_ECSPI2_MISO = 131, + MX8MQ_IOMUXC_ECSPI2_SS0 = 132, + MX8MQ_IOMUXC_I2C1_SCL = 133, + MX8MQ_IOMUXC_I2C1_SDA = 134, + MX8MQ_IOMUXC_I2C2_SCL = 135, + MX8MQ_IOMUXC_I2C2_SDA = 136, + MX8MQ_IOMUXC_I2C3_SCL = 137, + MX8MQ_IOMUXC_I2C3_SDA = 138, + MX8MQ_IOMUXC_I2C4_SCL = 139, + MX8MQ_IOMUXC_I2C4_SDA = 140, + MX8MQ_IOMUXC_UART1_RXD = 141, + MX8MQ_IOMUXC_UART1_TXD = 142, + MX8MQ_IOMUXC_UART2_RXD = 143, + MX8MQ_IOMUXC_UART2_TXD = 144, + MX8MQ_IOMUXC_UART3_RXD = 145, + MX8MQ_IOMUXC_UART3_TXD = 146, + MX8MQ_IOMUXC_UART4_RXD = 147, + MX8MQ_IOMUXC_UART4_TXD = 148, +}; + +/* Pad names for the pinmux subsystem */ +static const struct pinctrl_pin_desc imx8mq_pinctrl_pads[] = { + IMX_PINCTRL_PIN(MX8MQ_PAD_RESERVE0), + IMX_PINCTRL_PIN(MX8MQ_PAD_RESERVE1), + IMX_PINCTRL_PIN(MX8MQ_PAD_RESERVE2), + IMX_PINCTRL_PIN(MX8MQ_PAD_RESERVE3), + IMX_PINCTRL_PIN(MX8MQ_PAD_RESERVE4), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_PMIC_STBY_REQ_CCMSRCGPCMIX), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_PMIC_ON_REQ_SNVSMIX), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ONOFF_SNVSMIX), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_POR_B_SNVSMIX), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_RTC_RESET_B_SNVSMIX), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO00), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO01), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO02), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO03), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO04), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO05), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO06), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO07), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO08), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO09), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO10), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO11), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO12), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO13), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO14), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO15), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_MDC), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_MDIO), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_TD3), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_TD2), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_TD1), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_TD0), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_TX_CTL), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_TXC), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_RX_CTL), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_RXC), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_RD0), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_RD1), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_RD2), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_RD3), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_CLK), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_CMD), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_DATA0), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_DATA1), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_DATA2), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_DATA3), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_DATA4), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_DATA5), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_DATA6), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_DATA7), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_RESET_B), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_STROBE), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_CD_B), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_CLK), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_CMD), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_DATA0), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_DATA1), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_DATA2), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_DATA3), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_RESET_B), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_WP), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_ALE), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_CE0_B), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_CE1_B), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_CE2_B), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_CE3_B), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_CLE), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DATA00), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DATA01), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DATA02), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DATA03), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DATA04), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DATA05), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DATA06), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DATA07), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DQS), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_RE_B), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_READY_B), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_WE_B), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_WP_B), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI5_RXFS), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI5_RXC), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI5_RXD0), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI5_RXD1), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI5_RXD2), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI5_RXD3), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI5_MCLK), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXFS), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXC), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXD0), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXD1), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXD2), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXD3), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXD4), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXD5), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXD6), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXD7), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXFS), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXC), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXD0), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXD1), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXD2), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXD3), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXD4), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXD5), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXD6), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXD7), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_MCLK), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI2_RXFS), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI2_RXC), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI2_RXD0), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI2_TXFS), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI2_TXC), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI2_TXD0), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI2_MCLK), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI3_RXFS), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI3_RXC), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI3_RXD), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI3_TXFS), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI3_TXC), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI3_TXD), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI3_MCLK), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SPDIF_TX), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SPDIF_RX), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SPDIF_EXT_CLK), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ECSPI1_SCLK), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ECSPI1_MOSI), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ECSPI1_MISO), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ECSPI1_SS0), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ECSPI2_SCLK), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ECSPI2_MOSI), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ECSPI2_MISO), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ECSPI2_SS0), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_I2C1_SCL), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_I2C1_SDA), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_I2C2_SCL), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_I2C2_SDA), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_I2C3_SCL), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_I2C3_SDA), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_I2C4_SCL), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_I2C4_SDA), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_UART1_RXD), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_UART1_TXD), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_UART2_RXD), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_UART2_TXD), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_UART3_RXD), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_UART3_TXD), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_UART4_RXD), + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_UART4_TXD), +}; + +static struct imx_pinctrl_soc_info imx8mq_pinctrl_info = { + .pins = imx8mq_pinctrl_pads, + .npins = ARRAY_SIZE(imx8mq_pinctrl_pads), + .gpr_compatible = "nxp,imx8mq-iomuxc-gpr", +}; + +static struct of_device_id imx8mq_pinctrl_of_match[] = { + { .compatible = "nxp,imx8mq-iomuxc", .data = &imx8mq_pinctrl_info, }, + { /* sentinel */ } +}; + +static int imx8mq_pinctrl_probe(struct platform_device *pdev) +{ + const struct of_device_id *match; + struct imx_pinctrl_soc_info *pinctrl_info; + + match = of_match_device(imx8mq_pinctrl_of_match, &pdev->dev); + + if (!match) + return -ENODEV; + + pinctrl_info = (struct imx_pinctrl_soc_info *) match->data; + + return imx_pinctrl_probe(pdev, pinctrl_info); +} + +static struct platform_driver imx8mq_pinctrl_driver = { + .driver = { + .name = "imx8mq-pinctrl", + .of_match_table = of_match_ptr(imx8mq_pinctrl_of_match), + }, + .probe = imx8mq_pinctrl_probe, +}; + +static int __init imx8mq_pinctrl_init(void) +{ + return platform_driver_register(&imx8mq_pinctrl_driver); +} +arch_initcall(imx8mq_pinctrl_init); -- 2.11.0 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] pinctrl: imx: add driver for i.MX8MQ 2018-01-17 18:28 ` [PATCH 2/2] pinctrl: imx: add driver for i.MX8MQ Lucas Stach @ 2018-01-18 12:41 ` stefan 2018-01-18 12:44 ` Lucas Stach 0 siblings, 1 reply; 4+ messages in thread From: stefan @ 2018-01-18 12:41 UTC (permalink / raw) To: Lucas Stach Cc: Linus Walleij, Rob Herring, Mark Rutland, linux-gpio, kernel, linux-arm-kernel, patchwork-lst Hi Lucas, On 17.01.2018 19:28, Lucas Stach wrote: > The i.MX8MQ pincontrol works in a similar way to the earlier i.MX SoCs. > > The driver code is largely copied from NXP's downstream driver written > by Anson Huang. Only some small changes for upstream adaption are done > by myself. > > Signed-off-by: Lucas Stach <l.stach@pengutronix.de> > --- > drivers/pinctrl/freescale/Kconfig | 7 + > drivers/pinctrl/freescale/Makefile | 1 + > drivers/pinctrl/freescale/pinctrl-imx8mq.c | 368 +++++++++++++++++++++++++++++ > 3 files changed, 376 insertions(+) > create mode 100644 drivers/pinctrl/freescale/pinctrl-imx8mq.c > > diff --git a/drivers/pinctrl/freescale/Kconfig > b/drivers/pinctrl/freescale/Kconfig > index 4dbc576ae27c..b0b62964e8ac 100644 > --- a/drivers/pinctrl/freescale/Kconfig > +++ b/drivers/pinctrl/freescale/Kconfig > @@ -110,6 +110,13 @@ config PINCTRL_IMX7ULP > help > Say Y here to enable the imx7ulp pinctrl driver > > +config PINCTRL_IMX8MQ > + bool "IMX8MQ pinctrl driver" > + depends on SOC_IMX8MQ > + select PINCTRL_IMX > + help > + Say Y here to enable the imx8mq pinctrl driver > + > config PINCTRL_VF610 > bool "Freescale Vybrid VF610 pinctrl driver" > depends on SOC_VF610 > diff --git a/drivers/pinctrl/freescale/Makefile > b/drivers/pinctrl/freescale/Makefile > index 19bb9a55a567..2b2b89bb8454 100644 > --- a/drivers/pinctrl/freescale/Makefile > +++ b/drivers/pinctrl/freescale/Makefile > @@ -16,6 +16,7 @@ obj-$(CONFIG_PINCTRL_IMX6SX) += pinctrl-imx6sx.o > obj-$(CONFIG_PINCTRL_IMX6UL) += pinctrl-imx6ul.o > obj-$(CONFIG_PINCTRL_IMX7D) += pinctrl-imx7d.o > obj-$(CONFIG_PINCTRL_IMX7ULP) += pinctrl-imx7ulp.o > +obj-$(CONFIG_PINCTRL_IMX8MQ) += pinctrl-imx8mq.o > obj-$(CONFIG_PINCTRL_VF610) += pinctrl-vf610.o > obj-$(CONFIG_PINCTRL_MXS) += pinctrl-mxs.o > obj-$(CONFIG_PINCTRL_IMX23) += pinctrl-imx23.o > diff --git a/drivers/pinctrl/freescale/pinctrl-imx8mq.c > b/drivers/pinctrl/freescale/pinctrl-imx8mq.c > new file mode 100644 > index 000000000000..a469cc669a73 > --- /dev/null > +++ b/drivers/pinctrl/freescale/pinctrl-imx8mq.c > @@ -0,0 +1,368 @@ > +/* > + * Copyright (C) 2016 Freescale Semiconductor, Inc. > + * Copyright 2017 NXP > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License > + * as published by the Free Software Foundation; either version 2 > + * of the License, or (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + */ > + > +#include <linux/err.h> > +#include <linux/init.h> > +#include <linux/io.h> > +#include <linux/of.h> > +#include <linux/of_device.h> > +#include <linux/pinctrl/pinctrl.h> > + > +#include "pinctrl-imx.h" > + > +enum imx8mq_pads { > + MX8MQ_PAD_RESERVE0 = 0, > + MX8MQ_PAD_RESERVE1 = 1, > + MX8MQ_PAD_RESERVE2 = 2, > + MX8MQ_PAD_RESERVE3 = 3, > + MX8MQ_PAD_RESERVE4 = 4, > + MX8MQ_IOMUXC_PMIC_STBY_REQ_CCMSRCGPCMIX = 5, > + MX8MQ_IOMUXC_PMIC_ON_REQ_SNVSMIX = 6, > + MX8MQ_IOMUXC_ONOFF_SNVSMIX = 7, > + MX8MQ_IOMUXC_POR_B_SNVSMIX = 8, > + MX8MQ_IOMUXC_RTC_RESET_B_SNVSMIX = 9, > + MX8MQ_IOMUXC_GPIO1_IO00 = 10, > + MX8MQ_IOMUXC_GPIO1_IO01 = 11, > + MX8MQ_IOMUXC_GPIO1_IO02 = 12, > + MX8MQ_IOMUXC_GPIO1_IO03 = 13, > + MX8MQ_IOMUXC_GPIO1_IO04 = 14, > + MX8MQ_IOMUXC_GPIO1_IO05 = 15, > + MX8MQ_IOMUXC_GPIO1_IO06 = 16, > + MX8MQ_IOMUXC_GPIO1_IO07 = 17, > + MX8MQ_IOMUXC_GPIO1_IO08 = 18, > + MX8MQ_IOMUXC_GPIO1_IO09 = 19, > + MX8MQ_IOMUXC_GPIO1_IO10 = 20, > + MX8MQ_IOMUXC_GPIO1_IO11 = 21, > + MX8MQ_IOMUXC_GPIO1_IO12 = 22, > + MX8MQ_IOMUXC_GPIO1_IO13 = 23, > + MX8MQ_IOMUXC_GPIO1_IO14 = 24, > + MX8MQ_IOMUXC_GPIO1_IO15 = 25, > + MX8MQ_IOMUXC_ENET_MDC = 26, > + MX8MQ_IOMUXC_ENET_MDIO = 27, > + MX8MQ_IOMUXC_ENET_TD3 = 28, > + MX8MQ_IOMUXC_ENET_TD2 = 29, > + MX8MQ_IOMUXC_ENET_TD1 = 30, > + MX8MQ_IOMUXC_ENET_TD0 = 31, > + MX8MQ_IOMUXC_ENET_TX_CTL = 32, > + MX8MQ_IOMUXC_ENET_TXC = 33, > + MX8MQ_IOMUXC_ENET_RX_CTL = 34, > + MX8MQ_IOMUXC_ENET_RXC = 35, > + MX8MQ_IOMUXC_ENET_RD0 = 36, > + MX8MQ_IOMUXC_ENET_RD1 = 37, > + MX8MQ_IOMUXC_ENET_RD2 = 38, > + MX8MQ_IOMUXC_ENET_RD3 = 39, > + MX8MQ_IOMUXC_SD1_CLK = 40, > + MX8MQ_IOMUXC_SD1_CMD = 41, > + MX8MQ_IOMUXC_SD1_DATA0 = 42, > + MX8MQ_IOMUXC_SD1_DATA1 = 43, > + MX8MQ_IOMUXC_SD1_DATA2 = 44, > + MX8MQ_IOMUXC_SD1_DATA3 = 45, > + MX8MQ_IOMUXC_SD1_DATA4 = 46, > + MX8MQ_IOMUXC_SD1_DATA5 = 47, > + MX8MQ_IOMUXC_SD1_DATA6 = 48, > + MX8MQ_IOMUXC_SD1_DATA7 = 49, > + MX8MQ_IOMUXC_SD1_RESET_B = 50, > + MX8MQ_IOMUXC_SD1_STROBE = 51, > + MX8MQ_IOMUXC_SD2_CD_B = 52, > + MX8MQ_IOMUXC_SD2_CLK = 53, > + MX8MQ_IOMUXC_SD2_CMD = 54, > + MX8MQ_IOMUXC_SD2_DATA0 = 55, > + MX8MQ_IOMUXC_SD2_DATA1 = 56, > + MX8MQ_IOMUXC_SD2_DATA2 = 57, > + MX8MQ_IOMUXC_SD2_DATA3 = 58, > + MX8MQ_IOMUXC_SD2_RESET_B = 59, > + MX8MQ_IOMUXC_SD2_WP = 60, > + MX8MQ_IOMUXC_NAND_ALE = 61, > + MX8MQ_IOMUXC_NAND_CE0_B = 62, > + MX8MQ_IOMUXC_NAND_CE1_B = 63, > + MX8MQ_IOMUXC_NAND_CE2_B = 64, > + MX8MQ_IOMUXC_NAND_CE3_B = 65, > + MX8MQ_IOMUXC_NAND_CLE = 66, > + MX8MQ_IOMUXC_NAND_DATA00 = 67, > + MX8MQ_IOMUXC_NAND_DATA01 = 68, > + MX8MQ_IOMUXC_NAND_DATA02 = 69, > + MX8MQ_IOMUXC_NAND_DATA03 = 70, > + MX8MQ_IOMUXC_NAND_DATA04 = 71, > + MX8MQ_IOMUXC_NAND_DATA05 = 72, > + MX8MQ_IOMUXC_NAND_DATA06 = 73, > + MX8MQ_IOMUXC_NAND_DATA07 = 74, > + MX8MQ_IOMUXC_NAND_DQS = 75, > + MX8MQ_IOMUXC_NAND_RE_B = 76, > + MX8MQ_IOMUXC_NAND_READY_B = 77, > + MX8MQ_IOMUXC_NAND_WE_B = 78, > + MX8MQ_IOMUXC_NAND_WP_B = 79, > + MX8MQ_IOMUXC_SAI5_RXFS = 80, > + MX8MQ_IOMUXC_SAI5_RXC = 81, > + MX8MQ_IOMUXC_SAI5_RXD0 = 82, > + MX8MQ_IOMUXC_SAI5_RXD1 = 83, > + MX8MQ_IOMUXC_SAI5_RXD2 = 84, > + MX8MQ_IOMUXC_SAI5_RXD3 = 85, > + MX8MQ_IOMUXC_SAI5_MCLK = 86, > + MX8MQ_IOMUXC_SAI1_RXFS = 87, > + MX8MQ_IOMUXC_SAI1_RXC = 88, > + MX8MQ_IOMUXC_SAI1_RXD0 = 89, > + MX8MQ_IOMUXC_SAI1_RXD1 = 90, > + MX8MQ_IOMUXC_SAI1_RXD2 = 91, > + MX8MQ_IOMUXC_SAI1_RXD3 = 92, > + MX8MQ_IOMUXC_SAI1_RXD4 = 93, > + MX8MQ_IOMUXC_SAI1_RXD5 = 94, > + MX8MQ_IOMUXC_SAI1_RXD6 = 95, > + MX8MQ_IOMUXC_SAI1_RXD7 = 96, > + MX8MQ_IOMUXC_SAI1_TXFS = 97, > + MX8MQ_IOMUXC_SAI1_TXC = 98, > + MX8MQ_IOMUXC_SAI1_TXD0 = 99, > + MX8MQ_IOMUXC_SAI1_TXD1 = 100, > + MX8MQ_IOMUXC_SAI1_TXD2 = 101, > + MX8MQ_IOMUXC_SAI1_TXD3 = 102, > + MX8MQ_IOMUXC_SAI1_TXD4 = 103, > + MX8MQ_IOMUXC_SAI1_TXD5 = 104, > + MX8MQ_IOMUXC_SAI1_TXD6 = 105, > + MX8MQ_IOMUXC_SAI1_TXD7 = 106, > + MX8MQ_IOMUXC_SAI1_MCLK = 107, > + MX8MQ_IOMUXC_SAI2_RXFS = 108, > + MX8MQ_IOMUXC_SAI2_RXC = 109, > + MX8MQ_IOMUXC_SAI2_RXD0 = 110, > + MX8MQ_IOMUXC_SAI2_TXFS = 111, > + MX8MQ_IOMUXC_SAI2_TXC = 112, > + MX8MQ_IOMUXC_SAI2_TXD0 = 113, > + MX8MQ_IOMUXC_SAI2_MCLK = 114, > + MX8MQ_IOMUXC_SAI3_RXFS = 115, > + MX8MQ_IOMUXC_SAI3_RXC = 116, > + MX8MQ_IOMUXC_SAI3_RXD = 117, > + MX8MQ_IOMUXC_SAI3_TXFS = 118, > + MX8MQ_IOMUXC_SAI3_TXC = 119, > + MX8MQ_IOMUXC_SAI3_TXD = 120, > + MX8MQ_IOMUXC_SAI3_MCLK = 121, > + MX8MQ_IOMUXC_SPDIF_TX = 122, > + MX8MQ_IOMUXC_SPDIF_RX = 123, > + MX8MQ_IOMUXC_SPDIF_EXT_CLK = 124, > + MX8MQ_IOMUXC_ECSPI1_SCLK = 125, > + MX8MQ_IOMUXC_ECSPI1_MOSI = 126, > + MX8MQ_IOMUXC_ECSPI1_MISO = 127, > + MX8MQ_IOMUXC_ECSPI1_SS0 = 128, > + MX8MQ_IOMUXC_ECSPI2_SCLK = 129, > + MX8MQ_IOMUXC_ECSPI2_MOSI = 130, > + MX8MQ_IOMUXC_ECSPI2_MISO = 131, > + MX8MQ_IOMUXC_ECSPI2_SS0 = 132, > + MX8MQ_IOMUXC_I2C1_SCL = 133, > + MX8MQ_IOMUXC_I2C1_SDA = 134, > + MX8MQ_IOMUXC_I2C2_SCL = 135, > + MX8MQ_IOMUXC_I2C2_SDA = 136, > + MX8MQ_IOMUXC_I2C3_SCL = 137, > + MX8MQ_IOMUXC_I2C3_SDA = 138, > + MX8MQ_IOMUXC_I2C4_SCL = 139, > + MX8MQ_IOMUXC_I2C4_SDA = 140, > + MX8MQ_IOMUXC_UART1_RXD = 141, > + MX8MQ_IOMUXC_UART1_TXD = 142, > + MX8MQ_IOMUXC_UART2_RXD = 143, > + MX8MQ_IOMUXC_UART2_TXD = 144, > + MX8MQ_IOMUXC_UART3_RXD = 145, > + MX8MQ_IOMUXC_UART3_TXD = 146, > + MX8MQ_IOMUXC_UART4_RXD = 147, > + MX8MQ_IOMUXC_UART4_TXD = 148, > +}; > + > +/* Pad names for the pinmux subsystem */ > +static const struct pinctrl_pin_desc imx8mq_pinctrl_pads[] = { > + IMX_PINCTRL_PIN(MX8MQ_PAD_RESERVE0), > + IMX_PINCTRL_PIN(MX8MQ_PAD_RESERVE1), > + IMX_PINCTRL_PIN(MX8MQ_PAD_RESERVE2), > + IMX_PINCTRL_PIN(MX8MQ_PAD_RESERVE3), > + IMX_PINCTRL_PIN(MX8MQ_PAD_RESERVE4), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_PMIC_STBY_REQ_CCMSRCGPCMIX), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_PMIC_ON_REQ_SNVSMIX), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ONOFF_SNVSMIX), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_POR_B_SNVSMIX), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_RTC_RESET_B_SNVSMIX), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO00), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO01), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO02), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO03), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO04), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO05), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO06), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO07), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO08), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO09), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO10), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO11), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO12), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO13), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO14), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_GPIO1_IO15), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_MDC), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_MDIO), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_TD3), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_TD2), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_TD1), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_TD0), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_TX_CTL), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_TXC), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_RX_CTL), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_RXC), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_RD0), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_RD1), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_RD2), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ENET_RD3), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_CLK), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_CMD), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_DATA0), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_DATA1), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_DATA2), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_DATA3), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_DATA4), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_DATA5), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_DATA6), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_DATA7), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_RESET_B), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD1_STROBE), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_CD_B), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_CLK), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_CMD), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_DATA0), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_DATA1), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_DATA2), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_DATA3), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_RESET_B), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SD2_WP), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_ALE), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_CE0_B), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_CE1_B), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_CE2_B), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_CE3_B), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_CLE), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DATA00), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DATA01), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DATA02), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DATA03), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DATA04), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DATA05), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DATA06), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DATA07), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_DQS), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_RE_B), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_READY_B), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_WE_B), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_NAND_WP_B), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI5_RXFS), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI5_RXC), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI5_RXD0), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI5_RXD1), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI5_RXD2), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI5_RXD3), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI5_MCLK), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXFS), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXC), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXD0), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXD1), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXD2), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXD3), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXD4), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXD5), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXD6), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_RXD7), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXFS), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXC), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXD0), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXD1), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXD2), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXD3), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXD4), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXD5), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXD6), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_TXD7), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI1_MCLK), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI2_RXFS), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI2_RXC), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI2_RXD0), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI2_TXFS), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI2_TXC), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI2_TXD0), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI2_MCLK), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI3_RXFS), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI3_RXC), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI3_RXD), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI3_TXFS), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI3_TXC), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI3_TXD), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SAI3_MCLK), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SPDIF_TX), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SPDIF_RX), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_SPDIF_EXT_CLK), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ECSPI1_SCLK), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ECSPI1_MOSI), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ECSPI1_MISO), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ECSPI1_SS0), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ECSPI2_SCLK), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ECSPI2_MOSI), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ECSPI2_MISO), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_ECSPI2_SS0), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_I2C1_SCL), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_I2C1_SDA), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_I2C2_SCL), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_I2C2_SDA), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_I2C3_SCL), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_I2C3_SDA), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_I2C4_SCL), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_I2C4_SDA), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_UART1_RXD), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_UART1_TXD), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_UART2_RXD), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_UART2_TXD), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_UART3_RXD), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_UART3_TXD), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_UART4_RXD), > + IMX_PINCTRL_PIN(MX8MQ_IOMUXC_UART4_TXD), > +}; > + > +static struct imx_pinctrl_soc_info imx8mq_pinctrl_info = { > + .pins = imx8mq_pinctrl_pads, > + .npins = ARRAY_SIZE(imx8mq_pinctrl_pads), > + .gpr_compatible = "nxp,imx8mq-iomuxc-gpr", > +}; I recently sent a patchset which allow to pass the struct imx_pinctrl_soc_info as const to imx_pinctrl_probe, hence this should be const. See: https://lkml.org/lkml/2018/1/6/131 > + > +static struct of_device_id imx8mq_pinctrl_of_match[] = { > + { .compatible = "nxp,imx8mq-iomuxc", .data = &imx8mq_pinctrl_info, }, > + { /* sentinel */ } > +}; > + > +static int imx8mq_pinctrl_probe(struct platform_device *pdev) > +{ > + const struct of_device_id *match; > + struct imx_pinctrl_soc_info *pinctrl_info; > + > + match = of_match_device(imx8mq_pinctrl_of_match, &pdev->dev); > + > + if (!match) > + return -ENODEV; > + > + pinctrl_info = (struct imx_pinctrl_soc_info *) match->data; ...and allow to make use of of_device_get_match_data -- Stefan > + > + return imx_pinctrl_probe(pdev, pinctrl_info); > +} > + > +static struct platform_driver imx8mq_pinctrl_driver = { > + .driver = { > + .name = "imx8mq-pinctrl", > + .of_match_table = of_match_ptr(imx8mq_pinctrl_of_match), > + }, > + .probe = imx8mq_pinctrl_probe, > +}; > + > +static int __init imx8mq_pinctrl_init(void) > +{ > + return platform_driver_register(&imx8mq_pinctrl_driver); > +} > +arch_initcall(imx8mq_pinctrl_init); ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] pinctrl: imx: add driver for i.MX8MQ 2018-01-18 12:41 ` stefan @ 2018-01-18 12:44 ` Lucas Stach 0 siblings, 0 replies; 4+ messages in thread From: Lucas Stach @ 2018-01-18 12:44 UTC (permalink / raw) To: stefan Cc: Linus Walleij, Rob Herring, Mark Rutland, linux-gpio, kernel, linux-arm-kernel, patchwork-lst Hi Stefan, Am Donnerstag, den 18.01.2018, 13:41 +0100 schrieb stefan@agner.ch: > Hi Lucas, > > On 17.01.2018 19:28, Lucas Stach wrote: > > The i.MX8MQ pincontrol works in a similar way to the earlier i.MX > > SoCs. > > > > The driver code is largely copied from NXP's downstream driver > > written > > by Anson Huang. Only some small changes for upstream adaption are > > done > > by myself. > > > > Signed-off-by: Lucas Stach <l.stach@pengutronix.de> > > --- [...] > > +static struct imx_pinctrl_soc_info imx8mq_pinctrl_info = { > > + .pins = imx8mq_pinctrl_pads, > > + .npins = ARRAY_SIZE(imx8mq_pinctrl_pads), > > + .gpr_compatible = "nxp,imx8mq-iomuxc-gpr", > > +}; > > I recently sent a patchset which allow to pass the struct > imx_pinctrl_soc_info as const to imx_pinctrl_probe, hence this should > be > const. > > See: > https://lkml.org/lkml/2018/1/6/131 > > > + > > +static struct of_device_id imx8mq_pinctrl_of_match[] = { > > + { .compatible = "nxp,imx8mq-iomuxc", .data = > > &imx8mq_pinctrl_info, }, > > + { /* sentinel */ } > > +}; > > + > > +static int imx8mq_pinctrl_probe(struct platform_device *pdev) > > +{ > > + const struct of_device_id *match; > > + struct imx_pinctrl_soc_info *pinctrl_info; > > + > > + match = of_match_device(imx8mq_pinctrl_of_match, &pdev- > > >dev); > > + > > + if (!match) > > + return -ENODEV; > > + > > + pinctrl_info = (struct imx_pinctrl_soc_info *) match- > > >data; > > ...and allow to make use of of_device_get_match_data Thanks for the hint, I'll change this for the next revision of this patch. Regards, Lucas ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-01-18 12:44 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-01-17 18:28 [PATCH 1/2] dt-bindings: add binding for i.MX8MQ IOMUXC Lucas Stach 2018-01-17 18:28 ` [PATCH 2/2] pinctrl: imx: add driver for i.MX8MQ Lucas Stach 2018-01-18 12:41 ` stefan 2018-01-18 12:44 ` Lucas Stach
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).