mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-11-24 04:26:16 +02:00
ar71xx: use soc specific divider for mdio clock
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@18225 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
5be08769f3
commit
0724c81c22
@ -186,9 +186,7 @@ static struct resource ar71xx_mdio_resources[] = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ag71xx_mdio_platform_data ar71xx_mdio_data = {
|
static struct ag71xx_mdio_platform_data ar71xx_mdio_data;
|
||||||
.phy_mask = 0xffffffff,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_device ar71xx_mdio_device = {
|
static struct platform_device ar71xx_mdio_device = {
|
||||||
.name = "ag71xx-mdio",
|
.name = "ag71xx-mdio",
|
||||||
@ -202,7 +200,11 @@ static struct platform_device ar71xx_mdio_device = {
|
|||||||
|
|
||||||
void __init ar71xx_add_device_mdio(u32 phy_mask)
|
void __init ar71xx_add_device_mdio(u32 phy_mask)
|
||||||
{
|
{
|
||||||
|
if (ar71xx_soc == AR71XX_SOC_AR7240)
|
||||||
|
ar71xx_mdio_data.is_ar7240 = 1;
|
||||||
|
|
||||||
ar71xx_mdio_data.phy_mask = phy_mask;
|
ar71xx_mdio_data.phy_mask = phy_mask;
|
||||||
|
|
||||||
platform_device_register(&ar71xx_mdio_device);
|
platform_device_register(&ar71xx_mdio_device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,6 +37,7 @@ struct ag71xx_platform_data {
|
|||||||
|
|
||||||
struct ag71xx_mdio_platform_data {
|
struct ag71xx_mdio_platform_data {
|
||||||
u32 phy_mask;
|
u32 phy_mask;
|
||||||
|
int is_ar7240;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ar71xx_ehci_platform_data {
|
struct ar71xx_ehci_platform_data {
|
||||||
|
@ -103,9 +103,10 @@ struct ag71xx_ring {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct ag71xx_mdio {
|
struct ag71xx_mdio {
|
||||||
struct mii_bus *mii_bus;
|
struct mii_bus *mii_bus;
|
||||||
int mii_irq[PHY_MAX_ADDR];
|
int mii_irq[PHY_MAX_ADDR];
|
||||||
void __iomem *mdio_base;
|
void __iomem *mdio_base;
|
||||||
|
struct ag71xx_mdio_platform_data *pdata;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ag71xx {
|
struct ag71xx {
|
||||||
|
@ -106,7 +106,10 @@ static int ag71xx_mdio_reset(struct mii_bus *bus)
|
|||||||
struct ag71xx_mdio *am = bus->priv;
|
struct ag71xx_mdio *am = bus->priv;
|
||||||
u32 t;
|
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);
|
ag71xx_mdio_wr(am, AG71XX_REG_MII_CFG, t | MII_CFG_RESET);
|
||||||
udelay(100);
|
udelay(100);
|
||||||
@ -143,12 +146,20 @@ static int __init ag71xx_mdio_probe(struct platform_device *pdev)
|
|||||||
if (ag71xx_mdio_bus)
|
if (ag71xx_mdio_bus)
|
||||||
return -EBUSY;
|
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);
|
am = kzalloc(sizeof(*am), GFP_KERNEL);
|
||||||
if (!am) {
|
if (!am) {
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
am->pdata = pdata;
|
||||||
|
|
||||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
if (!res) {
|
if (!res) {
|
||||||
dev_err(&pdev->dev, "no iomem resource found\n");
|
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->priv = am;
|
||||||
am->mii_bus->parent = &pdev->dev;
|
am->mii_bus->parent = &pdev->dev;
|
||||||
snprintf(am->mii_bus->id, MII_BUS_ID_SIZE, "%x", 0);
|
snprintf(am->mii_bus->id, MII_BUS_ID_SIZE, "%x", 0);
|
||||||
|
am->mii_bus->phy_mask = pdata->phy_mask;
|
||||||
pdata = pdev->dev.platform_data;
|
|
||||||
if (pdata)
|
|
||||||
am->mii_bus->phy_mask = pdata->phy_mask;
|
|
||||||
|
|
||||||
for (i = 0; i < PHY_MAX_ADDR; i++)
|
for (i = 0; i < PHY_MAX_ADDR; i++)
|
||||||
am->mii_irq[i] = PHY_POLL;
|
am->mii_irq[i] = PHY_POLL;
|
||||||
|
Loading…
Reference in New Issue
Block a user