diff options
author | Steffen Trumtrar <s.trumtrar@pengutronix.de> | 2018-01-10 09:14:17 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2018-01-11 09:34:33 +0100 |
commit | c1f902841ce3c759a4dddbf02ccc8012e4c50162 (patch) | |
tree | 0776271a5df71a70d39f6b2f605554cd8be2b2ed /drivers/net/designware.c | |
parent | 896894088e7de081caddb5fc8dc653bc0f5ac7bb (diff) | |
download | barebox-c1f902841ce3c759a4dddbf02ccc8012e4c50162.tar.gz barebox-c1f902841ce3c759a4dddbf02ccc8012e4c50162.tar.xz |
net: designware: move probe to generic driver
The designware ethernet core is used on multiple different SoCs.
The linux kernel has a generic driver and SoC-specific drivers.
Do the same here.
Signed-off-by: Steffen Trumtrar <s.trumtrar@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/net/designware.c')
-rw-r--r-- | drivers/net/designware.c | 60 |
1 files changed, 6 insertions, 54 deletions
diff --git a/drivers/net/designware.c b/drivers/net/designware.c index 1d3a68384e..ec20da09b3 100644 --- a/drivers/net/designware.c +++ b/drivers/net/designware.c @@ -32,36 +32,6 @@ #include <linux/err.h> #include "designware.h" -struct dw_eth_dev { - struct eth_device netdev; - struct mii_bus miibus; - - void (*fix_mac_speed)(int speed); - u8 macaddr[6]; - u32 tx_currdescnum; - u32 rx_currdescnum; - - struct dmamacdescr *tx_mac_descrtable; - struct dmamacdescr *rx_mac_descrtable; - - u8 *txbuffs; - u8 *rxbuffs; - - struct eth_mac_regs *mac_regs_p; - struct eth_dma_regs *dma_regs_p; - int phy_addr; - phy_interface_t interface; - int enh_desc; -}; - -struct dw_eth_drvdata { - bool enh_desc; -}; - -static struct dw_eth_drvdata dwmac_370a_drvdata = { - .enh_desc = 1, -}; - /* Speed specific definitions */ #define SPEED_10M 1 #define SPEED_100M 2 @@ -447,7 +417,7 @@ static int dwc_probe_dt(struct device_d *dev, struct dw_eth_dev *priv) return 0; } -static int dwc_ether_probe(struct device_d *dev) +struct dw_eth_dev *dwc_drv_probe(struct device_d *dev) { struct resource *iores; struct dw_eth_dev *priv; @@ -462,7 +432,7 @@ static int dwc_ether_probe(struct device_d *dev) ret = dev_get_drvdata(dev, (const void **)&drvdata); if (ret) - return ret; + return ERR_PTR(ret); priv->enh_desc = drvdata->enh_desc; @@ -473,12 +443,12 @@ static int dwc_ether_probe(struct device_d *dev) } else { ret = dwc_probe_dt(dev, priv); if (ret) - return ret; + return ERR_PTR(ret); } iores = dev_request_mem_resource(dev, 0); if (IS_ERR(iores)) - return PTR_ERR(iores); + return ERR_CAST(iores); base = IOMEM(iores->start); priv->mac_regs_p = base; @@ -512,24 +482,6 @@ static int dwc_ether_probe(struct device_d *dev) mdiobus_register(miibus); eth_register(edev); - return 0; -} -static __maybe_unused struct of_device_id dwc_ether_compatible[] = { - { - .compatible = "snps,dwmac-3.70a", - .data = &dwmac_370a_drvdata, - }, { - .compatible = "snps,dwmac-3.72a", - .data = &dwmac_370a_drvdata, - }, { - /* sentinel */ - } -}; - -static struct driver_d dwc_ether_driver = { - .name = "designware_eth", - .probe = dwc_ether_probe, - .of_compatible = DRV_OF_COMPAT(dwc_ether_compatible), -}; -device_platform_driver(dwc_ether_driver); + return priv; +} |