On 6/17/19 9:43 AM, Lukasz Majewski wrote: > Hi Marek, > >> 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 ? > > The code from linux is a bit more convoluted and verbose. I may re-look > into the kernel version.
Please do >>> 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 . > > It looks like this is the same problem. > > However, the dm_scan_fdt_dev() is exactly for that, when combined > with .bind method from DM. Ah, because you have a compat string for the GPIO controllers, right. Then please ignore this comment, this is better solution. >>> 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() ? >> > > Ach... right the devm_kfree() shall be used on the exit from the > function. > >> [...] >> > > > > > Best regards, > > Lukasz Majewski > > -- > > DENX Software Engineering GmbH, Managing Director: Wolfgang Denk > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lu...@denx.de > -- Best regards, Marek Vasut _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot