counter: stm32-timer-cnt: add counter prescaler extension
There's a prescaler in between the selected input signal used for counting (CK_PSC), and the counter input (CK_CNT). So add the "prescaler" extension to the counter. Reviewed-by: William Breathitt Gray <william.gray@linaro.org> Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com> Link: https://lore.kernel.org/r/20240307133306.383045-6-fabrice.gasnier@foss.st.com Signed-off-by: William Breathitt Gray <william.gray@linaro.org>
This commit is contained in:
parent
7a6c69f2be
commit
b73d03b347
@ -220,11 +220,40 @@ static int stm32_count_enable_write(struct counter_device *counter,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int stm32_count_prescaler_read(struct counter_device *counter,
|
||||
struct counter_count *count, u64 *prescaler)
|
||||
{
|
||||
struct stm32_timer_cnt *const priv = counter_priv(counter);
|
||||
u32 psc;
|
||||
|
||||
regmap_read(priv->regmap, TIM_PSC, &psc);
|
||||
|
||||
*prescaler = psc + 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int stm32_count_prescaler_write(struct counter_device *counter,
|
||||
struct counter_count *count, u64 prescaler)
|
||||
{
|
||||
struct stm32_timer_cnt *const priv = counter_priv(counter);
|
||||
u32 psc;
|
||||
|
||||
if (!prescaler || prescaler > MAX_TIM_PSC + 1)
|
||||
return -ERANGE;
|
||||
|
||||
psc = prescaler - 1;
|
||||
|
||||
return regmap_write(priv->regmap, TIM_PSC, psc);
|
||||
}
|
||||
|
||||
static struct counter_comp stm32_count_ext[] = {
|
||||
COUNTER_COMP_DIRECTION(stm32_count_direction_read),
|
||||
COUNTER_COMP_ENABLE(stm32_count_enable_read, stm32_count_enable_write),
|
||||
COUNTER_COMP_CEILING(stm32_count_ceiling_read,
|
||||
stm32_count_ceiling_write),
|
||||
COUNTER_COMP_COUNT_U64("prescaler", stm32_count_prescaler_read,
|
||||
stm32_count_prescaler_write),
|
||||
};
|
||||
|
||||
static const enum counter_synapse_action stm32_clock_synapse_actions[] = {
|
||||
|
Loading…
Reference in New Issue
Block a user