Re: [PATCH v5 1/2] clk: add lpc18xx creg clk driver
From: Stephen Boyd <hidden>
Date: 2016-03-04 17:42:01
Also in:
linux-clk
On 03/03, Joachim Eastwood wrote:
quoted hunk ↗ jump to hunk
diff --git a/drivers/clk/nxp/clk-lpc18xx-creg.c b/drivers/clk/nxp/clk-lpc18xx-creg.c new file mode 100644 index 000000000000..d44b61afa2dc --- /dev/null +++ b/drivers/clk/nxp/clk-lpc18xx-creg.c@@ -0,0 +1,226 @@ + +static int clk_creg_32k_is_prepared(struct clk_hw *hw) +{ + struct clk_creg_data *creg = to_clk_creg(hw); + u32 reg; + + regmap_read(creg->reg, LPC18XX_CREG_CREG0, ®); + + return !(reg & LPC18XX_CREG_CREG0_PD32KHZ) && + !(reg & LPC18XX_CREG_CREG0_RESET32KHZ); +} + +static unsigned long clk_creg_1k_recalc_rate(struct clk_hw *hw, + unsigned long parent_rate) +{ + return parent_rate / 32; +} + +static int clk_creg_enable(struct clk_hw *hw) +{ + struct clk_creg_data *creg = to_clk_creg(hw); + + return regmap_update_bits(creg->reg, LPC18XX_CREG_CREG0, + creg->en_mask, creg->en_mask);
Have you tested this with CONFIG_DEBUG_ATOMIC_SLEEP=y? I seem to recall that syscon uses a regmap with regmap_config::fast_io set to false, so all regmap operations take a mutex lock. clk_ops::enable is called with a spinlock held, so that isn't going to work well. -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project