diff options
author | Max Krummenacher <max.krummenacher@toradex.com> | 2019-11-21 20:04:36 +0100 |
---|---|---|
committer | Marcel Ziswiler <marcel.ziswiler@toradex.com> | 2020-02-12 11:06:10 +0100 |
commit | 9fe0b00a6cc978982144919e2442685fac956720 (patch) | |
tree | 0a23273975377d816f2b7ea7bdb865c8c0ab877f /drivers | |
parent | 1463a8c37ec021accdc5a7eddfb04e34099c3178 (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.c | 9 | ||||
-rw-r--r-- | drivers/net/can/spi/mcp25xxfd/mcp25xxfd_priv.h | 1 |
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; |