1 From 4d6a758f2cd2122a7d895f913854c13da62ba6df Mon Sep 17 00:00:00 2001
2 From: Sergio Paracuellos <sergio.paracuellos@gmail.com>
3 Date: Fri, 13 Mar 2020 21:09:12 +0100
4 Subject: [PATCH] staging: mt7621-pci: release gpios after pci initialization
6 R3G's LEDs fail to initialize because one of them uses GPIO8
7 Hence, release the GPIO resources after PCIe initialization
8 and properly release also in driver error path.
10 Signed-off-by: Sergio Paracuellos <sergio.paracuellos@gmail.com>
11 Link: https://lore.kernel.org/r/20200313200913.24321-6-sergio.paracuellos@gmail.com
12 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
14 drivers/staging/mt7621-pci/pci-mt7621.c | 23 ++++++++++++++++++-----
15 1 file changed, 18 insertions(+), 5 deletions(-)
17 --- a/drivers/staging/mt7621-pci/pci-mt7621.c
18 +++ b/drivers/staging/mt7621-pci/pci-mt7621.c
19 @@ -484,6 +484,15 @@ static void mt7621_pcie_reset_ep_deasser
20 mdelay(PERST_DELAY_MS);
23 +static void mt7621_pcie_release_gpios(struct mt7621_pcie *pcie)
25 + struct mt7621_pcie_port *port;
27 + list_for_each_entry(port, &pcie->ports, list)
29 + gpiod_put(port->gpio_rst);
32 static void mt7621_pcie_init_ports(struct mt7621_pcie *pcie)
34 struct device *dev = pcie->dev;
35 @@ -683,7 +692,8 @@ static int mt7621_pci_probe(struct platf
36 err = mt7621_pcie_init_virtual_bridges(pcie);
38 dev_err(dev, "Nothing is connected in virtual bridges. Exiting...");
41 + goto out_release_gpios;
44 mt7621_pcie_enable_ports(pcie);
45 @@ -691,7 +701,7 @@ static int mt7621_pci_probe(struct platf
46 err = mt7621_pci_parse_request_of_pci_ranges(pcie);
48 dev_err(dev, "Error requesting pci resources from ranges");
50 + goto out_release_gpios;
53 setup_cm_memory_region(pcie);
54 @@ -699,16 +709,19 @@ static int mt7621_pci_probe(struct platf
55 err = mt7621_pcie_request_resources(pcie, &res);
57 dev_err(dev, "Error requesting resources\n");
59 + goto out_release_gpios;
62 err = mt7621_pcie_register_host(bridge, &res);
64 dev_err(dev, "Error registering host\n");
66 + goto out_release_gpios;
71 + mt7621_pcie_release_gpios(pcie);
76 static const struct of_device_id mt7621_pci_ids[] = {