diff options
Diffstat (limited to 'drivers/net/ethernet/freescale/gianfar.c')
-rw-r--r-- | drivers/net/ethernet/freescale/gianfar.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c index 4b69d061d90f..710715fcb23d 100644 --- a/drivers/net/ethernet/freescale/gianfar.c +++ b/drivers/net/ethernet/freescale/gianfar.c | |||
@@ -1710,8 +1710,10 @@ static void gfar_configure_serdes(struct net_device *dev) | |||
1710 | * everything for us? Resetting it takes the link down and requires | 1710 | * everything for us? Resetting it takes the link down and requires |
1711 | * several seconds for it to come back. | 1711 | * several seconds for it to come back. |
1712 | */ | 1712 | */ |
1713 | if (phy_read(tbiphy, MII_BMSR) & BMSR_LSTATUS) | 1713 | if (phy_read(tbiphy, MII_BMSR) & BMSR_LSTATUS) { |
1714 | put_device(&tbiphy->dev); | ||
1714 | return; | 1715 | return; |
1716 | } | ||
1715 | 1717 | ||
1716 | /* Single clk mode, mii mode off(for serdes communication) */ | 1718 | /* Single clk mode, mii mode off(for serdes communication) */ |
1717 | phy_write(tbiphy, MII_TBICON, TBICON_CLK_SELECT); | 1719 | phy_write(tbiphy, MII_TBICON, TBICON_CLK_SELECT); |
@@ -1723,6 +1725,8 @@ static void gfar_configure_serdes(struct net_device *dev) | |||
1723 | phy_write(tbiphy, MII_BMCR, | 1725 | phy_write(tbiphy, MII_BMCR, |
1724 | BMCR_ANENABLE | BMCR_ANRESTART | BMCR_FULLDPLX | | 1726 | BMCR_ANENABLE | BMCR_ANRESTART | BMCR_FULLDPLX | |
1725 | BMCR_SPEED1000); | 1727 | BMCR_SPEED1000); |
1728 | |||
1729 | put_device(&tbiphy->dev); | ||
1726 | } | 1730 | } |
1727 | 1731 | ||
1728 | static int __gfar_is_rx_idle(struct gfar_private *priv) | 1732 | static int __gfar_is_rx_idle(struct gfar_private *priv) |
@@ -1970,8 +1974,7 @@ static int register_grp_irqs(struct gfar_priv_grp *grp) | |||
1970 | /* Install our interrupt handlers for Error, | 1974 | /* Install our interrupt handlers for Error, |
1971 | * Transmit, and Receive | 1975 | * Transmit, and Receive |
1972 | */ | 1976 | */ |
1973 | err = request_irq(gfar_irq(grp, ER)->irq, gfar_error, | 1977 | err = request_irq(gfar_irq(grp, ER)->irq, gfar_error, 0, |
1974 | IRQF_NO_SUSPEND, | ||
1975 | gfar_irq(grp, ER)->name, grp); | 1978 | gfar_irq(grp, ER)->name, grp); |
1976 | if (err < 0) { | 1979 | if (err < 0) { |
1977 | netif_err(priv, intr, dev, "Can't get IRQ %d\n", | 1980 | netif_err(priv, intr, dev, "Can't get IRQ %d\n", |
@@ -1979,6 +1982,8 @@ static int register_grp_irqs(struct gfar_priv_grp *grp) | |||
1979 | 1982 | ||
1980 | goto err_irq_fail; | 1983 | goto err_irq_fail; |
1981 | } | 1984 | } |
1985 | enable_irq_wake(gfar_irq(grp, ER)->irq); | ||
1986 | |||
1982 | err = request_irq(gfar_irq(grp, TX)->irq, gfar_transmit, 0, | 1987 | err = request_irq(gfar_irq(grp, TX)->irq, gfar_transmit, 0, |
1983 | gfar_irq(grp, TX)->name, grp); | 1988 | gfar_irq(grp, TX)->name, grp); |
1984 | if (err < 0) { | 1989 | if (err < 0) { |
@@ -1994,14 +1999,14 @@ static int register_grp_irqs(struct gfar_priv_grp *grp) | |||
1994 | goto rx_irq_fail; | 1999 | goto rx_irq_fail; |
1995 | } | 2000 | } |
1996 | } else { | 2001 | } else { |
1997 | err = request_irq(gfar_irq(grp, TX)->irq, gfar_interrupt, | 2002 | err = request_irq(gfar_irq(grp, TX)->irq, gfar_interrupt, 0, |
1998 | IRQF_NO_SUSPEND, | ||
1999 | gfar_irq(grp, TX)->name, grp); | 2003 | gfar_irq(grp, TX)->name, grp); |
2000 | if (err < 0) { | 2004 | if (err < 0) { |
2001 | netif_err(priv, intr, dev, "Can't get IRQ %d\n", | 2005 | netif_err(priv, intr, dev, "Can't get IRQ %d\n", |
2002 | gfar_irq(grp, TX)->irq); | 2006 | gfar_irq(grp, TX)->irq); |
2003 | goto err_irq_fail; | 2007 | goto err_irq_fail; |
2004 | } | 2008 | } |
2009 | enable_irq_wake(gfar_irq(grp, TX)->irq); | ||
2005 | } | 2010 | } |
2006 | 2011 | ||
2007 | return 0; | 2012 | return 0; |