gpio: Use callback presence to determine need of valid_mask
authorLinus Walleij <linus.walleij@linaro.org>
Mon, 19 Aug 2019 09:30:58 +0000 (11:30 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 20 Aug 2019 08:42:07 +0000 (10:42 +0200)
After we switched the two drivers that have .need_valid_mask
set to use the callback for setting up the .valid_mask,
we can just use the presence of the .init_valid_mask()
callback (or the OF reserved ranges, nota bene) to determine
whether to allocate the mask or not and we can drop the
.need_valid_mask field altogether.

Cc: Benjamin Gaignard <benjamin.gaignard@st.com>
Cc: Amelie Delaunay <amelie.delaunay@st.com>
Cc: Stephen Boyd <swboyd@chromium.org>
Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20190819093058.10863-1-linus.walleij@linaro.org
drivers/gpio/gpiolib.c
drivers/pinctrl/pinctrl-stmfx.c
drivers/pinctrl/qcom/pinctrl-msm.c
include/linux/gpio/driver.h

index 22b87c6e8cd5de2bfbf5a99cca38e85edfff4fc1..01aa5440454cc2da423801a208ef88bce2b5ae62 100644 (file)
@@ -363,9 +363,7 @@ static unsigned long *gpiochip_allocate_mask(struct gpio_chip *chip)
 
 static int gpiochip_alloc_valid_mask(struct gpio_chip *gc)
 {
-       if (of_gpio_need_valid_mask(gc))
-               gc->need_valid_mask = true;
-       if (!gc->need_valid_mask)
+       if (!(of_gpio_need_valid_mask(gc) || gc->init_valid_mask))
                return 0;
 
        gc->valid_mask = gpiochip_allocate_mask(gc);
index 13b6d6f72bcc3880b5570371b11920b7778dfb60..dd5aa9a2dfe545bb5c1315ac0bfbb3daf67fd6bf 100644 (file)
@@ -662,7 +662,6 @@ static int stmfx_pinctrl_probe(struct platform_device *pdev)
        pctl->gpio_chip.ngpio = pctl->pctl_desc.npins;
        pctl->gpio_chip.can_sleep = true;
        pctl->gpio_chip.of_node = np;
-       pctl->gpio_chip.need_valid_mask = true;
        pctl->gpio_chip.init_valid_mask = stmfx_pinctrl_gpio_init_valid_mask;
 
        ret = devm_gpiochip_add_data(pctl->dev, &pctl->gpio_chip, pctl);
index a5d8f75da4a786da2bbfc745d1d30438311e31cd..b8a1c43222f805ca12fbd94abc52672723421e63 100644 (file)
@@ -654,7 +654,6 @@ static const struct gpio_chip msm_gpio_template = {
        .request          = gpiochip_generic_request,
        .free             = gpiochip_generic_free,
        .dbg_show         = msm_gpio_dbg_show,
-       .init_valid_mask  = msm_gpio_init_valid_mask,
 };
 
 /* For dual-edge interrupts in software, since some hardware has no
@@ -1016,7 +1015,8 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
        chip->parent = pctrl->dev;
        chip->owner = THIS_MODULE;
        chip->of_node = pctrl->dev->of_node;
-       chip->need_valid_mask = msm_gpio_needs_valid_mask(pctrl);
+       if (msm_gpio_needs_valid_mask(pctrl))
+               chip->init_valid_mask = msm_gpio_init_valid_mask;
 
        pctrl->irq_chip.name = "msmgpio";
        pctrl->irq_chip.irq_enable = msm_gpio_irq_enable;
index dc03323897ef142e013ef66d0fea5288a6222aed..340121c7d2fb32525d7c62bcf16c93232ab32ee6 100644 (file)
@@ -403,15 +403,6 @@ struct gpio_chip {
        struct gpio_irq_chip irq;
 #endif /* CONFIG_GPIOLIB_IRQCHIP */
 
-       /**
-        * @need_valid_mask:
-        *
-        * If set core allocates @valid_mask with all its values initialized
-        * with init_valid_mask() or set to one if init_valid_mask() is not
-        * defined
-        */
-       bool need_valid_mask;
-
        /**
         * @valid_mask:
         *