Patchwork [2.6.28-rc2] at91_ether: request/free GPIO for PHY interrupt

login
register
mail settings
Submitter David Brownell
Date Oct. 27, 2008, 9:11 p.m.
Message ID <200810271411.34492.david-b@pacbell.net>
Download mbox | patch
Permalink /patch/5969/
State Accepted
Delegated to: Jeff Garzik
Headers show

Comments

David Brownell - Oct. 27, 2008, 9:11 p.m.
From: David Brownell <dbrownell@users.sourceforge.net>

When the at91_ether driver is using a GPIO for its PHY interrupt,
be sure to request (and later, if needed, free) that GPIO.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
---
 drivers/net/arm/at91_ether.c |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jeff Garzik - Oct. 31, 2008, 4:48 a.m.
David Brownell wrote:
> From: David Brownell <dbrownell@users.sourceforge.net>
> 
> When the at91_ether driver is using a GPIO for its PHY interrupt,
> be sure to request (and later, if needed, free) that GPIO.
> 
> Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
> ---
>  drivers/net/arm/at91_ether.c |    6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)

applied


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

--- a/drivers/net/arm/at91_ether.c
+++ b/drivers/net/arm/at91_ether.c
@@ -1080,7 +1080,8 @@  static int __init at91ether_setup(unsign
 		init_timer(&lp->check_timer);
 		lp->check_timer.data = (unsigned long)dev;
 		lp->check_timer.function = at91ether_check_link;
-	}
+	} else if (lp->board_data.phy_irq_pin >= 32)
+		gpio_request(lp->board_data.phy_irq_pin, "ethernet_phy");
 
 	/* Display ethernet banner */
 	printk(KERN_INFO "%s: AT91 ethernet at 0x%08x int=%d %s%s (%s)\n",
@@ -1167,6 +1168,9 @@  static int __devexit at91ether_remove(st
 	struct net_device *dev = platform_get_drvdata(pdev);
 	struct at91_private *lp = netdev_priv(dev);
 
+	if (lp->board_data.phy_irq_pin >= 32)
+		gpio_free(lp->board_data.phy_irq_pin);
+
 	unregister_netdev(dev);
 	free_irq(dev->irq, dev);
 	dma_free_coherent(NULL, sizeof(struct recv_desc_bufs), lp->dlist, (dma_addr_t)lp->dlist_phys);