Commit ba27a024 authored by William Breathitt Gray's avatar William Breathitt Gray
Browse files

counter: microchip-tcb-capture: Add support for RC Compare



In Capture mode, the RC register serves as a compare register for the
Timer Counter Channel. When a the Counter Value reaches the RC value, a
RC Compare event occurs (COUNTER_EVENT_THRESHOLD). This patch exposes
the RC register to userspace as the 'compare' Count extension, thus
allowing users to configure the threshold condition for these events.

Acked-by: default avatarBence Csókás <csokas.bence@prolan.hu>
Link: https://lore.kernel.org/r/20250306-introduce-compare-component-v1-2-93993b3dca9c@kernel.org


Signed-off-by: default avatarWilliam Breathitt Gray <wbg@kernel.org>
parent b5198201
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -302,11 +302,39 @@ static int mchp_tc_count_cap_write(struct counter_device *counter,
	return ret;
}

static int mchp_tc_count_compare_read(struct counter_device *counter, struct counter_count *count,
				      u64 *val)
{
	struct mchp_tc_data *const priv = counter_priv(counter);
	u32 cnt;
	int ret;

	ret = regmap_read(priv->regmap, ATMEL_TC_REG(priv->channel[0], RC), &cnt);
	if (ret < 0)
		return ret;

	*val = cnt;

	return 0;
}

static int mchp_tc_count_compare_write(struct counter_device *counter, struct counter_count *count,
				       u64 val)
{
	struct mchp_tc_data *const priv = counter_priv(counter);

	if (val > U32_MAX)
		return -ERANGE;

	return regmap_write(priv->regmap, ATMEL_TC_REG(priv->channel[0], RC), val);
}

static DEFINE_COUNTER_ARRAY_CAPTURE(mchp_tc_cnt_cap_array, 2);

static struct counter_comp mchp_tc_count_ext[] = {
	COUNTER_COMP_ARRAY_CAPTURE(mchp_tc_count_cap_read, mchp_tc_count_cap_write,
				   mchp_tc_cnt_cap_array),
	COUNTER_COMP_COMPARE(mchp_tc_count_compare_read, mchp_tc_count_compare_write),
};

static struct counter_count mchp_tc_counts[] = {