1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * RTC driver for the Micro Crystal RV3032 4 * 5 * Copyright (C) 2020 Micro Crystal SA 6 * 7 * Alexandre Belloni <alexandre.belloni@bootlin.com> 8 * 9 */ 10 11 #include <linux/clk.h> 12 #include <linux/clk-provider.h> 13 #include <linux/bcd.h> 14 #include <linux/bitfield.h> 15 #include <linux/bitops.h> 16 #include <linux/hwmon.h> 17 #include <linux/i2c.h> 18 #include <linux/interrupt.h> 19 #include <linux/kernel.h> 20 #include <linux/log2.h> 21 #include <linux/module.h> 22 #include <linux/of_device.h> 23 #include <linux/regmap.h> 24 #include <linux/rtc.h> 25 26 #define RV3032_SEC 0x01 27 #define RV3032_MIN 0x02 28 #define RV3032_HOUR 0x03 29 #define RV3032_WDAY 0x04 30 #define RV3032_DAY 0x05 31 #define RV3032_MONTH 0x06 32 #define RV3032_YEAR 0x07 33 #define RV3032_ALARM_MIN 0x08 34 #define RV3032_ALARM_HOUR 0x09 35 #define RV3032_ALARM_DAY 0x0A 36 #define RV3032_STATUS 0x0D 37 #define RV3032_TLSB 0x0E 38 #define RV3032_TMSB 0x0F 39 #define RV3032_CTRL1 0x10 40 #define RV3032_CTRL2 0x11 41 #define RV3032_CTRL3 0x12 42 #define RV3032_TS_CTRL 0x13 43 #define RV3032_CLK_IRQ 0x14 44 #define RV3032_EEPROM_ADDR 0x3D 45 #define RV3032_EEPROM_DATA 0x3E 46 #define RV3032_EEPROM_CMD 0x3F 47 #define RV3032_RAM1 0x40 48 #define RV3032_PMU 0xC0 49 #define RV3032_OFFSET 0xC1 50 #define RV3032_CLKOUT1 0xC2 51 #define RV3032_CLKOUT2 0xC3 52 #define RV3032_TREF0 0xC4 53 #define RV3032_TREF1 0xC5 54 55 #define RV3032_STATUS_VLF BIT(0) 56 #define RV3032_STATUS_PORF BIT(1) 57 #define RV3032_STATUS_EVF BIT(2) 58 #define RV3032_STATUS_AF BIT(3) 59 #define RV3032_STATUS_TF BIT(4) 60 #define RV3032_STATUS_UF BIT(5) 61 #define RV3032_STATUS_TLF BIT(6) 62 #define RV3032_STATUS_THF BIT(7) 63 64 #define RV3032_TLSB_CLKF BIT(1) 65 #define RV3032_TLSB_EEBUSY BIT(2) 66 #define RV3032_TLSB_TEMP GENMASK(7, 4) 67 68 #define RV3032_CLKOUT2_HFD_MSK GENMASK(4, 0) 69 #define RV3032_CLKOUT2_FD_MSK GENMASK(6, 5) 70 #define RV3032_CLKOUT2_OS BIT(7) 71 72 #define RV3032_CTRL1_EERD BIT(3) 73 #define RV3032_CTRL1_WADA BIT(5) 74 75 #define RV3032_CTRL2_STOP BIT(0) 76 #define RV3032_CTRL2_EIE BIT(2) 77 #define RV3032_CTRL2_AIE BIT(3) 78 #define RV3032_CTRL2_TIE BIT(4) 79 #define RV3032_CTRL2_UIE BIT(5) 80 #define RV3032_CTRL2_CLKIE BIT(6) 81 #define RV3032_CTRL2_TSE BIT(7) 82 83 #define RV3032_PMU_TCM GENMASK(1, 0) 84 #define RV3032_PMU_TCR GENMASK(3, 2) 85 #define RV3032_PMU_BSM GENMASK(5, 4) 86 #define RV3032_PMU_NCLKE BIT(6) 87 88 #define RV3032_PMU_BSM_DSM 1 89 #define RV3032_PMU_BSM_LSM 2 90 91 #define RV3032_OFFSET_MSK GENMASK(5, 0) 92 93 #define RV3032_EVT_CTRL_TSR BIT(2) 94 95 #define RV3032_EEPROM_CMD_UPDATE 0x11 96 #define RV3032_EEPROM_CMD_WRITE 0x21 97 #define RV3032_EEPROM_CMD_READ 0x22 98 99 #define RV3032_EEPROM_USER 0xCB 100 101 #define RV3032_EEBUSY_POLL 10000 102 #define RV3032_EEBUSY_TIMEOUT 100000 103 104 #define OFFSET_STEP_PPT 238419 105 106 struct rv3032_data { 107 struct regmap *regmap; 108 struct rtc_device *rtc; 109 bool trickle_charger_set; 110 #ifdef CONFIG_COMMON_CLK 111 struct clk_hw clkout_hw; 112 #endif 113 }; 114 115 static u16 rv3032_trickle_resistors[] = {1000, 2000, 7000, 11000}; 116 static u16 rv3032_trickle_voltages[] = {0, 1750, 3000, 4400}; 117 118 static int rv3032_exit_eerd(struct rv3032_data *rv3032, u32 eerd) 119 { 120 if (eerd) 121 return 0; 122 123 return regmap_update_bits(rv3032->regmap, RV3032_CTRL1, RV3032_CTRL1_EERD, 0); 124 } 125 126 static int rv3032_enter_eerd(struct rv3032_data *rv3032, u32 *eerd) 127 { 128 u32 ctrl1, status; 129 int ret; 130 131 ret = regmap_read(rv3032->regmap, RV3032_CTRL1, &ctrl1); 132 if (ret) 133 return ret; 134 135 *eerd = ctrl1 & RV3032_CTRL1_EERD; 136 if (*eerd) 137 return 0; 138 139 ret = regmap_update_bits(rv3032->regmap, RV3032_CTRL1, 140 RV3032_CTRL1_EERD, RV3032_CTRL1_EERD); 141 if (ret) 142 return ret; 143 144 ret = regmap_read_poll_timeout(rv3032->regmap, RV3032_TLSB, status, 145 !(status & RV3032_TLSB_EEBUSY), 146 RV3032_EEBUSY_POLL, RV3032_EEBUSY_TIMEOUT); 147 if (ret) { 148 rv3032_exit_eerd(rv3032, *eerd); 149 150 return ret; 151 } 152 153 return 0; 154 } 155 156 static int rv3032_update_cfg(struct rv3032_data *rv3032, unsigned int reg, 157 unsigned int mask, unsigned int val) 158 { 159 u32 status, eerd; 160 int ret; 161 162 ret = rv3032_enter_eerd(rv3032, &eerd); 163 if (ret) 164 return ret; 165 166 ret = regmap_update_bits(rv3032->regmap, reg, mask, val); 167 if (ret) 168 goto exit_eerd; 169 170 ret = regmap_write(rv3032->regmap, RV3032_EEPROM_CMD, RV3032_EEPROM_CMD_UPDATE); 171 if (ret) 172 goto exit_eerd; 173 174 usleep_range(46000, RV3032_EEBUSY_TIMEOUT); 175 176 ret = regmap_read_poll_timeout(rv3032->regmap, RV3032_TLSB, status, 177 !(status & RV3032_TLSB_EEBUSY), 178 RV3032_EEBUSY_POLL, RV3032_EEBUSY_TIMEOUT); 179 180 exit_eerd: 181 rv3032_exit_eerd(rv3032, eerd); 182 183 return ret; 184 } 185 186 static irqreturn_t rv3032_handle_irq(int irq, void *dev_id) 187 { 188 struct rv3032_data *rv3032 = dev_id; 189 unsigned long events = 0; 190 u32 status = 0, ctrl = 0; 191 192 if (regmap_read(rv3032->regmap, RV3032_STATUS, &status) < 0 || 193 status == 0) { 194 return IRQ_NONE; 195 } 196 197 if (status & RV3032_STATUS_TF) { 198 status |= RV3032_STATUS_TF; 199 ctrl |= RV3032_CTRL2_TIE; 200 events |= RTC_PF; 201 } 202 203 if (status & RV3032_STATUS_AF) { 204 status |= RV3032_STATUS_AF; 205 ctrl |= RV3032_CTRL2_AIE; 206 events |= RTC_AF; 207 } 208 209 if (status & RV3032_STATUS_UF) { 210 status |= RV3032_STATUS_UF; 211 ctrl |= RV3032_CTRL2_UIE; 212 events |= RTC_UF; 213 } 214 215 if (events) { 216 rtc_update_irq(rv3032->rtc, 1, events); 217 regmap_update_bits(rv3032->regmap, RV3032_STATUS, status, 0); 218 regmap_update_bits(rv3032->regmap, RV3032_CTRL2, ctrl, 0); 219 } 220 221 return IRQ_HANDLED; 222 } 223 224 static int rv3032_get_time(struct device *dev, struct rtc_time *tm) 225 { 226 struct rv3032_data *rv3032 = dev_get_drvdata(dev); 227 u8 date[7]; 228 int ret, status; 229 230 ret = regmap_read(rv3032->regmap, RV3032_STATUS, &status); 231 if (ret < 0) 232 return ret; 233 234 if (status & (RV3032_STATUS_PORF | RV3032_STATUS_VLF)) 235 return -EINVAL; 236 237 ret = regmap_bulk_read(rv3032->regmap, RV3032_SEC, date, sizeof(date)); 238 if (ret) 239 return ret; 240 241 tm->tm_sec = bcd2bin(date[0] & 0x7f); 242 tm->tm_min = bcd2bin(date[1] & 0x7f); 243 tm->tm_hour = bcd2bin(date[2] & 0x3f); 244 tm->tm_wday = date[3] & 0x7; 245 tm->tm_mday = bcd2bin(date[4] & 0x3f); 246 tm->tm_mon = bcd2bin(date[5] & 0x1f) - 1; 247 tm->tm_year = bcd2bin(date[6]) + 100; 248 249 return 0; 250 } 251 252 static int rv3032_set_time(struct device *dev, struct rtc_time *tm) 253 { 254 struct rv3032_data *rv3032 = dev_get_drvdata(dev); 255 u8 date[7]; 256 int ret; 257 258 date[0] = bin2bcd(tm->tm_sec); 259 date[1] = bin2bcd(tm->tm_min); 260 date[2] = bin2bcd(tm->tm_hour); 261 date[3] = tm->tm_wday; 262 date[4] = bin2bcd(tm->tm_mday); 263 date[5] = bin2bcd(tm->tm_mon + 1); 264 date[6] = bin2bcd(tm->tm_year - 100); 265 266 ret = regmap_bulk_write(rv3032->regmap, RV3032_SEC, date, 267 sizeof(date)); 268 if (ret) 269 return ret; 270 271 ret = regmap_update_bits(rv3032->regmap, RV3032_STATUS, 272 RV3032_STATUS_PORF | RV3032_STATUS_VLF, 0); 273 274 return ret; 275 } 276 277 static int rv3032_get_alarm(struct device *dev, struct rtc_wkalrm *alrm) 278 { 279 struct rv3032_data *rv3032 = dev_get_drvdata(dev); 280 u8 alarmvals[3]; 281 int status, ctrl, ret; 282 283 ret = regmap_bulk_read(rv3032->regmap, RV3032_ALARM_MIN, alarmvals, 284 sizeof(alarmvals)); 285 if (ret) 286 return ret; 287 288 ret = regmap_read(rv3032->regmap, RV3032_STATUS, &status); 289 if (ret < 0) 290 return ret; 291 292 ret = regmap_read(rv3032->regmap, RV3032_CTRL2, &ctrl); 293 if (ret < 0) 294 return ret; 295 296 alrm->time.tm_sec = 0; 297 alrm->time.tm_min = bcd2bin(alarmvals[0] & 0x7f); 298 alrm->time.tm_hour = bcd2bin(alarmvals[1] & 0x3f); 299 alrm->time.tm_mday = bcd2bin(alarmvals[2] & 0x3f); 300 301 alrm->enabled = !!(ctrl & RV3032_CTRL2_AIE); 302 alrm->pending = (status & RV3032_STATUS_AF) && alrm->enabled; 303 304 return 0; 305 } 306 307 static int rv3032_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) 308 { 309 struct rv3032_data *rv3032 = dev_get_drvdata(dev); 310 u8 alarmvals[3]; 311 u8 ctrl = 0; 312 int ret; 313 314 ret = regmap_update_bits(rv3032->regmap, RV3032_CTRL2, 315 RV3032_CTRL2_AIE | RV3032_CTRL2_UIE, 0); 316 if (ret) 317 return ret; 318 319 alarmvals[0] = bin2bcd(alrm->time.tm_min); 320 alarmvals[1] = bin2bcd(alrm->time.tm_hour); 321 alarmvals[2] = bin2bcd(alrm->time.tm_mday); 322 323 ret = regmap_update_bits(rv3032->regmap, RV3032_STATUS, 324 RV3032_STATUS_AF, 0); 325 if (ret) 326 return ret; 327 328 ret = regmap_bulk_write(rv3032->regmap, RV3032_ALARM_MIN, alarmvals, 329 sizeof(alarmvals)); 330 if (ret) 331 return ret; 332 333 if (alrm->enabled) { 334 if (rv3032->rtc->uie_rtctimer.enabled) 335 ctrl |= RV3032_CTRL2_UIE; 336 if (rv3032->rtc->aie_timer.enabled) 337 ctrl |= RV3032_CTRL2_AIE; 338 } 339 340 ret = regmap_update_bits(rv3032->regmap, RV3032_CTRL2, 341 RV3032_CTRL2_UIE | RV3032_CTRL2_AIE, ctrl); 342 343 return ret; 344 } 345 346 static int rv3032_alarm_irq_enable(struct device *dev, unsigned int enabled) 347 { 348 struct rv3032_data *rv3032 = dev_get_drvdata(dev); 349 int ctrl = 0, ret; 350 351 if (enabled) { 352 if (rv3032->rtc->uie_rtctimer.enabled) 353 ctrl |= RV3032_CTRL2_UIE; 354 if (rv3032->rtc->aie_timer.enabled) 355 ctrl |= RV3032_CTRL2_AIE; 356 } 357 358 ret = regmap_update_bits(rv3032->regmap, RV3032_STATUS, 359 RV3032_STATUS_AF | RV3032_STATUS_UF, 0); 360 if (ret) 361 return ret; 362 363 ret = regmap_update_bits(rv3032->regmap, RV3032_CTRL2, 364 RV3032_CTRL2_UIE | RV3032_CTRL2_AIE, ctrl); 365 if (ret) 366 return ret; 367 368 return 0; 369 } 370 371 static int rv3032_read_offset(struct device *dev, long *offset) 372 { 373 struct rv3032_data *rv3032 = dev_get_drvdata(dev); 374 int ret, value, steps; 375 376 ret = regmap_read(rv3032->regmap, RV3032_OFFSET, &value); 377 if (ret < 0) 378 return ret; 379 380 steps = sign_extend32(FIELD_GET(RV3032_OFFSET_MSK, value), 5); 381 382 *offset = DIV_ROUND_CLOSEST(steps * OFFSET_STEP_PPT, 1000); 383 384 return 0; 385 } 386 387 static int rv3032_set_offset(struct device *dev, long offset) 388 { 389 struct rv3032_data *rv3032 = dev_get_drvdata(dev); 390 391 offset = clamp(offset, -7629L, 7391L) * 1000; 392 offset = DIV_ROUND_CLOSEST(offset, OFFSET_STEP_PPT); 393 394 return rv3032_update_cfg(rv3032, RV3032_OFFSET, RV3032_OFFSET_MSK, 395 FIELD_PREP(RV3032_OFFSET_MSK, offset)); 396 } 397 398 static int rv3032_param_get(struct device *dev, struct rtc_param *param) 399 { 400 struct rv3032_data *rv3032 = dev_get_drvdata(dev); 401 int ret; 402 403 switch(param->param) { 404 u32 value; 405 406 case RTC_PARAM_BACKUP_SWITCH_MODE: 407 ret = regmap_read(rv3032->regmap, RV3032_PMU, &value); 408 if (ret < 0) 409 return ret; 410 411 value = FIELD_GET(RV3032_PMU_BSM, value); 412 413 switch(value) { 414 case RV3032_PMU_BSM_DSM: 415 param->uvalue = RTC_BSM_DIRECT; 416 break; 417 case RV3032_PMU_BSM_LSM: 418 param->uvalue = RTC_BSM_LEVEL; 419 break; 420 default: 421 param->uvalue = RTC_BSM_DISABLED; 422 } 423 424 break; 425 426 default: 427 return -EINVAL; 428 } 429 430 return 0; 431 } 432 433 static int rv3032_param_set(struct device *dev, struct rtc_param *param) 434 { 435 struct rv3032_data *rv3032 = dev_get_drvdata(dev); 436 437 switch(param->param) { 438 u8 mode; 439 case RTC_PARAM_BACKUP_SWITCH_MODE: 440 if (rv3032->trickle_charger_set) 441 return -EINVAL; 442 443 switch (param->uvalue) { 444 case RTC_BSM_DISABLED: 445 mode = 0; 446 break; 447 case RTC_BSM_DIRECT: 448 mode = RV3032_PMU_BSM_DSM; 449 break; 450 case RTC_BSM_LEVEL: 451 mode = RV3032_PMU_BSM_LSM; 452 break; 453 default: 454 return -EINVAL; 455 } 456 457 return rv3032_update_cfg(rv3032, RV3032_PMU, RV3032_PMU_BSM, 458 FIELD_PREP(RV3032_PMU_BSM, mode)); 459 460 default: 461 return -EINVAL; 462 } 463 464 return 0; 465 } 466 467 static int rv3032_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) 468 { 469 struct rv3032_data *rv3032 = dev_get_drvdata(dev); 470 int status, val = 0, ret = 0; 471 472 switch (cmd) { 473 case RTC_VL_READ: 474 ret = regmap_read(rv3032->regmap, RV3032_STATUS, &status); 475 if (ret < 0) 476 return ret; 477 478 if (status & (RV3032_STATUS_PORF | RV3032_STATUS_VLF)) 479 val = RTC_VL_DATA_INVALID; 480 return put_user(val, (unsigned int __user *)arg); 481 482 default: 483 return -ENOIOCTLCMD; 484 } 485 } 486 487 static int rv3032_nvram_write(void *priv, unsigned int offset, void *val, size_t bytes) 488 { 489 return regmap_bulk_write(priv, RV3032_RAM1 + offset, val, bytes); 490 } 491 492 static int rv3032_nvram_read(void *priv, unsigned int offset, void *val, size_t bytes) 493 { 494 return regmap_bulk_read(priv, RV3032_RAM1 + offset, val, bytes); 495 } 496 497 static int rv3032_eeprom_write(void *priv, unsigned int offset, void *val, size_t bytes) 498 { 499 struct rv3032_data *rv3032 = priv; 500 u32 status, eerd; 501 int i, ret; 502 u8 *buf = val; 503 504 ret = rv3032_enter_eerd(rv3032, &eerd); 505 if (ret) 506 return ret; 507 508 for (i = 0; i < bytes; i++) { 509 ret = regmap_write(rv3032->regmap, RV3032_EEPROM_ADDR, 510 RV3032_EEPROM_USER + offset + i); 511 if (ret) 512 goto exit_eerd; 513 514 ret = regmap_write(rv3032->regmap, RV3032_EEPROM_DATA, buf[i]); 515 if (ret) 516 goto exit_eerd; 517 518 ret = regmap_write(rv3032->regmap, RV3032_EEPROM_CMD, 519 RV3032_EEPROM_CMD_WRITE); 520 if (ret) 521 goto exit_eerd; 522 523 usleep_range(RV3032_EEBUSY_POLL, RV3032_EEBUSY_TIMEOUT); 524 525 ret = regmap_read_poll_timeout(rv3032->regmap, RV3032_TLSB, status, 526 !(status & RV3032_TLSB_EEBUSY), 527 RV3032_EEBUSY_POLL, RV3032_EEBUSY_TIMEOUT); 528 if (ret) 529 goto exit_eerd; 530 } 531 532 exit_eerd: 533 rv3032_exit_eerd(rv3032, eerd); 534 535 return ret; 536 } 537 538 static int rv3032_eeprom_read(void *priv, unsigned int offset, void *val, size_t bytes) 539 { 540 struct rv3032_data *rv3032 = priv; 541 u32 status, eerd, data; 542 int i, ret; 543 u8 *buf = val; 544 545 ret = rv3032_enter_eerd(rv3032, &eerd); 546 if (ret) 547 return ret; 548 549 for (i = 0; i < bytes; i++) { 550 ret = regmap_write(rv3032->regmap, RV3032_EEPROM_ADDR, 551 RV3032_EEPROM_USER + offset + i); 552 if (ret) 553 goto exit_eerd; 554 555 ret = regmap_write(rv3032->regmap, RV3032_EEPROM_CMD, 556 RV3032_EEPROM_CMD_READ); 557 if (ret) 558 goto exit_eerd; 559 560 ret = regmap_read_poll_timeout(rv3032->regmap, RV3032_TLSB, status, 561 !(status & RV3032_TLSB_EEBUSY), 562 RV3032_EEBUSY_POLL, RV3032_EEBUSY_TIMEOUT); 563 if (ret) 564 goto exit_eerd; 565 566 ret = regmap_read(rv3032->regmap, RV3032_EEPROM_DATA, &data); 567 if (ret) 568 goto exit_eerd; 569 buf[i] = data; 570 } 571 572 exit_eerd: 573 rv3032_exit_eerd(rv3032, eerd); 574 575 return ret; 576 } 577 578 static int rv3032_trickle_charger_setup(struct device *dev, struct rv3032_data *rv3032) 579 { 580 u32 val, ohms, voltage; 581 int i; 582 583 val = FIELD_PREP(RV3032_PMU_TCM, 1) | FIELD_PREP(RV3032_PMU_BSM, RV3032_PMU_BSM_DSM); 584 if (!device_property_read_u32(dev, "trickle-voltage-millivolt", &voltage)) { 585 for (i = 0; i < ARRAY_SIZE(rv3032_trickle_voltages); i++) 586 if (voltage == rv3032_trickle_voltages[i]) 587 break; 588 if (i < ARRAY_SIZE(rv3032_trickle_voltages)) 589 val = FIELD_PREP(RV3032_PMU_TCM, i) | 590 FIELD_PREP(RV3032_PMU_BSM, RV3032_PMU_BSM_LSM); 591 } 592 593 if (device_property_read_u32(dev, "trickle-resistor-ohms", &ohms)) 594 return 0; 595 596 for (i = 0; i < ARRAY_SIZE(rv3032_trickle_resistors); i++) 597 if (ohms == rv3032_trickle_resistors[i]) 598 break; 599 600 if (i >= ARRAY_SIZE(rv3032_trickle_resistors)) { 601 dev_warn(dev, "invalid trickle resistor value\n"); 602 603 return 0; 604 } 605 606 rv3032->trickle_charger_set = true; 607 608 return rv3032_update_cfg(rv3032, RV3032_PMU, 609 RV3032_PMU_TCR | RV3032_PMU_TCM | RV3032_PMU_BSM, 610 val | FIELD_PREP(RV3032_PMU_TCR, i)); 611 } 612 613 #ifdef CONFIG_COMMON_CLK 614 #define clkout_hw_to_rv3032(hw) container_of(hw, struct rv3032_data, clkout_hw) 615 616 static int clkout_xtal_rates[] = { 617 32768, 618 1024, 619 64, 620 1, 621 }; 622 623 #define RV3032_HFD_STEP 8192 624 625 static unsigned long rv3032_clkout_recalc_rate(struct clk_hw *hw, 626 unsigned long parent_rate) 627 { 628 int clkout, ret; 629 struct rv3032_data *rv3032 = clkout_hw_to_rv3032(hw); 630 631 ret = regmap_read(rv3032->regmap, RV3032_CLKOUT2, &clkout); 632 if (ret < 0) 633 return 0; 634 635 if (clkout & RV3032_CLKOUT2_OS) { 636 unsigned long rate = FIELD_GET(RV3032_CLKOUT2_HFD_MSK, clkout) << 8; 637 638 ret = regmap_read(rv3032->regmap, RV3032_CLKOUT1, &clkout); 639 if (ret < 0) 640 return 0; 641 642 rate += clkout + 1; 643 644 return rate * RV3032_HFD_STEP; 645 } 646 647 return clkout_xtal_rates[FIELD_GET(RV3032_CLKOUT2_FD_MSK, clkout)]; 648 } 649 650 static long rv3032_clkout_round_rate(struct clk_hw *hw, unsigned long rate, 651 unsigned long *prate) 652 { 653 int i, hfd; 654 655 if (rate < RV3032_HFD_STEP) 656 for (i = 0; i < ARRAY_SIZE(clkout_xtal_rates); i++) 657 if (clkout_xtal_rates[i] <= rate) 658 return clkout_xtal_rates[i]; 659 660 hfd = DIV_ROUND_CLOSEST(rate, RV3032_HFD_STEP); 661 662 return RV3032_HFD_STEP * clamp(hfd, 0, 8192); 663 } 664 665 static int rv3032_clkout_set_rate(struct clk_hw *hw, unsigned long rate, 666 unsigned long parent_rate) 667 { 668 struct rv3032_data *rv3032 = clkout_hw_to_rv3032(hw); 669 u32 status, eerd; 670 int i, hfd, ret; 671 672 for (i = 0; i < ARRAY_SIZE(clkout_xtal_rates); i++) { 673 if (clkout_xtal_rates[i] == rate) { 674 return rv3032_update_cfg(rv3032, RV3032_CLKOUT2, 0xff, 675 FIELD_PREP(RV3032_CLKOUT2_FD_MSK, i)); 676 } 677 } 678 679 hfd = DIV_ROUND_CLOSEST(rate, RV3032_HFD_STEP); 680 hfd = clamp(hfd, 1, 8192) - 1; 681 682 ret = rv3032_enter_eerd(rv3032, &eerd); 683 if (ret) 684 return ret; 685 686 ret = regmap_write(rv3032->regmap, RV3032_CLKOUT1, hfd & 0xff); 687 if (ret) 688 goto exit_eerd; 689 690 ret = regmap_write(rv3032->regmap, RV3032_CLKOUT2, RV3032_CLKOUT2_OS | 691 FIELD_PREP(RV3032_CLKOUT2_HFD_MSK, hfd >> 8)); 692 if (ret) 693 goto exit_eerd; 694 695 ret = regmap_write(rv3032->regmap, RV3032_EEPROM_CMD, RV3032_EEPROM_CMD_UPDATE); 696 if (ret) 697 goto exit_eerd; 698 699 usleep_range(46000, RV3032_EEBUSY_TIMEOUT); 700 701 ret = regmap_read_poll_timeout(rv3032->regmap, RV3032_TLSB, status, 702 !(status & RV3032_TLSB_EEBUSY), 703 RV3032_EEBUSY_POLL, RV3032_EEBUSY_TIMEOUT); 704 705 exit_eerd: 706 rv3032_exit_eerd(rv3032, eerd); 707 708 return ret; 709 } 710 711 static int rv3032_clkout_prepare(struct clk_hw *hw) 712 { 713 struct rv3032_data *rv3032 = clkout_hw_to_rv3032(hw); 714 715 return rv3032_update_cfg(rv3032, RV3032_PMU, RV3032_PMU_NCLKE, 0); 716 } 717 718 static void rv3032_clkout_unprepare(struct clk_hw *hw) 719 { 720 struct rv3032_data *rv3032 = clkout_hw_to_rv3032(hw); 721 722 rv3032_update_cfg(rv3032, RV3032_PMU, RV3032_PMU_NCLKE, RV3032_PMU_NCLKE); 723 } 724 725 static int rv3032_clkout_is_prepared(struct clk_hw *hw) 726 { 727 int val, ret; 728 struct rv3032_data *rv3032 = clkout_hw_to_rv3032(hw); 729 730 ret = regmap_read(rv3032->regmap, RV3032_PMU, &val); 731 if (ret < 0) 732 return ret; 733 734 return !(val & RV3032_PMU_NCLKE); 735 } 736 737 static const struct clk_ops rv3032_clkout_ops = { 738 .prepare = rv3032_clkout_prepare, 739 .unprepare = rv3032_clkout_unprepare, 740 .is_prepared = rv3032_clkout_is_prepared, 741 .recalc_rate = rv3032_clkout_recalc_rate, 742 .round_rate = rv3032_clkout_round_rate, 743 .set_rate = rv3032_clkout_set_rate, 744 }; 745 746 static int rv3032_clkout_register_clk(struct rv3032_data *rv3032, 747 struct i2c_client *client) 748 { 749 int ret; 750 struct clk *clk; 751 struct clk_init_data init; 752 struct device_node *node = client->dev.of_node; 753 754 ret = regmap_update_bits(rv3032->regmap, RV3032_TLSB, RV3032_TLSB_CLKF, 0); 755 if (ret < 0) 756 return ret; 757 758 ret = regmap_update_bits(rv3032->regmap, RV3032_CTRL2, RV3032_CTRL2_CLKIE, 0); 759 if (ret < 0) 760 return ret; 761 762 ret = regmap_write(rv3032->regmap, RV3032_CLK_IRQ, 0); 763 if (ret < 0) 764 return ret; 765 766 init.name = "rv3032-clkout"; 767 init.ops = &rv3032_clkout_ops; 768 init.flags = 0; 769 init.parent_names = NULL; 770 init.num_parents = 0; 771 rv3032->clkout_hw.init = &init; 772 773 of_property_read_string(node, "clock-output-names", &init.name); 774 775 clk = devm_clk_register(&client->dev, &rv3032->clkout_hw); 776 if (!IS_ERR(clk)) 777 of_clk_add_provider(node, of_clk_src_simple_get, clk); 778 779 return 0; 780 } 781 #endif 782 783 static int rv3032_hwmon_read_temp(struct device *dev, long *mC) 784 { 785 struct rv3032_data *rv3032 = dev_get_drvdata(dev); 786 u8 buf[2]; 787 int temp, prev = 0; 788 int ret; 789 790 ret = regmap_bulk_read(rv3032->regmap, RV3032_TLSB, buf, sizeof(buf)); 791 if (ret) 792 return ret; 793 794 temp = sign_extend32(buf[1], 7) << 4; 795 temp |= FIELD_GET(RV3032_TLSB_TEMP, buf[0]); 796 797 /* No blocking or shadowing on RV3032_TLSB and RV3032_TMSB */ 798 do { 799 prev = temp; 800 801 ret = regmap_bulk_read(rv3032->regmap, RV3032_TLSB, buf, sizeof(buf)); 802 if (ret) 803 return ret; 804 805 temp = sign_extend32(buf[1], 7) << 4; 806 temp |= FIELD_GET(RV3032_TLSB_TEMP, buf[0]); 807 } while (temp != prev); 808 809 *mC = (temp * 1000) / 16; 810 811 return 0; 812 } 813 814 static umode_t rv3032_hwmon_is_visible(const void *data, enum hwmon_sensor_types type, 815 u32 attr, int channel) 816 { 817 if (type != hwmon_temp) 818 return 0; 819 820 switch (attr) { 821 case hwmon_temp_input: 822 return 0444; 823 default: 824 return 0; 825 } 826 } 827 828 static int rv3032_hwmon_read(struct device *dev, enum hwmon_sensor_types type, 829 u32 attr, int channel, long *temp) 830 { 831 int err; 832 833 switch (attr) { 834 case hwmon_temp_input: 835 err = rv3032_hwmon_read_temp(dev, temp); 836 break; 837 default: 838 err = -EOPNOTSUPP; 839 break; 840 } 841 842 return err; 843 } 844 845 static const struct hwmon_channel_info * const rv3032_hwmon_info[] = { 846 HWMON_CHANNEL_INFO(chip, HWMON_C_REGISTER_TZ), 847 HWMON_CHANNEL_INFO(temp, HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_MAX_HYST), 848 NULL 849 }; 850 851 static const struct hwmon_ops rv3032_hwmon_hwmon_ops = { 852 .is_visible = rv3032_hwmon_is_visible, 853 .read = rv3032_hwmon_read, 854 }; 855 856 static const struct hwmon_chip_info rv3032_hwmon_chip_info = { 857 .ops = &rv3032_hwmon_hwmon_ops, 858 .info = rv3032_hwmon_info, 859 }; 860 861 static void rv3032_hwmon_register(struct device *dev) 862 { 863 struct rv3032_data *rv3032 = dev_get_drvdata(dev); 864 865 if (!IS_REACHABLE(CONFIG_HWMON)) 866 return; 867 868 devm_hwmon_device_register_with_info(dev, "rv3032", rv3032, &rv3032_hwmon_chip_info, NULL); 869 } 870 871 static const struct rtc_class_ops rv3032_rtc_ops = { 872 .read_time = rv3032_get_time, 873 .set_time = rv3032_set_time, 874 .read_offset = rv3032_read_offset, 875 .set_offset = rv3032_set_offset, 876 .ioctl = rv3032_ioctl, 877 .read_alarm = rv3032_get_alarm, 878 .set_alarm = rv3032_set_alarm, 879 .alarm_irq_enable = rv3032_alarm_irq_enable, 880 .param_get = rv3032_param_get, 881 .param_set = rv3032_param_set, 882 }; 883 884 static const struct regmap_config regmap_config = { 885 .reg_bits = 8, 886 .val_bits = 8, 887 .max_register = 0xCA, 888 }; 889 890 static int rv3032_probe(struct i2c_client *client) 891 { 892 struct rv3032_data *rv3032; 893 int ret, status; 894 struct nvmem_config nvmem_cfg = { 895 .name = "rv3032_nvram", 896 .word_size = 1, 897 .stride = 1, 898 .size = 16, 899 .type = NVMEM_TYPE_BATTERY_BACKED, 900 .reg_read = rv3032_nvram_read, 901 .reg_write = rv3032_nvram_write, 902 }; 903 struct nvmem_config eeprom_cfg = { 904 .name = "rv3032_eeprom", 905 .word_size = 1, 906 .stride = 1, 907 .size = 32, 908 .type = NVMEM_TYPE_EEPROM, 909 .reg_read = rv3032_eeprom_read, 910 .reg_write = rv3032_eeprom_write, 911 }; 912 913 rv3032 = devm_kzalloc(&client->dev, sizeof(struct rv3032_data), 914 GFP_KERNEL); 915 if (!rv3032) 916 return -ENOMEM; 917 918 rv3032->regmap = devm_regmap_init_i2c(client, ®map_config); 919 if (IS_ERR(rv3032->regmap)) 920 return PTR_ERR(rv3032->regmap); 921 922 i2c_set_clientdata(client, rv3032); 923 924 ret = regmap_read(rv3032->regmap, RV3032_STATUS, &status); 925 if (ret < 0) 926 return ret; 927 928 rv3032->rtc = devm_rtc_allocate_device(&client->dev); 929 if (IS_ERR(rv3032->rtc)) 930 return PTR_ERR(rv3032->rtc); 931 932 if (client->irq > 0) { 933 unsigned long irqflags = IRQF_TRIGGER_LOW; 934 935 if (dev_fwnode(&client->dev)) 936 irqflags = 0; 937 938 ret = devm_request_threaded_irq(&client->dev, client->irq, 939 NULL, rv3032_handle_irq, 940 irqflags | IRQF_ONESHOT, 941 "rv3032", rv3032); 942 if (ret) { 943 dev_warn(&client->dev, "unable to request IRQ, alarms disabled\n"); 944 client->irq = 0; 945 } 946 } 947 if (!client->irq) 948 clear_bit(RTC_FEATURE_ALARM, rv3032->rtc->features); 949 950 ret = regmap_update_bits(rv3032->regmap, RV3032_CTRL1, 951 RV3032_CTRL1_WADA, RV3032_CTRL1_WADA); 952 if (ret) 953 return ret; 954 955 rv3032_trickle_charger_setup(&client->dev, rv3032); 956 957 set_bit(RTC_FEATURE_BACKUP_SWITCH_MODE, rv3032->rtc->features); 958 set_bit(RTC_FEATURE_ALARM_RES_MINUTE, rv3032->rtc->features); 959 960 rv3032->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; 961 rv3032->rtc->range_max = RTC_TIMESTAMP_END_2099; 962 rv3032->rtc->ops = &rv3032_rtc_ops; 963 ret = devm_rtc_register_device(rv3032->rtc); 964 if (ret) 965 return ret; 966 967 nvmem_cfg.priv = rv3032->regmap; 968 devm_rtc_nvmem_register(rv3032->rtc, &nvmem_cfg); 969 eeprom_cfg.priv = rv3032; 970 devm_rtc_nvmem_register(rv3032->rtc, &eeprom_cfg); 971 972 rv3032->rtc->max_user_freq = 1; 973 974 #ifdef CONFIG_COMMON_CLK 975 rv3032_clkout_register_clk(rv3032, client); 976 #endif 977 978 rv3032_hwmon_register(&client->dev); 979 980 return 0; 981 } 982 983 static const struct acpi_device_id rv3032_i2c_acpi_match[] = { 984 { "MCRY3032" }, 985 { } 986 }; 987 MODULE_DEVICE_TABLE(acpi, rv3032_i2c_acpi_match); 988 989 static const __maybe_unused struct of_device_id rv3032_of_match[] = { 990 { .compatible = "microcrystal,rv3032", }, 991 { } 992 }; 993 MODULE_DEVICE_TABLE(of, rv3032_of_match); 994 995 static struct i2c_driver rv3032_driver = { 996 .driver = { 997 .name = "rtc-rv3032", 998 .acpi_match_table = rv3032_i2c_acpi_match, 999 .of_match_table = of_match_ptr(rv3032_of_match), 1000 }, 1001 .probe = rv3032_probe, 1002 }; 1003 module_i2c_driver(rv3032_driver); 1004 1005 MODULE_AUTHOR("Alexandre Belloni <alexandre.belloni@bootlin.com>"); 1006 MODULE_DESCRIPTION("Micro Crystal RV3032 RTC driver"); 1007 MODULE_LICENSE("GPL v2"); 1008