rtc-max31335.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * RTC driver for the MAX31335
  4. *
  5. * Copyright (C) 2023 Analog Devices
  6. *
  7. * Antoniu Miclaus <antoniu.miclaus@analog.com>
  8. *
  9. */
  10. #include <linux/unaligned.h>
  11. #include <linux/bcd.h>
  12. #include <linux/bitfield.h>
  13. #include <linux/bitops.h>
  14. #include <linux/clk.h>
  15. #include <linux/clk-provider.h>
  16. #include <linux/hwmon.h>
  17. #include <linux/i2c.h>
  18. #include <linux/interrupt.h>
  19. #include <linux/kernel.h>
  20. #include <linux/module.h>
  21. #include <linux/of_device.h>
  22. #include <linux/regmap.h>
  23. #include <linux/rtc.h>
  24. #include <linux/util_macros.h>
  25. /* MAX31335 Register Map */
  26. #define MAX31335_STATUS1 0x00
  27. #define MAX31335_INT_EN1 0x01
  28. #define MAX31335_STATUS2 0x02
  29. #define MAX31335_INT_EN2 0x03
  30. #define MAX31335_RTC_RESET 0x04
  31. #define MAX31335_RTC_CONFIG 0x05
  32. #define MAX31335_RTC_CONFIG2 0x06
  33. #define MAX31335_TIMESTAMP_CONFIG 0x07
  34. #define MAX31335_TIMER_CONFIG 0x08
  35. #define MAX31335_SECONDS_1_128 0x09
  36. #define MAX31335_SECONDS 0x0A
  37. #define MAX31335_MINUTES 0x0B
  38. #define MAX31335_HOURS 0x0C
  39. #define MAX31335_DAY 0x0D
  40. #define MAX31335_DATE 0x0E
  41. #define MAX31335_MONTH 0x0F
  42. #define MAX31335_YEAR 0x0F
  43. #define MAX31335_ALM1_SEC 0x11
  44. #define MAX31335_ALM1_MIN 0x12
  45. #define MAX31335_ALM1_HRS 0x13
  46. #define MAX31335_ALM1_DAY_DATE 0x14
  47. #define MAX31335_ALM1_MON 0x15
  48. #define MAX31335_ALM1_YEAR 0x16
  49. #define MAX31335_ALM2_MIN 0x17
  50. #define MAX31335_ALM2_HRS 0x18
  51. #define MAX31335_ALM2_DAY_DATE 0x19
  52. #define MAX31335_TIMER_COUNT 0x1A
  53. #define MAX31335_TIMER_INIT 0x1B
  54. #define MAX31335_PWR_MGMT 0x1C
  55. #define MAX31335_TRICKLE_REG 0x1D
  56. #define MAX31335_AGING_OFFSET 0x1E
  57. #define MAX31335_TS_CONFIG 0x30
  58. #define MAX31335_TEMP_ALARM_HIGH_MSB 0x31
  59. #define MAX31335_TEMP_ALARM_HIGH_LSB 0x32
  60. #define MAX31335_TEMP_ALARM_LOW_MSB 0x33
  61. #define MAX31335_TEMP_ALARM_LOW_LSB 0x34
  62. #define MAX31335_TEMP_DATA_MSB 0x35
  63. #define MAX31335_TEMP_DATA_LSB 0x36
  64. #define MAX31335_TS0_SEC_1_128 0x40
  65. #define MAX31335_TS0_SEC 0x41
  66. #define MAX31335_TS0_MIN 0x42
  67. #define MAX31335_TS0_HOUR 0x43
  68. #define MAX31335_TS0_DATE 0x44
  69. #define MAX31335_TS0_MONTH 0x45
  70. #define MAX31335_TS0_YEAR 0x46
  71. #define MAX31335_TS0_FLAGS 0x47
  72. #define MAX31335_TS1_SEC_1_128 0x48
  73. #define MAX31335_TS1_SEC 0x49
  74. #define MAX31335_TS1_MIN 0x4A
  75. #define MAX31335_TS1_HOUR 0x4B
  76. #define MAX31335_TS1_DATE 0x4C
  77. #define MAX31335_TS1_MONTH 0x4D
  78. #define MAX31335_TS1_YEAR 0x4E
  79. #define MAX31335_TS1_FLAGS 0x4F
  80. #define MAX31335_TS2_SEC_1_128 0x50
  81. #define MAX31335_TS2_SEC 0x51
  82. #define MAX31335_TS2_MIN 0x52
  83. #define MAX31335_TS2_HOUR 0x53
  84. #define MAX31335_TS2_DATE 0x54
  85. #define MAX31335_TS2_MONTH 0x55
  86. #define MAX31335_TS2_YEAR 0x56
  87. #define MAX31335_TS2_FLAGS 0x57
  88. #define MAX31335_TS3_SEC_1_128 0x58
  89. #define MAX31335_TS3_SEC 0x59
  90. #define MAX31335_TS3_MIN 0x5A
  91. #define MAX31335_TS3_HOUR 0x5B
  92. #define MAX31335_TS3_DATE 0x5C
  93. #define MAX31335_TS3_MONTH 0x5D
  94. #define MAX31335_TS3_YEAR 0x5E
  95. #define MAX31335_TS3_FLAGS 0x5F
  96. /* MAX31335_STATUS1 Bit Definitions */
  97. #define MAX31335_STATUS1_PSDECT BIT(7)
  98. #define MAX31335_STATUS1_OSF BIT(6)
  99. #define MAX31335_STATUS1_PFAIL BIT(5)
  100. #define MAX31335_STATUS1_VBATLOW BIT(4)
  101. #define MAX31335_STATUS1_DIF BIT(3)
  102. #define MAX31335_STATUS1_TIF BIT(2)
  103. #define MAX31335_STATUS1_A2F BIT(1)
  104. #define MAX31335_STATUS1_A1F BIT(0)
  105. /* MAX31335_INT_EN1 Bit Definitions */
  106. #define MAX31335_INT_EN1_DOSF BIT(6)
  107. #define MAX31335_INT_EN1_PFAILE BIT(5)
  108. #define MAX31335_INT_EN1_VBATLOWE BIT(4)
  109. #define MAX31335_INT_EN1_DIE BIT(3)
  110. #define MAX31335_INT_EN1_TIE BIT(2)
  111. #define MAX31335_INT_EN1_A2IE BIT(1)
  112. #define MAX31335_INT_EN1_A1IE BIT(0)
  113. /* MAX31335_STATUS2 Bit Definitions */
  114. #define MAX31335_STATUS2_TEMP_RDY BIT(2)
  115. #define MAX31335_STATUS2_OTF BIT(1)
  116. #define MAX31335_STATUS2_UTF BIT(0)
  117. /* MAX31335_INT_EN2 Bit Definitions */
  118. #define MAX31335_INT_EN2_TEMP_RDY_EN BIT(2)
  119. #define MAX31335_INT_EN2_OTIE BIT(1)
  120. #define MAX31335_INT_EN2_UTIE BIT(0)
  121. /* MAX31335_RTC_RESET Bit Definitions */
  122. #define MAX31335_RTC_RESET_SWRST BIT(0)
  123. /* MAX31335_RTC_CONFIG1 Bit Definitions */
  124. #define MAX31335_RTC_CONFIG1_EN_IO BIT(6)
  125. #define MAX31335_RTC_CONFIG1_A1AC GENMASK(5, 4)
  126. #define MAX31335_RTC_CONFIG1_DIP BIT(3)
  127. #define MAX31335_RTC_CONFIG1_I2C_TIMEOUT BIT(1)
  128. #define MAX31335_RTC_CONFIG1_EN_OSC BIT(0)
  129. /* MAX31335_RTC_CONFIG2 Bit Definitions */
  130. #define MAX31335_RTC_CONFIG2_ENCLKO BIT(2)
  131. #define MAX31335_RTC_CONFIG2_CLKO_HZ GENMASK(1, 0)
  132. /* MAX31335_TIMESTAMP_CONFIG Bit Definitions */
  133. #define MAX31335_TIMESTAMP_CONFIG_TSVLOW BIT(5)
  134. #define MAX31335_TIMESTAMP_CONFIG_TSPWM BIT(4)
  135. #define MAX31335_TIMESTAMP_CONFIG_TSDIN BIT(3)
  136. #define MAX31335_TIMESTAMP_CONFIG_TSOW BIT(2)
  137. #define MAX31335_TIMESTAMP_CONFIG_TSR BIT(1)
  138. #define MAX31335_TIMESTAMP_CONFIG_TSE BIT(0)
  139. /* MAX31335_TIMER_CONFIG Bit Definitions */
  140. #define MAX31335_TIMER_CONFIG_TE BIT(4)
  141. #define MAX31335_TIMER_CONFIG_TPAUSE BIT(3)
  142. #define MAX31335_TIMER_CONFIG_TRPT BIT(2)
  143. #define MAX31335_TIMER_CONFIG_TFS GENMASK(1, 0)
  144. /* MAX31335_HOURS Bit Definitions */
  145. #define MAX31335_HOURS_F_24_12 BIT(6)
  146. #define MAX31335_HOURS_HR_20_AM_PM BIT(5)
  147. /* MAX31335_MONTH Bit Definitions */
  148. #define MAX31335_MONTH_CENTURY BIT(7)
  149. /* MAX31335_PWR_MGMT Bit Definitions */
  150. #define MAX31335_PWR_MGMT_PFVT BIT(0)
  151. /* MAX31335_TRICKLE_REG Bit Definitions */
  152. #define MAX31335_TRICKLE_REG_TRICKLE GENMASK(3, 1)
  153. #define MAX31335_TRICKLE_REG_EN_TRICKLE BIT(0)
  154. /* MAX31335_TS_CONFIG Bit Definitions */
  155. #define MAX31335_TS_CONFIG_AUTO BIT(4)
  156. #define MAX31335_TS_CONFIG_CONVERT_T BIT(3)
  157. #define MAX31335_TS_CONFIG_TSINT GENMASK(2, 0)
  158. /* MAX31335_TS_FLAGS Bit Definitions */
  159. #define MAX31335_TS_FLAGS_VLOWF BIT(3)
  160. #define MAX31335_TS_FLAGS_VBATF BIT(2)
  161. #define MAX31335_TS_FLAGS_VCCF BIT(1)
  162. #define MAX31335_TS_FLAGS_DINF BIT(0)
  163. /* MAX31335 Miscellaneous Definitions */
  164. #define MAX31335_TRICKLE_SCHOTTKY_DIODE 1
  165. #define MAX31335_TRICKLE_STANDARD_DIODE 4
  166. #define MAX31335_RAM_SIZE 32
  167. #define MAX31335_TIME_SIZE 0x07
  168. /* MAX31331 Register Map */
  169. #define MAX31331_RTC_CONFIG2 0x04
  170. #define clk_hw_to_max31335(_hw) container_of(_hw, struct max31335_data, clkout)
  171. /* Supported Maxim RTC */
  172. enum max_rtc_ids {
  173. ID_MAX31331,
  174. ID_MAX31335,
  175. MAX_RTC_ID_NR
  176. };
  177. struct chip_desc {
  178. u8 sec_reg;
  179. u8 alarm1_sec_reg;
  180. u8 int_en_reg;
  181. u8 int_status_reg;
  182. u8 ram_reg;
  183. u8 ram_size;
  184. u8 temp_reg;
  185. u8 trickle_reg;
  186. u8 clkout_reg;
  187. enum max_rtc_ids id;
  188. };
  189. struct max31335_data {
  190. struct regmap *regmap;
  191. struct rtc_device *rtc;
  192. struct clk_hw clkout;
  193. struct clk *clkin;
  194. const struct chip_desc *chip;
  195. int irq;
  196. };
  197. static const int max31335_clkout_freq[] = { 1, 64, 1024, 32768 };
  198. static const struct chip_desc chip[MAX_RTC_ID_NR] = {
  199. [ID_MAX31331] = {
  200. .id = ID_MAX31331,
  201. .int_en_reg = 0x01,
  202. .int_status_reg = 0x00,
  203. .sec_reg = 0x08,
  204. .alarm1_sec_reg = 0x0F,
  205. .ram_reg = 0x20,
  206. .ram_size = 32,
  207. .trickle_reg = 0x1B,
  208. .clkout_reg = 0x04,
  209. },
  210. [ID_MAX31335] = {
  211. .id = ID_MAX31335,
  212. .int_en_reg = 0x01,
  213. .int_status_reg = 0x00,
  214. .sec_reg = 0x0A,
  215. .alarm1_sec_reg = 0x11,
  216. .ram_reg = 0x40,
  217. .ram_size = 32,
  218. .temp_reg = 0x35,
  219. .trickle_reg = 0x1D,
  220. .clkout_reg = 0x06,
  221. },
  222. };
  223. static const u16 max31335_trickle_resistors[] = {3000, 6000, 11000};
  224. static bool max31335_volatile_reg(struct device *dev, unsigned int reg)
  225. {
  226. struct max31335_data *max31335 = dev_get_drvdata(dev);
  227. const struct chip_desc *chip = max31335->chip;
  228. /* time keeping registers */
  229. if (reg >= chip->sec_reg && reg < chip->sec_reg + MAX31335_TIME_SIZE)
  230. return true;
  231. /* interrupt status register */
  232. if (reg == chip->int_status_reg)
  233. return true;
  234. /* temperature registers if valid */
  235. if (chip->temp_reg && (reg == chip->temp_reg || reg == chip->temp_reg + 1))
  236. return true;
  237. return false;
  238. }
  239. static const struct regmap_config regmap_config = {
  240. .reg_bits = 8,
  241. .val_bits = 8,
  242. .max_register = 0x5F,
  243. .volatile_reg = max31335_volatile_reg,
  244. };
  245. static int max31335_read_time(struct device *dev, struct rtc_time *tm)
  246. {
  247. struct max31335_data *max31335 = dev_get_drvdata(dev);
  248. u8 date[7];
  249. int ret;
  250. ret = regmap_bulk_read(max31335->regmap, max31335->chip->sec_reg, date,
  251. sizeof(date));
  252. if (ret)
  253. return ret;
  254. tm->tm_sec = bcd2bin(date[0] & 0x7f);
  255. tm->tm_min = bcd2bin(date[1] & 0x7f);
  256. tm->tm_hour = bcd2bin(date[2] & 0x3f);
  257. tm->tm_wday = bcd2bin(date[3] & 0x7) - 1;
  258. tm->tm_mday = bcd2bin(date[4] & 0x3f);
  259. tm->tm_mon = bcd2bin(date[5] & 0x1f) - 1;
  260. tm->tm_year = bcd2bin(date[6]) + 100;
  261. if (FIELD_GET(MAX31335_MONTH_CENTURY, date[5]))
  262. tm->tm_year += 100;
  263. return 0;
  264. }
  265. static int max31335_set_time(struct device *dev, struct rtc_time *tm)
  266. {
  267. struct max31335_data *max31335 = dev_get_drvdata(dev);
  268. u8 date[7];
  269. date[0] = bin2bcd(tm->tm_sec);
  270. date[1] = bin2bcd(tm->tm_min);
  271. date[2] = bin2bcd(tm->tm_hour);
  272. date[3] = bin2bcd(tm->tm_wday + 1);
  273. date[4] = bin2bcd(tm->tm_mday);
  274. date[5] = bin2bcd(tm->tm_mon + 1);
  275. date[6] = bin2bcd(tm->tm_year % 100);
  276. if (tm->tm_year >= 200)
  277. date[5] |= FIELD_PREP(MAX31335_MONTH_CENTURY, 1);
  278. return regmap_bulk_write(max31335->regmap, max31335->chip->sec_reg, date,
  279. sizeof(date));
  280. }
  281. static int max31335_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
  282. {
  283. struct max31335_data *max31335 = dev_get_drvdata(dev);
  284. int ret, ctrl, status;
  285. struct rtc_time time;
  286. u8 regs[6];
  287. ret = regmap_bulk_read(max31335->regmap, max31335->chip->alarm1_sec_reg, regs,
  288. sizeof(regs));
  289. if (ret)
  290. return ret;
  291. alrm->time.tm_sec = bcd2bin(regs[0] & 0x7f);
  292. alrm->time.tm_min = bcd2bin(regs[1] & 0x7f);
  293. alrm->time.tm_hour = bcd2bin(regs[2] & 0x3f);
  294. alrm->time.tm_mday = bcd2bin(regs[3] & 0x3f);
  295. alrm->time.tm_mon = bcd2bin(regs[4] & 0x1f) - 1;
  296. alrm->time.tm_year = bcd2bin(regs[5]) + 100;
  297. ret = max31335_read_time(dev, &time);
  298. if (ret)
  299. return ret;
  300. if (time.tm_year >= 200)
  301. alrm->time.tm_year += 100;
  302. ret = regmap_read(max31335->regmap, max31335->chip->int_en_reg, &ctrl);
  303. if (ret)
  304. return ret;
  305. ret = regmap_read(max31335->regmap, max31335->chip->int_status_reg, &status);
  306. if (ret)
  307. return ret;
  308. alrm->enabled = FIELD_GET(MAX31335_INT_EN1_A1IE, ctrl);
  309. alrm->pending = FIELD_GET(MAX31335_STATUS1_A1F, status);
  310. return 0;
  311. }
  312. static int max31335_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
  313. {
  314. struct max31335_data *max31335 = dev_get_drvdata(dev);
  315. unsigned int reg;
  316. u8 regs[6];
  317. int ret;
  318. regs[0] = bin2bcd(alrm->time.tm_sec);
  319. regs[1] = bin2bcd(alrm->time.tm_min);
  320. regs[2] = bin2bcd(alrm->time.tm_hour);
  321. regs[3] = bin2bcd(alrm->time.tm_mday);
  322. regs[4] = bin2bcd(alrm->time.tm_mon + 1);
  323. regs[5] = bin2bcd(alrm->time.tm_year % 100);
  324. ret = regmap_bulk_write(max31335->regmap, max31335->chip->alarm1_sec_reg,
  325. regs, sizeof(regs));
  326. if (ret)
  327. return ret;
  328. reg = FIELD_PREP(MAX31335_INT_EN1_A1IE, alrm->enabled);
  329. ret = regmap_update_bits(max31335->regmap, max31335->chip->int_en_reg,
  330. MAX31335_INT_EN1_A1IE, reg);
  331. if (ret)
  332. return ret;
  333. return regmap_update_bits(max31335->regmap, max31335->chip->int_status_reg,
  334. MAX31335_STATUS1_A1F, 0);
  335. }
  336. static int max31335_alarm_irq_enable(struct device *dev, unsigned int enabled)
  337. {
  338. struct max31335_data *max31335 = dev_get_drvdata(dev);
  339. return regmap_update_bits(max31335->regmap, max31335->chip->int_en_reg,
  340. MAX31335_INT_EN1_A1IE, enabled);
  341. }
  342. static irqreturn_t max31335_handle_irq(int irq, void *dev_id)
  343. {
  344. struct max31335_data *max31335 = dev_id;
  345. struct mutex *lock = &max31335->rtc->ops_lock;
  346. int ret, status;
  347. mutex_lock(lock);
  348. ret = regmap_read(max31335->regmap, max31335->chip->int_status_reg, &status);
  349. if (ret)
  350. goto exit;
  351. if (FIELD_GET(MAX31335_STATUS1_A1F, status)) {
  352. ret = regmap_update_bits(max31335->regmap, max31335->chip->int_status_reg,
  353. MAX31335_STATUS1_A1F, 0);
  354. if (ret)
  355. goto exit;
  356. rtc_update_irq(max31335->rtc, 1, RTC_AF | RTC_IRQF);
  357. }
  358. exit:
  359. mutex_unlock(lock);
  360. return IRQ_HANDLED;
  361. }
  362. static const struct rtc_class_ops max31335_rtc_ops = {
  363. .read_time = max31335_read_time,
  364. .set_time = max31335_set_time,
  365. .read_alarm = max31335_read_alarm,
  366. .set_alarm = max31335_set_alarm,
  367. .alarm_irq_enable = max31335_alarm_irq_enable,
  368. };
  369. static int max31335_trickle_charger_setup(struct device *dev,
  370. struct max31335_data *max31335)
  371. {
  372. u32 ohms, chargeable;
  373. int i, trickle_cfg;
  374. const char *diode;
  375. if (device_property_read_u32(dev, "aux-voltage-chargeable",
  376. &chargeable))
  377. return 0;
  378. if (device_property_read_u32(dev, "trickle-resistor-ohms", &ohms))
  379. return 0;
  380. if (device_property_read_string(dev, "adi,tc-diode", &diode))
  381. return 0;
  382. if (!strcmp(diode, "schottky"))
  383. trickle_cfg = MAX31335_TRICKLE_SCHOTTKY_DIODE;
  384. else if (!strcmp(diode, "standard+schottky"))
  385. trickle_cfg = MAX31335_TRICKLE_STANDARD_DIODE;
  386. else
  387. return dev_err_probe(dev, -EINVAL,
  388. "Invalid tc-diode value: %s\n", diode);
  389. for (i = 0; i < ARRAY_SIZE(max31335_trickle_resistors); i++)
  390. if (ohms == max31335_trickle_resistors[i])
  391. break;
  392. if (i >= ARRAY_SIZE(max31335_trickle_resistors))
  393. return 0;
  394. i = i + trickle_cfg;
  395. return regmap_write(max31335->regmap, max31335->chip->trickle_reg,
  396. FIELD_PREP(MAX31335_TRICKLE_REG_TRICKLE, i) |
  397. FIELD_PREP(MAX31335_TRICKLE_REG_EN_TRICKLE,
  398. chargeable));
  399. }
  400. static unsigned long max31335_clkout_recalc_rate(struct clk_hw *hw,
  401. unsigned long parent_rate)
  402. {
  403. struct max31335_data *max31335 = clk_hw_to_max31335(hw);
  404. unsigned int freq_mask;
  405. unsigned int reg;
  406. int ret;
  407. ret = regmap_read(max31335->regmap, max31335->chip->clkout_reg, &reg);
  408. if (ret)
  409. return 0;
  410. freq_mask = __roundup_pow_of_two(ARRAY_SIZE(max31335_clkout_freq)) - 1;
  411. return max31335_clkout_freq[reg & freq_mask];
  412. }
  413. static int max31335_clkout_determine_rate(struct clk_hw *hw,
  414. struct clk_rate_request *req)
  415. {
  416. int index;
  417. index = find_closest(req->rate, max31335_clkout_freq,
  418. ARRAY_SIZE(max31335_clkout_freq));
  419. req->rate = max31335_clkout_freq[index];
  420. return 0;
  421. }
  422. static int max31335_clkout_set_rate(struct clk_hw *hw, unsigned long rate,
  423. unsigned long parent_rate)
  424. {
  425. struct max31335_data *max31335 = clk_hw_to_max31335(hw);
  426. unsigned int freq_mask;
  427. int index;
  428. index = find_closest(rate, max31335_clkout_freq,
  429. ARRAY_SIZE(max31335_clkout_freq));
  430. freq_mask = __roundup_pow_of_two(ARRAY_SIZE(max31335_clkout_freq)) - 1;
  431. return regmap_update_bits(max31335->regmap, max31335->chip->clkout_reg,
  432. freq_mask, index);
  433. }
  434. static int max31335_clkout_enable(struct clk_hw *hw)
  435. {
  436. struct max31335_data *max31335 = clk_hw_to_max31335(hw);
  437. return regmap_set_bits(max31335->regmap, max31335->chip->clkout_reg,
  438. MAX31335_RTC_CONFIG2_ENCLKO);
  439. }
  440. static void max31335_clkout_disable(struct clk_hw *hw)
  441. {
  442. struct max31335_data *max31335 = clk_hw_to_max31335(hw);
  443. regmap_clear_bits(max31335->regmap, max31335->chip->clkout_reg,
  444. MAX31335_RTC_CONFIG2_ENCLKO);
  445. }
  446. static int max31335_clkout_is_enabled(struct clk_hw *hw)
  447. {
  448. struct max31335_data *max31335 = clk_hw_to_max31335(hw);
  449. unsigned int reg;
  450. int ret;
  451. ret = regmap_read(max31335->regmap, max31335->chip->clkout_reg, &reg);
  452. if (ret)
  453. return ret;
  454. return !!(reg & MAX31335_RTC_CONFIG2_ENCLKO);
  455. }
  456. static const struct clk_ops max31335_clkout_ops = {
  457. .recalc_rate = max31335_clkout_recalc_rate,
  458. .determine_rate = max31335_clkout_determine_rate,
  459. .set_rate = max31335_clkout_set_rate,
  460. .enable = max31335_clkout_enable,
  461. .disable = max31335_clkout_disable,
  462. .is_enabled = max31335_clkout_is_enabled,
  463. };
  464. static struct clk_init_data max31335_clk_init = {
  465. .name = "max31335-clkout",
  466. .ops = &max31335_clkout_ops,
  467. };
  468. static int max31335_nvmem_reg_read(void *priv, unsigned int offset,
  469. void *val, size_t bytes)
  470. {
  471. struct max31335_data *max31335 = priv;
  472. unsigned int reg = max31335->chip->ram_reg + offset;
  473. return regmap_bulk_read(max31335->regmap, reg, val, bytes);
  474. }
  475. static int max31335_nvmem_reg_write(void *priv, unsigned int offset,
  476. void *val, size_t bytes)
  477. {
  478. struct max31335_data *max31335 = priv;
  479. unsigned int reg = max31335->chip->ram_reg + offset;
  480. return regmap_bulk_write(max31335->regmap, reg, val, bytes);
  481. }
  482. static struct nvmem_config max31335_nvmem_cfg = {
  483. .reg_read = max31335_nvmem_reg_read,
  484. .reg_write = max31335_nvmem_reg_write,
  485. .word_size = 8,
  486. .size = MAX31335_RAM_SIZE,
  487. };
  488. #if IS_REACHABLE(CONFIG_HWMON)
  489. static int max31335_read_temp(struct device *dev, enum hwmon_sensor_types type,
  490. u32 attr, int channel, long *val)
  491. {
  492. struct max31335_data *max31335 = dev_get_drvdata(dev);
  493. u8 reg[2];
  494. s16 temp;
  495. int ret;
  496. if (type != hwmon_temp || attr != hwmon_temp_input)
  497. return -EOPNOTSUPP;
  498. ret = regmap_bulk_read(max31335->regmap, max31335->chip->temp_reg,
  499. reg, 2);
  500. if (ret)
  501. return ret;
  502. temp = get_unaligned_be16(reg);
  503. *val = (temp / 64) * 250;
  504. return 0;
  505. }
  506. static umode_t max31335_is_visible(const void *data,
  507. enum hwmon_sensor_types type,
  508. u32 attr, int channel)
  509. {
  510. if (type == hwmon_temp && attr == hwmon_temp_input)
  511. return 0444;
  512. return 0;
  513. }
  514. static const struct hwmon_channel_info *max31335_info[] = {
  515. HWMON_CHANNEL_INFO(temp, HWMON_T_INPUT),
  516. NULL
  517. };
  518. static const struct hwmon_ops max31335_hwmon_ops = {
  519. .is_visible = max31335_is_visible,
  520. .read = max31335_read_temp,
  521. };
  522. static const struct hwmon_chip_info max31335_chip_info = {
  523. .ops = &max31335_hwmon_ops,
  524. .info = max31335_info,
  525. };
  526. #endif
  527. static int max31335_clkout_register(struct device *dev)
  528. {
  529. struct max31335_data *max31335 = dev_get_drvdata(dev);
  530. int ret;
  531. if (!device_property_present(dev, "#clock-cells"))
  532. return regmap_clear_bits(max31335->regmap, max31335->chip->clkout_reg,
  533. MAX31335_RTC_CONFIG2_ENCLKO);
  534. max31335->clkout.init = &max31335_clk_init;
  535. ret = devm_clk_hw_register(dev, &max31335->clkout);
  536. if (ret)
  537. return dev_err_probe(dev, ret, "cannot register clock\n");
  538. ret = devm_of_clk_add_hw_provider(dev, of_clk_hw_simple_get,
  539. &max31335->clkout);
  540. if (ret)
  541. return dev_err_probe(dev, ret, "cannot add hw provider\n");
  542. max31335->clkout.clk = devm_clk_get_enabled(dev, NULL);
  543. if (IS_ERR(max31335->clkout.clk))
  544. return dev_err_probe(dev, PTR_ERR(max31335->clkout.clk),
  545. "cannot enable clkout\n");
  546. return 0;
  547. }
  548. static int max31335_probe(struct i2c_client *client)
  549. {
  550. struct max31335_data *max31335;
  551. #if IS_REACHABLE(CONFIG_HWMON)
  552. struct device *hwmon;
  553. #endif
  554. const struct chip_desc *match;
  555. int ret;
  556. max31335 = devm_kzalloc(&client->dev, sizeof(*max31335), GFP_KERNEL);
  557. if (!max31335)
  558. return -ENOMEM;
  559. max31335->regmap = devm_regmap_init_i2c(client, &regmap_config);
  560. if (IS_ERR(max31335->regmap))
  561. return PTR_ERR(max31335->regmap);
  562. i2c_set_clientdata(client, max31335);
  563. match = i2c_get_match_data(client);
  564. if (!match)
  565. return -ENODEV;
  566. max31335->chip = match;
  567. max31335->rtc = devm_rtc_allocate_device(&client->dev);
  568. if (IS_ERR(max31335->rtc))
  569. return PTR_ERR(max31335->rtc);
  570. max31335->rtc->ops = &max31335_rtc_ops;
  571. max31335->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
  572. max31335->rtc->range_max = RTC_TIMESTAMP_END_2199;
  573. max31335->rtc->alarm_offset_max = 24 * 60 * 60;
  574. ret = max31335_clkout_register(&client->dev);
  575. if (ret)
  576. return ret;
  577. if (client->irq > 0) {
  578. ret = devm_request_threaded_irq(&client->dev, client->irq,
  579. NULL, max31335_handle_irq,
  580. IRQF_ONESHOT,
  581. "max31335", max31335);
  582. if (ret) {
  583. dev_warn(&client->dev,
  584. "unable to request IRQ, alarm max31335 disabled\n");
  585. client->irq = 0;
  586. } else {
  587. max31335->irq = client->irq;
  588. }
  589. }
  590. if (!client->irq)
  591. clear_bit(RTC_FEATURE_ALARM, max31335->rtc->features);
  592. max31335_nvmem_cfg.priv = max31335;
  593. ret = devm_rtc_nvmem_register(max31335->rtc, &max31335_nvmem_cfg);
  594. if (ret)
  595. return dev_err_probe(&client->dev, ret,
  596. "cannot register rtc nvmem\n");
  597. #if IS_REACHABLE(CONFIG_HWMON)
  598. if (max31335->chip->temp_reg) {
  599. hwmon = devm_hwmon_device_register_with_info(&client->dev, client->name, max31335,
  600. &max31335_chip_info, NULL);
  601. if (IS_ERR(hwmon))
  602. return dev_err_probe(&client->dev, PTR_ERR(hwmon),
  603. "cannot register hwmon device\n");
  604. }
  605. #endif
  606. ret = max31335_trickle_charger_setup(&client->dev, max31335);
  607. if (ret)
  608. return ret;
  609. return devm_rtc_register_device(max31335->rtc);
  610. }
  611. static const struct i2c_device_id max31335_id[] = {
  612. { "max31331", (kernel_ulong_t)&chip[ID_MAX31331] },
  613. { "max31335", (kernel_ulong_t)&chip[ID_MAX31335] },
  614. { }
  615. };
  616. MODULE_DEVICE_TABLE(i2c, max31335_id);
  617. static const struct of_device_id max31335_of_match[] = {
  618. { .compatible = "adi,max31331", .data = &chip[ID_MAX31331] },
  619. { .compatible = "adi,max31335", .data = &chip[ID_MAX31335] },
  620. { }
  621. };
  622. MODULE_DEVICE_TABLE(of, max31335_of_match);
  623. static struct i2c_driver max31335_driver = {
  624. .driver = {
  625. .name = "rtc-max31335",
  626. .of_match_table = max31335_of_match,
  627. },
  628. .probe = max31335_probe,
  629. .id_table = max31335_id,
  630. };
  631. module_i2c_driver(max31335_driver);
  632. MODULE_AUTHOR("Antoniu Miclaus <antoniu.miclaus@analog.com>");
  633. MODULE_AUTHOR("Saket Kumar Purwar <Saket.Kumarpurwar@analog.com>");
  634. MODULE_DESCRIPTION("MAX31335 RTC driver");
  635. MODULE_LICENSE("GPL");