Yes, I use this way. Path as follows:
On 8/16/19 10:40 PM, Li Yang wrote:
On Fri, Aug 16, 2019 at 11:30 AM Alexandre Bellonihttps://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flkml.org
On 16/08/2019 10:50:49-0500, Li Yang wrote:
On Fri, Aug 16, 2019 at 3:05 AM Alexandre Belloni
On 16/08/2019 10:46:36+0800, Biwen Li wrote:
- # hwclock -w
hwclock: RTC_SET_TIME: Invalid argument
- Relative patch:
3%2BF7crSM0M6xPmOhgULDqMZLQw%2BAmdI%3D&reserved=0 , this
DT_100THSwill 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
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
This is not true, the RTC wraps the register accesses properly and
This performance hack probably deserve some explanation in the code
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.
`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.
Stop and reset - > set time > stop
2. Replace `max_register` method validation with `callback function`It is not work, show the code in as follows:
validation method, were you could make your own validation.
bool regmap_writeable(struct regmap *map, unsigned int reg)
if (map->max_register && reg > map->max_register)
Callback function (writeable_reg) will not be called.
return map->writeable_reg(map->dev, reg);