summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMax Krummenacher <max.krummenacher@toradex.com>2019-11-21 20:04:36 +0100
committerPhilippe Schenker <philippe.schenker@toradex.com>2020-08-13 16:04:58 +0200
commitb2aa5241af6082bd8dfbf6302cdaa6634e44923d (patch)
tree0f94131992475424a3d2383cc726179db864672b /drivers
parent81929d689227dd86ef4d354e10ba3d98fa0118a5 (diff)
can: mcp25xxfd: allow to keep the clock allways on
This allows to have a clock on clko even if the controller is disabled. Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com> (cherry picked from commit 417c1031677a958c5c936c243a83fc933c0cfda3)
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/can/spi/mcp25xxfd/mcp25xxfd_clock.c9
-rw-r--r--drivers/net/can/spi/mcp25xxfd/mcp25xxfd_priv.h1
2 files changed, 9 insertions, 1 deletions
diff --git a/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_clock.c b/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_clock.c
index e33def233630..32b5888df88e 100644
--- a/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_clock.c
+++ b/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_clock.c
@@ -244,6 +244,10 @@ int mcp25xxfd_clock_stop(struct mcp25xxfd_priv *priv, int requestor_mask)
{
int ret;
+ /* keep the clock on if explicitely configured */
+ if (priv->config.clock_allways_on)
+ return 0;
+
/* without a clock there is nothing we can do... */
if (IS_ERR(priv->clk))
return PTR_ERR(priv->clk);
@@ -366,10 +370,12 @@ static int mcp25xxfd_clock_of_parse(struct mcp25xxfd_priv *priv)
u32 val;
int ret;
- priv->config.clock_div2 = false;
priv->config.clock_div2 =
of_property_read_bool(np, "microchip,clock-div2");
+ priv->config.clock_allways_on =
+ of_property_read_bool(np, "microchip,clock-allways-on");
+
priv->config.clock_odiv = 10;
ret = of_property_read_u32_index(np, "microchip,clock-out-div",
0, &val);
@@ -408,6 +414,7 @@ int mcp25xxfd_clock_init(struct mcp25xxfd_priv *priv)
mutex_init(&priv->clk_user_lock);
priv->config.clock_div2 = false;
+ priv->config.clock_allways_on = false;
priv->config.clock_odiv = 10;
ret = mcp25xxfd_clock_of_parse(priv);
diff --git a/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_priv.h b/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_priv.h
index 33a5192c66a1..ced89e0b9e3c 100644
--- a/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_priv.h
+++ b/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_priv.h
@@ -46,6 +46,7 @@ struct mcp25xxfd_priv {
int clock_pll;
int clock_div2;
int clock_odiv;
+ int clock_allways_on;
/* gpio related */
bool gpio_open_drain;
bool gpio0_xstandby;