Messages in this thread | | | Subject | Re: [v2] rtc: pcf85363/pcf85263: fix error that failed to run hwclock -w | From | Nandor Han <> | Date | Wed, 21 Aug 2019 09:20:05 +0300 |
| |
On 8/16/19 10:40 PM, Li Yang wrote: > On Fri, Aug 16, 2019 at 11:30 AM Alexandre Belloni > <alexandre.belloni@bootlin.com> 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@bootlin.com> 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
| |