pinctrl: xway: fix gpio-hog related boot issues
This patch is based on commit a86caa9ba5
("pinctrl: msm: fix gpio-hog
related boot issues").
It fixes the issue that the gpio ranges needs to be defined before
gpiochip_add().
Therefore, we also have to swap the order of registering the pinctrl
driver and registering the gpio chip.
You also have to add the "gpio-ranges" property to the pinctrl device
node to get it finally working.
Signed-off-by: Martin Schiller <ms@dev.tdt.de>
Acked-by: John Crispin <john@phrozen.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
7f07675c11
commit
9b4924da47
|
@ -1746,14 +1746,6 @@ static int pinmux_xway_probe(struct platform_device *pdev)
|
|||
}
|
||||
xway_pctrl_desc.pins = xway_info.pads;
|
||||
|
||||
/* register the gpio chip */
|
||||
xway_chip.parent = &pdev->dev;
|
||||
ret = devm_gpiochip_add_data(&pdev->dev, &xway_chip, NULL);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to register gpio chip\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* setup the data needed by pinctrl */
|
||||
xway_pctrl_desc.name = dev_name(&pdev->dev);
|
||||
xway_pctrl_desc.npins = xway_chip.ngpio;
|
||||
|
@ -1775,10 +1767,33 @@ static int pinmux_xway_probe(struct platform_device *pdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* finish with registering the gpio range in pinctrl */
|
||||
xway_gpio_range.npins = xway_chip.ngpio;
|
||||
xway_gpio_range.base = xway_chip.base;
|
||||
pinctrl_add_gpio_range(xway_info.pctrl, &xway_gpio_range);
|
||||
/* register the gpio chip */
|
||||
xway_chip.parent = &pdev->dev;
|
||||
xway_chip.owner = THIS_MODULE;
|
||||
xway_chip.of_node = pdev->dev.of_node;
|
||||
ret = devm_gpiochip_add_data(&pdev->dev, &xway_chip, NULL);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to register gpio chip\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* For DeviceTree-supported systems, the gpio core checks the
|
||||
* pinctrl's device node for the "gpio-ranges" property.
|
||||
* If it is present, it takes care of adding the pin ranges
|
||||
* for the driver. In this case the driver can skip ahead.
|
||||
*
|
||||
* In order to remain compatible with older, existing DeviceTree
|
||||
* files which don't set the "gpio-ranges" property or systems that
|
||||
* utilize ACPI the driver has to call gpiochip_add_pin_range().
|
||||
*/
|
||||
if (!of_property_read_bool(pdev->dev.of_node, "gpio-ranges")) {
|
||||
/* finish with registering the gpio range in pinctrl */
|
||||
xway_gpio_range.npins = xway_chip.ngpio;
|
||||
xway_gpio_range.base = xway_chip.base;
|
||||
pinctrl_add_gpio_range(xway_info.pctrl, &xway_gpio_range);
|
||||
}
|
||||
|
||||
dev_info(&pdev->dev, "Init done\n");
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue