Messages in this thread | | | Subject | Re: [PATCH 1/1] pinctrl: stmfx: fix valid_mask init sequence | From | Alexandre Torgue <> | Date | Mon, 4 Nov 2019 11:22:07 +0100 |
| |
Hi Amélie,
On 11/4/19 11:09 AM, Amelie Delaunay wrote: > With stmfx_pinctrl_gpio_init_valid_mask callback, gpio_valid_mask was used > to initialize gpiochip valid_mask for gpiolib. But gpio_valid_mask was not > yet initialized. gpio_valid_mask required gpio-ranges to be registered, > this is the case after gpiochip_add_data call. But init_valid_mask > callback is also called under gpiochip_add_data. gpio_valid_mask > initialization cannot be moved before gpiochip_add_data because > gpio-ranges are not registered. > So, it is not possible to use init_valid_mask callback. > To avoid this issue, get rid of valid_mask and rely on ranges. > > Fixes: da9b142ab2c5 ("pinctrl: stmfx: Use the callback to populate valid_mask") > Signed-off-by: Amelie Delaunay <amelie.delaunay@st.com>
Acked-by: Alexandre TORGUE <alexandre.torgue@st.com>
> --- > drivers/pinctrl/pinctrl-stmfx.c | 14 -------------- > 1 file changed, 14 deletions(-) > > diff --git a/drivers/pinctrl/pinctrl-stmfx.c b/drivers/pinctrl/pinctrl-stmfx.c > index 564660028fcc..ccdf0bb21414 100644 > --- a/drivers/pinctrl/pinctrl-stmfx.c > +++ b/drivers/pinctrl/pinctrl-stmfx.c > @@ -585,19 +585,6 @@ static int stmfx_pinctrl_gpio_function_enable(struct stmfx_pinctrl *pctl) > return stmfx_function_enable(pctl->stmfx, func); > } > > -static int stmfx_pinctrl_gpio_init_valid_mask(struct gpio_chip *gc, > - unsigned long *valid_mask, > - unsigned int ngpios) > -{ > - struct stmfx_pinctrl *pctl = gpiochip_get_data(gc); > - u32 n; > - > - for_each_clear_bit(n, &pctl->gpio_valid_mask, ngpios) > - clear_bit(n, valid_mask); > - > - return 0; > -} > - > static int stmfx_pinctrl_probe(struct platform_device *pdev) > { > struct stmfx *stmfx = dev_get_drvdata(pdev->dev.parent); > @@ -660,7 +647,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.init_valid_mask = stmfx_pinctrl_gpio_init_valid_mask; > > ret = devm_gpiochip_add_data(pctl->dev, &pctl->gpio_chip, pctl); > if (ret) { >
| |