ramips: 5.10: copy patches from 5.4
[openwrt/staging/rmilecki.git] / target / linux / ramips / patches-5.10 / 0104-staging-mt7621-pci-release-gpios-after-pci-initializ.patch
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
5
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.
9
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>
13 ---
14 drivers/staging/mt7621-pci/pci-mt7621.c | 23 ++++++++++++++++++-----
15 1 file changed, 18 insertions(+), 5 deletions(-)
16
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);
21 }
22
23 +static void mt7621_pcie_release_gpios(struct mt7621_pcie *pcie)
24 +{
25 + struct mt7621_pcie_port *port;
26 +
27 + list_for_each_entry(port, &pcie->ports, list)
28 + if (port->gpio_rst)
29 + gpiod_put(port->gpio_rst);
30 +}
31 +
32 static void mt7621_pcie_init_ports(struct mt7621_pcie *pcie)
33 {
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);
37 if (err) {
38 dev_err(dev, "Nothing is connected in virtual bridges. Exiting...");
39 - return 0;
40 + err = 0;
41 + goto out_release_gpios;
42 }
43
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);
47 if (err) {
48 dev_err(dev, "Error requesting pci resources from ranges");
49 - return err;
50 + goto out_release_gpios;
51 }
52
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);
56 if (err) {
57 dev_err(dev, "Error requesting resources\n");
58 - return err;
59 + goto out_release_gpios;
60 }
61
62 err = mt7621_pcie_register_host(bridge, &res);
63 if (err) {
64 dev_err(dev, "Error registering host\n");
65 - return err;
66 + goto out_release_gpios;
67 }
68
69 - return 0;
70 +out_release_gpios:
71 + mt7621_pcie_release_gpios(pcie);
72 +
73 + return err;
74 }
75
76 static const struct of_device_id mt7621_pci_ids[] = {