clk: sunxi-ng: mux: Allow muxes to have keys
The muxes in the RTC can only be updated when setting a key field to a specific value. Add a feature flag to denote muxes with this property. Since so far the key value is always the same, it does not need to be provided separately for each mux. Signed-off-by: Samuel Holland <samuel@sholland.org> Acked-by: Stephen Boyd <sboyd@kernel.org> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Link: https://lore.kernel.org/r/20220203021736.13434-5-samuel@sholland.org
This commit is contained in:
parent
43f0269b6b
commit
7fc46339c3
@ -17,6 +17,7 @@
|
||||
#define CCU_FEATURE_LOCK_REG BIT(5)
|
||||
#define CCU_FEATURE_MMC_TIMING_SWITCH BIT(6)
|
||||
#define CCU_FEATURE_SIGMA_DELTA_MOD BIT(7)
|
||||
#define CCU_FEATURE_KEY_FIELD BIT(8)
|
||||
|
||||
/* MMC timing mode switch bit */
|
||||
#define CCU_MMC_NEW_TIMING_MODE BIT(30)
|
||||
|
@ -12,6 +12,8 @@
|
||||
#include "ccu_gate.h"
|
||||
#include "ccu_mux.h"
|
||||
|
||||
#define CCU_MUX_KEY_VALUE 0x16aa0000
|
||||
|
||||
static u16 ccu_mux_get_prediv(struct ccu_common *common,
|
||||
struct ccu_mux_internal *cm,
|
||||
int parent_index)
|
||||
@ -191,6 +193,11 @@ int ccu_mux_helper_set_parent(struct ccu_common *common,
|
||||
spin_lock_irqsave(common->lock, flags);
|
||||
|
||||
reg = readl(common->base + common->reg);
|
||||
|
||||
/* The key field always reads as zero. */
|
||||
if (common->features & CCU_FEATURE_KEY_FIELD)
|
||||
reg |= CCU_MUX_KEY_VALUE;
|
||||
|
||||
reg &= ~GENMASK(cm->width + cm->shift - 1, cm->shift);
|
||||
writel(reg | (index << cm->shift), common->base + common->reg);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user