On 6/16/19 12:34 AM, Lukasz Majewski wrote: > The code responsible for setting proper values in the MUX registers > (in the mxs_pinctrl_set_state()) has been ported from Barebox project > (branch: master, SHA1: eb3b0f7414cd8102844dd16b1c789e445e8947f8, > file: drivers/pinctrl/pinctrl-mxs.c).
The format of a commit, when referenced, is documented here: https://www.kernel.org/doc/html/v4.12/process/submitting-patches.html e.g. e21d2170f366 ("video: remove unnecessary platform_set_drvdata()") Although. maybe you should port this from Linux instead ? > As the pinctrl node in the imx28.dtsi file has gpio pins nodes as subnodes, > it was necessary to use 'dm_scan_fdt_dev()' (as a .bind method) to also > make them 'visible' by the DM's "gpio_mxs" driver. Look at drivers/pinctrl/renesas/pfc-r7s72100.c r7s72100_pfc_probe() , I think that one deals with the exact same problem . > Signed-off-by: Lukasz Majewski <lu...@denx.de> > > --- > > Changes in v3: > - Set more apropriate tags > > Changes in v2: None > > drivers/pinctrl/nxp/Kconfig | 10 +++ > drivers/pinctrl/nxp/Makefile | 1 + > drivers/pinctrl/nxp/pinctrl-mxs.c | 164 > ++++++++++++++++++++++++++++++++++++++ > 3 files changed, 175 insertions(+) > create mode 100644 drivers/pinctrl/nxp/pinctrl-mxs.c > > diff --git a/drivers/pinctrl/nxp/Kconfig b/drivers/pinctrl/nxp/Kconfig > index 61f93be42d..f2e67ca231 100644 > --- a/drivers/pinctrl/nxp/Kconfig > +++ b/drivers/pinctrl/nxp/Kconfig > @@ -89,6 +89,16 @@ config PINCTRL_IMX8M > only parses the 'fsl,pins' property and configure related > registers. > > +config PINCTRL_MXS > + bool "NXP MXS pinctrl driver" > + depends on ARCH_MX28 && PINCTRL_FULL > + help > + Say Y here to enable the i.MX mxs pinctrl driver > + > + This option provides a simple pinctrl driver for i.MX mxs SoC > + familiy, e.g. i.MX28. This feature depends on device tree > + configuration. > + > config PINCTRL_VYBRID > bool "Vybrid (vf610) pinctrl driver" > depends on ARCH_VF610 && PINCTRL_FULL > diff --git a/drivers/pinctrl/nxp/Makefile b/drivers/pinctrl/nxp/Makefile > index b340d9448a..b86448aac9 100644 > --- a/drivers/pinctrl/nxp/Makefile > +++ b/drivers/pinctrl/nxp/Makefile > @@ -6,4 +6,5 @@ obj-$(CONFIG_PINCTRL_IMX7ULP) += pinctrl-imx7ulp.o > obj-$(CONFIG_PINCTRL_IMX_SCU) += pinctrl-scu.o > obj-$(CONFIG_PINCTRL_IMX8) += pinctrl-imx8.o > obj-$(CONFIG_PINCTRL_IMX8M) += pinctrl-imx8m.o > +obj-$(CONFIG_PINCTRL_MXS) += pinctrl-mxs.o > obj-$(CONFIG_PINCTRL_VYBRID) += pinctrl-vf610.o > diff --git a/drivers/pinctrl/nxp/pinctrl-mxs.c > b/drivers/pinctrl/nxp/pinctrl-mxs.c > new file mode 100644 > index 0000000000..42b1b7998b > --- /dev/null > +++ b/drivers/pinctrl/nxp/pinctrl-mxs.c > @@ -0,0 +1,164 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Copyright (C) 2019 DENX Software Engineering > + * Lukasz Majewski, DENX Software Engineering, lu...@denx.de > + * > + * This work is based on drivers/pinctrl/pinctrl-mxs.c > + * SHA1: eb3b0f7414cd8102844dd16b1c789e445e8947f8 > + * from Barebox project. > + * > + * Author of original Barebox pinctrl-mxs.c: > + * Copyright (c) 2015 Sascha Hauer <s.ha...@pengutronix.de> > + */ > + > +#include <common.h> > +#include <linux/io.h> > +#include <linux/err.h> > +#include <dm.h> > +#include <dm/pinctrl.h> > +#include <dm/read.h> > + > +DECLARE_GLOBAL_DATA_PTR; > + > +#define PINID(bank, pin) ((bank) * 32 + (pin)) > +#define MUXID_TO_PINID(m) PINID((m) >> 12 & 0xf, (m) >> 4 & 0xff) > +#define MUXID_TO_MUXSEL(m) ((m) & 0xf) > +#define PINID_TO_BANK(p) ((p) >> 5) > +#define PINID_TO_PIN(p) ((p) % 32) > + > +#define STMP_OFFSET_REG_SET 0x4 > +#define STMP_OFFSET_REG_CLR 0x8 > +#define STMP_OFFSET_REG_TOG 0xc > + > +struct mxs_pinctrl_priv { > + void __iomem *base; > +}; > + > +static int mxs_pinctrl_set_state(struct udevice *dev, struct udevice *config) > +{ > + int ma_present = 0, vol_present = 0, pull_present = 0; > + struct mxs_pinctrl_priv *iomux = dev_get_priv(dev); > + u32 *pin_data, val, ma, vol, pull; > + int npins, size, i, ret; > + > + debug("\n%s: set state: %s\n", __func__, config->name); > + > + size = dev_read_size(config, "fsl,pinmux-ids"); > + if (size < 0) > + return size; > + > + if (!size || size % 4) { > + dev_err(dev, "Invalid fsl,pinmux-ids property in %s\n", > + config->name); > + return -EINVAL; > + } > + > + npins = size / 4; > + > + pin_data = devm_kzalloc(dev, size, 0); Is this ever free'd() ? [...] -- Best regards, Marek Vasut _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot