ip17xx: fix autonegotioation issues
authorGabor Juhos <juhosg@openwrt.org>
Tue, 8 Jun 2010 20:19:14 +0000 (20:19 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Tue, 8 Jun 2010 20:19:14 +0000 (20:19 +0000)
SVN-Revision: 21727

target/linux/generic-2.6/files/drivers/net/phy/ip17xx.c

index 92a5046636f94effb38b5df0428fd974edc61d1b..262123a57f2bf23699833606d19b3a930c7e7c32 100644 (file)
@@ -1298,21 +1298,12 @@ static int ip17xx_config_init(struct phy_device *pdev)
        struct net_device *dev = pdev->attached_dev;
        int err;
 
-       pdev->irq = PHY_IGNORE_INTERRUPT;
        err = register_switch(&state->dev, dev);
        if (err < 0)
                return err;
 
-       ip17xx_reset(&state->dev);
-
        state->registered = true;
-
-       pdev->state = PHY_RUNNING;
-       pdev->speed = SPEED_100;
-       pdev->duplex = DUPLEX_FULL;
-       pdev->pause = pdev->asym_pause = 0;
-       netif_carrier_on(pdev->attached_dev);
-
+       ip17xx_reset(&state->dev);
        return 0;
 }
 
@@ -1330,8 +1321,24 @@ static int ip17xx_config_aneg(struct phy_device *pdev)
        return 0;
 }
 
+static int ip17xx_aneg_done(struct phy_device *pdev)
+{
+       return BMSR_ANEGCOMPLETE;
+}
+
+static int ip17xx_update_link(struct phy_device *pdev)
+{
+       pdev->link = 1;
+       return 0;
+}
+
 static int ip17xx_read_status(struct phy_device *pdev)
 {
+       pdev->speed = SPEED_100;
+       pdev->duplex = DUPLEX_FULL;
+       pdev->pause = pdev->asym_pause = 0;
+       pdev->link = 1;
+
        return 0;
 }
 
@@ -1344,6 +1351,8 @@ static struct phy_driver ip17xx_driver = {
        .remove         = ip17xx_remove,
        .config_init    = ip17xx_config_init,
        .config_aneg    = ip17xx_config_aneg,
+       .aneg_done      = ip17xx_aneg_done,
+       .update_link    = ip17xx_update_link,
        .read_status    = ip17xx_read_status,
        .driver         = { .owner = THIS_MODULE },
 };
@@ -1357,6 +1366,8 @@ static struct phy_driver ip175a_driver = {
        .remove         = ip17xx_remove,
        .config_init    = ip17xx_config_init,
        .config_aneg    = ip17xx_config_aneg,
+       .aneg_done      = ip17xx_aneg_done,
+       .update_link    = ip17xx_update_link,
        .read_status    = ip17xx_read_status,
        .driver         = { .owner = THIS_MODULE },
 };