rtc-rv8803.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * RTC driver for the Micro Crystal RV8803
  4. *
  5. * Copyright (C) 2015 Micro Crystal SA
  6. * Alexandre Belloni <alexandre.belloni@bootlin.com>
  7. *
  8. */
  9. #include <linux/bcd.h>
  10. #include <linux/bitops.h>
  11. #include <linux/bitfield.h>
  12. #include <linux/log2.h>
  13. #include <linux/i2c.h>
  14. #include <linux/interrupt.h>
  15. #include <linux/kernel.h>
  16. #include <linux/module.h>
  17. #include <linux/of.h>
  18. #include <linux/rtc.h>
  19. #include <linux/pm_wakeirq.h>
  20. #define RV8803_I2C_TRY_COUNT 4
  21. #define RV8803_SEC 0x00
  22. #define RV8803_MIN 0x01
  23. #define RV8803_HOUR 0x02
  24. #define RV8803_WEEK 0x03
  25. #define RV8803_DAY 0x04
  26. #define RV8803_MONTH 0x05
  27. #define RV8803_YEAR 0x06
  28. #define RV8803_RAM 0x07
  29. #define RV8803_ALARM_MIN 0x08
  30. #define RV8803_ALARM_HOUR 0x09
  31. #define RV8803_ALARM_WEEK_OR_DAY 0x0A
  32. #define RV8803_EXT 0x0D
  33. #define RV8803_FLAG 0x0E
  34. #define RV8803_CTRL 0x0F
  35. #define RV8803_OSC_OFFSET 0x2C
  36. #define RV8803_EXT_WADA BIT(6)
  37. #define RV8803_FLAG_V1F BIT(0)
  38. #define RV8803_FLAG_V2F BIT(1)
  39. #define RV8803_FLAG_AF BIT(3)
  40. #define RV8803_FLAG_TF BIT(4)
  41. #define RV8803_FLAG_UF BIT(5)
  42. #define RV8803_CTRL_RESET BIT(0)
  43. #define RV8803_CTRL_EIE BIT(2)
  44. #define RV8803_CTRL_AIE BIT(3)
  45. #define RV8803_CTRL_TIE BIT(4)
  46. #define RV8803_CTRL_UIE BIT(5)
  47. #define RX8803_CTRL_CSEL GENMASK(7, 6)
  48. #define RX8900_BACKUP_CTRL 0x18
  49. #define RX8900_FLAG_SWOFF BIT(2)
  50. #define RX8900_FLAG_VDETOFF BIT(3)
  51. enum rv8803_type {
  52. rv_8803,
  53. rx_8803,
  54. rx_8804,
  55. rx_8900
  56. };
  57. struct rv8803_data {
  58. struct i2c_client *client;
  59. struct rtc_device *rtc;
  60. struct mutex flags_lock;
  61. u8 ctrl;
  62. u8 backup;
  63. u8 alarm_invalid:1;
  64. enum rv8803_type type;
  65. };
  66. static int rv8803_read_reg(const struct i2c_client *client, u8 reg)
  67. {
  68. int try = RV8803_I2C_TRY_COUNT;
  69. s32 ret;
  70. /*
  71. * There is a 61µs window during which the RTC does not acknowledge I2C
  72. * transfers. In that case, ensure that there are multiple attempts.
  73. */
  74. do
  75. ret = i2c_smbus_read_byte_data(client, reg);
  76. while ((ret == -ENXIO || ret == -EIO) && --try);
  77. if (ret < 0)
  78. dev_err(&client->dev, "Unable to read register 0x%02x\n", reg);
  79. return ret;
  80. }
  81. static int rv8803_read_regs(const struct i2c_client *client,
  82. u8 reg, u8 count, u8 *values)
  83. {
  84. int try = RV8803_I2C_TRY_COUNT;
  85. s32 ret;
  86. do
  87. ret = i2c_smbus_read_i2c_block_data(client, reg, count, values);
  88. while ((ret == -ENXIO || ret == -EIO) && --try);
  89. if (ret != count) {
  90. dev_err(&client->dev,
  91. "Unable to read registers 0x%02x..0x%02x\n",
  92. reg, reg + count - 1);
  93. return ret < 0 ? ret : -EIO;
  94. }
  95. return 0;
  96. }
  97. static int rv8803_write_reg(const struct i2c_client *client, u8 reg, u8 value)
  98. {
  99. int try = RV8803_I2C_TRY_COUNT;
  100. s32 ret;
  101. do
  102. ret = i2c_smbus_write_byte_data(client, reg, value);
  103. while ((ret == -ENXIO || ret == -EIO) && --try);
  104. if (ret)
  105. dev_err(&client->dev, "Unable to write register 0x%02x\n", reg);
  106. return ret;
  107. }
  108. static int rv8803_write_regs(const struct i2c_client *client,
  109. u8 reg, u8 count, const u8 *values)
  110. {
  111. int try = RV8803_I2C_TRY_COUNT;
  112. s32 ret;
  113. do
  114. ret = i2c_smbus_write_i2c_block_data(client, reg, count,
  115. values);
  116. while ((ret == -ENXIO || ret == -EIO) && --try);
  117. if (ret)
  118. dev_err(&client->dev,
  119. "Unable to write registers 0x%02x..0x%02x\n",
  120. reg, reg + count - 1);
  121. return ret;
  122. }
  123. static int rv8803_regs_init(struct rv8803_data *rv8803)
  124. {
  125. int ret;
  126. ret = rv8803_write_reg(rv8803->client, RV8803_OSC_OFFSET, 0x00);
  127. if (ret)
  128. return ret;
  129. ret = rv8803_write_reg(rv8803->client, RV8803_CTRL,
  130. FIELD_PREP(RX8803_CTRL_CSEL, 1)); /* 2s */
  131. if (ret)
  132. return ret;
  133. ret = rv8803_write_regs(rv8803->client, RV8803_ALARM_MIN, 3,
  134. (u8[]){ 0, 0, 0 });
  135. if (ret)
  136. return ret;
  137. return rv8803_write_reg(rv8803->client, RV8803_RAM, 0x00);
  138. }
  139. static int rv8803_regs_configure(struct rv8803_data *rv8803);
  140. static int rv8803_regs_reset(struct rv8803_data *rv8803, bool full)
  141. {
  142. /*
  143. * The RV-8803 resets all registers to POR defaults after voltage-loss,
  144. * the Epson RTCs don't, so we manually reset the remainder here.
  145. */
  146. if (full || rv8803->type == rx_8803 || rv8803->type == rx_8900) {
  147. int ret = rv8803_regs_init(rv8803);
  148. if (ret)
  149. return ret;
  150. }
  151. return rv8803_regs_configure(rv8803);
  152. }
  153. static irqreturn_t rv8803_handle_irq(int irq, void *dev_id)
  154. {
  155. struct i2c_client *client = dev_id;
  156. struct rv8803_data *rv8803 = i2c_get_clientdata(client);
  157. unsigned long events = 0;
  158. int flags;
  159. mutex_lock(&rv8803->flags_lock);
  160. flags = rv8803_read_reg(client, RV8803_FLAG);
  161. if (flags <= 0) {
  162. mutex_unlock(&rv8803->flags_lock);
  163. return IRQ_NONE;
  164. }
  165. if (flags & RV8803_FLAG_V1F)
  166. dev_warn(&client->dev, "Voltage low, temperature compensation stopped.\n");
  167. if (flags & RV8803_FLAG_V2F)
  168. dev_warn(&client->dev, "Voltage low, data loss detected.\n");
  169. if (flags & RV8803_FLAG_TF) {
  170. flags &= ~RV8803_FLAG_TF;
  171. rv8803->ctrl &= ~RV8803_CTRL_TIE;
  172. events |= RTC_PF;
  173. }
  174. if (flags & RV8803_FLAG_AF) {
  175. flags &= ~RV8803_FLAG_AF;
  176. rv8803->ctrl &= ~RV8803_CTRL_AIE;
  177. events |= RTC_AF;
  178. }
  179. if (flags & RV8803_FLAG_UF) {
  180. flags &= ~RV8803_FLAG_UF;
  181. rv8803->ctrl &= ~RV8803_CTRL_UIE;
  182. events |= RTC_UF;
  183. }
  184. if (events) {
  185. rtc_update_irq(rv8803->rtc, 1, events);
  186. rv8803_write_reg(client, RV8803_FLAG, flags);
  187. rv8803_write_reg(rv8803->client, RV8803_CTRL, rv8803->ctrl);
  188. }
  189. mutex_unlock(&rv8803->flags_lock);
  190. return IRQ_HANDLED;
  191. }
  192. static int rv8803_get_time(struct device *dev, struct rtc_time *tm)
  193. {
  194. struct rv8803_data *rv8803 = dev_get_drvdata(dev);
  195. u8 date1[7];
  196. u8 date2[7];
  197. u8 *date = date1;
  198. int ret, flags;
  199. if (rv8803->alarm_invalid) {
  200. dev_warn(dev, "Corruption detected, data may be invalid.\n");
  201. return -EINVAL;
  202. }
  203. flags = rv8803_read_reg(rv8803->client, RV8803_FLAG);
  204. if (flags < 0)
  205. return flags;
  206. if (flags & RV8803_FLAG_V2F) {
  207. dev_warn(dev, "Voltage low, data is invalid.\n");
  208. return -EINVAL;
  209. }
  210. ret = rv8803_read_regs(rv8803->client, RV8803_SEC, 7, date);
  211. if (ret)
  212. return ret;
  213. if ((date1[RV8803_SEC] & 0x7f) == bin2bcd(59)) {
  214. ret = rv8803_read_regs(rv8803->client, RV8803_SEC, 7, date2);
  215. if (ret)
  216. return ret;
  217. if ((date2[RV8803_SEC] & 0x7f) != bin2bcd(59))
  218. date = date2;
  219. }
  220. tm->tm_sec = bcd2bin(date[RV8803_SEC] & 0x7f);
  221. tm->tm_min = bcd2bin(date[RV8803_MIN] & 0x7f);
  222. tm->tm_hour = bcd2bin(date[RV8803_HOUR] & 0x3f);
  223. tm->tm_wday = ilog2(date[RV8803_WEEK] & 0x7f);
  224. tm->tm_mday = bcd2bin(date[RV8803_DAY] & 0x3f);
  225. tm->tm_mon = bcd2bin(date[RV8803_MONTH] & 0x1f) - 1;
  226. tm->tm_year = bcd2bin(date[RV8803_YEAR]) + 100;
  227. return 0;
  228. }
  229. static int rv8803_set_time(struct device *dev, struct rtc_time *tm)
  230. {
  231. struct rv8803_data *rv8803 = dev_get_drvdata(dev);
  232. u8 date[7];
  233. int ctrl, flags, ret;
  234. ctrl = rv8803_read_reg(rv8803->client, RV8803_CTRL);
  235. if (ctrl < 0)
  236. return ctrl;
  237. /* Stop the clock */
  238. ret = rv8803_write_reg(rv8803->client, RV8803_CTRL,
  239. ctrl | RV8803_CTRL_RESET);
  240. if (ret)
  241. return ret;
  242. date[RV8803_SEC] = bin2bcd(tm->tm_sec);
  243. date[RV8803_MIN] = bin2bcd(tm->tm_min);
  244. date[RV8803_HOUR] = bin2bcd(tm->tm_hour);
  245. date[RV8803_WEEK] = 1 << (tm->tm_wday);
  246. date[RV8803_DAY] = bin2bcd(tm->tm_mday);
  247. date[RV8803_MONTH] = bin2bcd(tm->tm_mon + 1);
  248. date[RV8803_YEAR] = bin2bcd(tm->tm_year - 100);
  249. ret = rv8803_write_regs(rv8803->client, RV8803_SEC, 7, date);
  250. if (ret)
  251. return ret;
  252. /* Restart the clock */
  253. ret = rv8803_write_reg(rv8803->client, RV8803_CTRL,
  254. ctrl & ~RV8803_CTRL_RESET);
  255. if (ret)
  256. return ret;
  257. mutex_lock(&rv8803->flags_lock);
  258. flags = rv8803_read_reg(rv8803->client, RV8803_FLAG);
  259. if (flags < 0) {
  260. mutex_unlock(&rv8803->flags_lock);
  261. return flags;
  262. }
  263. if ((flags & RV8803_FLAG_V2F) || rv8803->alarm_invalid) {
  264. /*
  265. * If we sense corruption in the alarm registers, but see no
  266. * voltage loss flag, we can't rely on other registers having
  267. * sensible values. Reset them fully.
  268. */
  269. ret = rv8803_regs_reset(rv8803, rv8803->alarm_invalid);
  270. if (ret) {
  271. mutex_unlock(&rv8803->flags_lock);
  272. return ret;
  273. }
  274. rv8803->alarm_invalid = false;
  275. }
  276. ret = rv8803_write_reg(rv8803->client, RV8803_FLAG,
  277. flags & ~(RV8803_FLAG_V1F | RV8803_FLAG_V2F));
  278. mutex_unlock(&rv8803->flags_lock);
  279. return ret;
  280. }
  281. static int rv8803_get_alarm(struct device *dev, struct rtc_wkalrm *alrm)
  282. {
  283. struct rv8803_data *rv8803 = dev_get_drvdata(dev);
  284. struct i2c_client *client = rv8803->client;
  285. u8 alarmvals[3];
  286. int flags, ret;
  287. ret = rv8803_read_regs(client, RV8803_ALARM_MIN, 3, alarmvals);
  288. if (ret)
  289. return ret;
  290. flags = rv8803_read_reg(client, RV8803_FLAG);
  291. if (flags < 0)
  292. return flags;
  293. alarmvals[0] &= 0x7f;
  294. alarmvals[1] &= 0x3f;
  295. alarmvals[2] &= 0x3f;
  296. if (!bcd_is_valid(alarmvals[0]) ||
  297. !bcd_is_valid(alarmvals[1]) ||
  298. !bcd_is_valid(alarmvals[2]))
  299. goto err_invalid;
  300. alrm->time.tm_sec = 0;
  301. alrm->time.tm_min = bcd2bin(alarmvals[0]);
  302. alrm->time.tm_hour = bcd2bin(alarmvals[1]);
  303. alrm->time.tm_mday = bcd2bin(alarmvals[2]);
  304. alrm->enabled = !!(rv8803->ctrl & RV8803_CTRL_AIE);
  305. alrm->pending = (flags & RV8803_FLAG_AF) && alrm->enabled;
  306. if ((unsigned int)alrm->time.tm_mday > 31 ||
  307. (unsigned int)alrm->time.tm_hour >= 24 ||
  308. (unsigned int)alrm->time.tm_min >= 60)
  309. goto err_invalid;
  310. return 0;
  311. err_invalid:
  312. rv8803->alarm_invalid = true;
  313. return -EINVAL;
  314. }
  315. static int rv8803_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
  316. {
  317. struct i2c_client *client = to_i2c_client(dev);
  318. struct rv8803_data *rv8803 = dev_get_drvdata(dev);
  319. u8 alarmvals[3];
  320. u8 ctrl[2];
  321. int ret, err;
  322. /* The alarm has no seconds, round up to nearest minute */
  323. if (alrm->time.tm_sec) {
  324. time64_t alarm_time = rtc_tm_to_time64(&alrm->time);
  325. alarm_time += 60 - alrm->time.tm_sec;
  326. rtc_time64_to_tm(alarm_time, &alrm->time);
  327. }
  328. mutex_lock(&rv8803->flags_lock);
  329. ret = rv8803_read_regs(client, RV8803_FLAG, 2, ctrl);
  330. if (ret) {
  331. mutex_unlock(&rv8803->flags_lock);
  332. return ret;
  333. }
  334. alarmvals[0] = bin2bcd(alrm->time.tm_min);
  335. alarmvals[1] = bin2bcd(alrm->time.tm_hour);
  336. alarmvals[2] = bin2bcd(alrm->time.tm_mday);
  337. if (rv8803->ctrl & (RV8803_CTRL_AIE | RV8803_CTRL_UIE)) {
  338. rv8803->ctrl &= ~(RV8803_CTRL_AIE | RV8803_CTRL_UIE);
  339. err = rv8803_write_reg(rv8803->client, RV8803_CTRL,
  340. rv8803->ctrl);
  341. if (err) {
  342. mutex_unlock(&rv8803->flags_lock);
  343. return err;
  344. }
  345. }
  346. ctrl[0] &= ~RV8803_FLAG_AF;
  347. err = rv8803_write_reg(rv8803->client, RV8803_FLAG, ctrl[0]);
  348. mutex_unlock(&rv8803->flags_lock);
  349. if (err)
  350. return err;
  351. err = rv8803_write_regs(rv8803->client, RV8803_ALARM_MIN, 3, alarmvals);
  352. if (err)
  353. return err;
  354. if (alrm->enabled) {
  355. if (rv8803->rtc->uie_rtctimer.enabled)
  356. rv8803->ctrl |= RV8803_CTRL_UIE;
  357. if (rv8803->rtc->aie_timer.enabled)
  358. rv8803->ctrl |= RV8803_CTRL_AIE;
  359. err = rv8803_write_reg(rv8803->client, RV8803_CTRL,
  360. rv8803->ctrl);
  361. if (err)
  362. return err;
  363. }
  364. return 0;
  365. }
  366. static int rv8803_alarm_irq_enable(struct device *dev, unsigned int enabled)
  367. {
  368. struct i2c_client *client = to_i2c_client(dev);
  369. struct rv8803_data *rv8803 = dev_get_drvdata(dev);
  370. int ctrl, flags, err;
  371. ctrl = rv8803->ctrl;
  372. if (enabled) {
  373. if (rv8803->rtc->uie_rtctimer.enabled)
  374. ctrl |= RV8803_CTRL_UIE;
  375. if (rv8803->rtc->aie_timer.enabled)
  376. ctrl |= RV8803_CTRL_AIE;
  377. } else {
  378. if (!rv8803->rtc->uie_rtctimer.enabled)
  379. ctrl &= ~RV8803_CTRL_UIE;
  380. if (!rv8803->rtc->aie_timer.enabled)
  381. ctrl &= ~RV8803_CTRL_AIE;
  382. }
  383. mutex_lock(&rv8803->flags_lock);
  384. flags = rv8803_read_reg(client, RV8803_FLAG);
  385. if (flags < 0) {
  386. mutex_unlock(&rv8803->flags_lock);
  387. return flags;
  388. }
  389. flags &= ~(RV8803_FLAG_AF | RV8803_FLAG_UF);
  390. err = rv8803_write_reg(client, RV8803_FLAG, flags);
  391. mutex_unlock(&rv8803->flags_lock);
  392. if (err)
  393. return err;
  394. if (ctrl != rv8803->ctrl) {
  395. rv8803->ctrl = ctrl;
  396. err = rv8803_write_reg(client, RV8803_CTRL, rv8803->ctrl);
  397. if (err)
  398. return err;
  399. }
  400. return 0;
  401. }
  402. static int rv8803_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
  403. {
  404. struct i2c_client *client = to_i2c_client(dev);
  405. struct rv8803_data *rv8803 = dev_get_drvdata(dev);
  406. unsigned int vl = 0;
  407. int flags, ret = 0;
  408. switch (cmd) {
  409. case RTC_VL_READ:
  410. flags = rv8803_read_reg(client, RV8803_FLAG);
  411. if (flags < 0)
  412. return flags;
  413. if (flags & RV8803_FLAG_V1F) {
  414. dev_warn(&client->dev, "Voltage low, temperature compensation stopped.\n");
  415. vl = RTC_VL_ACCURACY_LOW;
  416. }
  417. if (flags & RV8803_FLAG_V2F)
  418. vl |= RTC_VL_DATA_INVALID;
  419. return put_user(vl, (unsigned int __user *)arg);
  420. case RTC_VL_CLR:
  421. mutex_lock(&rv8803->flags_lock);
  422. flags = rv8803_read_reg(client, RV8803_FLAG);
  423. if (flags < 0) {
  424. mutex_unlock(&rv8803->flags_lock);
  425. return flags;
  426. }
  427. flags &= ~RV8803_FLAG_V1F;
  428. ret = rv8803_write_reg(client, RV8803_FLAG, flags);
  429. mutex_unlock(&rv8803->flags_lock);
  430. if (ret)
  431. return ret;
  432. return 0;
  433. default:
  434. return -ENOIOCTLCMD;
  435. }
  436. }
  437. static int rv8803_nvram_write(void *priv, unsigned int offset, void *val,
  438. size_t bytes)
  439. {
  440. return rv8803_write_reg(priv, RV8803_RAM, *(u8 *)val);
  441. }
  442. static int rv8803_nvram_read(void *priv, unsigned int offset,
  443. void *val, size_t bytes)
  444. {
  445. int ret;
  446. ret = rv8803_read_reg(priv, RV8803_RAM);
  447. if (ret < 0)
  448. return ret;
  449. *(u8 *)val = ret;
  450. return 0;
  451. }
  452. static const struct rtc_class_ops rv8803_rtc_ops = {
  453. .read_time = rv8803_get_time,
  454. .set_time = rv8803_set_time,
  455. .ioctl = rv8803_ioctl,
  456. .read_alarm = rv8803_get_alarm,
  457. .set_alarm = rv8803_set_alarm,
  458. .alarm_irq_enable = rv8803_alarm_irq_enable,
  459. };
  460. static int rx8900_trickle_charger_init(struct rv8803_data *rv8803)
  461. {
  462. struct i2c_client *client = rv8803->client;
  463. struct device_node *node = client->dev.of_node;
  464. int err;
  465. u8 flags;
  466. if (!node)
  467. return 0;
  468. if (rv8803->type != rx_8900)
  469. return 0;
  470. err = i2c_smbus_read_byte_data(rv8803->client, RX8900_BACKUP_CTRL);
  471. if (err < 0)
  472. return err;
  473. flags = (u8)err;
  474. flags &= ~(RX8900_FLAG_VDETOFF | RX8900_FLAG_SWOFF);
  475. flags |= rv8803->backup;
  476. return i2c_smbus_write_byte_data(rv8803->client, RX8900_BACKUP_CTRL,
  477. flags);
  478. }
  479. /* configure registers with values different than the Power-On reset defaults */
  480. static int rv8803_regs_configure(struct rv8803_data *rv8803)
  481. {
  482. int err;
  483. err = rv8803_write_reg(rv8803->client, RV8803_EXT, RV8803_EXT_WADA);
  484. if (err)
  485. return err;
  486. err = rx8900_trickle_charger_init(rv8803);
  487. if (err) {
  488. dev_err(&rv8803->client->dev, "failed to init charger\n");
  489. return err;
  490. }
  491. return 0;
  492. }
  493. static int rv8803_resume(struct device *dev)
  494. {
  495. struct rv8803_data *rv8803 = dev_get_drvdata(dev);
  496. if (rv8803->client->irq > 0 && device_may_wakeup(dev))
  497. disable_irq_wake(rv8803->client->irq);
  498. return 0;
  499. }
  500. static int rv8803_suspend(struct device *dev)
  501. {
  502. struct rv8803_data *rv8803 = dev_get_drvdata(dev);
  503. if (rv8803->client->irq > 0 && device_may_wakeup(dev))
  504. enable_irq_wake(rv8803->client->irq);
  505. return 0;
  506. }
  507. static DEFINE_SIMPLE_DEV_PM_OPS(rv8803_pm_ops, rv8803_suspend, rv8803_resume);
  508. static const struct i2c_device_id rv8803_id[] = {
  509. { "rv8803", rv_8803 },
  510. { "rv8804", rx_8804 },
  511. { "rx8803", rx_8803 },
  512. { "rx8900", rx_8900 },
  513. { }
  514. };
  515. MODULE_DEVICE_TABLE(i2c, rv8803_id);
  516. static int rv8803_probe(struct i2c_client *client)
  517. {
  518. struct i2c_adapter *adapter = client->adapter;
  519. struct rv8803_data *rv8803;
  520. int err, flags;
  521. struct nvmem_config nvmem_cfg = {
  522. .name = "rv8803_nvram",
  523. .word_size = 1,
  524. .stride = 1,
  525. .size = 1,
  526. .reg_read = rv8803_nvram_read,
  527. .reg_write = rv8803_nvram_write,
  528. .priv = client,
  529. };
  530. if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA |
  531. I2C_FUNC_SMBUS_I2C_BLOCK)) {
  532. dev_err(&adapter->dev, "doesn't support I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_I2C_BLOCK\n");
  533. return -EIO;
  534. }
  535. rv8803 = devm_kzalloc(&client->dev, sizeof(struct rv8803_data),
  536. GFP_KERNEL);
  537. if (!rv8803)
  538. return -ENOMEM;
  539. mutex_init(&rv8803->flags_lock);
  540. rv8803->client = client;
  541. if (client->dev.of_node) {
  542. rv8803->type = (uintptr_t)of_device_get_match_data(&client->dev);
  543. } else {
  544. const struct i2c_device_id *id = i2c_match_id(rv8803_id, client);
  545. rv8803->type = id->driver_data;
  546. }
  547. i2c_set_clientdata(client, rv8803);
  548. flags = rv8803_read_reg(client, RV8803_FLAG);
  549. if (flags < 0)
  550. return flags;
  551. if (flags & RV8803_FLAG_V1F)
  552. dev_warn(&client->dev, "Voltage low, temperature compensation stopped.\n");
  553. if (flags & RV8803_FLAG_V2F)
  554. dev_warn(&client->dev, "Voltage low, data loss detected.\n");
  555. if (flags & RV8803_FLAG_AF)
  556. dev_warn(&client->dev, "An alarm maybe have been missed.\n");
  557. rv8803->rtc = devm_rtc_allocate_device(&client->dev);
  558. if (IS_ERR(rv8803->rtc))
  559. return PTR_ERR(rv8803->rtc);
  560. if (client->irq > 0) {
  561. unsigned long irqflags = IRQF_TRIGGER_LOW;
  562. if (dev_fwnode(&client->dev))
  563. irqflags = 0;
  564. err = devm_request_threaded_irq(&client->dev, client->irq,
  565. NULL, rv8803_handle_irq,
  566. irqflags | IRQF_ONESHOT,
  567. "rv8803", client);
  568. if (err) {
  569. dev_warn(&client->dev, "unable to request IRQ, alarms disabled\n");
  570. client->irq = 0;
  571. } else {
  572. device_init_wakeup(&client->dev, true);
  573. err = dev_pm_set_wake_irq(&client->dev, client->irq);
  574. if (err)
  575. dev_err(&client->dev, "failed to set wake IRQ\n");
  576. }
  577. } else {
  578. if (device_property_read_bool(&client->dev, "wakeup-source"))
  579. device_init_wakeup(&client->dev, true);
  580. else
  581. clear_bit(RTC_FEATURE_ALARM, rv8803->rtc->features);
  582. }
  583. if (of_property_read_bool(client->dev.of_node, "epson,vdet-disable"))
  584. rv8803->backup |= RX8900_FLAG_VDETOFF;
  585. if (of_property_read_bool(client->dev.of_node, "trickle-diode-disable"))
  586. rv8803->backup |= RX8900_FLAG_SWOFF;
  587. err = rv8803_regs_configure(rv8803);
  588. if (err)
  589. return err;
  590. rv8803->rtc->ops = &rv8803_rtc_ops;
  591. rv8803->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
  592. rv8803->rtc->range_max = RTC_TIMESTAMP_END_2099;
  593. err = devm_rtc_register_device(rv8803->rtc);
  594. if (err)
  595. return err;
  596. devm_rtc_nvmem_register(rv8803->rtc, &nvmem_cfg);
  597. rv8803->rtc->max_user_freq = 1;
  598. return 0;
  599. }
  600. static const __maybe_unused struct of_device_id rv8803_of_match[] = {
  601. {
  602. .compatible = "microcrystal,rv8803",
  603. .data = (void *)rv_8803
  604. },
  605. {
  606. .compatible = "epson,rx8803",
  607. .data = (void *)rx_8803
  608. },
  609. {
  610. .compatible = "epson,rx8804",
  611. .data = (void *)rx_8804
  612. },
  613. {
  614. .compatible = "epson,rx8900",
  615. .data = (void *)rx_8900
  616. },
  617. { }
  618. };
  619. MODULE_DEVICE_TABLE(of, rv8803_of_match);
  620. static struct i2c_driver rv8803_driver = {
  621. .driver = {
  622. .name = "rtc-rv8803",
  623. .of_match_table = of_match_ptr(rv8803_of_match),
  624. .pm = &rv8803_pm_ops,
  625. },
  626. .probe = rv8803_probe,
  627. .id_table = rv8803_id,
  628. };
  629. module_i2c_driver(rv8803_driver);
  630. MODULE_AUTHOR("Alexandre Belloni <alexandre.belloni@bootlin.com>");
  631. MODULE_DESCRIPTION("Micro Crystal RV8803 RTC driver");
  632. MODULE_LICENSE("GPL v2");