Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

counter: stm32-lptimer-cnt: fix the check on arr and cmp registers update

The ARR (auto reload register) and CMP (compare) registers are
successively written. The status bits to check the update of these
registers are polled together with regmap_read_poll_timeout().
The condition to end the loop may become true, even if one of the register
isn't correctly updated.
So ensure both status bits are set before clearing them.

Fixes: d8958824cf07 ("iio: counter: Add support for STM32 LPTimer")
Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Link: https://lore.kernel.org/r/20221123133609.465614-1-fabrice.gasnier@foss.st.com/
Signed-off-by: William Breathitt Gray <william.gray@linaro.org>

authored by

Fabrice Gasnier and committed by
William Breathitt Gray
fd5ac974 30a0b95b

+1 -1
+1 -1
drivers/counter/stm32-lptimer-cnt.c
··· 69 69 70 70 /* ensure CMP & ARR registers are properly written */ 71 71 ret = regmap_read_poll_timeout(priv->regmap, STM32_LPTIM_ISR, val, 72 - (val & STM32_LPTIM_CMPOK_ARROK), 72 + (val & STM32_LPTIM_CMPOK_ARROK) == STM32_LPTIM_CMPOK_ARROK, 73 73 100, 1000); 74 74 if (ret) 75 75 return ret;