kernel: backport some upstream at803x fixes
[openwrt/openwrt.git] / target / linux / generic / patches-4.4 / 737-net-phy-at803x-Request-reset-GPIO-only-for-AT8030-PH.patch
1 From: Sebastian Frias <sf84@laposte.net>
2 Date: Wed, 23 Mar 2016 11:49:09 +0100
3 Subject: [PATCH] net: phy: at803x: Request 'reset' GPIO only for AT8030 PHY
4
5 This removes the dependency on GPIOLIB for non faulty PHYs.
6
7 Indeed, without this patch, if GPIOLIB is not selected
8 devm_gpiod_get_optional() will return -ENOSYS and the driver probe
9 call will fail, regardless of the actual PHY hardware.
10
11 Out of the 3 PHYs supported by this driver (AT8030, AT8031, AT8035),
12 only AT8030 presents the issues that commit 13a56b449325 ("net: phy:
13 at803x: Add support for hardware reset") attempts to work-around by
14 using a 'reset' GPIO line.
15
16 Hence, only AT8030 should depend on GPIOLIB operating properly.
17
18 Fixes: 13a56b449325 ("net: phy: at803x: Add support for hardware reset")
19
20 Signed-off-by: Sebastian Frias <sf84@laposte.net>
21 Signed-off-by: David S. Miller <davem@davemloft.net>
22 ---
23
24 --- a/drivers/net/phy/at803x.c
25 +++ b/drivers/net/phy/at803x.c
26 @@ -250,12 +250,16 @@ static int at803x_probe(struct phy_devic
27 if (!priv)
28 return -ENOMEM;
29
30 + if (phydev->drv->phy_id != ATH8030_PHY_ID)
31 + goto does_not_require_reset_workaround;
32 +
33 gpiod_reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
34 if (IS_ERR(gpiod_reset))
35 return PTR_ERR(gpiod_reset);
36
37 priv->gpiod_reset = gpiod_reset;
38
39 +does_not_require_reset_workaround:
40 phydev->priv = priv;
41
42 return 0;