aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2013-08-26 16:04:26 -0400
committerDavid S. Miller <davem@davemloft.net>2013-08-26 16:04:26 -0400
commitb65f63ee845136940db985f3072335d8cdb6fd6c (patch)
tree79b197a0f59186352a27f92b438ee68e6636fa63
parentb4de77ade3fc56e41b978b68d78a351dab28b74e (diff)
parent8c038e7e14b1c5f156745e3c4df0a3aa46173dd9 (diff)
Merge branch 'cadence'
Boris BREZILLON says: ==================== net/cadence/macb: add support for dt phy definition This patch series adds support for ethernet phy definition using device tree. This may help in moving some at91 boards to dt (some of them define an interrupt pin). Tested on samad31ek. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--arch/arm/boot/dts/sama5d3xmb.dtsi8
-rw-r--r--drivers/net/ethernet/cadence/macb.c41
2 files changed, 42 insertions, 7 deletions
diff --git a/arch/arm/boot/dts/sama5d3xmb.dtsi b/arch/arm/boot/dts/sama5d3xmb.dtsi
index 8a9e05d8a4b8..e9521d58e9c1 100644
--- a/arch/arm/boot/dts/sama5d3xmb.dtsi
+++ b/arch/arm/boot/dts/sama5d3xmb.dtsi
@@ -81,6 +81,14 @@
81 81
82 macb1: ethernet@f802c000 { 82 macb1: ethernet@f802c000 {
83 phy-mode = "rmii"; 83 phy-mode = "rmii";
84
85 #address-cells = <1>;
86 #size-cells = <0>;
87 phy0: ethernet-phy@0 {
88 interrupt-parent = <&pioE>;
89 interrupts = <30 IRQ_TYPE_EDGE_FALLING>;
90 reg = <1>;
91 };
84 }; 92 };
85 93
86 pinctrl@fffff200 { 94 pinctrl@fffff200 {
diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
index e866608d7d91..fe06ab0f7375 100644
--- a/drivers/net/ethernet/cadence/macb.c
+++ b/drivers/net/ethernet/cadence/macb.c
@@ -27,6 +27,7 @@
27#include <linux/phy.h> 27#include <linux/phy.h>
28#include <linux/of.h> 28#include <linux/of.h>
29#include <linux/of_device.h> 29#include <linux/of_device.h>
30#include <linux/of_mdio.h>
30#include <linux/of_net.h> 31#include <linux/of_net.h>
31#include <linux/pinctrl/consumer.h> 32#include <linux/pinctrl/consumer.h>
32 33
@@ -314,6 +315,7 @@ static int macb_mii_probe(struct net_device *dev)
314int macb_mii_init(struct macb *bp) 315int macb_mii_init(struct macb *bp)
315{ 316{
316 struct macb_platform_data *pdata; 317 struct macb_platform_data *pdata;
318 struct device_node *np;
317 int err = -ENXIO, i; 319 int err = -ENXIO, i;
318 320
319 /* Enable management port */ 321 /* Enable management port */
@@ -335,21 +337,46 @@ int macb_mii_init(struct macb *bp)
335 bp->mii_bus->parent = &bp->dev->dev; 337 bp->mii_bus->parent = &bp->dev->dev;
336 pdata = bp->pdev->dev.platform_data; 338 pdata = bp->pdev->dev.platform_data;
337 339
338 if (pdata)
339 bp->mii_bus->phy_mask = pdata->phy_mask;
340
341 bp->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL); 340 bp->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
342 if (!bp->mii_bus->irq) { 341 if (!bp->mii_bus->irq) {
343 err = -ENOMEM; 342 err = -ENOMEM;
344 goto err_out_free_mdiobus; 343 goto err_out_free_mdiobus;
345 } 344 }
346 345
347 for (i = 0; i < PHY_MAX_ADDR; i++)
348 bp->mii_bus->irq[i] = PHY_POLL;
349
350 dev_set_drvdata(&bp->dev->dev, bp->mii_bus); 346 dev_set_drvdata(&bp->dev->dev, bp->mii_bus);
351 347
352 if (mdiobus_register(bp->mii_bus)) 348 np = bp->pdev->dev.of_node;
349 if (np) {
350 /* try dt phy registration */
351 err = of_mdiobus_register(bp->mii_bus, np);
352
353 /* fallback to standard phy registration if no phy were
354 found during dt phy registration */
355 if (!err && !phy_find_first(bp->mii_bus)) {
356 for (i = 0; i < PHY_MAX_ADDR; i++) {
357 struct phy_device *phydev;
358
359 phydev = mdiobus_scan(bp->mii_bus, i);
360 if (IS_ERR(phydev)) {
361 err = PTR_ERR(phydev);
362 break;
363 }
364 }
365
366 if (err)
367 goto err_out_unregister_bus;
368 }
369 } else {
370 for (i = 0; i < PHY_MAX_ADDR; i++)
371 bp->mii_bus->irq[i] = PHY_POLL;
372
373 if (pdata)
374 bp->mii_bus->phy_mask = pdata->phy_mask;
375
376 err = mdiobus_register(bp->mii_bus);
377 }
378
379 if (err)
353 goto err_out_free_mdio_irq; 380 goto err_out_free_mdio_irq;
354 381
355 if (macb_mii_probe(bp->dev) != 0) { 382 if (macb_mii_probe(bp->dev) != 0) {