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