rtc: stm32: don't stop time counter if not needed
authorAntonio Borneo <antonio.borneo@foss.st.com>
Wed, 5 Jul 2023 17:43:52 +0000 (19:43 +0200)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Thu, 27 Jul 2023 21:03:34 +0000 (23:03 +0200)
commit1c18b8ec52396af6a6e20cd3450dc9bff0781ab8
tree4c4ae35503de5bcb70d6806b3929a7285e7503f8
parentf69cb2d6034ddf8dae6848d29b9d4efba8cd4df9
rtc: stm32: don't stop time counter if not needed

RTC counters are stopped when INIT bit in ISR register is set and
start counting from the (eventual) new value when INIT is reset.

In stm32_rtc_init(), called during probe, the INIT bit is set to
program the prescaler and the 24h mode. This halts the RTC counter
at each probe tentative causing the RTC time to loose from 0.3s to
0.8s at each kernel boot.
If the RTC is battery powered, both prescaler value and 24h mode
are kept during power cycle and there is no need to program them
again.

Check if the desired prescaler value and the 24h mode are already
programmed, then skip reprogramming them to avoid halting the time
counter.

Signed-off-by: Antonio Borneo <antonio.borneo@foss.st.com>
Signed-off-by: Valentin Caron <valentin.caron@foss.st.com>
Link: https://lore.kernel.org/r/20230705174357.353616-3-valentin.caron@foss.st.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/rtc/rtc-stm32.c