diff options
author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2009-10-30 12:26:22 +0000 |
---|---|---|
committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2009-10-30 12:26:22 +0000 |
commit | 0724c81c225516ac88aeb5cd6b837b1fddca7bb1 (patch) | |
tree | 47098902642e409cdda14f08dfd6485238f6288b /target/linux/ar71xx/files/drivers/net | |
parent | 5be08769f35ba9a5c170eb7a1139f7778a2549a1 (diff) |
ar71xx: use soc specific divider for mdio clock
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@18225 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ar71xx/files/drivers/net')
-rw-r--r-- | target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h | 7 | ||||
-rw-r--r-- | target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_mdio.c | 18 |
2 files changed, 17 insertions, 8 deletions
diff --git a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h index f4ae0eb178..77962fec80 100644 --- a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h +++ b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h @@ -103,9 +103,10 @@ struct ag71xx_ring { }; struct ag71xx_mdio { - struct mii_bus *mii_bus; - int mii_irq[PHY_MAX_ADDR]; - void __iomem *mdio_base; + struct mii_bus *mii_bus; + int mii_irq[PHY_MAX_ADDR]; + void __iomem *mdio_base; + struct ag71xx_mdio_platform_data *pdata; }; struct ag71xx { diff --git a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_mdio.c b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_mdio.c index d3cbacedb2..b6fccbbcd6 100644 --- a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_mdio.c +++ b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_mdio.c @@ -106,7 +106,10 @@ static int ag71xx_mdio_reset(struct mii_bus *bus) struct ag71xx_mdio *am = bus->priv; u32 t; - t = MII_CFG_CLK_DIV_28; + if (am->pdata->is_ar7240) + t = MII_CFG_CLK_DIV_6; + else + t = MII_CFG_CLK_DIV_28; ag71xx_mdio_wr(am, AG71XX_REG_MII_CFG, t | MII_CFG_RESET); udelay(100); @@ -143,12 +146,20 @@ static int __init ag71xx_mdio_probe(struct platform_device *pdev) if (ag71xx_mdio_bus) return -EBUSY; + pdata = pdev->dev.platform_data; + if (!pdata) { + dev_err(&pdev->dev, "no platform data specified\n"); + return -EINVAL; + } + am = kzalloc(sizeof(*am), GFP_KERNEL); if (!am) { err = -ENOMEM; goto err_out; } + am->pdata = pdata; + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { dev_err(&pdev->dev, "no iomem resource found\n"); @@ -177,10 +188,7 @@ static int __init ag71xx_mdio_probe(struct platform_device *pdev) am->mii_bus->priv = am; am->mii_bus->parent = &pdev->dev; snprintf(am->mii_bus->id, MII_BUS_ID_SIZE, "%x", 0); - - pdata = pdev->dev.platform_data; - if (pdata) - am->mii_bus->phy_mask = pdata->phy_mask; + am->mii_bus->phy_mask = pdata->phy_mask; for (i = 0; i < PHY_MAX_ADDR; i++) am->mii_irq[i] = PHY_POLL; |