rtc-twl.c 17 KB

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