From 1c0c61e9279e27822db4e30d3a4021ec384f2736 Mon Sep 17 00:00:00 2001 From: Cédric Le Goater Date: Mon, 29 Oct 2018 07:06:36 +0100 Subject: net: ftgmac100: add clock support Signed-off-by: Cédric Le Goater Reviewed-by: Joel Stanley Acked-by: Joe Hershberger --- drivers/net/ftgmac100.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'drivers/net/ftgmac100.c') diff --git a/drivers/net/ftgmac100.c b/drivers/net/ftgmac100.c index ec46add1d35..79897761675 100644 --- a/drivers/net/ftgmac100.c +++ b/drivers/net/ftgmac100.c @@ -11,6 +11,7 @@ * Copyright (C) 2018, IBM Corporation. */ +#include #include #include #include @@ -55,6 +56,7 @@ * @bus: The mdio bus * @phy_mode: The mode of the PHY interface (rgmii, rmii, ...) * @max_speed: Maximum speed of Ethernet connection supported by MAC + * @clks: The bulk of clocks assigned to the device in the DT */ struct ftgmac100_data { struct ftgmac100 *iobase; @@ -69,6 +71,8 @@ struct ftgmac100_data { struct mii_dev *bus; u32 phy_mode; u32 max_speed; + + struct clk_bulk clks; }; /* @@ -489,6 +493,7 @@ static int ftgmac100_write_hwaddr(struct udevice *dev) static int ftgmac100_ofdata_to_platdata(struct udevice *dev) { struct eth_pdata *pdata = dev_get_platdata(dev); + struct ftgmac100_data *priv = dev_get_priv(dev); const char *phy_mode; pdata->iobase = devfdt_get_addr(dev); @@ -503,7 +508,7 @@ static int ftgmac100_ofdata_to_platdata(struct udevice *dev) pdata->max_speed = dev_read_u32_default(dev, "max-speed", 0); - return 0; + return clk_get_bulk(dev, &priv->clks); } static int ftgmac100_probe(struct udevice *dev) @@ -517,6 +522,10 @@ static int ftgmac100_probe(struct udevice *dev) priv->max_speed = pdata->max_speed; priv->phy_addr = 0; + ret = clk_enable_bulk(&priv->clks); + if (ret) + goto out; + ret = ftgmac100_mdio_init(dev); if (ret) { dev_err(dev, "Failed to initialize mdiobus: %d\n", ret); @@ -530,6 +539,9 @@ static int ftgmac100_probe(struct udevice *dev) } out: + if (ret) + clk_release_bulk(&priv->clks); + return ret; } @@ -540,6 +552,7 @@ static int ftgmac100_remove(struct udevice *dev) free(priv->phydev); mdio_unregister(priv->bus); mdio_free(priv->bus); + clk_release_bulk(&priv->clks); return 0; } -- cgit v1.2.3