rtc-twl.c (17232B)
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * rtc-twl.c -- TWL Real Time Clock interface 4 * 5 * Copyright (C) 2007 MontaVista Software, Inc 6 * Author: Alexandre Rusev <source@mvista.com> 7 * 8 * Based on original TI driver twl4030-rtc.c 9 * Copyright (C) 2006 Texas Instruments, Inc. 10 * 11 * Based on rtc-omap.c 12 * Copyright (C) 2003 MontaVista Software, Inc. 13 * Author: George G. Davis <gdavis@mvista.com> or <source@mvista.com> 14 * Copyright (C) 2006 David Brownell 15 */ 16 17#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 18 19#include <linux/kernel.h> 20#include <linux/errno.h> 21#include <linux/init.h> 22#include <linux/module.h> 23#include <linux/types.h> 24#include <linux/rtc.h> 25#include <linux/bcd.h> 26#include <linux/platform_device.h> 27#include <linux/interrupt.h> 28#include <linux/of.h> 29 30#include <linux/mfd/twl.h> 31 32enum twl_class { 33 TWL_4030 = 0, 34 TWL_6030, 35}; 36 37/* 38 * RTC block register offsets (use TWL_MODULE_RTC) 39 */ 40enum { 41 REG_SECONDS_REG = 0, 42 REG_MINUTES_REG, 43 REG_HOURS_REG, 44 REG_DAYS_REG, 45 REG_MONTHS_REG, 46 REG_YEARS_REG, 47 REG_WEEKS_REG, 48 49 REG_ALARM_SECONDS_REG, 50 REG_ALARM_MINUTES_REG, 51 REG_ALARM_HOURS_REG, 52 REG_ALARM_DAYS_REG, 53 REG_ALARM_MONTHS_REG, 54 REG_ALARM_YEARS_REG, 55 56 REG_RTC_CTRL_REG, 57 REG_RTC_STATUS_REG, 58 REG_RTC_INTERRUPTS_REG, 59 60 REG_RTC_COMP_LSB_REG, 61 REG_RTC_COMP_MSB_REG, 62}; 63static const u8 twl4030_rtc_reg_map[] = { 64 [REG_SECONDS_REG] = 0x00, 65 [REG_MINUTES_REG] = 0x01, 66 [REG_HOURS_REG] = 0x02, 67 [REG_DAYS_REG] = 0x03, 68 [REG_MONTHS_REG] = 0x04, 69 [REG_YEARS_REG] = 0x05, 70 [REG_WEEKS_REG] = 0x06, 71 72 [REG_ALARM_SECONDS_REG] = 0x07, 73 [REG_ALARM_MINUTES_REG] = 0x08, 74 [REG_ALARM_HOURS_REG] = 0x09, 75 [REG_ALARM_DAYS_REG] = 0x0A, 76 [REG_ALARM_MONTHS_REG] = 0x0B, 77 [REG_ALARM_YEARS_REG] = 0x0C, 78 79 [REG_RTC_CTRL_REG] = 0x0D, 80 [REG_RTC_STATUS_REG] = 0x0E, 81 [REG_RTC_INTERRUPTS_REG] = 0x0F, 82 83 [REG_RTC_COMP_LSB_REG] = 0x10, 84 [REG_RTC_COMP_MSB_REG] = 0x11, 85}; 86static const u8 twl6030_rtc_reg_map[] = { 87 [REG_SECONDS_REG] = 0x00, 88 [REG_MINUTES_REG] = 0x01, 89 [REG_HOURS_REG] = 0x02, 90 [REG_DAYS_REG] = 0x03, 91 [REG_MONTHS_REG] = 0x04, 92 [REG_YEARS_REG] = 0x05, 93 [REG_WEEKS_REG] = 0x06, 94 95 [REG_ALARM_SECONDS_REG] = 0x08, 96 [REG_ALARM_MINUTES_REG] = 0x09, 97 [REG_ALARM_HOURS_REG] = 0x0A, 98 [REG_ALARM_DAYS_REG] = 0x0B, 99 [REG_ALARM_MONTHS_REG] = 0x0C, 100 [REG_ALARM_YEARS_REG] = 0x0D, 101 102 [REG_RTC_CTRL_REG] = 0x10, 103 [REG_RTC_STATUS_REG] = 0x11, 104 [REG_RTC_INTERRUPTS_REG] = 0x12, 105 106 [REG_RTC_COMP_LSB_REG] = 0x13, 107 [REG_RTC_COMP_MSB_REG] = 0x14, 108}; 109 110/* RTC_CTRL_REG bitfields */ 111#define BIT_RTC_CTRL_REG_STOP_RTC_M 0x01 112#define BIT_RTC_CTRL_REG_ROUND_30S_M 0x02 113#define BIT_RTC_CTRL_REG_AUTO_COMP_M 0x04 114#define BIT_RTC_CTRL_REG_MODE_12_24_M 0x08 115#define BIT_RTC_CTRL_REG_TEST_MODE_M 0x10 116#define BIT_RTC_CTRL_REG_SET_32_COUNTER_M 0x20 117#define BIT_RTC_CTRL_REG_GET_TIME_M 0x40 118#define BIT_RTC_CTRL_REG_RTC_V_OPT 0x80 119 120/* RTC_STATUS_REG bitfields */ 121#define BIT_RTC_STATUS_REG_RUN_M 0x02 122#define BIT_RTC_STATUS_REG_1S_EVENT_M 0x04 123#define BIT_RTC_STATUS_REG_1M_EVENT_M 0x08 124#define BIT_RTC_STATUS_REG_1H_EVENT_M 0x10 125#define BIT_RTC_STATUS_REG_1D_EVENT_M 0x20 126#define BIT_RTC_STATUS_REG_ALARM_M 0x40 127#define BIT_RTC_STATUS_REG_POWER_UP_M 0x80 128 129/* RTC_INTERRUPTS_REG bitfields */ 130#define BIT_RTC_INTERRUPTS_REG_EVERY_M 0x03 131#define BIT_RTC_INTERRUPTS_REG_IT_TIMER_M 0x04 132#define BIT_RTC_INTERRUPTS_REG_IT_ALARM_M 0x08 133 134 135/* REG_SECONDS_REG through REG_YEARS_REG is how many registers? */ 136#define ALL_TIME_REGS 6 137 138/*----------------------------------------------------------------------*/ 139struct twl_rtc { 140 struct device *dev; 141 struct rtc_device *rtc; 142 u8 *reg_map; 143 /* 144 * Cache the value for timer/alarm interrupts register; this is 145 * only changed by callers holding rtc ops lock (or resume). 146 */ 147 unsigned char rtc_irq_bits; 148 bool wake_enabled; 149#ifdef CONFIG_PM_SLEEP 150 unsigned char irqstat; 151#endif 152 enum twl_class class; 153}; 154 155/* 156 * Supports 1 byte read from TWL RTC register. 157 */ 158static int twl_rtc_read_u8(struct twl_rtc *twl_rtc, u8 *data, u8 reg) 159{ 160 int ret; 161 162 ret = twl_i2c_read_u8(TWL_MODULE_RTC, data, (twl_rtc->reg_map[reg])); 163 if (ret < 0) 164 pr_err("Could not read TWL register %X - error %d\n", reg, ret); 165 return ret; 166} 167 168/* 169 * Supports 1 byte write to TWL RTC registers. 170 */ 171static int twl_rtc_write_u8(struct twl_rtc *twl_rtc, u8 data, u8 reg) 172{ 173 int ret; 174 175 ret = twl_i2c_write_u8(TWL_MODULE_RTC, data, (twl_rtc->reg_map[reg])); 176 if (ret < 0) 177 pr_err("Could not write TWL register %X - error %d\n", 178 reg, ret); 179 return ret; 180} 181 182/* 183 * Enable 1/second update and/or alarm interrupts. 184 */ 185static int set_rtc_irq_bit(struct twl_rtc *twl_rtc, unsigned char bit) 186{ 187 unsigned char val; 188 int ret; 189 190 /* if the bit is set, return from here */ 191 if (twl_rtc->rtc_irq_bits & bit) 192 return 0; 193 194 val = twl_rtc->rtc_irq_bits | bit; 195 val &= ~BIT_RTC_INTERRUPTS_REG_EVERY_M; 196 ret = twl_rtc_write_u8(twl_rtc, val, REG_RTC_INTERRUPTS_REG); 197 if (ret == 0) 198 twl_rtc->rtc_irq_bits = val; 199 200 return ret; 201} 202 203/* 204 * Disable update and/or alarm interrupts. 205 */ 206static int mask_rtc_irq_bit(struct twl_rtc *twl_rtc, unsigned char bit) 207{ 208 unsigned char val; 209 int ret; 210 211 /* if the bit is clear, return from here */ 212 if (!(twl_rtc->rtc_irq_bits & bit)) 213 return 0; 214 215 val = twl_rtc->rtc_irq_bits & ~bit; 216 ret = twl_rtc_write_u8(twl_rtc, val, REG_RTC_INTERRUPTS_REG); 217 if (ret == 0) 218 twl_rtc->rtc_irq_bits = val; 219 220 return ret; 221} 222 223static int twl_rtc_alarm_irq_enable(struct device *dev, unsigned enabled) 224{ 225 struct platform_device *pdev = to_platform_device(dev); 226 struct twl_rtc *twl_rtc = dev_get_drvdata(dev); 227 int irq = platform_get_irq(pdev, 0); 228 int ret; 229 230 if (enabled) { 231 ret = set_rtc_irq_bit(twl_rtc, 232 BIT_RTC_INTERRUPTS_REG_IT_ALARM_M); 233 if (device_can_wakeup(dev) && !twl_rtc->wake_enabled) { 234 enable_irq_wake(irq); 235 twl_rtc->wake_enabled = true; 236 } 237 } else { 238 ret = mask_rtc_irq_bit(twl_rtc, 239 BIT_RTC_INTERRUPTS_REG_IT_ALARM_M); 240 if (twl_rtc->wake_enabled) { 241 disable_irq_wake(irq); 242 twl_rtc->wake_enabled = false; 243 } 244 } 245 246 return ret; 247} 248 249/* 250 * Gets current TWL RTC time and date parameters. 251 * 252 * The RTC's time/alarm representation is not what gmtime(3) requires 253 * Linux to use: 254 * 255 * - Months are 1..12 vs Linux 0-11 256 * - Years are 0..99 vs Linux 1900..N (we assume 21st century) 257 */ 258static int twl_rtc_read_time(struct device *dev, struct rtc_time *tm) 259{ 260 struct twl_rtc *twl_rtc = dev_get_drvdata(dev); 261 unsigned char rtc_data[ALL_TIME_REGS]; 262 int ret; 263 u8 save_control; 264 u8 rtc_control; 265 266 ret = twl_rtc_read_u8(twl_rtc, &save_control, REG_RTC_CTRL_REG); 267 if (ret < 0) { 268 dev_err(dev, "%s: reading CTRL_REG, error %d\n", __func__, ret); 269 return ret; 270 } 271 /* for twl6030/32 make sure BIT_RTC_CTRL_REG_GET_TIME_M is clear */ 272 if (twl_rtc->class == TWL_6030) { 273 if (save_control & BIT_RTC_CTRL_REG_GET_TIME_M) { 274 save_control &= ~BIT_RTC_CTRL_REG_GET_TIME_M; 275 ret = twl_rtc_write_u8(twl_rtc, save_control, 276 REG_RTC_CTRL_REG); 277 if (ret < 0) { 278 dev_err(dev, "%s clr GET_TIME, error %d\n", 279 __func__, ret); 280 return ret; 281 } 282 } 283 } 284 285 /* Copy RTC counting registers to static registers or latches */ 286 rtc_control = save_control | BIT_RTC_CTRL_REG_GET_TIME_M; 287 288 /* for twl6030/32 enable read access to static shadowed registers */ 289 if (twl_rtc->class == TWL_6030) 290 rtc_control |= BIT_RTC_CTRL_REG_RTC_V_OPT; 291 292 ret = twl_rtc_write_u8(twl_rtc, rtc_control, REG_RTC_CTRL_REG); 293 if (ret < 0) { 294 dev_err(dev, "%s: writing CTRL_REG, error %d\n", __func__, ret); 295 return ret; 296 } 297 298 ret = twl_i2c_read(TWL_MODULE_RTC, rtc_data, 299 (twl_rtc->reg_map[REG_SECONDS_REG]), ALL_TIME_REGS); 300 301 if (ret < 0) { 302 dev_err(dev, "%s: reading data, error %d\n", __func__, ret); 303 return ret; 304 } 305 306 /* for twl6030 restore original state of rtc control register */ 307 if (twl_rtc->class == TWL_6030) { 308 ret = twl_rtc_write_u8(twl_rtc, save_control, REG_RTC_CTRL_REG); 309 if (ret < 0) { 310 dev_err(dev, "%s: restore CTRL_REG, error %d\n", 311 __func__, ret); 312 return ret; 313 } 314 } 315 316 tm->tm_sec = bcd2bin(rtc_data[0]); 317 tm->tm_min = bcd2bin(rtc_data[1]); 318 tm->tm_hour = bcd2bin(rtc_data[2]); 319 tm->tm_mday = bcd2bin(rtc_data[3]); 320 tm->tm_mon = bcd2bin(rtc_data[4]) - 1; 321 tm->tm_year = bcd2bin(rtc_data[5]) + 100; 322 323 return ret; 324} 325 326static int twl_rtc_set_time(struct device *dev, struct rtc_time *tm) 327{ 328 struct twl_rtc *twl_rtc = dev_get_drvdata(dev); 329 unsigned char save_control; 330 unsigned char rtc_data[ALL_TIME_REGS]; 331 int ret; 332 333 rtc_data[0] = bin2bcd(tm->tm_sec); 334 rtc_data[1] = bin2bcd(tm->tm_min); 335 rtc_data[2] = bin2bcd(tm->tm_hour); 336 rtc_data[3] = bin2bcd(tm->tm_mday); 337 rtc_data[4] = bin2bcd(tm->tm_mon + 1); 338 rtc_data[5] = bin2bcd(tm->tm_year - 100); 339 340 /* Stop RTC while updating the TC registers */ 341 ret = twl_rtc_read_u8(twl_rtc, &save_control, REG_RTC_CTRL_REG); 342 if (ret < 0) 343 goto out; 344 345 save_control &= ~BIT_RTC_CTRL_REG_STOP_RTC_M; 346 ret = twl_rtc_write_u8(twl_rtc, save_control, REG_RTC_CTRL_REG); 347 if (ret < 0) 348 goto out; 349 350 /* update all the time registers in one shot */ 351 ret = twl_i2c_write(TWL_MODULE_RTC, rtc_data, 352 (twl_rtc->reg_map[REG_SECONDS_REG]), ALL_TIME_REGS); 353 if (ret < 0) { 354 dev_err(dev, "rtc_set_time error %d\n", ret); 355 goto out; 356 } 357 358 /* Start back RTC */ 359 save_control |= BIT_RTC_CTRL_REG_STOP_RTC_M; 360 ret = twl_rtc_write_u8(twl_rtc, save_control, REG_RTC_CTRL_REG); 361 362out: 363 return ret; 364} 365 366/* 367 * Gets current TWL RTC alarm time. 368 */ 369static int twl_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alm) 370{ 371 struct twl_rtc *twl_rtc = dev_get_drvdata(dev); 372 unsigned char rtc_data[ALL_TIME_REGS]; 373 int ret; 374 375 ret = twl_i2c_read(TWL_MODULE_RTC, rtc_data, 376 twl_rtc->reg_map[REG_ALARM_SECONDS_REG], ALL_TIME_REGS); 377 if (ret < 0) { 378 dev_err(dev, "rtc_read_alarm error %d\n", ret); 379 return ret; 380 } 381 382 /* some of these fields may be wildcard/"match all" */ 383 alm->time.tm_sec = bcd2bin(rtc_data[0]); 384 alm->time.tm_min = bcd2bin(rtc_data[1]); 385 alm->time.tm_hour = bcd2bin(rtc_data[2]); 386 alm->time.tm_mday = bcd2bin(rtc_data[3]); 387 alm->time.tm_mon = bcd2bin(rtc_data[4]) - 1; 388 alm->time.tm_year = bcd2bin(rtc_data[5]) + 100; 389 390 /* report cached alarm enable state */ 391 if (twl_rtc->rtc_irq_bits & BIT_RTC_INTERRUPTS_REG_IT_ALARM_M) 392 alm->enabled = 1; 393 394 return ret; 395} 396 397static int twl_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm) 398{ 399 struct twl_rtc *twl_rtc = dev_get_drvdata(dev); 400 401 unsigned char alarm_data[ALL_TIME_REGS]; 402 int ret; 403 404 ret = twl_rtc_alarm_irq_enable(dev, 0); 405 if (ret) 406 goto out; 407 408 alarm_data[0] = bin2bcd(alm->time.tm_sec); 409 alarm_data[1] = bin2bcd(alm->time.tm_min); 410 alarm_data[2] = bin2bcd(alm->time.tm_hour); 411 alarm_data[3] = bin2bcd(alm->time.tm_mday); 412 alarm_data[4] = bin2bcd(alm->time.tm_mon + 1); 413 alarm_data[5] = bin2bcd(alm->time.tm_year - 100); 414 415 /* update all the alarm registers in one shot */ 416 ret = twl_i2c_write(TWL_MODULE_RTC, alarm_data, 417 twl_rtc->reg_map[REG_ALARM_SECONDS_REG], ALL_TIME_REGS); 418 if (ret) { 419 dev_err(dev, "rtc_set_alarm error %d\n", ret); 420 goto out; 421 } 422 423 if (alm->enabled) 424 ret = twl_rtc_alarm_irq_enable(dev, 1); 425out: 426 return ret; 427} 428 429static irqreturn_t twl_rtc_interrupt(int irq, void *data) 430{ 431 struct twl_rtc *twl_rtc = data; 432 unsigned long events; 433 int ret = IRQ_NONE; 434 int res; 435 u8 rd_reg; 436 437 res = twl_rtc_read_u8(twl_rtc, &rd_reg, REG_RTC_STATUS_REG); 438 if (res) 439 goto out; 440 /* 441 * Figure out source of interrupt: ALARM or TIMER in RTC_STATUS_REG. 442 * only one (ALARM or RTC) interrupt source may be enabled 443 * at time, we also could check our results 444 * by reading RTS_INTERRUPTS_REGISTER[IT_TIMER,IT_ALARM] 445 */ 446 if (rd_reg & BIT_RTC_STATUS_REG_ALARM_M) 447 events = RTC_IRQF | RTC_AF; 448 else 449 events = RTC_IRQF | RTC_PF; 450 451 res = twl_rtc_write_u8(twl_rtc, BIT_RTC_STATUS_REG_ALARM_M, 452 REG_RTC_STATUS_REG); 453 if (res) 454 goto out; 455 456 if (twl_rtc->class == TWL_4030) { 457 /* Clear on Read enabled. RTC_IT bit of TWL4030_INT_PWR_ISR1 458 * needs 2 reads to clear the interrupt. One read is done in 459 * do_twl_pwrirq(). Doing the second read, to clear 460 * the bit. 461 * 462 * FIXME the reason PWR_ISR1 needs an extra read is that 463 * RTC_IF retriggered until we cleared REG_ALARM_M above. 464 * But re-reading like this is a bad hack; by doing so we 465 * risk wrongly clearing status for some other IRQ (losing 466 * the interrupt). Be smarter about handling RTC_UF ... 467 */ 468 res = twl_i2c_read_u8(TWL4030_MODULE_INT, 469 &rd_reg, TWL4030_INT_PWR_ISR1); 470 if (res) 471 goto out; 472 } 473 474 /* Notify RTC core on event */ 475 rtc_update_irq(twl_rtc->rtc, 1, events); 476 477 ret = IRQ_HANDLED; 478out: 479 return ret; 480} 481 482static const struct rtc_class_ops twl_rtc_ops = { 483 .read_time = twl_rtc_read_time, 484 .set_time = twl_rtc_set_time, 485 .read_alarm = twl_rtc_read_alarm, 486 .set_alarm = twl_rtc_set_alarm, 487 .alarm_irq_enable = twl_rtc_alarm_irq_enable, 488}; 489 490/*----------------------------------------------------------------------*/ 491 492static int twl_rtc_probe(struct platform_device *pdev) 493{ 494 struct twl_rtc *twl_rtc; 495 struct device_node *np = pdev->dev.of_node; 496 int ret = -EINVAL; 497 int irq = platform_get_irq(pdev, 0); 498 u8 rd_reg; 499 500 if (!np) { 501 dev_err(&pdev->dev, "no DT info\n"); 502 return -EINVAL; 503 } 504 505 if (irq <= 0) 506 return ret; 507 508 twl_rtc = devm_kzalloc(&pdev->dev, sizeof(*twl_rtc), GFP_KERNEL); 509 if (!twl_rtc) 510 return -ENOMEM; 511 512 if (twl_class_is_4030()) { 513 twl_rtc->class = TWL_4030; 514 twl_rtc->reg_map = (u8 *)twl4030_rtc_reg_map; 515 } else if (twl_class_is_6030()) { 516 twl_rtc->class = TWL_6030; 517 twl_rtc->reg_map = (u8 *)twl6030_rtc_reg_map; 518 } else { 519 dev_err(&pdev->dev, "TWL Class not supported.\n"); 520 return -EINVAL; 521 } 522 523 ret = twl_rtc_read_u8(twl_rtc, &rd_reg, REG_RTC_STATUS_REG); 524 if (ret < 0) 525 return ret; 526 527 if (rd_reg & BIT_RTC_STATUS_REG_POWER_UP_M) 528 dev_warn(&pdev->dev, "Power up reset detected.\n"); 529 530 if (rd_reg & BIT_RTC_STATUS_REG_ALARM_M) 531 dev_warn(&pdev->dev, "Pending Alarm interrupt detected.\n"); 532 533 /* Clear RTC Power up reset and pending alarm interrupts */ 534 ret = twl_rtc_write_u8(twl_rtc, rd_reg, REG_RTC_STATUS_REG); 535 if (ret < 0) 536 return ret; 537 538 if (twl_rtc->class == TWL_6030) { 539 twl6030_interrupt_unmask(TWL6030_RTC_INT_MASK, 540 REG_INT_MSK_LINE_A); 541 twl6030_interrupt_unmask(TWL6030_RTC_INT_MASK, 542 REG_INT_MSK_STS_A); 543 } 544 545 dev_info(&pdev->dev, "Enabling TWL-RTC\n"); 546 ret = twl_rtc_write_u8(twl_rtc, BIT_RTC_CTRL_REG_STOP_RTC_M, 547 REG_RTC_CTRL_REG); 548 if (ret < 0) 549 return ret; 550 551 /* ensure interrupts are disabled, bootloaders can be strange */ 552 ret = twl_rtc_write_u8(twl_rtc, 0, REG_RTC_INTERRUPTS_REG); 553 if (ret < 0) 554 dev_warn(&pdev->dev, "unable to disable interrupt\n"); 555 556 /* init cached IRQ enable bits */ 557 ret = twl_rtc_read_u8(twl_rtc, &twl_rtc->rtc_irq_bits, 558 REG_RTC_INTERRUPTS_REG); 559 if (ret < 0) 560 return ret; 561 562 platform_set_drvdata(pdev, twl_rtc); 563 device_init_wakeup(&pdev->dev, 1); 564 565 twl_rtc->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, 566 &twl_rtc_ops, THIS_MODULE); 567 if (IS_ERR(twl_rtc->rtc)) { 568 dev_err(&pdev->dev, "can't register RTC device, err %ld\n", 569 PTR_ERR(twl_rtc->rtc)); 570 return PTR_ERR(twl_rtc->rtc); 571 } 572 573 ret = devm_request_threaded_irq(&pdev->dev, irq, NULL, 574 twl_rtc_interrupt, 575 IRQF_TRIGGER_RISING | IRQF_ONESHOT, 576 dev_name(&twl_rtc->rtc->dev), twl_rtc); 577 if (ret < 0) { 578 dev_err(&pdev->dev, "IRQ is not free.\n"); 579 return ret; 580 } 581 582 return 0; 583} 584 585/* 586 * Disable all TWL RTC module interrupts. 587 * Sets status flag to free. 588 */ 589static int twl_rtc_remove(struct platform_device *pdev) 590{ 591 struct twl_rtc *twl_rtc = platform_get_drvdata(pdev); 592 593 /* leave rtc running, but disable irqs */ 594 mask_rtc_irq_bit(twl_rtc, BIT_RTC_INTERRUPTS_REG_IT_ALARM_M); 595 mask_rtc_irq_bit(twl_rtc, BIT_RTC_INTERRUPTS_REG_IT_TIMER_M); 596 if (twl_rtc->class == TWL_6030) { 597 twl6030_interrupt_mask(TWL6030_RTC_INT_MASK, 598 REG_INT_MSK_LINE_A); 599 twl6030_interrupt_mask(TWL6030_RTC_INT_MASK, 600 REG_INT_MSK_STS_A); 601 } 602 603 return 0; 604} 605 606static void twl_rtc_shutdown(struct platform_device *pdev) 607{ 608 struct twl_rtc *twl_rtc = platform_get_drvdata(pdev); 609 610 /* mask timer interrupts, but leave alarm interrupts on to enable 611 power-on when alarm is triggered */ 612 mask_rtc_irq_bit(twl_rtc, BIT_RTC_INTERRUPTS_REG_IT_TIMER_M); 613} 614 615#ifdef CONFIG_PM_SLEEP 616static int twl_rtc_suspend(struct device *dev) 617{ 618 struct twl_rtc *twl_rtc = dev_get_drvdata(dev); 619 620 twl_rtc->irqstat = twl_rtc->rtc_irq_bits; 621 622 mask_rtc_irq_bit(twl_rtc, BIT_RTC_INTERRUPTS_REG_IT_TIMER_M); 623 return 0; 624} 625 626static int twl_rtc_resume(struct device *dev) 627{ 628 struct twl_rtc *twl_rtc = dev_get_drvdata(dev); 629 630 set_rtc_irq_bit(twl_rtc, twl_rtc->irqstat); 631 return 0; 632} 633#endif 634 635static SIMPLE_DEV_PM_OPS(twl_rtc_pm_ops, twl_rtc_suspend, twl_rtc_resume); 636 637static const struct of_device_id twl_rtc_of_match[] = { 638 {.compatible = "ti,twl4030-rtc", }, 639 { }, 640}; 641MODULE_DEVICE_TABLE(of, twl_rtc_of_match); 642 643static struct platform_driver twl4030rtc_driver = { 644 .probe = twl_rtc_probe, 645 .remove = twl_rtc_remove, 646 .shutdown = twl_rtc_shutdown, 647 .driver = { 648 .name = "twl_rtc", 649 .pm = &twl_rtc_pm_ops, 650 .of_match_table = twl_rtc_of_match, 651 }, 652}; 653 654module_platform_driver(twl4030rtc_driver); 655 656MODULE_AUTHOR("Texas Instruments, MontaVista Software"); 657MODULE_LICENSE("GPL");