pinctrl: sunxi: Introduce the strict flag
authorMaxime Ripard <maxime.ripard@free-electrons.com>
Mon, 9 Oct 2017 20:53:37 +0000 (22:53 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 31 Oct 2017 08:43:54 +0000 (09:43 +0100)
Our pinctrl device should have had strict set all along. However, it wasn't
the case, and most of our old device trees also have a pinctrl group in
addition to the GPIOs properties, which mean that we can't really turn it
on now.

All our new SoCs don't have that group, so we should still enable that mode
on the newer one though.

In order to enable it by default, add a flag that will allow to disable
that mode that should be set by pinctrl drivers that cannot be migrated.

Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/sunxi/pinctrl-sunxi.c
drivers/pinctrl/sunxi/pinctrl-sunxi.h

index 52edf3b5988d516b2d7e9c9ae0661c7947c38f57..3bbb34435e0f642beed5c49013c15c8494fe598a 100644 (file)
@@ -1245,6 +1245,7 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev,
        struct pinctrl_desc *pctrl_desc;
        struct pinctrl_pin_desc *pins;
        struct sunxi_pinctrl *pctl;
+       struct pinmux_ops *pmxops;
        struct resource *res;
        int i, ret, last_pin, pin_idx;
        struct clk *clk;
@@ -1305,7 +1306,16 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev,
        pctrl_desc->npins = pctl->ngroups;
        pctrl_desc->confops = &sunxi_pconf_ops;
        pctrl_desc->pctlops = &sunxi_pctrl_ops;
-       pctrl_desc->pmxops =  &sunxi_pmx_ops;
+
+       pmxops = devm_kmemdup(&pdev->dev, &sunxi_pmx_ops, sizeof(sunxi_pmx_ops),
+                             GFP_KERNEL);
+       if (!pmxops)
+               return -ENOMEM;
+
+       if (desc->disable_strict_mode)
+               pmxops->strict = false;
+
+       pctrl_desc->pmxops = pmxops;
 
        pctl->pctl_dev = devm_pinctrl_register(&pdev->dev, pctrl_desc, pctl);
        if (IS_ERR(pctl->pctl_dev)) {
index 1bfc0d8a55df47b3e243d3a977a3cb47bf9bcbf7..11b128f54ed2def6e8efb7044497a1d3e24a85be 100644 (file)
@@ -112,6 +112,7 @@ struct sunxi_pinctrl_desc {
        unsigned                        irq_banks;
        unsigned                        irq_bank_base;
        bool                            irq_read_needs_mux;
+       bool                            disable_strict_mode;
 };
 
 struct sunxi_pinctrl_function {