1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * An I2C and SPI driver for the NXP PCF2127/29/31 RTC
4 * Copyright 2013 Til-Technologies
5 *
6 * Author: Renaud Cerrato <r.cerrato@til-technologies.fr>
7 *
8 * Watchdog and tamper functions
9 * Author: Bruno Thomsen <bruno.thomsen@gmail.com>
10 *
11 * PCF2131 support
12 * Author: Hugo Villeneuve <hvilleneuve@dimonoff.com>
13 *
14 * based on the other drivers in this same directory.
15 *
16 * Datasheets: https://www.nxp.com/docs/en/data-sheet/PCF2127.pdf
17 *             https://www.nxp.com/docs/en/data-sheet/PCF2131DS.pdf
18 */
19
20#include <linux/i2c.h>
21#include <linux/spi/spi.h>
22#include <linux/bcd.h>
23#include <linux/rtc.h>
24#include <linux/slab.h>
25#include <linux/module.h>
26#include <linux/of.h>
27#include <linux/of_irq.h>
28#include <linux/of_device.h>
29#include <linux/regmap.h>
30#include <linux/watchdog.h>
31
32/* Control register 1 */
33#define PCF2127_REG_CTRL1		0x00
34#define PCF2127_BIT_CTRL1_POR_OVRD		BIT(3)
35#define PCF2127_BIT_CTRL1_TSF1			BIT(4)
36#define PCF2127_BIT_CTRL1_STOP			BIT(5)
37/* Control register 2 */
38#define PCF2127_REG_CTRL2		0x01
39#define PCF2127_BIT_CTRL2_AIE			BIT(1)
40#define PCF2127_BIT_CTRL2_TSIE			BIT(2)
41#define PCF2127_BIT_CTRL2_AF			BIT(4)
42#define PCF2127_BIT_CTRL2_TSF2			BIT(5)
43#define PCF2127_BIT_CTRL2_WDTF			BIT(6)
44/* Control register 3 */
45#define PCF2127_REG_CTRL3		0x02
46#define PCF2127_BIT_CTRL3_BLIE			BIT(0)
47#define PCF2127_BIT_CTRL3_BIE			BIT(1)
48#define PCF2127_BIT_CTRL3_BLF			BIT(2)
49#define PCF2127_BIT_CTRL3_BF			BIT(3)
50#define PCF2127_BIT_CTRL3_BTSE			BIT(4)
51/* Time and date registers */
52#define PCF2127_REG_TIME_BASE		0x03
53#define PCF2127_BIT_SC_OSF			BIT(7)
54/* Alarm registers */
55#define PCF2127_REG_ALARM_BASE		0x0A
56#define PCF2127_BIT_ALARM_AE			BIT(7)
57/* CLKOUT control register */
58#define PCF2127_REG_CLKOUT		0x0f
59#define PCF2127_BIT_CLKOUT_OTPR			BIT(5)
60/* Watchdog registers */
61#define PCF2127_REG_WD_CTL		0x10
62#define PCF2127_BIT_WD_CTL_TF0			BIT(0)
63#define PCF2127_BIT_WD_CTL_TF1			BIT(1)
64#define PCF2127_BIT_WD_CTL_CD0			BIT(6)
65#define PCF2127_BIT_WD_CTL_CD1			BIT(7)
66#define PCF2127_REG_WD_VAL		0x11
67/* Tamper timestamp1 registers */
68#define PCF2127_REG_TS1_BASE		0x12
69#define PCF2127_BIT_TS_CTRL_TSOFF		BIT(6)
70#define PCF2127_BIT_TS_CTRL_TSM			BIT(7)
71/*
72 * RAM registers
73 * PCF2127 has 512 bytes general-purpose static RAM (SRAM) that is
74 * battery backed and can survive a power outage.
75 * PCF2129/31 doesn't have this feature.
76 */
77#define PCF2127_REG_RAM_ADDR_MSB	0x1A
78#define PCF2127_REG_RAM_WRT_CMD		0x1C
79#define PCF2127_REG_RAM_RD_CMD		0x1D
80
81/* Watchdog timer value constants */
82#define PCF2127_WD_VAL_STOP		0
83/* PCF2127/29 watchdog timer value constants */
84#define PCF2127_WD_CLOCK_HZ_X1000	1000 /* 1Hz */
85#define PCF2127_WD_MIN_HW_HEARTBEAT_MS	500
86/* PCF2131 watchdog timer value constants */
87#define PCF2131_WD_CLOCK_HZ_X1000	250  /* 1/4Hz */
88#define PCF2131_WD_MIN_HW_HEARTBEAT_MS	4000
89
90#define PCF2127_WD_DEFAULT_TIMEOUT_S	60
91
92/* Mask for currently enabled interrupts */
93#define PCF2127_CTRL1_IRQ_MASK (PCF2127_BIT_CTRL1_TSF1)
94#define PCF2127_CTRL2_IRQ_MASK ( \
95		PCF2127_BIT_CTRL2_AF | \
96		PCF2127_BIT_CTRL2_WDTF | \
97		PCF2127_BIT_CTRL2_TSF2)
98
99#define PCF2127_MAX_TS_SUPPORTED	4
100
101/* Control register 4 */
102#define PCF2131_REG_CTRL4		0x03
103#define PCF2131_BIT_CTRL4_TSF4			BIT(4)
104#define PCF2131_BIT_CTRL4_TSF3			BIT(5)
105#define PCF2131_BIT_CTRL4_TSF2			BIT(6)
106#define PCF2131_BIT_CTRL4_TSF1			BIT(7)
107/* Control register 5 */
108#define PCF2131_REG_CTRL5		0x04
109#define PCF2131_BIT_CTRL5_TSIE4			BIT(4)
110#define PCF2131_BIT_CTRL5_TSIE3			BIT(5)
111#define PCF2131_BIT_CTRL5_TSIE2			BIT(6)
112#define PCF2131_BIT_CTRL5_TSIE1			BIT(7)
113/* Software reset register */
114#define PCF2131_REG_SR_RESET		0x05
115#define PCF2131_SR_RESET_READ_PATTERN	(BIT(2) | BIT(5))
116#define PCF2131_SR_RESET_CPR_CMD	(PCF2131_SR_RESET_READ_PATTERN | BIT(7))
117/* Time and date registers */
118#define PCF2131_REG_TIME_BASE		0x07
119/* Alarm registers */
120#define PCF2131_REG_ALARM_BASE		0x0E
121/* CLKOUT control register */
122#define PCF2131_REG_CLKOUT		0x13
123/* Watchdog registers */
124#define PCF2131_REG_WD_CTL		0x35
125#define PCF2131_REG_WD_VAL		0x36
126/* Tamper timestamp1 registers */
127#define PCF2131_REG_TS1_BASE		0x14
128/* Tamper timestamp2 registers */
129#define PCF2131_REG_TS2_BASE		0x1B
130/* Tamper timestamp3 registers */
131#define PCF2131_REG_TS3_BASE		0x22
132/* Tamper timestamp4 registers */
133#define PCF2131_REG_TS4_BASE		0x29
134/* Interrupt mask registers */
135#define PCF2131_REG_INT_A_MASK1		0x31
136#define PCF2131_REG_INT_A_MASK2		0x32
137#define PCF2131_REG_INT_B_MASK1		0x33
138#define PCF2131_REG_INT_B_MASK2		0x34
139#define PCF2131_BIT_INT_BLIE		BIT(0)
140#define PCF2131_BIT_INT_BIE		BIT(1)
141#define PCF2131_BIT_INT_AIE		BIT(2)
142#define PCF2131_BIT_INT_WD_CD		BIT(3)
143#define PCF2131_BIT_INT_SI		BIT(4)
144#define PCF2131_BIT_INT_MI		BIT(5)
145#define PCF2131_CTRL2_IRQ_MASK ( \
146		PCF2127_BIT_CTRL2_AF | \
147		PCF2127_BIT_CTRL2_WDTF)
148#define PCF2131_CTRL4_IRQ_MASK ( \
149		PCF2131_BIT_CTRL4_TSF4 | \
150		PCF2131_BIT_CTRL4_TSF3 | \
151		PCF2131_BIT_CTRL4_TSF2 | \
152		PCF2131_BIT_CTRL4_TSF1)
153
154enum pcf21xx_type {
155	PCF2127,
156	PCF2129,
157	PCF2131,
158	PCF21XX_LAST_ID
159};
160
161struct pcf21xx_ts_config {
162	u8 reg_base; /* Base register to read timestamp values. */
163
164	/*
165	 * If the TS input pin is driven to GND, an interrupt can be generated
166	 * (supported by all variants).
167	 */
168	u8 gnd_detect_reg; /* Interrupt control register address. */
169	u8 gnd_detect_bit; /* Interrupt bit. */
170
171	/*
172	 * If the TS input pin is driven to an intermediate level between GND
173	 * and supply, an interrupt can be generated (optional feature depending
174	 * on variant).
175	 */
176	u8 inter_detect_reg; /* Interrupt control register address. */
177	u8 inter_detect_bit; /* Interrupt bit. */
178
179	u8 ie_reg; /* Interrupt enable control register. */
180	u8 ie_bit; /* Interrupt enable bit. */
181};
182
183struct pcf21xx_config {
184	int type; /* IC variant */
185	int max_register;
186	unsigned int has_nvmem:1;
187	unsigned int has_bit_wd_ctl_cd0:1;
188	unsigned int wd_val_reg_readable:1; /* If watchdog value register can be read. */
189	unsigned int has_int_a_b:1; /* PCF2131 supports two interrupt outputs. */
190	u8 reg_time_base; /* Time/date base register. */
191	u8 regs_alarm_base; /* Alarm function base registers. */
192	u8 reg_wd_ctl; /* Watchdog control register. */
193	u8 reg_wd_val; /* Watchdog value register. */
194	u8 reg_clkout; /* Clkout register. */
195	int wdd_clock_hz_x1000; /* Watchdog clock in Hz multiplicated by 1000 */
196	int wdd_min_hw_heartbeat_ms;
197	unsigned int ts_count;
198	struct pcf21xx_ts_config ts[PCF2127_MAX_TS_SUPPORTED];
199	struct attribute_group attribute_group;
200};
201
202struct pcf2127 {
203	struct rtc_device *rtc;
204	struct watchdog_device wdd;
205	struct regmap *regmap;
206	const struct pcf21xx_config *cfg;
207	bool irq_enabled;
208	time64_t ts[PCF2127_MAX_TS_SUPPORTED]; /* Timestamp values. */
209	bool ts_valid[PCF2127_MAX_TS_SUPPORTED];  /* Timestamp valid indication. */
210};
211
212/*
213 * In the routines that deal directly with the pcf2127 hardware, we use
214 * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch.
215 */
216static int pcf2127_rtc_read_time(struct device *dev, struct rtc_time *tm)
217{
218	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
219	unsigned char buf[7];
220	int ret;
221
222	/*
223	 * Avoid reading CTRL2 register as it causes WD_VAL register
224	 * value to reset to 0 which means watchdog is stopped.
225	 */
226	ret = regmap_bulk_read(pcf2127->regmap, pcf2127->cfg->reg_time_base,
227			       buf, sizeof(buf));
228	if (ret) {
229		dev_err(dev, "%s: read error\n", __func__);
230		return ret;
231	}
232
233	/* Clock integrity is not guaranteed when OSF flag is set. */
234	if (buf[0] & PCF2127_BIT_SC_OSF) {
235		/*
236		 * no need clear the flag here,
237		 * it will be cleared once the new date is saved
238		 */
239		dev_warn(dev,
240			 "oscillator stop detected, date/time is not reliable\n");
241		return -EINVAL;
242	}
243
244	dev_dbg(dev,
245		"%s: raw data is sec=%02x, min=%02x, hr=%02x, "
246		"mday=%02x, wday=%02x, mon=%02x, year=%02x\n",
247		__func__, buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
248
249	tm->tm_sec = bcd2bin(buf[0] & 0x7F);
250	tm->tm_min = bcd2bin(buf[1] & 0x7F);
251	tm->tm_hour = bcd2bin(buf[2] & 0x3F);
252	tm->tm_mday = bcd2bin(buf[3] & 0x3F);
253	tm->tm_wday = buf[4] & 0x07;
254	tm->tm_mon = bcd2bin(buf[5] & 0x1F) - 1;
255	tm->tm_year = bcd2bin(buf[6]);
256	tm->tm_year += 100;
257
258	dev_dbg(dev, "%s: tm is secs=%d, mins=%d, hours=%d, "
259		"mday=%d, mon=%d, year=%d, wday=%d\n",
260		__func__,
261		tm->tm_sec, tm->tm_min, tm->tm_hour,
262		tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
263
264	return 0;
265}
266
267static int pcf2127_rtc_set_time(struct device *dev, struct rtc_time *tm)
268{
269	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
270	unsigned char buf[7];
271	int i = 0, err;
272
273	dev_dbg(dev, "%s: secs=%d, mins=%d, hours=%d, "
274		"mday=%d, mon=%d, year=%d, wday=%d\n",
275		__func__,
276		tm->tm_sec, tm->tm_min, tm->tm_hour,
277		tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
278
279	/* hours, minutes and seconds */
280	buf[i++] = bin2bcd(tm->tm_sec);	/* this will also clear OSF flag */
281	buf[i++] = bin2bcd(tm->tm_min);
282	buf[i++] = bin2bcd(tm->tm_hour);
283	buf[i++] = bin2bcd(tm->tm_mday);
284	buf[i++] = tm->tm_wday & 0x07;
285
286	/* month, 1 - 12 */
287	buf[i++] = bin2bcd(tm->tm_mon + 1);
288
289	/* year */
290	buf[i++] = bin2bcd(tm->tm_year - 100);
291
292	/* Write access to time registers:
293	 * PCF2127/29: no special action required.
294	 * PCF2131:    requires setting the STOP and CPR bits. STOP bit needs to
295	 *             be cleared after time registers are updated.
296	 */
297	if (pcf2127->cfg->type == PCF2131) {
298		err = regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL1,
299					 PCF2127_BIT_CTRL1_STOP,
300					 PCF2127_BIT_CTRL1_STOP);
301		if (err) {
302			dev_dbg(dev, "setting STOP bit failed\n");
303			return err;
304		}
305
306		err = regmap_write(pcf2127->regmap, PCF2131_REG_SR_RESET,
307				   PCF2131_SR_RESET_CPR_CMD);
308		if (err) {
309			dev_dbg(dev, "sending CPR cmd failed\n");
310			return err;
311		}
312	}
313
314	/* write time register's data */
315	err = regmap_bulk_write(pcf2127->regmap, pcf2127->cfg->reg_time_base, buf, i);
316	if (err) {
317		dev_dbg(dev, "%s: err=%d", __func__, err);
318		return err;
319	}
320
321	if (pcf2127->cfg->type == PCF2131) {
322		/* Clear STOP bit (PCF2131 only) after write is completed. */
323		err = regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL1,
324					 PCF2127_BIT_CTRL1_STOP, 0);
325		if (err) {
326			dev_dbg(dev, "clearing STOP bit failed\n");
327			return err;
328		}
329	}
330
331	return 0;
332}
333
334static int pcf2127_rtc_ioctl(struct device *dev,
335				unsigned int cmd, unsigned long arg)
336{
337	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
338	int val, touser = 0;
339	int ret;
340
341	switch (cmd) {
342	case RTC_VL_READ:
343		ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL3, &val);
344		if (ret)
345			return ret;
346
347		if (val & PCF2127_BIT_CTRL3_BLF)
348			touser |= RTC_VL_BACKUP_LOW;
349
350		if (val & PCF2127_BIT_CTRL3_BF)
351			touser |= RTC_VL_BACKUP_SWITCH;
352
353		return put_user(touser, (unsigned int __user *)arg);
354
355	case RTC_VL_CLR:
356		return regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL3,
357					  PCF2127_BIT_CTRL3_BF, 0);
358
359	default:
360		return -ENOIOCTLCMD;
361	}
362}
363
364static int pcf2127_nvmem_read(void *priv, unsigned int offset,
365			      void *val, size_t bytes)
366{
367	struct pcf2127 *pcf2127 = priv;
368	int ret;
369	unsigned char offsetbuf[] = { offset >> 8, offset };
370
371	ret = regmap_bulk_write(pcf2127->regmap, PCF2127_REG_RAM_ADDR_MSB,
372				offsetbuf, 2);
373	if (ret)
374		return ret;
375
376	return regmap_bulk_read(pcf2127->regmap, PCF2127_REG_RAM_RD_CMD,
377				val, bytes);
378}
379
380static int pcf2127_nvmem_write(void *priv, unsigned int offset,
381			       void *val, size_t bytes)
382{
383	struct pcf2127 *pcf2127 = priv;
384	int ret;
385	unsigned char offsetbuf[] = { offset >> 8, offset };
386
387	ret = regmap_bulk_write(pcf2127->regmap, PCF2127_REG_RAM_ADDR_MSB,
388				offsetbuf, 2);
389	if (ret)
390		return ret;
391
392	return regmap_bulk_write(pcf2127->regmap, PCF2127_REG_RAM_WRT_CMD,
393				 val, bytes);
394}
395
396/* watchdog driver */
397
398static int pcf2127_wdt_ping(struct watchdog_device *wdd)
399{
400	int wd_val;
401	struct pcf2127 *pcf2127 = watchdog_get_drvdata(wdd);
402
403	/*
404	 * Compute counter value of WATCHDG_TIM_VAL to obtain desired period
405	 * in seconds, depending on the source clock frequency.
406	 */
407	wd_val = ((wdd->timeout * pcf2127->cfg->wdd_clock_hz_x1000) / 1000) + 1;
408
409	return regmap_write(pcf2127->regmap, pcf2127->cfg->reg_wd_val, wd_val);
410}
411
412/*
413 * Restart watchdog timer if feature is active.
414 *
415 * Note: Reading CTRL2 register causes watchdog to stop which is unfortunate,
416 * since register also contain control/status flags for other features.
417 * Always call this function after reading CTRL2 register.
418 */
419static int pcf2127_wdt_active_ping(struct watchdog_device *wdd)
420{
421	int ret = 0;
422
423	if (watchdog_active(wdd)) {
424		ret = pcf2127_wdt_ping(wdd);
425		if (ret)
426			dev_err(wdd->parent,
427				"%s: watchdog restart failed, ret=%d\n",
428				__func__, ret);
429	}
430
431	return ret;
432}
433
434static int pcf2127_wdt_start(struct watchdog_device *wdd)
435{
436	return pcf2127_wdt_ping(wdd);
437}
438
439static int pcf2127_wdt_stop(struct watchdog_device *wdd)
440{
441	struct pcf2127 *pcf2127 = watchdog_get_drvdata(wdd);
442
443	return regmap_write(pcf2127->regmap, pcf2127->cfg->reg_wd_val,
444			    PCF2127_WD_VAL_STOP);
445}
446
447static int pcf2127_wdt_set_timeout(struct watchdog_device *wdd,
448				   unsigned int new_timeout)
449{
450	dev_dbg(wdd->parent, "new watchdog timeout: %is (old: %is)\n",
451		new_timeout, wdd->timeout);
452
453	wdd->timeout = new_timeout;
454
455	return pcf2127_wdt_active_ping(wdd);
456}
457
458static const struct watchdog_info pcf2127_wdt_info = {
459	.identity = "NXP PCF2127/PCF2129 Watchdog",
460	.options = WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT,
461};
462
463static const struct watchdog_ops pcf2127_watchdog_ops = {
464	.owner = THIS_MODULE,
465	.start = pcf2127_wdt_start,
466	.stop = pcf2127_wdt_stop,
467	.ping = pcf2127_wdt_ping,
468	.set_timeout = pcf2127_wdt_set_timeout,
469};
470
471/*
472 * Compute watchdog period, t, in seconds, from the WATCHDG_TIM_VAL register
473 * value, n, and the clock frequency, f1000, in Hz x 1000.
474 *
475 * The PCF2127/29 datasheet gives t as:
476 *   t = n / f
477 * The PCF2131 datasheet gives t as:
478 *   t = (n - 1) / f
479 * For both variants, the watchdog is triggered when the WATCHDG_TIM_VAL reaches
480 * the value 1, and not zero. Consequently, the equation from the PCF2131
481 * datasheet seems to be the correct one for both variants.
482 */
483static int pcf2127_watchdog_get_period(int n, int f1000)
484{
485	return (1000 * (n - 1)) / f1000;
486}
487
488static int pcf2127_watchdog_init(struct device *dev, struct pcf2127 *pcf2127)
489{
490	int ret;
491
492	if (!IS_ENABLED(CONFIG_WATCHDOG) ||
493	    !device_property_read_bool(dev, "reset-source"))
494		return 0;
495
496	pcf2127->wdd.parent = dev;
497	pcf2127->wdd.info = &pcf2127_wdt_info;
498	pcf2127->wdd.ops = &pcf2127_watchdog_ops;
499
500	pcf2127->wdd.min_timeout =
501		pcf2127_watchdog_get_period(
502			2, pcf2127->cfg->wdd_clock_hz_x1000);
503	pcf2127->wdd.max_timeout =
504		pcf2127_watchdog_get_period(
505			255, pcf2127->cfg->wdd_clock_hz_x1000);
506	pcf2127->wdd.timeout = PCF2127_WD_DEFAULT_TIMEOUT_S;
507
508	dev_dbg(dev, "%s clock = %d Hz / 1000\n", __func__,
509		pcf2127->cfg->wdd_clock_hz_x1000);
510
511	pcf2127->wdd.min_hw_heartbeat_ms = pcf2127->cfg->wdd_min_hw_heartbeat_ms;
512	pcf2127->wdd.status = WATCHDOG_NOWAYOUT_INIT_STATUS;
513
514	watchdog_set_drvdata(&pcf2127->wdd, pcf2127);
515
516	/* Test if watchdog timer is started by bootloader */
517	if (pcf2127->cfg->wd_val_reg_readable) {
518		u32 wdd_timeout;
519
520		ret = regmap_read(pcf2127->regmap, pcf2127->cfg->reg_wd_val,
521				  &wdd_timeout);
522		if (ret)
523			return ret;
524
525		if (wdd_timeout)
526			set_bit(WDOG_HW_RUNNING, &pcf2127->wdd.status);
527	}
528
529	return devm_watchdog_register_device(dev, &pcf2127->wdd);
530}
531
532/* Alarm */
533static int pcf2127_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
534{
535	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
536	u8 buf[5];
537	unsigned int ctrl2;
538	int ret;
539
540	ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL2, &ctrl2);
541	if (ret)
542		return ret;
543
544	ret = pcf2127_wdt_active_ping(&pcf2127->wdd);
545	if (ret)
546		return ret;
547
548	ret = regmap_bulk_read(pcf2127->regmap, pcf2127->cfg->regs_alarm_base,
549			       buf, sizeof(buf));
550	if (ret)
551		return ret;
552
553	alrm->enabled = ctrl2 & PCF2127_BIT_CTRL2_AIE;
554	alrm->pending = ctrl2 & PCF2127_BIT_CTRL2_AF;
555
556	alrm->time.tm_sec = bcd2bin(buf[0] & 0x7F);
557	alrm->time.tm_min = bcd2bin(buf[1] & 0x7F);
558	alrm->time.tm_hour = bcd2bin(buf[2] & 0x3F);
559	alrm->time.tm_mday = bcd2bin(buf[3] & 0x3F);
560
561	return 0;
562}
563
564static int pcf2127_rtc_alarm_irq_enable(struct device *dev, u32 enable)
565{
566	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
567	int ret;
568
569	ret = regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL2,
570				 PCF2127_BIT_CTRL2_AIE,
571				 enable ? PCF2127_BIT_CTRL2_AIE : 0);
572	if (ret)
573		return ret;
574
575	return pcf2127_wdt_active_ping(&pcf2127->wdd);
576}
577
578static int pcf2127_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
579{
580	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
581	uint8_t buf[5];
582	int ret;
583
584	ret = regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL2,
585				 PCF2127_BIT_CTRL2_AF, 0);
586	if (ret)
587		return ret;
588
589	ret = pcf2127_wdt_active_ping(&pcf2127->wdd);
590	if (ret)
591		return ret;
592
593	buf[0] = bin2bcd(alrm->time.tm_sec);
594	buf[1] = bin2bcd(alrm->time.tm_min);
595	buf[2] = bin2bcd(alrm->time.tm_hour);
596	buf[3] = bin2bcd(alrm->time.tm_mday);
597	buf[4] = PCF2127_BIT_ALARM_AE; /* Do not match on week day */
598
599	ret = regmap_bulk_write(pcf2127->regmap, pcf2127->cfg->regs_alarm_base,
600				buf, sizeof(buf));
601	if (ret)
602		return ret;
603
604	return pcf2127_rtc_alarm_irq_enable(dev, alrm->enabled);
605}
606
607/*
608 * This function reads one timestamp function data, caller is responsible for
609 * calling pcf2127_wdt_active_ping()
610 */
611static int pcf2127_rtc_ts_read(struct device *dev, time64_t *ts,
612			       int ts_id)
613{
614	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
615	struct rtc_time tm;
616	int ret;
617	unsigned char data[7];
618
619	ret = regmap_bulk_read(pcf2127->regmap, pcf2127->cfg->ts[ts_id].reg_base,
620			       data, sizeof(data));
621	if (ret) {
622		dev_err(dev, "%s: read error ret=%d\n", __func__, ret);
623		return ret;
624	}
625
626	dev_dbg(dev,
627		"%s: raw data is ts_sc=%02x, ts_mn=%02x, ts_hr=%02x, ts_dm=%02x, ts_mo=%02x, ts_yr=%02x\n",
628		__func__, data[1], data[2], data[3], data[4], data[5], data[6]);
629
630	tm.tm_sec = bcd2bin(data[1] & 0x7F);
631	tm.tm_min = bcd2bin(data[2] & 0x7F);
632	tm.tm_hour = bcd2bin(data[3] & 0x3F);
633	tm.tm_mday = bcd2bin(data[4] & 0x3F);
634	/* TS_MO register (month) value range: 1-12 */
635	tm.tm_mon = bcd2bin(data[5] & 0x1F) - 1;
636	tm.tm_year = bcd2bin(data[6]);
637	if (tm.tm_year < 70)
638		tm.tm_year += 100; /* assume we are in 1970...2069 */
639
640	ret = rtc_valid_tm(&tm);
641	if (ret) {
642		dev_err(dev, "Invalid timestamp. ret=%d\n", ret);
643		return ret;
644	}
645
646	*ts = rtc_tm_to_time64(&tm);
647	return 0;
648};
649
650static void pcf2127_rtc_ts_snapshot(struct device *dev, int ts_id)
651{
652	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
653	int ret;
654
655	if (ts_id >= pcf2127->cfg->ts_count)
656		return;
657
658	/* Let userspace read the first timestamp */
659	if (pcf2127->ts_valid[ts_id])
660		return;
661
662	ret = pcf2127_rtc_ts_read(dev, &pcf2127->ts[ts_id], ts_id);
663	if (!ret)
664		pcf2127->ts_valid[ts_id] = true;
665}
666
667static irqreturn_t pcf2127_rtc_irq(int irq, void *dev)
668{
669	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
670	unsigned int ctrl2;
671	int ret = 0;
672
673	ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL2, &ctrl2);
674	if (ret)
675		return IRQ_NONE;
676
677	if (pcf2127->cfg->ts_count == 1) {
678		/* PCF2127/29 */
679		unsigned int ctrl1;
680
681		ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL1, &ctrl1);
682		if (ret)
683			return IRQ_NONE;
684
685		if (!(ctrl1 & PCF2127_CTRL1_IRQ_MASK || ctrl2 & PCF2127_CTRL2_IRQ_MASK))
686			return IRQ_NONE;
687
688		if (ctrl1 & PCF2127_BIT_CTRL1_TSF1 || ctrl2 & PCF2127_BIT_CTRL2_TSF2)
689			pcf2127_rtc_ts_snapshot(dev, 0);
690
691		if (ctrl1 & PCF2127_CTRL1_IRQ_MASK)
692			regmap_write(pcf2127->regmap, PCF2127_REG_CTRL1,
693				     ctrl1 & ~PCF2127_CTRL1_IRQ_MASK);
694
695		if (ctrl2 & PCF2127_CTRL2_IRQ_MASK)
696			regmap_write(pcf2127->regmap, PCF2127_REG_CTRL2,
697				     ctrl2 & ~PCF2127_CTRL2_IRQ_MASK);
698	} else {
699		/* PCF2131. */
700		unsigned int ctrl4;
701
702		ret = regmap_read(pcf2127->regmap, PCF2131_REG_CTRL4, &ctrl4);
703		if (ret)
704			return IRQ_NONE;
705
706		if (!(ctrl4 & PCF2131_CTRL4_IRQ_MASK || ctrl2 & PCF2131_CTRL2_IRQ_MASK))
707			return IRQ_NONE;
708
709		if (ctrl4 & PCF2131_CTRL4_IRQ_MASK) {
710			int i;
711			int tsf_bit = PCF2131_BIT_CTRL4_TSF1; /* Start at bit 7. */
712
713			for (i = 0; i < pcf2127->cfg->ts_count; i++) {
714				if (ctrl4 & tsf_bit)
715					pcf2127_rtc_ts_snapshot(dev, i);
716
717				tsf_bit = tsf_bit >> 1;
718			}
719
720			regmap_write(pcf2127->regmap, PCF2131_REG_CTRL4,
721				     ctrl4 & ~PCF2131_CTRL4_IRQ_MASK);
722		}
723
724		if (ctrl2 & PCF2131_CTRL2_IRQ_MASK)
725			regmap_write(pcf2127->regmap, PCF2127_REG_CTRL2,
726				     ctrl2 & ~PCF2131_CTRL2_IRQ_MASK);
727	}
728
729	if (ctrl2 & PCF2127_BIT_CTRL2_AF)
730		rtc_update_irq(pcf2127->rtc, 1, RTC_IRQF | RTC_AF);
731
732	pcf2127_wdt_active_ping(&pcf2127->wdd);
733
734	return IRQ_HANDLED;
735}
736
737static const struct rtc_class_ops pcf2127_rtc_ops = {
738	.ioctl            = pcf2127_rtc_ioctl,
739	.read_time        = pcf2127_rtc_read_time,
740	.set_time         = pcf2127_rtc_set_time,
741	.read_alarm       = pcf2127_rtc_read_alarm,
742	.set_alarm        = pcf2127_rtc_set_alarm,
743	.alarm_irq_enable = pcf2127_rtc_alarm_irq_enable,
744};
745
746/* sysfs interface */
747
748static ssize_t timestamp_store(struct device *dev,
749			       struct device_attribute *attr,
750			       const char *buf, size_t count, int ts_id)
751{
752	struct pcf2127 *pcf2127 = dev_get_drvdata(dev->parent);
753	int ret;
754
755	if (ts_id >= pcf2127->cfg->ts_count)
756		return 0;
757
758	if (pcf2127->irq_enabled) {
759		pcf2127->ts_valid[ts_id] = false;
760	} else {
761		/* Always clear GND interrupt bit. */
762		ret = regmap_update_bits(pcf2127->regmap,
763					 pcf2127->cfg->ts[ts_id].gnd_detect_reg,
764					 pcf2127->cfg->ts[ts_id].gnd_detect_bit,
765					 0);
766
767		if (ret) {
768			dev_err(dev, "%s: update TS gnd detect ret=%d\n", __func__, ret);
769			return ret;
770		}
771
772		if (pcf2127->cfg->ts[ts_id].inter_detect_bit) {
773			/* Clear intermediate level interrupt bit if supported. */
774			ret = regmap_update_bits(pcf2127->regmap,
775						 pcf2127->cfg->ts[ts_id].inter_detect_reg,
776						 pcf2127->cfg->ts[ts_id].inter_detect_bit,
777						 0);
778			if (ret) {
779				dev_err(dev, "%s: update TS intermediate level detect ret=%d\n",
780					__func__, ret);
781				return ret;
782			}
783		}
784
785		ret = pcf2127_wdt_active_ping(&pcf2127->wdd);
786		if (ret)
787			return ret;
788	}
789
790	return count;
791}
792
793static ssize_t timestamp0_store(struct device *dev,
794				struct device_attribute *attr,
795				const char *buf, size_t count)
796{
797	return timestamp_store(dev, attr, buf, count, 0);
798};
799
800static ssize_t timestamp1_store(struct device *dev,
801				struct device_attribute *attr,
802				const char *buf, size_t count)
803{
804	return timestamp_store(dev, attr, buf, count, 1);
805};
806
807static ssize_t timestamp2_store(struct device *dev,
808				struct device_attribute *attr,
809				const char *buf, size_t count)
810{
811	return timestamp_store(dev, attr, buf, count, 2);
812};
813
814static ssize_t timestamp3_store(struct device *dev,
815				struct device_attribute *attr,
816				const char *buf, size_t count)
817{
818	return timestamp_store(dev, attr, buf, count, 3);
819};
820
821static ssize_t timestamp_show(struct device *dev,
822			      struct device_attribute *attr, char *buf,
823			      int ts_id)
824{
825	struct pcf2127 *pcf2127 = dev_get_drvdata(dev->parent);
826	int ret;
827	time64_t ts;
828
829	if (ts_id >= pcf2127->cfg->ts_count)
830		return 0;
831
832	if (pcf2127->irq_enabled) {
833		if (!pcf2127->ts_valid[ts_id])
834			return 0;
835		ts = pcf2127->ts[ts_id];
836	} else {
837		u8 valid_low = 0;
838		u8 valid_inter = 0;
839		unsigned int ctrl;
840
841		/* Check if TS input pin is driven to GND, supported by all
842		 * variants.
843		 */
844		ret = regmap_read(pcf2127->regmap,
845				  pcf2127->cfg->ts[ts_id].gnd_detect_reg,
846				  &ctrl);
847		if (ret)
848			return 0;
849
850		valid_low = ctrl & pcf2127->cfg->ts[ts_id].gnd_detect_bit;
851
852		if (pcf2127->cfg->ts[ts_id].inter_detect_bit) {
853			/* Check if TS input pin is driven to intermediate level
854			 * between GND and supply, if supported by variant.
855			 */
856			ret = regmap_read(pcf2127->regmap,
857					  pcf2127->cfg->ts[ts_id].inter_detect_reg,
858					  &ctrl);
859			if (ret)
860				return 0;
861
862			valid_inter = ctrl & pcf2127->cfg->ts[ts_id].inter_detect_bit;
863		}
864
865		if (!valid_low && !valid_inter)
866			return 0;
867
868		ret = pcf2127_rtc_ts_read(dev->parent, &ts, ts_id);
869		if (ret)
870			return 0;
871
872		ret = pcf2127_wdt_active_ping(&pcf2127->wdd);
873		if (ret)
874			return ret;
875	}
876	return sprintf(buf, "%llu\n", (unsigned long long)ts);
877}
878
879static ssize_t timestamp0_show(struct device *dev,
880			       struct device_attribute *attr, char *buf)
881{
882	return timestamp_show(dev, attr, buf, 0);
883};
884
885static ssize_t timestamp1_show(struct device *dev,
886			       struct device_attribute *attr, char *buf)
887{
888	return timestamp_show(dev, attr, buf, 1);
889};
890
891static ssize_t timestamp2_show(struct device *dev,
892			       struct device_attribute *attr, char *buf)
893{
894	return timestamp_show(dev, attr, buf, 2);
895};
896
897static ssize_t timestamp3_show(struct device *dev,
898			       struct device_attribute *attr, char *buf)
899{
900	return timestamp_show(dev, attr, buf, 3);
901};
902
903static DEVICE_ATTR_RW(timestamp0);
904static DEVICE_ATTR_RW(timestamp1);
905static DEVICE_ATTR_RW(timestamp2);
906static DEVICE_ATTR_RW(timestamp3);
907
908static struct attribute *pcf2127_attrs[] = {
909	&dev_attr_timestamp0.attr,
910	NULL
911};
912
913static struct attribute *pcf2131_attrs[] = {
914	&dev_attr_timestamp0.attr,
915	&dev_attr_timestamp1.attr,
916	&dev_attr_timestamp2.attr,
917	&dev_attr_timestamp3.attr,
918	NULL
919};
920
921static struct pcf21xx_config pcf21xx_cfg[] = {
922	[PCF2127] = {
923		.type = PCF2127,
924		.max_register = 0x1d,
925		.has_nvmem = 1,
926		.has_bit_wd_ctl_cd0 = 1,
927		.wd_val_reg_readable = 1,
928		.has_int_a_b = 0,
929		.reg_time_base = PCF2127_REG_TIME_BASE,
930		.regs_alarm_base = PCF2127_REG_ALARM_BASE,
931		.reg_wd_ctl = PCF2127_REG_WD_CTL,
932		.reg_wd_val = PCF2127_REG_WD_VAL,
933		.reg_clkout = PCF2127_REG_CLKOUT,
934		.wdd_clock_hz_x1000 = PCF2127_WD_CLOCK_HZ_X1000,
935		.wdd_min_hw_heartbeat_ms = PCF2127_WD_MIN_HW_HEARTBEAT_MS,
936		.ts_count = 1,
937		.ts[0] = {
938			.reg_base  = PCF2127_REG_TS1_BASE,
939			.gnd_detect_reg = PCF2127_REG_CTRL1,
940			.gnd_detect_bit = PCF2127_BIT_CTRL1_TSF1,
941			.inter_detect_reg = PCF2127_REG_CTRL2,
942			.inter_detect_bit = PCF2127_BIT_CTRL2_TSF2,
943			.ie_reg    = PCF2127_REG_CTRL2,
944			.ie_bit    = PCF2127_BIT_CTRL2_TSIE,
945		},
946		.attribute_group = {
947			.attrs	= pcf2127_attrs,
948		},
949	},
950	[PCF2129] = {
951		.type = PCF2129,
952		.max_register = 0x19,
953		.has_nvmem = 0,
954		.has_bit_wd_ctl_cd0 = 0,
955		.wd_val_reg_readable = 1,
956		.has_int_a_b = 0,
957		.reg_time_base = PCF2127_REG_TIME_BASE,
958		.regs_alarm_base = PCF2127_REG_ALARM_BASE,
959		.reg_wd_ctl = PCF2127_REG_WD_CTL,
960		.reg_wd_val = PCF2127_REG_WD_VAL,
961		.reg_clkout = PCF2127_REG_CLKOUT,
962		.wdd_clock_hz_x1000 = PCF2127_WD_CLOCK_HZ_X1000,
963		.wdd_min_hw_heartbeat_ms = PCF2127_WD_MIN_HW_HEARTBEAT_MS,
964		.ts_count = 1,
965		.ts[0] = {
966			.reg_base  = PCF2127_REG_TS1_BASE,
967			.gnd_detect_reg = PCF2127_REG_CTRL1,
968			.gnd_detect_bit = PCF2127_BIT_CTRL1_TSF1,
969			.inter_detect_reg = PCF2127_REG_CTRL2,
970			.inter_detect_bit = PCF2127_BIT_CTRL2_TSF2,
971			.ie_reg    = PCF2127_REG_CTRL2,
972			.ie_bit    = PCF2127_BIT_CTRL2_TSIE,
973		},
974		.attribute_group = {
975			.attrs	= pcf2127_attrs,
976		},
977	},
978	[PCF2131] = {
979		.type = PCF2131,
980		.max_register = 0x36,
981		.has_nvmem = 0,
982		.has_bit_wd_ctl_cd0 = 0,
983		.wd_val_reg_readable = 0,
984		.has_int_a_b = 1,
985		.reg_time_base = PCF2131_REG_TIME_BASE,
986		.regs_alarm_base = PCF2131_REG_ALARM_BASE,
987		.reg_wd_ctl = PCF2131_REG_WD_CTL,
988		.reg_wd_val = PCF2131_REG_WD_VAL,
989		.reg_clkout = PCF2131_REG_CLKOUT,
990		.wdd_clock_hz_x1000 = PCF2131_WD_CLOCK_HZ_X1000,
991		.wdd_min_hw_heartbeat_ms = PCF2131_WD_MIN_HW_HEARTBEAT_MS,
992		.ts_count = 4,
993		.ts[0] = {
994			.reg_base  = PCF2131_REG_TS1_BASE,
995			.gnd_detect_reg = PCF2131_REG_CTRL4,
996			.gnd_detect_bit = PCF2131_BIT_CTRL4_TSF1,
997			.inter_detect_bit = 0,
998			.ie_reg    = PCF2131_REG_CTRL5,
999			.ie_bit    = PCF2131_BIT_CTRL5_TSIE1,
1000		},
1001		.ts[1] = {
1002			.reg_base  = PCF2131_REG_TS2_BASE,
1003			.gnd_detect_reg = PCF2131_REG_CTRL4,
1004			.gnd_detect_bit = PCF2131_BIT_CTRL4_TSF2,
1005			.inter_detect_bit = 0,
1006			.ie_reg    = PCF2131_REG_CTRL5,
1007			.ie_bit    = PCF2131_BIT_CTRL5_TSIE2,
1008		},
1009		.ts[2] = {
1010			.reg_base  = PCF2131_REG_TS3_BASE,
1011			.gnd_detect_reg = PCF2131_REG_CTRL4,
1012			.gnd_detect_bit = PCF2131_BIT_CTRL4_TSF3,
1013			.inter_detect_bit = 0,
1014			.ie_reg    = PCF2131_REG_CTRL5,
1015			.ie_bit    = PCF2131_BIT_CTRL5_TSIE3,
1016		},
1017		.ts[3] = {
1018			.reg_base  = PCF2131_REG_TS4_BASE,
1019			.gnd_detect_reg = PCF2131_REG_CTRL4,
1020			.gnd_detect_bit = PCF2131_BIT_CTRL4_TSF4,
1021			.inter_detect_bit = 0,
1022			.ie_reg    = PCF2131_REG_CTRL5,
1023			.ie_bit    = PCF2131_BIT_CTRL5_TSIE4,
1024		},
1025		.attribute_group = {
1026			.attrs	= pcf2131_attrs,
1027		},
1028	},
1029};
1030
1031/*
1032 * Enable timestamp function and corresponding interrupt(s).
1033 */
1034static int pcf2127_enable_ts(struct device *dev, int ts_id)
1035{
1036	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
1037	int ret;
1038
1039	if (ts_id >= pcf2127->cfg->ts_count) {
1040		dev_err(dev, "%s: invalid tamper detection ID (%d)\n",
1041			__func__, ts_id);
1042		return -EINVAL;
1043	}
1044
1045	/* Enable timestamp function. */
1046	ret = regmap_update_bits(pcf2127->regmap,
1047				 pcf2127->cfg->ts[ts_id].reg_base,
1048				 PCF2127_BIT_TS_CTRL_TSOFF |
1049				 PCF2127_BIT_TS_CTRL_TSM,
1050				 PCF2127_BIT_TS_CTRL_TSM);
1051	if (ret) {
1052		dev_err(dev, "%s: tamper detection config (ts%d_ctrl) failed\n",
1053			__func__, ts_id);
1054		return ret;
1055	}
1056
1057	/*
1058	 * Enable interrupt generation when TSF timestamp flag is set.
1059	 * Interrupt signals are open-drain outputs and can be left floating if
1060	 * unused.
1061	 */
1062	ret = regmap_update_bits(pcf2127->regmap, pcf2127->cfg->ts[ts_id].ie_reg,
1063				 pcf2127->cfg->ts[ts_id].ie_bit,
1064				 pcf2127->cfg->ts[ts_id].ie_bit);
1065	if (ret) {
1066		dev_err(dev, "%s: tamper detection TSIE%d config failed\n",
1067			__func__, ts_id);
1068		return ret;
1069	}
1070
1071	return ret;
1072}
1073
1074/* Route all interrupt sources to INT A pin. */
1075static int pcf2127_configure_interrupt_pins(struct device *dev)
1076{
1077	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
1078	int ret;
1079
1080	/* Mask bits need to be cleared to enable corresponding
1081	 * interrupt source.
1082	 */
1083	ret = regmap_write(pcf2127->regmap,
1084			   PCF2131_REG_INT_A_MASK1, 0);
1085	if (ret)
1086		return ret;
1087
1088	ret = regmap_write(pcf2127->regmap,
1089			   PCF2131_REG_INT_A_MASK2, 0);
1090	if (ret)
1091		return ret;
1092
1093	return ret;
1094}
1095
1096static int pcf2127_probe(struct device *dev, struct regmap *regmap,
1097			 int alarm_irq, const struct pcf21xx_config *config)
1098{
1099	struct pcf2127 *pcf2127;
1100	int ret = 0;
1101	unsigned int val;
1102
1103	dev_dbg(dev, "%s\n", __func__);
1104
1105	pcf2127 = devm_kzalloc(dev, sizeof(*pcf2127), GFP_KERNEL);
1106	if (!pcf2127)
1107		return -ENOMEM;
1108
1109	pcf2127->regmap = regmap;
1110	pcf2127->cfg = config;
1111
1112	dev_set_drvdata(dev, pcf2127);
1113
1114	pcf2127->rtc = devm_rtc_allocate_device(dev);
1115	if (IS_ERR(pcf2127->rtc))
1116		return PTR_ERR(pcf2127->rtc);
1117
1118	pcf2127->rtc->ops = &pcf2127_rtc_ops;
1119	pcf2127->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
1120	pcf2127->rtc->range_max = RTC_TIMESTAMP_END_2099;
1121	pcf2127->rtc->set_start_time = true; /* Sets actual start to 1970 */
1122
1123	/*
1124	 * PCF2127/29 do not work correctly when setting alarms at 1s intervals.
1125	 * PCF2131 is ok.
1126	 */
1127	if (pcf2127->cfg->type == PCF2127 || pcf2127->cfg->type == PCF2129) {
1128		set_bit(RTC_FEATURE_ALARM_RES_2S, pcf2127->rtc->features);
1129		clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, pcf2127->rtc->features);
1130	}
1131
1132	clear_bit(RTC_FEATURE_ALARM, pcf2127->rtc->features);
1133
1134	if (alarm_irq > 0) {
1135		unsigned long flags;
1136
1137		/*
1138		 * If flags = 0, devm_request_threaded_irq() will use IRQ flags
1139		 * obtained from device tree.
1140		 */
1141		if (dev_fwnode(dev))
1142			flags = 0;
1143		else
1144			flags = IRQF_TRIGGER_LOW;
1145
1146		ret = devm_request_threaded_irq(dev, alarm_irq, NULL,
1147						pcf2127_rtc_irq,
1148						flags | IRQF_ONESHOT,
1149						dev_name(dev), dev);
1150		if (ret) {
1151			dev_err(dev, "failed to request alarm irq\n");
1152			return ret;
1153		}
1154		pcf2127->irq_enabled = true;
1155	}
1156
1157	if (alarm_irq > 0 || device_property_read_bool(dev, "wakeup-source")) {
1158		device_init_wakeup(dev, true);
1159		set_bit(RTC_FEATURE_ALARM, pcf2127->rtc->features);
1160	}
1161
1162	if (pcf2127->cfg->has_int_a_b) {
1163		/* Configure int A/B pins, independently of alarm_irq. */
1164		ret = pcf2127_configure_interrupt_pins(dev);
1165		if (ret) {
1166			dev_err(dev, "failed to configure interrupt pins\n");
1167			return ret;
1168		}
1169	}
1170
1171	if (pcf2127->cfg->has_nvmem) {
1172		struct nvmem_config nvmem_cfg = {
1173			.priv = pcf2127,
1174			.reg_read = pcf2127_nvmem_read,
1175			.reg_write = pcf2127_nvmem_write,
1176			.size = 512,
1177		};
1178
1179		ret = devm_rtc_nvmem_register(pcf2127->rtc, &nvmem_cfg);
1180	}
1181
1182	/*
1183	 * The "Power-On Reset Override" facility prevents the RTC to do a reset
1184	 * after power on. For normal operation the PORO must be disabled.
1185	 */
1186	ret = regmap_clear_bits(pcf2127->regmap, PCF2127_REG_CTRL1,
1187				PCF2127_BIT_CTRL1_POR_OVRD);
1188	if (ret < 0)
1189		return ret;
1190
1191	ret = regmap_read(pcf2127->regmap, pcf2127->cfg->reg_clkout, &val);
1192	if (ret < 0)
1193		return ret;
1194
1195	if (!(val & PCF2127_BIT_CLKOUT_OTPR)) {
1196		ret = regmap_set_bits(pcf2127->regmap, pcf2127->cfg->reg_clkout,
1197				      PCF2127_BIT_CLKOUT_OTPR);
1198		if (ret < 0)
1199			return ret;
1200
1201		msleep(100);
1202	}
1203
1204	/*
1205	 * Watchdog timer enabled and reset pin /RST activated when timed out.
1206	 * Select 1Hz clock source for watchdog timer (1/4Hz for PCF2131).
1207	 * Note: Countdown timer disabled and not available.
1208	 * For pca2129, pcf2129 and pcf2131, only bit[7] is for Symbol WD_CD
1209	 * of register watchdg_tim_ctl. The bit[6] is labeled
1210	 * as T. Bits labeled as T must always be written with
1211	 * logic 0.
1212	 */
1213	ret = regmap_update_bits(pcf2127->regmap, pcf2127->cfg->reg_wd_ctl,
1214				 PCF2127_BIT_WD_CTL_CD1 |
1215				 PCF2127_BIT_WD_CTL_CD0 |
1216				 PCF2127_BIT_WD_CTL_TF1 |
1217				 PCF2127_BIT_WD_CTL_TF0,
1218				 PCF2127_BIT_WD_CTL_CD1 |
1219				 (pcf2127->cfg->has_bit_wd_ctl_cd0 ? PCF2127_BIT_WD_CTL_CD0 : 0) |
1220				 PCF2127_BIT_WD_CTL_TF1);
1221	if (ret) {
1222		dev_err(dev, "%s: watchdog config (wd_ctl) failed\n", __func__);
1223		return ret;
1224	}
1225
1226	pcf2127_watchdog_init(dev, pcf2127);
1227
1228	/*
1229	 * Disable battery low/switch-over timestamp and interrupts.
1230	 * Clear battery interrupt flags which can block new trigger events.
1231	 * Note: This is the default chip behaviour but added to ensure
1232	 * correct tamper timestamp and interrupt function.
1233	 */
1234	ret = regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL3,
1235				 PCF2127_BIT_CTRL3_BTSE |
1236				 PCF2127_BIT_CTRL3_BIE |
1237				 PCF2127_BIT_CTRL3_BLIE, 0);
1238	if (ret) {
1239		dev_err(dev, "%s: interrupt config (ctrl3) failed\n",
1240			__func__);
1241		return ret;
1242	}
1243
1244	/*
1245	 * Enable timestamp functions 1 to 4.
1246	 */
1247	for (int i = 0; i < pcf2127->cfg->ts_count; i++) {
1248		ret = pcf2127_enable_ts(dev, i);
1249		if (ret)
1250			return ret;
1251	}
1252
1253	ret = rtc_add_group(pcf2127->rtc, &pcf2127->cfg->attribute_group);
1254	if (ret) {
1255		dev_err(dev, "%s: tamper sysfs registering failed\n",
1256			__func__);
1257		return ret;
1258	}
1259
1260	return devm_rtc_register_device(pcf2127->rtc);
1261}
1262
1263#ifdef CONFIG_OF
1264static const struct of_device_id pcf2127_of_match[] = {
1265	{ .compatible = "nxp,pcf2127", .data = &pcf21xx_cfg[PCF2127] },
1266	{ .compatible = "nxp,pcf2129", .data = &pcf21xx_cfg[PCF2129] },
1267	{ .compatible = "nxp,pca2129", .data = &pcf21xx_cfg[PCF2129] },
1268	{ .compatible = "nxp,pcf2131", .data = &pcf21xx_cfg[PCF2131] },
1269	{}
1270};
1271MODULE_DEVICE_TABLE(of, pcf2127_of_match);
1272#endif
1273
1274#if IS_ENABLED(CONFIG_I2C)
1275
1276static int pcf2127_i2c_write(void *context, const void *data, size_t count)
1277{
1278	struct device *dev = context;
1279	struct i2c_client *client = to_i2c_client(dev);
1280	int ret;
1281
1282	ret = i2c_master_send(client, data, count);
1283	if (ret != count)
1284		return ret < 0 ? ret : -EIO;
1285
1286	return 0;
1287}
1288
1289static int pcf2127_i2c_gather_write(void *context,
1290				const void *reg, size_t reg_size,
1291				const void *val, size_t val_size)
1292{
1293	struct device *dev = context;
1294	struct i2c_client *client = to_i2c_client(dev);
1295	int ret;
1296	void *buf;
1297
1298	if (WARN_ON(reg_size != 1))
1299		return -EINVAL;
1300
1301	buf = kmalloc(val_size + 1, GFP_KERNEL);
1302	if (!buf)
1303		return -ENOMEM;
1304
1305	memcpy(buf, reg, 1);
1306	memcpy(buf + 1, val, val_size);
1307
1308	ret = i2c_master_send(client, buf, val_size + 1);
1309
1310	kfree(buf);
1311
1312	if (ret != val_size + 1)
1313		return ret < 0 ? ret : -EIO;
1314
1315	return 0;
1316}
1317
1318static int pcf2127_i2c_read(void *context, const void *reg, size_t reg_size,
1319				void *val, size_t val_size)
1320{
1321	struct device *dev = context;
1322	struct i2c_client *client = to_i2c_client(dev);
1323	int ret;
1324
1325	if (WARN_ON(reg_size != 1))
1326		return -EINVAL;
1327
1328	ret = i2c_master_send(client, reg, 1);
1329	if (ret != 1)
1330		return ret < 0 ? ret : -EIO;
1331
1332	ret = i2c_master_recv(client, val, val_size);
1333	if (ret != val_size)
1334		return ret < 0 ? ret : -EIO;
1335
1336	return 0;
1337}
1338
1339/*
1340 * The reason we need this custom regmap_bus instead of using regmap_init_i2c()
1341 * is that the STOP condition is required between set register address and
1342 * read register data when reading from registers.
1343 */
1344static const struct regmap_bus pcf2127_i2c_regmap = {
1345	.write = pcf2127_i2c_write,
1346	.gather_write = pcf2127_i2c_gather_write,
1347	.read = pcf2127_i2c_read,
1348};
1349
1350static struct i2c_driver pcf2127_i2c_driver;
1351
1352static const struct i2c_device_id pcf2127_i2c_id[] = {
1353	{ "pcf2127", PCF2127 },
1354	{ "pcf2129", PCF2129 },
1355	{ "pca2129", PCF2129 },
1356	{ "pcf2131", PCF2131 },
1357	{ }
1358};
1359MODULE_DEVICE_TABLE(i2c, pcf2127_i2c_id);
1360
1361static int pcf2127_i2c_probe(struct i2c_client *client)
1362{
1363	struct regmap *regmap;
1364	static struct regmap_config config = {
1365		.reg_bits = 8,
1366		.val_bits = 8,
1367	};
1368	const struct pcf21xx_config *variant;
1369
1370	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
1371		return -ENODEV;
1372
1373	if (client->dev.of_node) {
1374		variant = of_device_get_match_data(&client->dev);
1375		if (!variant)
1376			return -ENODEV;
1377	} else {
1378		enum pcf21xx_type type =
1379			i2c_match_id(pcf2127_i2c_id, client)->driver_data;
1380
1381		if (type >= PCF21XX_LAST_ID)
1382			return -ENODEV;
1383		variant = &pcf21xx_cfg[type];
1384	}
1385
1386	config.max_register = variant->max_register,
1387
1388	regmap = devm_regmap_init(&client->dev, &pcf2127_i2c_regmap,
1389					&client->dev, &config);
1390	if (IS_ERR(regmap)) {
1391		dev_err(&client->dev, "%s: regmap allocation failed: %ld\n",
1392			__func__, PTR_ERR(regmap));
1393		return PTR_ERR(regmap);
1394	}
1395
1396	return pcf2127_probe(&client->dev, regmap, client->irq, variant);
1397}
1398
1399static struct i2c_driver pcf2127_i2c_driver = {
1400	.driver		= {
1401		.name	= "rtc-pcf2127-i2c",
1402		.of_match_table = of_match_ptr(pcf2127_of_match),
1403	},
1404	.probe		= pcf2127_i2c_probe,
1405	.id_table	= pcf2127_i2c_id,
1406};
1407
1408static int pcf2127_i2c_register_driver(void)
1409{
1410	return i2c_add_driver(&pcf2127_i2c_driver);
1411}
1412
1413static void pcf2127_i2c_unregister_driver(void)
1414{
1415	i2c_del_driver(&pcf2127_i2c_driver);
1416}
1417
1418#else
1419
1420static int pcf2127_i2c_register_driver(void)
1421{
1422	return 0;
1423}
1424
1425static void pcf2127_i2c_unregister_driver(void)
1426{
1427}
1428
1429#endif
1430
1431#if IS_ENABLED(CONFIG_SPI_MASTER)
1432
1433static struct spi_driver pcf2127_spi_driver;
1434static const struct spi_device_id pcf2127_spi_id[];
1435
1436static int pcf2127_spi_probe(struct spi_device *spi)
1437{
1438	static struct regmap_config config = {
1439		.reg_bits = 8,
1440		.val_bits = 8,
1441		.read_flag_mask = 0xa0,
1442		.write_flag_mask = 0x20,
1443	};
1444	struct regmap *regmap;
1445	const struct pcf21xx_config *variant;
1446
1447	if (spi->dev.of_node) {
1448		variant = of_device_get_match_data(&spi->dev);
1449		if (!variant)
1450			return -ENODEV;
1451	} else {
1452		enum pcf21xx_type type = spi_get_device_id(spi)->driver_data;
1453
1454		if (type >= PCF21XX_LAST_ID)
1455			return -ENODEV;
1456		variant = &pcf21xx_cfg[type];
1457	}
1458
1459	config.max_register = variant->max_register,
1460
1461	regmap = devm_regmap_init_spi(spi, &config);
1462	if (IS_ERR(regmap)) {
1463		dev_err(&spi->dev, "%s: regmap allocation failed: %ld\n",
1464			__func__, PTR_ERR(regmap));
1465		return PTR_ERR(regmap);
1466	}
1467
1468	return pcf2127_probe(&spi->dev, regmap, spi->irq, variant);
1469}
1470
1471static const struct spi_device_id pcf2127_spi_id[] = {
1472	{ "pcf2127", PCF2127 },
1473	{ "pcf2129", PCF2129 },
1474	{ "pca2129", PCF2129 },
1475	{ "pcf2131", PCF2131 },
1476	{ }
1477};
1478MODULE_DEVICE_TABLE(spi, pcf2127_spi_id);
1479
1480static struct spi_driver pcf2127_spi_driver = {
1481	.driver		= {
1482		.name	= "rtc-pcf2127-spi",
1483		.of_match_table = of_match_ptr(pcf2127_of_match),
1484	},
1485	.probe		= pcf2127_spi_probe,
1486	.id_table	= pcf2127_spi_id,
1487};
1488
1489static int pcf2127_spi_register_driver(void)
1490{
1491	return spi_register_driver(&pcf2127_spi_driver);
1492}
1493
1494static void pcf2127_spi_unregister_driver(void)
1495{
1496	spi_unregister_driver(&pcf2127_spi_driver);
1497}
1498
1499#else
1500
1501static int pcf2127_spi_register_driver(void)
1502{
1503	return 0;
1504}
1505
1506static void pcf2127_spi_unregister_driver(void)
1507{
1508}
1509
1510#endif
1511
1512static int __init pcf2127_init(void)
1513{
1514	int ret;
1515
1516	ret = pcf2127_i2c_register_driver();
1517	if (ret) {
1518		pr_err("Failed to register pcf2127 i2c driver: %d\n", ret);
1519		return ret;
1520	}
1521
1522	ret = pcf2127_spi_register_driver();
1523	if (ret) {
1524		pr_err("Failed to register pcf2127 spi driver: %d\n", ret);
1525		pcf2127_i2c_unregister_driver();
1526	}
1527
1528	return ret;
1529}
1530module_init(pcf2127_init)
1531
1532static void __exit pcf2127_exit(void)
1533{
1534	pcf2127_spi_unregister_driver();
1535	pcf2127_i2c_unregister_driver();
1536}
1537module_exit(pcf2127_exit)
1538
1539MODULE_AUTHOR("Renaud Cerrato <r.cerrato@til-technologies.fr>");
1540MODULE_DESCRIPTION("NXP PCF2127/29/31 RTC driver");
1541MODULE_LICENSE("GPL v2");
1542