Skip to content

Commit b2d7a9c

Browse files
Fabio Estevambjorn-helgaas
authored andcommitted
Revert "PCI: imx6: Add support for active-low reset GPIO"
Commit 5c5fb40 ("PCI: imx6: Add support for active-low reset GPIO") cause regressions on some boards like MX6 Gateworks Ventana, for example. The reason for the breakage is that this commit sets the GPIO polarity in the wrong logic level. Also, the commit log is wrong because active-low reset GPIO is what the driver used to support since the beginning. So keep the old behavior that ignores the GPIO polarity specified in the device tree and treat the PCI reset GPIO as active-low. Reported-by: Krzysztof Hałasa <khalasa@piap.pl> Tested-by: Tim Harvey <tharvey@gateworks.com> # Gateworks Ventana Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Tim Harvey <tharvey@gateworks.com> Acked-by: Lucas Stach <l.stach@pengutronix.de> CC: stable@vger.kernel.org # v4.5+
1 parent 9735a22 commit b2d7a9c

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

drivers/pci/host/pci-imx6.c

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
#define to_imx6_pcie(x) container_of(x, struct imx6_pcie, pp)
3333

3434
struct imx6_pcie {
35-
struct gpio_desc *reset_gpio;
35+
int reset_gpio;
3636
struct clk *pcie_bus;
3737
struct clk *pcie_phy;
3838
struct clk *pcie;
@@ -309,10 +309,10 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
309309
usleep_range(200, 500);
310310

311311
/* Some boards don't have PCIe reset GPIO. */
312-
if (imx6_pcie->reset_gpio) {
313-
gpiod_set_value_cansleep(imx6_pcie->reset_gpio, 0);
312+
if (gpio_is_valid(imx6_pcie->reset_gpio)) {
313+
gpio_set_value_cansleep(imx6_pcie->reset_gpio, 0);
314314
msleep(100);
315-
gpiod_set_value_cansleep(imx6_pcie->reset_gpio, 1);
315+
gpio_set_value_cansleep(imx6_pcie->reset_gpio, 1);
316316
}
317317
return 0;
318318

@@ -523,6 +523,7 @@ static int __init imx6_pcie_probe(struct platform_device *pdev)
523523
{
524524
struct imx6_pcie *imx6_pcie;
525525
struct pcie_port *pp;
526+
struct device_node *np = pdev->dev.of_node;
526527
struct resource *dbi_base;
527528
struct device_node *node = pdev->dev.of_node;
528529
int ret;
@@ -544,8 +545,15 @@ static int __init imx6_pcie_probe(struct platform_device *pdev)
544545
return PTR_ERR(pp->dbi_base);
545546

546547
/* Fetch GPIOs */
547-
imx6_pcie->reset_gpio = devm_gpiod_get_optional(&pdev->dev, "reset",
548-
GPIOD_OUT_LOW);
548+
imx6_pcie->reset_gpio = of_get_named_gpio(np, "reset-gpio", 0);
549+
if (gpio_is_valid(imx6_pcie->reset_gpio)) {
550+
ret = devm_gpio_request_one(&pdev->dev, imx6_pcie->reset_gpio,
551+
GPIOF_OUT_INIT_LOW, "PCIe reset");
552+
if (ret) {
553+
dev_err(&pdev->dev, "unable to get reset gpio\n");
554+
return ret;
555+
}
556+
}
549557

550558
/* Fetch clocks */
551559
imx6_pcie->pcie_phy = devm_clk_get(&pdev->dev, "pcie_phy");

0 commit comments

Comments
 (0)