summaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/cadence
diff options
context:
space:
mode:
authorGregory CLEMENT <gregory.clement@free-electrons.com>2015-12-17 10:51:04 +0100
committerDavid S. Miller <davem@davemloft.net>2015-12-17 15:53:22 -0500
commit270c499f0993a6b3a591eda6a5b96e873b1d84fa (patch)
treef39bdbfe623ebe46cd2d45ff7a7c468b418cc151 /drivers/net/ethernet/cadence
parent08f411d6a42dfa32842ef36e0e9743c34a7c942f (diff)
downloadlinux-270c499f0993a6b3a591eda6a5b96e873b1d84fa.tar.bz2
net/macb: Update device tree binding for resetting PHY using GPIO
Instead of being at the MAC level the reset gpio preperty is moved at the PHY child node level. It is still managed by the MAC, but from the point of view of the binding it make more sense to be part of the PHY node. This commit also fixes a build errors if GPIOLIB is not selected. Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/cadence')
-rw-r--r--drivers/net/ethernet/cadence/macb.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
index 01236465c298..8b45bc9ac29e 100644
--- a/drivers/net/ethernet/cadence/macb.c
+++ b/drivers/net/ethernet/cadence/macb.c
@@ -19,6 +19,7 @@
#include <linux/init.h>
#include <linux/io.h>
#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
#include <linux/interrupt.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
@@ -28,6 +29,7 @@
#include <linux/phy.h>
#include <linux/of.h>
#include <linux/of_device.h>
+#include <linux/of_gpio.h>
#include <linux/of_mdio.h>
#include <linux/of_net.h>
@@ -2817,6 +2819,7 @@ static int macb_probe(struct platform_device *pdev)
= macb_clk_init;
int (*init)(struct platform_device *) = macb_init;
struct device_node *np = pdev->dev.of_node;
+ struct device_node *phy_node;
const struct macb_config *macb_config = NULL;
struct clk *pclk, *hclk, *tx_clk;
unsigned int queue_mask, num_queues;
@@ -2905,8 +2908,14 @@ static int macb_probe(struct platform_device *pdev)
macb_get_hwaddr(bp);
/* Power up the PHY if there is a GPIO reset */
- bp->reset_gpio = devm_gpiod_get_optional(&bp->pdev->dev, "phy-reset",
- GPIOD_OUT_HIGH);
+ phy_node = of_get_next_available_child(np, NULL);
+ if (phy_node) {
+ int gpio = of_get_named_gpio(phy_node, "reset-gpios", 0);
+ if (gpio_is_valid(gpio))
+ bp->reset_gpio = gpio_to_desc(gpio);
+ gpiod_set_value(bp->reset_gpio, GPIOD_OUT_HIGH);
+ }
+ of_node_put(phy_node);
err = of_get_phy_mode(np);
if (err < 0) {
@@ -2976,7 +2985,7 @@ static int macb_remove(struct platform_device *pdev)
mdiobus_free(bp->mii_bus);
/* Shutdown the PHY if there is a GPIO reset */
- gpiod_set_value(bp->reset_gpio, 0);
+ gpiod_set_value(bp->reset_gpio, GPIOD_OUT_LOW);
unregister_netdev(dev);
clk_disable_unprepare(bp->tx_clk);