Skip to contentSkip to conversation

pinctrl: xway: fix gpio-hog related boot issues

PATCH In review Martin Schiller 3 participants 4 messages Dec 14, 2018 – Dec 18, 2018

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 pinctrl: xway: fix gpio-hog related boot issues

This patch is based on commit a86caa9ba5d7 ("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.

---
 drivers/pinctrl/pinctrl-xway.c | 39 +++++++++++++++++++++++++++------------
 1 file changed, 27 insertions(+), 12 deletions(-)
drivers/pinctrl/pinctrl-xway.c +27 -12
index 93f8bd04e7fe..ae74b260b014 100644
@@ -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;
 }
Signature · 1 line
2.11.0
#1 lore raw
Quoted 6 lines · Martin Schiller

This patch is based on commit a86caa9ba5d7 ("pinctrl: msm: fix gpio-hog related boot issues").

It fixes the issue that the gpio ranges needs to be defined before gpiochip_add().

Quoted 7 lines

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.

Patch applied unless John Crispin has objections, it looks good to me!

Yours,
Linus Walleij

Acked-by
#2 lore raw
Quoted 14 lines · Linus Walleij
Quoted 12 lines · Martin Schiller

This patch is based on commit a86caa9ba5d7 ("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.

Quoted 6 lines
Quoted 1 line

Patch applied unless John Crispin has objections, it looks good to me!

Yours,
Linus Walleij

sorry did not see the patch in my inbox

#3 lore raw
Quoted 16 lines · John Crispin
Quoted 15 lines · Linus Walleij
Quoted 13 lines · Martin Schiller

This patch is based on commit a86caa9ba5d7 ("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.

Quoted 9 lines
Quoted 5 lines

Patch applied unless John Crispin has objections, it looks good to me!

Yours,
Linus Walleij

sorry did not see the patch in my inbox

Sorry, that was my fault.
I've added everyone from getmaintainers.pl output, but forgot to also add you.

Regards,
Martin