|
|
@@ -1,62 +0,0 @@
|
|
|
-From f038380835033e376d89c72516f087254792bbad Mon Sep 17 00:00:00 2001
|
|
|
-From: Martin Schiller <[email protected]>
|
|
|
-Date: Mon, 6 May 2024 09:41:42 +0200
|
|
|
-Subject: [PATCH] MIPS: pci: lantiq: restore reset gpio polarity
|
|
|
-
|
|
|
-Commit 90c2d2eb7ab5 ("MIPS: pci: lantiq: switch to using gpiod API") not
|
|
|
-only switched to the gpiod API, but also inverted / changed the polarity
|
|
|
-of the GPIO.
|
|
|
-
|
|
|
-According to the PCI specification, the RST# pin is an active-low
|
|
|
-signal. However, most of the device trees that have been widely used for
|
|
|
-a long time (mainly in the openWrt project) define this GPIO as
|
|
|
-active-high and the old driver code inverted the signal internally.
|
|
|
-
|
|
|
-Apparently there are actually boards where the reset gpio must be
|
|
|
-operated inverted. For this reason, we cannot use the GPIOD_OUT_LOW/HIGH
|
|
|
-flag for initialization. Instead, we must explicitly set the gpio to
|
|
|
-value 1 in order to take into account any "GPIO_ACTIVE_LOW" flag that
|
|
|
-may have been set.
|
|
|
-
|
|
|
-In order to remain compatible with all these existing device trees, we
|
|
|
-should therefore keep the logic as it was before the commit.
|
|
|
-
|
|
|
-Fixes: 90c2d2eb7ab5 ("MIPS: pci: lantiq: switch to using gpiod API")
|
|
|
-Cc: [email protected]
|
|
|
-Signed-off-by: Martin Schiller <[email protected]>
|
|
|
----
|
|
|
- arch/mips/pci/pci-lantiq.c | 8 ++++----
|
|
|
- 1 file changed, 4 insertions(+), 4 deletions(-)
|
|
|
-
|
|
|
---- a/arch/mips/pci/pci-lantiq.c
|
|
|
-+++ b/arch/mips/pci/pci-lantiq.c
|
|
|
-@@ -124,14 +124,14 @@ static int ltq_pci_startup(struct platfo
|
|
|
- clk_disable(clk_external);
|
|
|
-
|
|
|
- /* setup reset gpio used by pci */
|
|
|
-- reset_gpio = devm_gpiod_get_optional(&pdev->dev, "reset",
|
|
|
-- GPIOD_OUT_LOW);
|
|
|
-+ reset_gpio = devm_gpiod_get_optional(&pdev->dev, "reset", GPIOD_ASIS);
|
|
|
- error = PTR_ERR_OR_ZERO(reset_gpio);
|
|
|
- if (error) {
|
|
|
- dev_err(&pdev->dev, "failed to request gpio: %d\n", error);
|
|
|
- return error;
|
|
|
- }
|
|
|
- gpiod_set_consumer_name(reset_gpio, "pci_reset");
|
|
|
-+ gpiod_direction_output(reset_gpio, 1);
|
|
|
-
|
|
|
- /* enable auto-switching between PCI and EBU */
|
|
|
- ltq_pci_w32(0xa, PCI_CR_CLK_CTRL);
|
|
|
-@@ -194,10 +194,10 @@ static int ltq_pci_startup(struct platfo
|
|
|
-
|
|
|
- /* toggle reset pin */
|
|
|
- if (reset_gpio) {
|
|
|
-- gpiod_set_value_cansleep(reset_gpio, 1);
|
|
|
-+ gpiod_set_value_cansleep(reset_gpio, 0);
|
|
|
- wmb();
|
|
|
- mdelay(1);
|
|
|
-- gpiod_set_value_cansleep(reset_gpio, 0);
|
|
|
-+ gpiod_set_value_cansleep(reset_gpio, 1);
|
|
|
- }
|
|
|
- return 0;
|
|
|
- }
|