From: shawn.guo@linaro.org (Shawn Guo)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] can: flexcan: add a regulator for transceiver
Date: Tue, 3 Jul 2012 20:46:11 +0800 [thread overview]
Message-ID: <1341319571-27763-1-git-send-email-shawn.guo@linaro.org> (raw)
Some system designs may have a controllable power supply for
transceiver. Add a regulator for that, which can be turned on
or off in flexcan_transceiver_switch function.
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
---
drivers/net/can/flexcan.c | 15 +++++++++++++++
1 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
index 81d4741..33ff7f0 100644
--- a/drivers/net/can/flexcan.c
+++ b/drivers/net/can/flexcan.c
@@ -36,6 +36,7 @@
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pinctrl/consumer.h>
+#include <linux/regulator/consumer.h>
#define DRV_NAME "flexcan"
@@ -179,6 +180,7 @@ struct flexcan_priv {
u32 reg_ctrl_default;
struct clk *clk;
+ struct regulator *reg_xcvr;
struct flexcan_platform_data *pdata;
};
@@ -224,6 +226,13 @@ static inline void flexcan_write(u32 val, void __iomem *addr)
*/
static void flexcan_transceiver_switch(const struct flexcan_priv *priv, int on)
{
+ if (priv->reg_xcvr) {
+ if (on)
+ regulator_enable(priv->reg_xcvr);
+ else
+ regulator_disable(priv->reg_xcvr);
+ }
+
if (priv->pdata && priv->pdata->transceiver_switch)
priv->pdata->transceiver_switch(on);
}
@@ -928,6 +937,7 @@ static int __devinit flexcan_probe(struct platform_device *pdev)
struct flexcan_priv *priv;
struct resource *mem;
struct clk *clk = NULL;
+ struct regulator *reg_xcvr;
struct pinctrl *pinctrl;
void __iomem *base;
resource_size_t mem_size;
@@ -957,6 +967,10 @@ static int __devinit flexcan_probe(struct platform_device *pdev)
clock_freq = clk_get_rate(clk);
}
+ reg_xcvr = devm_regulator_get(&pdev->dev, "xcvr");
+ if (IS_ERR(reg_xcvr))
+ reg_xcvr = NULL;
+
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
irq = platform_get_irq(pdev, 0);
if (!mem || irq <= 0) {
@@ -997,6 +1011,7 @@ static int __devinit flexcan_probe(struct platform_device *pdev)
priv->base = base;
priv->dev = dev;
priv->clk = clk;
+ priv->reg_xcvr = reg_xcvr;
priv->pdata = pdev->dev.platform_data;
netif_napi_add(dev, &priv->napi, flexcan_poll, FLEXCAN_NAPI_WEIGHT);
--
1.7.5.4
next reply other threads:[~2012-07-03 12:46 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-03 12:46 Shawn Guo [this message]
2012-07-03 13:07 ` [PATCH] can: flexcan: add a regulator for transceiver Mark Brown
2012-07-03 14:18 ` Shawn Guo
2012-07-03 14:46 ` Mark Brown
2012-07-03 15:28 ` Shawn Guo
2012-07-03 16:56 ` Mark Brown
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=1341319571-27763-1-git-send-email-shawn.guo@linaro.org \
--to=shawn.guo@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
/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;
as well as URLs for NNTP newsgroup(s).