linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: aalonso@freescale.com (Alonso Adrian)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 6/8] pinctrl: freescale: imx: add shared input select reg support
Date: Tue, 8 Sep 2015 16:13:45 +0000	[thread overview]
Message-ID: <BN3PR03MB1509E06698F166EFE98FE0D2A8530@BN3PR03MB1509.namprd03.prod.outlook.com> (raw)
In-Reply-To: <20150907021257.GF30746@tiger>

Hi Shawn,

See comments below.

Regards
Adrian
________________________________________
From: Shawn Guo <shawnguo@kernel.org>
Sent: Sunday, September 6, 2015 9:12 PM
To: Alonso Lazcano Adrian-B38018
Cc: linux-arm-kernel at lists.infradead.org; shawn.guo at linaro.org; linus.walleij at linaro.org; lznuaa at gmail.com; linux-gpio at vger.kernel.org; devicetree at vger.kernel.org; robh+dt at kernel.org; Huang Yongcai-B20788; Li Frank-B20596; Gong Yibin-B38343; Garg Nitin-B37173
Subject: Re: [PATCH v2 6/8] pinctrl: freescale: imx: add shared input select reg support

On Tue, Sep 01, 2015 at 05:49:11PM -0500, Adrian Alonso wrote:
> - Add shared input select register support
> - imx7d has two iomux controllers iomuxc and iomuxc-lpsr
>   which share select_input register for daisy chain settings
>
> Signed-off-by: Adrian Alonso <aalonso@freescale.com>
> ---
> Changes for V2: Resend
>
>  drivers/pinctrl/freescale/pinctrl-imx.c | 28 +++++++++++++++++++++++++++-
>  drivers/pinctrl/freescale/pinctrl-imx.h |  1 +
>  2 files changed, 28 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/pinctrl/freescale/pinctrl-imx.c b/drivers/pinctrl/freescale/pinctrl-imx.c
> index 9f019be..597319d 100644
> --- a/drivers/pinctrl/freescale/pinctrl-imx.c
> +++ b/drivers/pinctrl/freescale/pinctrl-imx.c
> @@ -18,6 +18,7 @@
>  #include <linux/module.h>
>  #include <linux/of.h>
>  #include <linux/of_device.h>
> +#include <linux/of_address.h>
>  #include <linux/pinctrl/machine.h>
>  #include <linux/pinctrl/pinconf.h>
>  #include <linux/pinctrl/pinctrl.h>
> @@ -39,6 +40,7 @@ struct imx_pinctrl {
>       struct device *dev;
>       struct pinctrl_dev *pctl;
>       void __iomem *base;
> +     void __iomem *input_sel_base;
>       const struct imx_pinctrl_soc_info *info;
>  };
>
> @@ -254,7 +256,12 @@ static int imx_pmx_set(struct pinctrl_dev *pctldev, unsigned selector,
>                        * Regular select input register can never be at offset
>                        * 0, and we only print register value for regular case.
>                        */
> -                     writel(pin->input_val, ipctl->base + pin->input_reg);
> +                     if (info->flags & SHARE_INPUT_SELECT_REG)

This can be replaced by a NULL checking on input_sel_base.
[Adrian] Yes, but I will prefer to keep this flag check instead to keep code consisten on how to handle
special cases, that way is easier to spot when input select register is shared.

> +                             writel(pin->input_val, ipctl->input_sel_base +
> +                                             pin->input_reg);
> +                     else
> +                             writel(pin->input_val, ipctl->base +
> +                                             pin->input_reg);
>                       dev_dbg(ipctl->dev,
>                               "==>select_input: offset 0x%x val 0x%x\n",
>                               pin->input_reg, pin->input_val);
> @@ -690,6 +697,8 @@ static int imx_pinctrl_probe_dt(struct platform_device *pdev,
>  int imx_pinctrl_probe(struct platform_device *pdev,
>                     struct imx_pinctrl_soc_info *info)
>  {
> +     struct device_node *dev_np = pdev->dev.of_node;
> +     struct device_node *np;
>       struct imx_pinctrl *ipctl;
>       struct resource *res;
>       int ret;
> @@ -715,6 +724,23 @@ int imx_pinctrl_probe(struct platform_device *pdev,
>       if (IS_ERR(ipctl->base))
>               return PTR_ERR(ipctl->base);
>
> +     if (info->flags & SHARE_INPUT_SELECT_REG) {
> +             np = of_get_child_by_name(dev_np->parent, "iomuxc");

This doesn't scale well.  First of all, we do not generally recommend
searching node by name, because most of time node name is not enforced
to be stable, and some nodes are named quite arbitrarily.  Secondly, we
do not know if the hardware people will move select_input registers to
somewhere else than IOMUXC in the future.

Hence, I suggest you have a device tree phandle pointing the device
where select_input registers are located.  In that case, flag
SHARE_INPUT_SELECT_REG can even be saved completely.
[Adrian] Agree, let me rework this :)
> +             if (np) {
> +                     ipctl->input_sel_base = of_iomap(np, 0);
> +                     if (IS_ERR(ipctl->input_sel_base)) {
> +                             of_node_put(np);
> +                             dev_err(&pdev->dev,
> +                                    "iomuxc base address not found\n");
> +                             return PTR_ERR(ipctl->input_sel_base);
> +                     }
> +             } else {
> +                     dev_err(&pdev->dev, "iomuxc device node not foud\n");

s/foud/found

Shawn

> +                     return -EINVAL;
> +             }
> +             of_node_put(np);
> +     }
> +
>       imx_pinctrl_desc.name = dev_name(&pdev->dev);
>       imx_pinctrl_desc.pins = info->pins;
>       imx_pinctrl_desc.npins = info->npins;
> diff --git a/drivers/pinctrl/freescale/pinctrl-imx.h b/drivers/pinctrl/freescale/pinctrl-imx.h
> index 67c07c2..d11a827 100644
> --- a/drivers/pinctrl/freescale/pinctrl-imx.h
> +++ b/drivers/pinctrl/freescale/pinctrl-imx.h
> @@ -86,6 +86,7 @@ struct imx_pinctrl_soc_info {
>
>  #define SHARE_MUX_CONF_REG   0x1
>  #define ZERO_OFFSET_VALID    0x2
> +#define SHARE_INPUT_SELECT_REG       0x4
>
>  #define NO_MUX               0x0
>  #define NO_PAD               0x0
> --
> 2.1.4
>

  reply	other threads:[~2015-09-08 16:13 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-01 22:49 [PATCH v2 1/8] pinctrl: freescale: imx: fix system crash if enable two pinctl instances Adrian Alonso
2015-09-01 22:49 ` [PATCH v2 2/8] ARM: imx: imx7d-pinfunc: add gpio1 pad iomux settings Adrian Alonso
2015-09-07  1:01   ` Shawn Guo
2015-09-07  2:18     ` Duan Andy
2015-09-01 22:49 ` [PATCH v2 3/8] ARM: dts: imx: imx7d add iomuxc lpsr device node Adrian Alonso
2015-09-01 22:49 ` [PATCH v2 4/8] ARM: dts: imx: imx7d-sbd add iomuxc-lpsr hoggrp-2 pads Adrian Alonso
2015-09-01 22:49 ` [PATCH v2 5/8] pinctrl: freescale: imx: add ZERO_OFFSET_VALID flag Adrian Alonso
2015-09-07  1:28   ` Shawn Guo
2015-09-08 16:05     ` Alonso Adrian
2015-09-18 13:52       ` Shawn Guo
2015-09-18 16:27         ` Alonso Adrian
2015-09-01 22:49 ` [PATCH v2 6/8] pinctrl: freescale: imx: add shared input select reg support Adrian Alonso
2015-09-07  2:12   ` Shawn Guo
2015-09-08 16:13     ` Alonso Adrian [this message]
2015-09-01 22:49 ` [PATCH v2 7/8] pinctrl: freescale: imx7d: support iomux lpsr controller Adrian Alonso
2015-09-01 22:49 ` [PATCH v2 8/8] pinctrl: freescale: imx: imx7d iomuxc-lpsr devicetree bindings Adrian Alonso
2015-09-07  2:42   ` Shawn Guo
2015-09-08 16:15     ` Alonso Adrian
2015-09-07  0:56 ` [PATCH v2 1/8] pinctrl: freescale: imx: fix system crash if enable two pinctl instances Shawn Guo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=BN3PR03MB1509E06698F166EFE98FE0D2A8530@BN3PR03MB1509.namprd03.prod.outlook.com \
    --to=aalonso@freescale.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).