From: Michael Welling <mwelling@emacinc.com>
To: Florian Fainelli <f.fainelli@gmail.com>
Cc: linux-kernel@vger.kernel.org, grant.likely@linaro.org,
linus.walleij@linaro.org, rjw@rjwysocki.net,
gregkh@linuxfoundation.org,
Nicolas Ferre <nicolas.ferre@atmel.com>
Subject: Re: GPIO registration for external Ethernet PHY oscillator enable/disable
Date: Fri, 26 Sep 2014 15:04:09 -0500 [thread overview]
Message-ID: <20140926200408.GA32264@sysresccd> (raw)
In-Reply-To: <54259F83.5020006@gmail.com>
On Fri, Sep 26, 2014 at 10:16:51AM -0700, Florian Fainelli wrote:
>
> Yes and no, this might feel like the wrong place, but ultimately, the
> Ethernet MAC is a consumer of the PHY device, and is in control, through
> the PHY library of how and when the PHY gets to be powered off.
>
So here is the patch that I made that hooks into the macb driver.
Please look it over and tell me if we are on the same page.
The thing that bothers me about this solution is that it will only work with the macb driver.
So everytime I use the same PHY/OSC combo with a different SoC I will have to do another patch.
diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
index e4e34b6..8cd363f 100644
--- a/drivers/net/ethernet/cadence/macb.c
+++ b/drivers/net/ethernet/cadence/macb.c
@@ -28,6 +28,7 @@
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/of_net.h>
+#include <linux/of_gpio.h>
#include <linux/pinctrl/consumer.h>
#include "macb.h"
@@ -1833,6 +1834,16 @@ static int __init macb_probe(struct platform_device *pdev)
bp->phy_interface = err;
}
+ bp->phy_osc_gpio = of_get_named_gpio(pdev->dev.of_node, "osc-gpio", 0);
+
+ if (gpio_is_valid(bp->phy_osc_gpio))
+ {
+ if (gpio_request(bp->phy_osc_gpio, "osc-gpio") != 0) {
+ pr_info("Oscillator GPIO not available.\n");
+ bp->phy_osc_gpio = 0;
+ }
+ }
+
if (bp->phy_interface == PHY_INTERFACE_MODE_RGMII)
macb_or_gem_writel(bp, USRIO, GEM_BIT(RGMII));
else if (bp->phy_interface == PHY_INTERFACE_MODE_RMII)
@@ -1927,6 +1938,9 @@ static int macb_suspend(struct platform_device *pdev, pm_message_t state)
netif_carrier_off(netdev);
netif_device_detach(netdev);
+ if (gpio_is_valid(bp->phy_osc_gpio))
+ gpio_set_value_cansleep(bp->phy_osc_gpio, 0);
+
clk_disable_unprepare(bp->hclk);
clk_disable_unprepare(bp->pclk);
@@ -1941,6 +1955,9 @@ static int macb_resume(struct platform_device *pdev)
clk_prepare_enable(bp->pclk);
clk_prepare_enable(bp->hclk);
+ if (gpio_is_valid(bp->phy_osc_gpio))
+ gpio_set_value_cansleep(bp->phy_osc_gpio, 1);
+
netif_device_attach(netdev);
return 0;
diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h
index f407615..8ca3dbd 100644
--- a/drivers/net/ethernet/cadence/macb.h
+++ b/drivers/net/ethernet/cadence/macb.h
@@ -596,6 +596,7 @@ struct macb {
u32 caps;
phy_interface_t phy_interface;
+ int phy_osc_gpio;
/* AT91RM9200 transmit */
struct sk_buff *skb; /* holds skb until xmit interrupt completes */
next prev parent reply other threads:[~2014-09-26 20:04 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-23 21:52 GPIO registration for external Ethernet PHY oscillator enable/disable Michael Welling
2014-09-25 19:17 ` Michael Welling
2014-09-25 19:56 ` Florian Fainelli
2014-09-26 16:59 ` Michael Welling
2014-09-26 17:16 ` Florian Fainelli
2014-09-26 17:32 ` Michael Welling
2014-09-26 20:04 ` Michael Welling [this message]
2014-10-07 14:09 ` Linus Walleij
2014-10-07 16:38 ` Michael Welling
2014-10-07 14:04 ` Linus Walleij
2014-10-07 16:30 ` Michael Welling
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140926200408.GA32264@sysresccd \
--to=mwelling@emacinc.com \
--cc=f.fainelli@gmail.com \
--cc=grant.likely@linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=linus.walleij@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolas.ferre@atmel.com \
--cc=rjw@rjwysocki.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox