Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

rtc: rx8025: check time validity when necessary

Check time validity when reading time as this is when we need to know.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>

+29 -29
+29 -29
drivers/rtc/rtc-rx8025.c
··· 104 104 length, values); 105 105 } 106 106 107 + static int rx8025_check_validity(struct device *dev) 108 + { 109 + struct rx8025_data *rx8025 = dev_get_drvdata(dev); 110 + int ctrl2; 111 + 112 + ctrl2 = rx8025_read_reg(rx8025->client, RX8025_REG_CTRL2); 113 + if (ctrl2 < 0) 114 + return ctrl2; 115 + 116 + if (ctrl2 & RX8025_BIT_CTRL2_VDET) 117 + dev_warn(dev, "power voltage drop detected\n"); 118 + 119 + if (ctrl2 & RX8025_BIT_CTRL2_PON) { 120 + dev_warn(dev, "power-on reset detected, date is invalid\n"); 121 + return -EINVAL; 122 + } 123 + 124 + if (!(ctrl2 & RX8025_BIT_CTRL2_XST)) { 125 + dev_warn(dev, "crystal stopped, date is invalid\n"); 126 + return -EINVAL; 127 + } 128 + 129 + return 0; 130 + } 131 + 107 132 static int rx8025_reset_validity(struct i2c_client *client) 108 133 { 109 134 int ctrl2 = rx8025_read_reg(client, RX8025_REG_CTRL2); ··· 179 154 { 180 155 struct rx8025_data *rx8025 = dev_get_drvdata(dev); 181 156 u8 date[7]; 182 - int ctrl, err; 157 + int err; 183 158 184 - ctrl = rx8025_read_reg(rx8025->client, RX8025_REG_CTRL2); 185 - if (ctrl < 0) 186 - return ctrl; 187 - 188 - if (ctrl & RX8025_BIT_CTRL2_PON) { 189 - dev_warn(dev, "power-on reset detected, date is invalid\n"); 190 - return -EINVAL; 191 - } 192 - 193 - if (!(ctrl & RX8025_BIT_CTRL2_XST)) { 194 - dev_warn(dev, "crystal stopped, date is invalid\n"); 195 - return -EINVAL; 196 - } 159 + err = rx8025_check_validity(dev); 160 + if (err) 161 + return err; 197 162 198 163 err = rx8025_read_regs(rx8025->client, RX8025_REG_SEC, 7, date); 199 164 if (err) ··· 264 249 265 250 /* Keep test bit zero ! */ 266 251 rx8025->ctrl1 = ctrl[0] & ~RX8025_BIT_CTRL1_TEST; 267 - 268 - if (ctrl[1] & RX8025_BIT_CTRL2_PON) { 269 - dev_warn(&client->dev, "power-on reset was detected, " 270 - "you may have to readjust the clock\n"); 271 - } 272 - 273 - if (ctrl[1] & RX8025_BIT_CTRL2_VDET) { 274 - dev_warn(&client->dev, "a power voltage drop was detected, " 275 - "you may have to readjust the clock\n"); 276 - } 277 - 278 - if (!(ctrl[1] & RX8025_BIT_CTRL2_XST)) { 279 - dev_warn(&client->dev, "Oscillation stop was detected," 280 - "you may have to readjust the clock\n"); 281 - } 282 252 283 253 if (ctrl[1] & (RX8025_BIT_CTRL2_DAFG | RX8025_BIT_CTRL2_WAFG)) { 284 254 dev_warn(&client->dev, "Alarm was detected\n");