generic: ar8216: add ar8xxx_create{,mii} helpers
authorGabor Juhos <juhosg@openwrt.org>
Sun, 10 Feb 2013 18:42:04 +0000 (18:42 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Sun, 10 Feb 2013 18:42:04 +0000 (18:42 +0000)
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
SVN-Revision: 35543

target/linux/generic/files/drivers/net/phy/ar8216.c

index 4c83a6f62a0a5de11d7367c129bc4e5265b14d9a..f7fbf4e498e745a18656438b53e9d9558dbbbeb1 100644 (file)
@@ -1742,9 +1742,6 @@ ar8xxx_mib_init(struct ar8216_priv *priv)
        if (!priv->mib_stats)
                return -ENOMEM;
 
-       mutex_init(&priv->mib_lock);
-       INIT_DELAYED_WORK(&priv->mib_work, ar8xxx_mib_work_func);
-
        return 0;
 }
 
@@ -1768,6 +1765,37 @@ ar8xxx_mib_cleanup(struct ar8216_priv *priv)
        kfree(priv->mib_stats);
 }
 
+static struct ar8216_priv *
+ar8xxx_create(void)
+{
+       struct ar8216_priv *priv;
+
+       priv = kzalloc(sizeof(struct ar8216_priv), GFP_KERNEL);
+       if (priv == NULL)
+               return NULL;
+
+       mutex_init(&priv->reg_mutex);
+       mutex_init(&priv->mib_lock);
+       INIT_DELAYED_WORK(&priv->mib_work, ar8xxx_mib_work_func);
+
+       return priv;
+}
+
+static struct ar8216_priv *
+ar8xxx_create_mii(struct mii_bus *bus)
+{
+       struct ar8216_priv *priv;
+
+       priv = ar8xxx_create();
+       if (priv) {
+               priv->mii_bus = bus;
+               priv->read = ar8216_mii_read;
+               priv->write = ar8216_mii_write;
+       }
+
+       return priv;
+}
+
 static int
 ar8216_config_init(struct phy_device *pdev)
 {
@@ -1777,14 +1805,10 @@ ar8216_config_init(struct phy_device *pdev)
        int ret;
 
        if (!priv) {
-               priv = kzalloc(sizeof(struct ar8216_priv), GFP_KERNEL);
+               priv = ar8xxx_create_mii(pdev->bus);
                if (priv == NULL)
                        return -ENOMEM;
 
-               priv->mii_bus = pdev->bus;
-               priv->read = ar8216_mii_read;
-               priv->write = ar8216_mii_write;
-
                ret = ar8216_id_chip(priv);
                if (ret)
                        goto err_free_priv;
@@ -1829,8 +1853,6 @@ ar8216_config_init(struct phy_device *pdev)
                return 0;
        }
 
-       mutex_init(&priv->reg_mutex);
-
        pdev->priv = priv;
 
        swdev = &priv->dev;
@@ -2006,13 +2028,10 @@ ar8216_probe(struct phy_device *pdev)
        if (!ar8xxx_is_possible(pdev->bus))
                return -ENODEV;
 
-       priv = kzalloc(sizeof(struct ar8216_priv), GFP_KERNEL);
+       priv = ar8xxx_create_mii(pdev->bus);
        if (priv == NULL)
                return -ENOMEM;
 
-       priv->mii_bus = pdev->bus;
-       priv->read = ar8216_mii_read;
-       priv->write = ar8216_mii_write;
        priv->phy = pdev;
 
        ret = ar8216_id_chip(priv);