struct plat_stmmacenet_data *plat;
 };
 
-#ifdef CONFIG_STM_DRIVERS
-#include <linux/stm/pad.h>
-static inline int stmmac_claim_resource(struct platform_device *pdev)
-{
-       int ret = 0;
-       struct plat_stmmacenet_data *plat_dat = pdev->dev.platform_data;
-
-       /* Pad routing setup */
-       if (IS_ERR(devm_stm_pad_claim(&pdev->dev, plat_dat->pad_config,
-                       dev_name(&pdev->dev)))) {
-               printk(KERN_ERR "%s: Failed to request pads!\n", __func__);
-               ret = -ENODEV;
-       }
-       return ret;
-}
-#else
-static inline int stmmac_claim_resource(struct platform_device *pdev)
-{
-       return 0;
-}
-#endif
-
 extern int stmmac_mdio_unregister(struct net_device *ndev);
 extern int stmmac_mdio_register(struct net_device *ndev);
 extern void stmmac_set_ethtool_ops(struct net_device *netdev);
 
        struct resource *res;
        void __iomem *addr = NULL;
        struct net_device *ndev = NULL;
-       struct stmmac_priv *priv;
+       struct stmmac_priv *priv = NULL;
        struct plat_stmmacenet_data *plat_dat;
 
        pr_info("STMMAC driver:\n\tplatform registration... ");
        /* Set the I/O base addr */
        ndev->base_addr = (unsigned long)addr;
 
-       /* Verify embedded resource for the platform */
-       ret = stmmac_claim_resource(pdev);
-       if (ret < 0)
-               goto out;
+       /* Custom initialisation */
+       if (priv->plat->init) {
+               ret = priv->plat->init(pdev);
+               if (unlikely(ret))
+                       goto out;
+       }
 
        /* MAC HW revice detection */
        ret = stmmac_mac_device_setup(ndev);
 
 out:
        if (ret < 0) {
+               if (priv->plat->exit)
+                       priv->plat->exit(pdev);
+
                platform_set_drvdata(pdev, NULL);
                release_mem_region(res->start, resource_size(res));
                if (addr != NULL)
 
        stmmac_mdio_unregister(ndev);
 
+       if (priv->plat->exit)
+               priv->plat->exit(pdev);
+
        platform_set_drvdata(pdev, NULL);
        unregister_netdev(ndev);
 
 
        int pmt;
        void (*fix_mac_speed)(void *priv, unsigned int speed);
        void (*bus_setup)(void __iomem *ioaddr);
-#ifdef CONFIG_STM_DRIVERS
-       struct stm_pad_config *pad_config;
-#endif
+       int (*init)(struct platform_device *pdev);
+       void (*exit)(struct platform_device *pdev);
+       void *custom_cfg;
        void *bsp_priv;
 };