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 = {
 | 
			
		||||
	.phy_mask	= 0xffffffff,
 | 
			
		||||
};
 | 
			
		||||
static struct ag71xx_mdio_platform_data ar71xx_mdio_data;
 | 
			
		||||
 | 
			
		||||
static struct platform_device ar71xx_mdio_device = {
 | 
			
		||||
	.name		= "ag71xx-mdio",
 | 
			
		||||
@ -202,7 +200,11 @@ static struct platform_device ar71xx_mdio_device = {
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
	platform_device_register(&ar71xx_mdio_device);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -37,6 +37,7 @@ struct ag71xx_platform_data {
 | 
			
		||||
 | 
			
		||||
struct ag71xx_mdio_platform_data {
 | 
			
		||||
	u32		phy_mask;
 | 
			
		||||
	int		is_ar7240;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct ar71xx_ehci_platform_data {
 | 
			
		||||
 | 
			
		||||
@ -106,6 +106,7 @@ struct ag71xx_mdio {
 | 
			
		||||
	struct mii_bus		*mii_bus;
 | 
			
		||||
	int			mii_irq[PHY_MAX_ADDR];
 | 
			
		||||
	void __iomem		*mdio_base;
 | 
			
		||||
	struct ag71xx_mdio_platform_data *pdata;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct ag71xx {
 | 
			
		||||
 | 
			
		||||
@ -106,6 +106,9 @@ static int ag71xx_mdio_reset(struct mii_bus *bus)
 | 
			
		||||
	struct ag71xx_mdio *am = bus->priv;
 | 
			
		||||
	u32 t;
 | 
			
		||||
 | 
			
		||||
	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);
 | 
			
		||||
@ -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,9 +188,6 @@ 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;
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < PHY_MAX_ADDR; i++)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user