ar71xx: use soc specific divider for mdio clock
SVN-Revision: 18225
This commit is contained in:
		
							parent
							
								
									f336f8748c
								
							
						
					
					
						commit
						21fc9ffe63
					
				@ -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