From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-pf0-x241.google.com ([2607:f8b0:400e:c00::241]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1cl1X0-0007zD-QF for barebox@lists.infradead.org; Mon, 06 Mar 2017 22:55:15 +0000 Received: by mail-pf0-x241.google.com with SMTP id v190so8048580pfb.0 for ; Mon, 06 Mar 2017 14:54:51 -0800 (PST) From: Andrey Smirnov Date: Mon, 6 Mar 2017 14:53:54 -0800 Message-Id: <20170306225356.31475-44-andrew.smirnov@gmail.com> In-Reply-To: <20170306225356.31475-1-andrew.smirnov@gmail.com> References: <20170306225356.31475-1-andrew.smirnov@gmail.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "barebox" Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: [PATCH 43/45] net: macb: Add DT support To: barebox@lists.infradead.org Cc: Andrey Smirnov Signed-off-by: Andrey Smirnov --- drivers/net/macb.c | 56 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/drivers/net/macb.c b/drivers/net/macb.c index 5f2e5e5..36e49c3 100644 --- a/drivers/net/macb.c +++ b/drivers/net/macb.c @@ -48,6 +48,7 @@ #include #include #include +#include #include "macb.h" @@ -615,14 +616,8 @@ static int macb_probe(struct device_d *dev) struct resource *iores; struct eth_device *edev; struct macb_device *macb; + const char *pclk_name; u32 ncfgr; - struct macb_platform_data *pdata; - - if (!dev->platform_data) { - dev_err(dev, "macb: no platform_data\n"); - return -ENODEV; - } - pdata = dev->platform_data; edev = xzalloc(sizeof(struct eth_device) + sizeof(struct macb_device)); edev->priv = (struct macb_device *)(edev + 1); @@ -633,22 +628,49 @@ static int macb_probe(struct device_d *dev) edev->open = macb_open; edev->send = macb_send; edev->halt = macb_halt; - edev->get_ethaddr = pdata->get_ethaddr ? pdata->get_ethaddr : macb_get_ethaddr; + edev->get_ethaddr = macb_get_ethaddr; edev->set_ethaddr = macb_set_ethaddr; edev->parent = dev; macb->miibus.read = macb_phy_read; macb->miibus.write = macb_phy_write; - macb->phy_addr = pdata->phy_addr; macb->miibus.priv = macb; macb->miibus.parent = dev; - if (pdata->phy_interface == PHY_INTERFACE_MODE_NA) - macb->interface = PHY_INTERFACE_MODE_MII; - else - macb->interface = pdata->phy_interface; + if (dev->platform_data) { + struct macb_platform_data *pdata = dev->platform_data; + + if (pdata->phy_interface == PHY_INTERFACE_MODE_NA) + macb->interface = PHY_INTERFACE_MODE_MII; + else + macb->interface = pdata->phy_interface; + + if (pdata->get_ethaddr) + edev->get_ethaddr = pdata->get_ethaddr; + + macb->phy_addr = pdata->phy_addr; + macb->phy_flags = pdata->phy_flags; + pclk_name = "macb_clk"; + } else if (dev->device_node) { + int ret; + struct device_node *mdiobus; - macb->phy_flags = pdata->phy_flags; + ret = of_get_phy_mode(dev->device_node); + if (ret < 0) + macb->interface = PHY_INTERFACE_MODE_MII; + else + macb->interface = ret; + + mdiobus = of_get_child_by_name(dev->device_node, "mdio"); + if (mdiobus) + macb->miibus.dev.device_node = mdiobus; + + macb->phy_addr = -1; + pclk_name = NULL; + } else { + dev_err(dev, "macb: no platform_data\n"); + return -ENODEV; + } iores = dev_request_mem_resource(dev, 0); if (IS_ERR(iores)) @@ -698,8 +720,14 @@ static int macb_probe(struct device_d *dev) return 0; } +static const struct of_device_id macb_dt_ids[] = { + { .compatible = "cdns,at91sam9260-macb",}, + { /* sentinel */ } +}; + static struct driver_d macb_driver = { .name = "macb", .probe = macb_probe, + .of_compatible = DRV_OF_COMPAT(macb_dt_ids), }; device_platform_driver(macb_driver); -- 2.9.3 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox