Skip to contentSkip to conversation

rtc: ds1307: rx8130: honor Voltage Loss Flag when reading the time

bug report Dan Carpenter 2 participants 3 messages Feb 13, 2019 Real time clock (RTC)

lore
Share & tools
lore
#0 lore raw

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

#1 lore raw

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.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);
                                               ^^^^^^^^^^^^^^^^^^^^^^^^
Quoted 2 lines

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.

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/  |
#2 lore raw
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.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);
                                               ^^^^^^^^^^^^^^^^^^^^^^^^
Quoted 2 lines

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.

Quoted 5 lines

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.

If it's working as-is then I'm not going to be the one to break it... :P

regards,
dan carpenter