pinctrl: sunxi: implement pin_config_set
authorMaxime Ripard <maxime.ripard@bootlin.com>
Thu, 14 Mar 2019 19:32:51 +0000 (20:32 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 4 Apr 2019 03:54:39 +0000 (10:54 +0700)
The sunxi pinctrl only implements the pin_config_group_set callback at the
moment, whereas the gpiochip_generic_config function relies on
pin_config_set. Rework the functions a little to support pin_config_set,
and rely on it for pin_config_group_set.

Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Acked-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/sunxi/pinctrl-sunxi.c

index 8dd25caea2cf7ca54a7b385f772756b30668e35f..78a30f71318031747e19d18433094132fbace606 100644 (file)
@@ -530,14 +530,10 @@ static int sunxi_pconf_group_get(struct pinctrl_dev *pctldev,
        return sunxi_pconf_get(pctldev, g->pin, config);
 }
 
-static int sunxi_pconf_group_set(struct pinctrl_dev *pctldev,
-                                unsigned group,
-                                unsigned long *configs,
-                                unsigned num_configs)
+static int sunxi_pconf_set(struct pinctrl_dev *pctldev, unsigned pin,
+                          unsigned long *configs, unsigned num_configs)
 {
        struct sunxi_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
-       struct sunxi_pinctrl_group *g = &pctl->groups[group];
-       unsigned pin = g->pin - pctl->desc->pin_base;
        int i;
 
        for (i = 0; i < num_configs; i++) {
@@ -596,9 +592,20 @@ static int sunxi_pconf_group_set(struct pinctrl_dev *pctldev,
        return 0;
 }
 
+static int sunxi_pconf_group_set(struct pinctrl_dev *pctldev, unsigned group,
+                                unsigned long *configs, unsigned num_configs)
+{
+       struct sunxi_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
+       struct sunxi_pinctrl_group *g = &pctl->groups[group];
+
+       /* We only support 1 pin per group. Chain it to the pin callback */
+       return sunxi_pconf_set(pctldev, g->pin, configs, num_configs);
+}
+
 static const struct pinconf_ops sunxi_pconf_ops = {
        .is_generic             = true,
        .pin_config_get         = sunxi_pconf_get,
+       .pin_config_set         = sunxi_pconf_set,
        .pin_config_group_get   = sunxi_pconf_group_get,
        .pin_config_group_set   = sunxi_pconf_group_set,
 };