mirror of
https://github.com/torvalds/linux.git
synced 2024-11-17 01:22:07 +00:00
net: mvmdio: allow platform device style registration
This patch changes the mvmdio driver not to use device tree helper functions such as of_mdiobus_register() and of_iomap() so we can instantiate this driver using a classic platform_device approach. Use the device manager helper to ioremap() the base register cookie so we get automatic freeing upon error and removal. This change is harmless for Device Tree platforms because they will get the driver be registered the same way as it was before. Signed-off-by: Florian Fainelli <florian@openwrt.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
43d6869037
commit
7111b717a0
@ -24,10 +24,10 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_mdio.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/of_mdio.h>
|
||||
|
||||
#define MVMDIO_SMI_DATA_SHIFT 0
|
||||
#define MVMDIO_SMI_PHY_ADDR_SHIFT 16
|
||||
@ -143,11 +143,17 @@ static int orion_mdio_reset(struct mii_bus *bus)
|
||||
|
||||
static int orion_mdio_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
struct resource *r;
|
||||
struct mii_bus *bus;
|
||||
struct orion_mdio_dev *dev;
|
||||
int i, ret;
|
||||
|
||||
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!r) {
|
||||
dev_err(&pdev->dev, "No SMI register address given\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
bus = mdiobus_alloc_size(sizeof(struct orion_mdio_dev));
|
||||
if (!bus) {
|
||||
dev_err(&pdev->dev, "Cannot allocate MDIO bus\n");
|
||||
@ -172,9 +178,9 @@ static int orion_mdio_probe(struct platform_device *pdev)
|
||||
bus->irq[i] = PHY_POLL;
|
||||
|
||||
dev = bus->priv;
|
||||
dev->smireg = of_iomap(pdev->dev.of_node, 0);
|
||||
dev->smireg = devm_ioremap(&pdev->dev, r->start, resource_size(r));
|
||||
if (!dev->smireg) {
|
||||
dev_err(&pdev->dev, "No SMI register address given in DT\n");
|
||||
dev_err(&pdev->dev, "Unable to remap SMI register\n");
|
||||
kfree(bus->irq);
|
||||
mdiobus_free(bus);
|
||||
return -ENODEV;
|
||||
@ -182,10 +188,12 @@ static int orion_mdio_probe(struct platform_device *pdev)
|
||||
|
||||
mutex_init(&dev->lock);
|
||||
|
||||
ret = of_mdiobus_register(bus, np);
|
||||
if (pdev->dev.of_node)
|
||||
ret = of_mdiobus_register(bus, pdev->dev.of_node);
|
||||
else
|
||||
ret = mdiobus_register(bus);
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "Cannot register MDIO bus (%d)\n", ret);
|
||||
iounmap(dev->smireg);
|
||||
kfree(bus->irq);
|
||||
mdiobus_free(bus);
|
||||
return ret;
|
||||
|
Loading…
Reference in New Issue
Block a user