rtc-pcf85063.c (17384B)
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * An I2C driver for the PCF85063 RTC 4 * Copyright 2014 Rose Technology 5 * 6 * Author: Søren Andersen <san@rosetechnology.dk> 7 * Maintainers: http://www.nslu2-linux.org/ 8 * 9 * Copyright (C) 2019 Micro Crystal AG 10 * Author: Alexandre Belloni <alexandre.belloni@bootlin.com> 11 */ 12#include <linux/clk-provider.h> 13#include <linux/i2c.h> 14#include <linux/bcd.h> 15#include <linux/rtc.h> 16#include <linux/module.h> 17#include <linux/of_device.h> 18#include <linux/pm_wakeirq.h> 19#include <linux/regmap.h> 20 21/* 22 * Information for this driver was pulled from the following datasheets. 23 * 24 * https://www.nxp.com/docs/en/data-sheet/PCF85063A.pdf 25 * https://www.nxp.com/docs/en/data-sheet/PCF85063TP.pdf 26 * 27 * PCF85063A -- Rev. 7 — 30 March 2018 28 * PCF85063TP -- Rev. 4 — 6 May 2015 29 * 30 * https://www.microcrystal.com/fileadmin/Media/Products/RTC/App.Manual/RV-8263-C7_App-Manual.pdf 31 * RV8263 -- Rev. 1.0 — January 2019 32 */ 33 34#define PCF85063_REG_CTRL1 0x00 /* status */ 35#define PCF85063_REG_CTRL1_CAP_SEL BIT(0) 36#define PCF85063_REG_CTRL1_STOP BIT(5) 37#define PCF85063_REG_CTRL1_EXT_TEST BIT(7) 38 39#define PCF85063_REG_CTRL2 0x01 40#define PCF85063_CTRL2_AF BIT(6) 41#define PCF85063_CTRL2_AIE BIT(7) 42 43#define PCF85063_REG_OFFSET 0x02 44#define PCF85063_OFFSET_SIGN_BIT 6 /* 2's complement sign bit */ 45#define PCF85063_OFFSET_MODE BIT(7) 46#define PCF85063_OFFSET_STEP0 4340 47#define PCF85063_OFFSET_STEP1 4069 48 49#define PCF85063_REG_CLKO_F_MASK 0x07 /* frequency mask */ 50#define PCF85063_REG_CLKO_F_32768HZ 0x00 51#define PCF85063_REG_CLKO_F_OFF 0x07 52 53#define PCF85063_REG_RAM 0x03 54 55#define PCF85063_REG_SC 0x04 /* datetime */ 56#define PCF85063_REG_SC_OS 0x80 57 58#define PCF85063_REG_ALM_S 0x0b 59#define PCF85063_AEN BIT(7) 60 61struct pcf85063_config { 62 struct regmap_config regmap; 63 unsigned has_alarms:1; 64 unsigned force_cap_7000:1; 65}; 66 67struct pcf85063 { 68 struct rtc_device *rtc; 69 struct regmap *regmap; 70#ifdef CONFIG_COMMON_CLK 71 struct clk_hw clkout_hw; 72#endif 73}; 74 75static int pcf85063_rtc_read_time(struct device *dev, struct rtc_time *tm) 76{ 77 struct pcf85063 *pcf85063 = dev_get_drvdata(dev); 78 int rc; 79 u8 regs[7]; 80 81 /* 82 * while reading, the time/date registers are blocked and not updated 83 * anymore until the access is finished. To not lose a second 84 * event, the access must be finished within one second. So, read all 85 * time/date registers in one turn. 86 */ 87 rc = regmap_bulk_read(pcf85063->regmap, PCF85063_REG_SC, regs, 88 sizeof(regs)); 89 if (rc) 90 return rc; 91 92 /* if the clock has lost its power it makes no sense to use its time */ 93 if (regs[0] & PCF85063_REG_SC_OS) { 94 dev_warn(&pcf85063->rtc->dev, "Power loss detected, invalid time\n"); 95 return -EINVAL; 96 } 97 98 tm->tm_sec = bcd2bin(regs[0] & 0x7F); 99 tm->tm_min = bcd2bin(regs[1] & 0x7F); 100 tm->tm_hour = bcd2bin(regs[2] & 0x3F); /* rtc hr 0-23 */ 101 tm->tm_mday = bcd2bin(regs[3] & 0x3F); 102 tm->tm_wday = regs[4] & 0x07; 103 tm->tm_mon = bcd2bin(regs[5] & 0x1F) - 1; /* rtc mn 1-12 */ 104 tm->tm_year = bcd2bin(regs[6]); 105 tm->tm_year += 100; 106 107 return 0; 108} 109 110static int pcf85063_rtc_set_time(struct device *dev, struct rtc_time *tm) 111{ 112 struct pcf85063 *pcf85063 = dev_get_drvdata(dev); 113 int rc; 114 u8 regs[7]; 115 116 /* 117 * to accurately set the time, reset the divider chain and keep it in 118 * reset state until all time/date registers are written 119 */ 120 rc = regmap_update_bits(pcf85063->regmap, PCF85063_REG_CTRL1, 121 PCF85063_REG_CTRL1_EXT_TEST | 122 PCF85063_REG_CTRL1_STOP, 123 PCF85063_REG_CTRL1_STOP); 124 if (rc) 125 return rc; 126 127 /* hours, minutes and seconds */ 128 regs[0] = bin2bcd(tm->tm_sec) & 0x7F; /* clear OS flag */ 129 130 regs[1] = bin2bcd(tm->tm_min); 131 regs[2] = bin2bcd(tm->tm_hour); 132 133 /* Day of month, 1 - 31 */ 134 regs[3] = bin2bcd(tm->tm_mday); 135 136 /* Day, 0 - 6 */ 137 regs[4] = tm->tm_wday & 0x07; 138 139 /* month, 1 - 12 */ 140 regs[5] = bin2bcd(tm->tm_mon + 1); 141 142 /* year and century */ 143 regs[6] = bin2bcd(tm->tm_year - 100); 144 145 /* write all registers at once */ 146 rc = regmap_bulk_write(pcf85063->regmap, PCF85063_REG_SC, 147 regs, sizeof(regs)); 148 if (rc) 149 return rc; 150 151 /* 152 * Write the control register as a separate action since the size of 153 * the register space is different between the PCF85063TP and 154 * PCF85063A devices. The rollover point can not be used. 155 */ 156 return regmap_update_bits(pcf85063->regmap, PCF85063_REG_CTRL1, 157 PCF85063_REG_CTRL1_STOP, 0); 158} 159 160static int pcf85063_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) 161{ 162 struct pcf85063 *pcf85063 = dev_get_drvdata(dev); 163 u8 buf[4]; 164 unsigned int val; 165 int ret; 166 167 ret = regmap_bulk_read(pcf85063->regmap, PCF85063_REG_ALM_S, 168 buf, sizeof(buf)); 169 if (ret) 170 return ret; 171 172 alrm->time.tm_sec = bcd2bin(buf[0]); 173 alrm->time.tm_min = bcd2bin(buf[1]); 174 alrm->time.tm_hour = bcd2bin(buf[2]); 175 alrm->time.tm_mday = bcd2bin(buf[3]); 176 177 ret = regmap_read(pcf85063->regmap, PCF85063_REG_CTRL2, &val); 178 if (ret) 179 return ret; 180 181 alrm->enabled = !!(val & PCF85063_CTRL2_AIE); 182 183 return 0; 184} 185 186static int pcf85063_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) 187{ 188 struct pcf85063 *pcf85063 = dev_get_drvdata(dev); 189 u8 buf[5]; 190 int ret; 191 192 buf[0] = bin2bcd(alrm->time.tm_sec); 193 buf[1] = bin2bcd(alrm->time.tm_min); 194 buf[2] = bin2bcd(alrm->time.tm_hour); 195 buf[3] = bin2bcd(alrm->time.tm_mday); 196 buf[4] = PCF85063_AEN; /* Do not match on week day */ 197 198 ret = regmap_update_bits(pcf85063->regmap, PCF85063_REG_CTRL2, 199 PCF85063_CTRL2_AIE | PCF85063_CTRL2_AF, 0); 200 if (ret) 201 return ret; 202 203 ret = regmap_bulk_write(pcf85063->regmap, PCF85063_REG_ALM_S, 204 buf, sizeof(buf)); 205 if (ret) 206 return ret; 207 208 return regmap_update_bits(pcf85063->regmap, PCF85063_REG_CTRL2, 209 PCF85063_CTRL2_AIE | PCF85063_CTRL2_AF, 210 alrm->enabled ? PCF85063_CTRL2_AIE | PCF85063_CTRL2_AF : PCF85063_CTRL2_AF); 211} 212 213static int pcf85063_rtc_alarm_irq_enable(struct device *dev, 214 unsigned int enabled) 215{ 216 struct pcf85063 *pcf85063 = dev_get_drvdata(dev); 217 218 return regmap_update_bits(pcf85063->regmap, PCF85063_REG_CTRL2, 219 PCF85063_CTRL2_AIE, 220 enabled ? PCF85063_CTRL2_AIE : 0); 221} 222 223static irqreturn_t pcf85063_rtc_handle_irq(int irq, void *dev_id) 224{ 225 struct pcf85063 *pcf85063 = dev_id; 226 unsigned int val; 227 int err; 228 229 err = regmap_read(pcf85063->regmap, PCF85063_REG_CTRL2, &val); 230 if (err) 231 return IRQ_NONE; 232 233 if (val & PCF85063_CTRL2_AF) { 234 rtc_update_irq(pcf85063->rtc, 1, RTC_IRQF | RTC_AF); 235 regmap_update_bits(pcf85063->regmap, PCF85063_REG_CTRL2, 236 PCF85063_CTRL2_AIE | PCF85063_CTRL2_AF, 237 0); 238 return IRQ_HANDLED; 239 } 240 241 return IRQ_NONE; 242} 243 244static int pcf85063_read_offset(struct device *dev, long *offset) 245{ 246 struct pcf85063 *pcf85063 = dev_get_drvdata(dev); 247 long val; 248 u32 reg; 249 int ret; 250 251 ret = regmap_read(pcf85063->regmap, PCF85063_REG_OFFSET, ®); 252 if (ret < 0) 253 return ret; 254 255 val = sign_extend32(reg & ~PCF85063_OFFSET_MODE, 256 PCF85063_OFFSET_SIGN_BIT); 257 258 if (reg & PCF85063_OFFSET_MODE) 259 *offset = val * PCF85063_OFFSET_STEP1; 260 else 261 *offset = val * PCF85063_OFFSET_STEP0; 262 263 return 0; 264} 265 266static int pcf85063_set_offset(struct device *dev, long offset) 267{ 268 struct pcf85063 *pcf85063 = dev_get_drvdata(dev); 269 s8 mode0, mode1, reg; 270 unsigned int error0, error1; 271 272 if (offset > PCF85063_OFFSET_STEP0 * 63) 273 return -ERANGE; 274 if (offset < PCF85063_OFFSET_STEP0 * -64) 275 return -ERANGE; 276 277 mode0 = DIV_ROUND_CLOSEST(offset, PCF85063_OFFSET_STEP0); 278 mode1 = DIV_ROUND_CLOSEST(offset, PCF85063_OFFSET_STEP1); 279 280 error0 = abs(offset - (mode0 * PCF85063_OFFSET_STEP0)); 281 error1 = abs(offset - (mode1 * PCF85063_OFFSET_STEP1)); 282 if (mode1 > 63 || mode1 < -64 || error0 < error1) 283 reg = mode0 & ~PCF85063_OFFSET_MODE; 284 else 285 reg = mode1 | PCF85063_OFFSET_MODE; 286 287 return regmap_write(pcf85063->regmap, PCF85063_REG_OFFSET, reg); 288} 289 290static int pcf85063_ioctl(struct device *dev, unsigned int cmd, 291 unsigned long arg) 292{ 293 struct pcf85063 *pcf85063 = dev_get_drvdata(dev); 294 int status, ret = 0; 295 296 switch (cmd) { 297 case RTC_VL_READ: 298 ret = regmap_read(pcf85063->regmap, PCF85063_REG_SC, &status); 299 if (ret < 0) 300 return ret; 301 302 status = (status & PCF85063_REG_SC_OS) ? RTC_VL_DATA_INVALID : 0; 303 304 return put_user(status, (unsigned int __user *)arg); 305 306 default: 307 return -ENOIOCTLCMD; 308 } 309} 310 311static const struct rtc_class_ops pcf85063_rtc_ops = { 312 .read_time = pcf85063_rtc_read_time, 313 .set_time = pcf85063_rtc_set_time, 314 .read_offset = pcf85063_read_offset, 315 .set_offset = pcf85063_set_offset, 316 .read_alarm = pcf85063_rtc_read_alarm, 317 .set_alarm = pcf85063_rtc_set_alarm, 318 .alarm_irq_enable = pcf85063_rtc_alarm_irq_enable, 319 .ioctl = pcf85063_ioctl, 320}; 321 322static int pcf85063_nvmem_read(void *priv, unsigned int offset, 323 void *val, size_t bytes) 324{ 325 return regmap_read(priv, PCF85063_REG_RAM, val); 326} 327 328static int pcf85063_nvmem_write(void *priv, unsigned int offset, 329 void *val, size_t bytes) 330{ 331 return regmap_write(priv, PCF85063_REG_RAM, *(u8 *)val); 332} 333 334static int pcf85063_load_capacitance(struct pcf85063 *pcf85063, 335 const struct device_node *np, 336 unsigned int force_cap) 337{ 338 u32 load = 7000; 339 u8 reg = 0; 340 341 if (force_cap) 342 load = force_cap; 343 else 344 of_property_read_u32(np, "quartz-load-femtofarads", &load); 345 346 switch (load) { 347 default: 348 dev_warn(&pcf85063->rtc->dev, "Unknown quartz-load-femtofarads value: %d. Assuming 7000", 349 load); 350 fallthrough; 351 case 7000: 352 break; 353 case 12500: 354 reg = PCF85063_REG_CTRL1_CAP_SEL; 355 break; 356 } 357 358 return regmap_update_bits(pcf85063->regmap, PCF85063_REG_CTRL1, 359 PCF85063_REG_CTRL1_CAP_SEL, reg); 360} 361 362#ifdef CONFIG_COMMON_CLK 363/* 364 * Handling of the clkout 365 */ 366 367#define clkout_hw_to_pcf85063(_hw) container_of(_hw, struct pcf85063, clkout_hw) 368 369static int clkout_rates[] = { 370 32768, 371 16384, 372 8192, 373 4096, 374 2048, 375 1024, 376 1, 377 0 378}; 379 380static unsigned long pcf85063_clkout_recalc_rate(struct clk_hw *hw, 381 unsigned long parent_rate) 382{ 383 struct pcf85063 *pcf85063 = clkout_hw_to_pcf85063(hw); 384 unsigned int buf; 385 int ret = regmap_read(pcf85063->regmap, PCF85063_REG_CTRL2, &buf); 386 387 if (ret < 0) 388 return 0; 389 390 buf &= PCF85063_REG_CLKO_F_MASK; 391 return clkout_rates[buf]; 392} 393 394static long pcf85063_clkout_round_rate(struct clk_hw *hw, unsigned long rate, 395 unsigned long *prate) 396{ 397 int i; 398 399 for (i = 0; i < ARRAY_SIZE(clkout_rates); i++) 400 if (clkout_rates[i] <= rate) 401 return clkout_rates[i]; 402 403 return 0; 404} 405 406static int pcf85063_clkout_set_rate(struct clk_hw *hw, unsigned long rate, 407 unsigned long parent_rate) 408{ 409 struct pcf85063 *pcf85063 = clkout_hw_to_pcf85063(hw); 410 int i; 411 412 for (i = 0; i < ARRAY_SIZE(clkout_rates); i++) 413 if (clkout_rates[i] == rate) 414 return regmap_update_bits(pcf85063->regmap, 415 PCF85063_REG_CTRL2, 416 PCF85063_REG_CLKO_F_MASK, i); 417 418 return -EINVAL; 419} 420 421static int pcf85063_clkout_control(struct clk_hw *hw, bool enable) 422{ 423 struct pcf85063 *pcf85063 = clkout_hw_to_pcf85063(hw); 424 unsigned int buf; 425 int ret; 426 427 ret = regmap_read(pcf85063->regmap, PCF85063_REG_OFFSET, &buf); 428 if (ret < 0) 429 return ret; 430 buf &= PCF85063_REG_CLKO_F_MASK; 431 432 if (enable) { 433 if (buf == PCF85063_REG_CLKO_F_OFF) 434 buf = PCF85063_REG_CLKO_F_32768HZ; 435 else 436 return 0; 437 } else { 438 if (buf != PCF85063_REG_CLKO_F_OFF) 439 buf = PCF85063_REG_CLKO_F_OFF; 440 else 441 return 0; 442 } 443 444 return regmap_update_bits(pcf85063->regmap, PCF85063_REG_CTRL2, 445 PCF85063_REG_CLKO_F_MASK, buf); 446} 447 448static int pcf85063_clkout_prepare(struct clk_hw *hw) 449{ 450 return pcf85063_clkout_control(hw, 1); 451} 452 453static void pcf85063_clkout_unprepare(struct clk_hw *hw) 454{ 455 pcf85063_clkout_control(hw, 0); 456} 457 458static int pcf85063_clkout_is_prepared(struct clk_hw *hw) 459{ 460 struct pcf85063 *pcf85063 = clkout_hw_to_pcf85063(hw); 461 unsigned int buf; 462 int ret = regmap_read(pcf85063->regmap, PCF85063_REG_CTRL2, &buf); 463 464 if (ret < 0) 465 return 0; 466 467 return (buf & PCF85063_REG_CLKO_F_MASK) != PCF85063_REG_CLKO_F_OFF; 468} 469 470static const struct clk_ops pcf85063_clkout_ops = { 471 .prepare = pcf85063_clkout_prepare, 472 .unprepare = pcf85063_clkout_unprepare, 473 .is_prepared = pcf85063_clkout_is_prepared, 474 .recalc_rate = pcf85063_clkout_recalc_rate, 475 .round_rate = pcf85063_clkout_round_rate, 476 .set_rate = pcf85063_clkout_set_rate, 477}; 478 479static struct clk *pcf85063_clkout_register_clk(struct pcf85063 *pcf85063) 480{ 481 struct clk *clk; 482 struct clk_init_data init; 483 struct device_node *node = pcf85063->rtc->dev.parent->of_node; 484 struct device_node *fixed_clock; 485 486 fixed_clock = of_get_child_by_name(node, "clock"); 487 if (fixed_clock) { 488 /* 489 * skip registering square wave clock when a fixed 490 * clock has been registered. The fixed clock is 491 * registered automatically when being referenced. 492 */ 493 of_node_put(fixed_clock); 494 return NULL; 495 } 496 497 init.name = "pcf85063-clkout"; 498 init.ops = &pcf85063_clkout_ops; 499 init.flags = 0; 500 init.parent_names = NULL; 501 init.num_parents = 0; 502 pcf85063->clkout_hw.init = &init; 503 504 /* optional override of the clockname */ 505 of_property_read_string(node, "clock-output-names", &init.name); 506 507 /* register the clock */ 508 clk = devm_clk_register(&pcf85063->rtc->dev, &pcf85063->clkout_hw); 509 510 if (!IS_ERR(clk)) 511 of_clk_add_provider(node, of_clk_src_simple_get, clk); 512 513 return clk; 514} 515#endif 516 517enum pcf85063_type { 518 PCF85063, 519 PCF85063TP, 520 PCF85063A, 521 RV8263, 522 PCF85063_LAST_ID 523}; 524 525static struct pcf85063_config pcf85063_cfg[] = { 526 [PCF85063] = { 527 .regmap = { 528 .reg_bits = 8, 529 .val_bits = 8, 530 .max_register = 0x0a, 531 }, 532 }, 533 [PCF85063TP] = { 534 .regmap = { 535 .reg_bits = 8, 536 .val_bits = 8, 537 .max_register = 0x0a, 538 }, 539 }, 540 [PCF85063A] = { 541 .regmap = { 542 .reg_bits = 8, 543 .val_bits = 8, 544 .max_register = 0x11, 545 }, 546 .has_alarms = 1, 547 }, 548 [RV8263] = { 549 .regmap = { 550 .reg_bits = 8, 551 .val_bits = 8, 552 .max_register = 0x11, 553 }, 554 .has_alarms = 1, 555 .force_cap_7000 = 1, 556 }, 557}; 558 559static const struct i2c_device_id pcf85063_ids[]; 560 561static int pcf85063_probe(struct i2c_client *client) 562{ 563 struct pcf85063 *pcf85063; 564 unsigned int tmp; 565 int err; 566 const struct pcf85063_config *config; 567 struct nvmem_config nvmem_cfg = { 568 .name = "pcf85063_nvram", 569 .reg_read = pcf85063_nvmem_read, 570 .reg_write = pcf85063_nvmem_write, 571 .type = NVMEM_TYPE_BATTERY_BACKED, 572 .size = 1, 573 }; 574 575 dev_dbg(&client->dev, "%s\n", __func__); 576 577 pcf85063 = devm_kzalloc(&client->dev, sizeof(struct pcf85063), 578 GFP_KERNEL); 579 if (!pcf85063) 580 return -ENOMEM; 581 582 if (client->dev.of_node) { 583 config = of_device_get_match_data(&client->dev); 584 if (!config) 585 return -ENODEV; 586 } else { 587 enum pcf85063_type type = 588 i2c_match_id(pcf85063_ids, client)->driver_data; 589 if (type >= PCF85063_LAST_ID) 590 return -ENODEV; 591 config = &pcf85063_cfg[type]; 592 } 593 594 pcf85063->regmap = devm_regmap_init_i2c(client, &config->regmap); 595 if (IS_ERR(pcf85063->regmap)) 596 return PTR_ERR(pcf85063->regmap); 597 598 i2c_set_clientdata(client, pcf85063); 599 600 err = regmap_read(pcf85063->regmap, PCF85063_REG_CTRL1, &tmp); 601 if (err) { 602 dev_err(&client->dev, "RTC chip is not present\n"); 603 return err; 604 } 605 606 pcf85063->rtc = devm_rtc_allocate_device(&client->dev); 607 if (IS_ERR(pcf85063->rtc)) 608 return PTR_ERR(pcf85063->rtc); 609 610 err = pcf85063_load_capacitance(pcf85063, client->dev.of_node, 611 config->force_cap_7000 ? 7000 : 0); 612 if (err < 0) 613 dev_warn(&client->dev, "failed to set xtal load capacitance: %d", 614 err); 615 616 pcf85063->rtc->ops = &pcf85063_rtc_ops; 617 pcf85063->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; 618 pcf85063->rtc->range_max = RTC_TIMESTAMP_END_2099; 619 set_bit(RTC_FEATURE_ALARM_RES_2S, pcf85063->rtc->features); 620 clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, pcf85063->rtc->features); 621 clear_bit(RTC_FEATURE_ALARM, pcf85063->rtc->features); 622 623 if (config->has_alarms && client->irq > 0) { 624 err = devm_request_threaded_irq(&client->dev, client->irq, 625 NULL, pcf85063_rtc_handle_irq, 626 IRQF_TRIGGER_LOW | IRQF_ONESHOT, 627 "pcf85063", pcf85063); 628 if (err) { 629 dev_warn(&pcf85063->rtc->dev, 630 "unable to request IRQ, alarms disabled\n"); 631 } else { 632 set_bit(RTC_FEATURE_ALARM, pcf85063->rtc->features); 633 device_init_wakeup(&client->dev, true); 634 err = dev_pm_set_wake_irq(&client->dev, client->irq); 635 if (err) 636 dev_err(&pcf85063->rtc->dev, 637 "failed to enable irq wake\n"); 638 } 639 } 640 641 nvmem_cfg.priv = pcf85063->regmap; 642 devm_rtc_nvmem_register(pcf85063->rtc, &nvmem_cfg); 643 644#ifdef CONFIG_COMMON_CLK 645 /* register clk in common clk framework */ 646 pcf85063_clkout_register_clk(pcf85063); 647#endif 648 649 return devm_rtc_register_device(pcf85063->rtc); 650} 651 652static const struct i2c_device_id pcf85063_ids[] = { 653 { "pca85073a", PCF85063A }, 654 { "pcf85063", PCF85063 }, 655 { "pcf85063tp", PCF85063TP }, 656 { "pcf85063a", PCF85063A }, 657 { "rv8263", RV8263 }, 658 {} 659}; 660MODULE_DEVICE_TABLE(i2c, pcf85063_ids); 661 662#ifdef CONFIG_OF 663static const struct of_device_id pcf85063_of_match[] = { 664 { .compatible = "nxp,pca85073a", .data = &pcf85063_cfg[PCF85063A] }, 665 { .compatible = "nxp,pcf85063", .data = &pcf85063_cfg[PCF85063] }, 666 { .compatible = "nxp,pcf85063tp", .data = &pcf85063_cfg[PCF85063TP] }, 667 { .compatible = "nxp,pcf85063a", .data = &pcf85063_cfg[PCF85063A] }, 668 { .compatible = "microcrystal,rv8263", .data = &pcf85063_cfg[RV8263] }, 669 {} 670}; 671MODULE_DEVICE_TABLE(of, pcf85063_of_match); 672#endif 673 674static struct i2c_driver pcf85063_driver = { 675 .driver = { 676 .name = "rtc-pcf85063", 677 .of_match_table = of_match_ptr(pcf85063_of_match), 678 }, 679 .probe_new = pcf85063_probe, 680 .id_table = pcf85063_ids, 681}; 682 683module_i2c_driver(pcf85063_driver); 684 685MODULE_AUTHOR("Søren Andersen <san@rosetechnology.dk>"); 686MODULE_DESCRIPTION("PCF85063 RTC driver"); 687MODULE_LICENSE("GPL");