diff options
author | Gabor Juhos <juhosg@openwrt.org> | 2013-02-10 18:42:04 +0000 |
---|---|---|
committer | Gabor Juhos <juhosg@openwrt.org> | 2013-02-10 18:42:04 +0000 |
commit | 77b3c551c4a3520153d0e393afa279ca40387f6a (patch) | |
tree | 66d04cd6786ff7b7ac3bdc9dc7cfde9001fbe95b /target/linux | |
parent | 5f70b1db2af5138af968d848737ebb451ad2f4c6 (diff) | |
download | upstream-77b3c551c4a3520153d0e393afa279ca40387f6a.tar.gz upstream-77b3c551c4a3520153d0e393afa279ca40387f6a.tar.bz2 upstream-77b3c551c4a3520153d0e393afa279ca40387f6a.zip |
generic: ar8216: add ar8xxx_create{,mii} helpers
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
SVN-Revision: 35543
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); |