Commit 7fc46339 authored by Samuel Holland's avatar Samuel Holland Committed by Alexandre Belloni
Browse files

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: default avatarSamuel Holland <samuel@sholland.org>
Acked-by: default avatarStephen Boyd <sboyd@kernel.org>
Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
Link: https://lore.kernel.org/r/20220203021736.13434-5-samuel@sholland.org
parent 43f0269b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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)
+7 −0
Original line number Diff line number Diff line
@@ -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);