diff options
Diffstat (limited to 'target/linux')
-rw-r--r-- | target/linux/generic/files/drivers/net/phy/ar8216.c | 47 |
1 files changed, 33 insertions, 14 deletions
diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c index 4c83a6f62a..f7fbf4e498 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -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); |