Re: [v2] rtc: pcf85363/pcf85263: fix error that failed to run hwclock -w

From: Nandor Han
Date: Wed Aug 21 2019 - 02:20:19 EST


On 8/16/19 10:40 PM, Li Yang wrote:
On Fri, Aug 16, 2019 at 11:30 AM Alexandre Belloni
<alexandre.belloni@xxxxxxxxxxx> wrote:

On 16/08/2019 10:50:49-0500, Li Yang wrote:
On Fri, Aug 16, 2019 at 3:05 AM Alexandre Belloni
<alexandre.belloni@xxxxxxxxxxx> wrote:

On 16/08/2019 10:46:36+0800, Biwen Li wrote:
Issue:
- # hwclock -w
hwclock: RTC_SET_TIME: Invalid argument

Why:
- Relative patch: https://lkml.org/lkml/2019/4/3/55 , this patch
will always check for unwritable registers, it will compare reg
with max_register in regmap_writeable.

- In drivers/rtc/rtc-pcf85363.c, CTRL_STOP_EN is 0x2e, but DT_100THS
is 0, max_regiter is 0x2f, then reg will be equal to 0x30,
'0x30 < 0x2f' is false,so regmap_writeable will return false.

- Root cause: the buf[] was written to a wrong place in the file
drivers/rtc/rtc-pcf85363.c


This is not true, the RTC wraps the register accesses properly and this

This performance hack probably deserve some explanation in the code comment. :)

is probably something that should be handled by regmap_writable.

The address wrapping is specific to this RTC chip. Is it also
commonly used by other I2C devices? I'm not sure if regmap_writable
should handle the wrapping case if it is too special.


Most of the i2c RTCs do address wrapping which is sometimes the only way
to properly set the time.

Adding Mark and Nandor to the loop.

Regards,
Leo


Hi,
`regmap` provides couple of ways to validate the registers: max_register, callback function and write table. All of these are optional, so it gives you the freedom to customize it as needed.

In this situation probably you could:
1. Avoid using the wrapping feature of pcf85363 (you can just provide separate calls for stop, reset and time confguration). In this way the `max_register` validation method will work fine.
2. Replace `max_register` method validation with `callback function` validation method, were you could make your own validation.


Regards,
Nandor