summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMax Krummenacher <max.krummenacher@toradex.com>2019-11-21 20:04:36 +0100
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2020-02-12 11:06:10 +0100
commit9fe0b00a6cc978982144919e2442685fac956720 (patch)
tree0a23273975377d816f2b7ea7bdb865c8c0ab877f /drivers
parent1463a8c37ec021accdc5a7eddfb04e34099c3178 (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>
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;