rtc: ds1307: rx8130: honor Voltage Loss Flag when reading the time
Hello Uwe Kleine-König,
The patch 501f98266cad: "rtc: ds1307: rx8130: honor Voltage Loss Flag when reading the time" from Jan 25, 2019, leads to the following static checker warning:
drivers/rtc/rtc-ds1307.c:314 ds1307_set_time() warn: this cast is a no-op
drivers/rtc/rtc-ds1307.c
304 result = regmap_bulk_write(ds1307->regmap, chip->offset, regs,
305 sizeof(regs));
306 if (result) {
307 dev_err(dev, "%s error %d\n", "write", result);
308 return result;
309 }
310
311 if (ds1307->type == rx_8130) {
312 /* clear Voltage Loss Flag as data is available now */
313 result = regmap_write(ds1307->regmap, RX8130_REG_FLAG,
--> 314 ~(u8)RX8130_REG_FLAG_VLF);
^^^^^^^^^^^^^^^^^^^^^^^^RX8130_REG_FLAG_VLF is 0x2. The cast to u8 doesn't change anything because it gets type promoted to int. I don't know what was intended.
315 if (result) {
316 dev_err(dev, "%s error %d\n", "write", result);
317 return result;
318 }
319 }
320
321 return 0;
322 }regards,
dan carpenter
Hello Dan,
Quoted 20 lines · Dan Carpenter
The patch
501f98266cad: "rtc: ds1307: rx8130: honor Voltage Loss Flag when reading the time" from Jan 25, 2019, leads to the following static checker warning:drivers/rtc/rtc-ds1307.c:314 ds1307_set_time() warn: this cast is a no-op
drivers/rtc/rtc-ds1307.c304 result = regmap_bulk_write(ds1307->regmap, chip->offset, regs, 305 sizeof(regs)); 306 if (result) { 307 dev_err(dev, "%s error %d\n", "write", result); 308 return result; 309 } 310 311 if (ds1307->type == rx_8130) { 312 /* clear Voltage Loss Flag as data is available now */ 313 result = regmap_write(ds1307->regmap, RX8130_REG_FLAG, --> 314 ~(u8)RX8130_REG_FLAG_VLF); ^^^^^^^^^^^^^^^^^^^^^^^^
Quoted 2 lines
RX8130_REG_FLAG_VLFis0x2. The cast to u8 doesn't change anything because it gets type promoted to int. I don't know what was intended.
This reasoning looks right, yes. I don't remember why I added it. Probably because I intended to create the value 0xfd and not 0xfffffffd (aka -3).
Feel free to fix this in a patch blaming me.
Best regards
Uwe
Signature · 2 lines
Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | http://www.pengutronix.de/ |
Quoted 26 lines · Uwe Kleine-König
Hello Dan,
Quoted 20 lines · Dan Carpenter
The patch
501f98266cad: "rtc: ds1307: rx8130: honor Voltage Loss Flag when reading the time" from Jan 25, 2019, leads to the following static checker warning:drivers/rtc/rtc-ds1307.c:314 ds1307_set_time() warn: this cast is a no-op
drivers/rtc/rtc-ds1307.c304 result = regmap_bulk_write(ds1307->regmap, chip->offset, regs, 305 sizeof(regs)); 306 if (result) { 307 dev_err(dev, "%s error %d\n", "write", result); 308 return result; 309 } 310 311 if (ds1307->type == rx_8130) { 312 /* clear Voltage Loss Flag as data is available now */ 313 result = regmap_write(ds1307->regmap, RX8130_REG_FLAG, --> 314 ~(u8)RX8130_REG_FLAG_VLF); ^^^^^^^^^^^^^^^^^^^^^^^^Quoted 2 lines
RX8130_REG_FLAG_VLFis0x2. The cast to u8 doesn't change anything because it gets type promoted to int. I don't know what was intended.
Quoted 5 lines
This reasoning looks right, yes. I don't remember why I added it. Probably because I intended to create the value
0xfdand not0xfffffffd(aka -3).Feel free to fix this in a patch blaming me.
If it's working as-is then I'm not going to be the one to break it... :P
regards,
dan carpenter