net: mdio: mscc-miim: add ability to be used in a non-mmio configuration
[linux-2.6-microblaze.git] / drivers / net / mdio / mdio-mscc-miim.c
index 0854100..51f68da 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/iopoll.h>
 #include <linux/kernel.h>
 #include <linux/mdio/mdio-mscc-miim.h>
+#include <linux/mfd/ocelot.h>
 #include <linux/module.h>
 #include <linux/of_mdio.h>
 #include <linux/phy.h>
@@ -270,44 +271,25 @@ static int mscc_miim_clk_set(struct mii_bus *bus)
 
 static int mscc_miim_probe(struct platform_device *pdev)
 {
-       struct regmap *mii_regmap, *phy_regmap = NULL;
        struct device_node *np = pdev->dev.of_node;
+       struct regmap *mii_regmap, *phy_regmap;
        struct device *dev = &pdev->dev;
-       void __iomem *regs, *phy_regs;
        struct mscc_miim_dev *miim;
-       struct resource *res;
        struct mii_bus *bus;
        int ret;
 
-       regs = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
-       if (IS_ERR(regs)) {
-               dev_err(dev, "Unable to map MIIM registers\n");
-               return PTR_ERR(regs);
-       }
-
-       mii_regmap = devm_regmap_init_mmio(dev, regs, &mscc_miim_regmap_config);
-
-       if (IS_ERR(mii_regmap)) {
-               dev_err(dev, "Unable to create MIIM regmap\n");
-               return PTR_ERR(mii_regmap);
-       }
+       mii_regmap = ocelot_regmap_from_resource(pdev, 0,
+                                                &mscc_miim_regmap_config);
+       if (IS_ERR(mii_regmap))
+               return dev_err_probe(dev, PTR_ERR(mii_regmap),
+                                    "Unable to create MIIM regmap\n");
 
        /* This resource is optional */
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-       if (res) {
-               phy_regs = devm_ioremap_resource(dev, res);
-               if (IS_ERR(phy_regs)) {
-                       dev_err(dev, "Unable to map internal phy registers\n");
-                       return PTR_ERR(phy_regs);
-               }
-
-               phy_regmap = devm_regmap_init_mmio(dev, phy_regs,
-                                                  &mscc_miim_phy_regmap_config);
-               if (IS_ERR(phy_regmap)) {
-                       dev_err(dev, "Unable to create phy register regmap\n");
-                       return PTR_ERR(phy_regmap);
-               }
-       }
+       phy_regmap = ocelot_regmap_from_resource_optional(pdev, 1,
+                                                &mscc_miim_phy_regmap_config);
+       if (IS_ERR(phy_regmap))
+               return dev_err_probe(dev, PTR_ERR(phy_regmap),
+                                    "Unable to create phy register regmap\n");
 
        ret = mscc_miim_setup(dev, &bus, "mscc_miim", mii_regmap, 0);
        if (ret < 0) {