diff options
author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-11-12 12:50:16 +0000 |
---|---|---|
committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-11-12 12:50:16 +0000 |
commit | 428566d3de8839d1e7369a0e2f834809ce8589d4 (patch) | |
tree | 2666ea415776286f38b12eb9991c921cefa929b6 /target/linux | |
parent | 9c2632e5aaa8a0550d3f8842c5f90c8feb10f4b0 (diff) |
ar71xx: move phy interface setup into a separate function
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@28987 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux')
-rw-r--r-- | target/linux/ar71xx/files/arch/mips/ar71xx/devices.c | 63 |
1 files changed, 39 insertions, 24 deletions
diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/devices.c b/target/linux/ar71xx/files/arch/mips/ar71xx/devices.c index 86b615ea8..0091ac276 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/devices.c +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/devices.c @@ -585,58 +585,73 @@ static void __init ar71xx_init_eth_pll_data(unsigned int id) pll_data->pll_1000 = pll_1000; } -static int ar71xx_eth_instance __initdata; -void __init ar71xx_add_device_eth(unsigned int id) +static int __init ar71xx_setup_phy_if_mode(unsigned int id, + struct ag71xx_platform_data *pdata) { - struct platform_device *pdev; - struct ag71xx_platform_data *pdata; - - ar71xx_init_eth_pll_data(id); - switch (id) { case 0: - switch (ar71xx_eth0_data.phy_if_mode) { + switch (pdata->phy_if_mode) { case PHY_INTERFACE_MODE_MII: - ar71xx_eth0_data.mii_if = MII0_CTRL_IF_MII; + pdata->mii_if = MII0_CTRL_IF_MII; break; case PHY_INTERFACE_MODE_GMII: - ar71xx_eth0_data.mii_if = MII0_CTRL_IF_GMII; + pdata->mii_if = MII0_CTRL_IF_GMII; break; case PHY_INTERFACE_MODE_RGMII: - ar71xx_eth0_data.mii_if = MII0_CTRL_IF_RGMII; + pdata->mii_if = MII0_CTRL_IF_RGMII; break; case PHY_INTERFACE_MODE_RMII: - ar71xx_eth0_data.mii_if = MII0_CTRL_IF_RMII; + pdata->mii_if = MII0_CTRL_IF_RMII; break; default: - printk(KERN_ERR "ar71xx: invalid PHY interface mode " - "for eth0\n"); - return; + return -EINVAL; } - pdev = &ar71xx_eth0_device; break; case 1: - switch (ar71xx_eth1_data.phy_if_mode) { + switch (pdata->phy_if_mode) { case PHY_INTERFACE_MODE_RMII: - ar71xx_eth1_data.mii_if = MII1_CTRL_IF_RMII; + pdata->mii_if = MII1_CTRL_IF_RMII; break; case PHY_INTERFACE_MODE_RGMII: - ar71xx_eth1_data.mii_if = MII1_CTRL_IF_RGMII; + pdata->mii_if = MII1_CTRL_IF_RGMII; break; default: - printk(KERN_ERR "ar71xx: invalid PHY interface mode " - "for eth1\n"); - return; + return -EINVAL; } - pdev = &ar71xx_eth1_device; break; - default: + } + + return 0; +} + +static int ar71xx_eth_instance __initdata; +void __init ar71xx_add_device_eth(unsigned int id) +{ + struct platform_device *pdev; + struct ag71xx_platform_data *pdata; + int err; + + if (id > 1) { printk(KERN_ERR "ar71xx: invalid ethernet id %d\n", id); return; } + ar71xx_init_eth_pll_data(id); + + if (id == 0) + pdev = &ar71xx_eth0_device; + else + pdev = &ar71xx_eth1_device; + pdata = pdev->dev.platform_data; + err = ar71xx_setup_phy_if_mode(id, pdata); + if (err) { + printk(KERN_ERR + "ar71xx: invalid PHY interface mode for GE%u\n", id); + return; + } + switch (ar71xx_soc) { case AR71XX_SOC_AR7130: pdata->ddr_flush = id ? ar71xx_ddr_flush_ge1 |