summaryrefslogtreecommitdiff
path: root/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_clock.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/can/spi/mcp25xxfd/mcp25xxfd_clock.c')
-rw-r--r--drivers/net/can/spi/mcp25xxfd/mcp25xxfd_clock.c9
1 files changed, 8 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);