All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 01/27] rtc: ds1337: Add driver model support
@ 2020-04-12  8:54 Biwen Li
  2020-04-12  8:54 ` [PATCH 02/27] rtc: pt7c4338: " Biwen Li
                   ` (26 more replies)
  0 siblings, 27 replies; 45+ messages in thread
From: Biwen Li @ 2020-04-12  8:54 UTC (permalink / raw)
  To: u-boot

From: Biwen Li <biwen.li@nxp.com>

Add support of driver model of ds1337

Signed-off-by: Biwen Li <biwen.li@nxp.com>
---
 drivers/rtc/ds1337.c | 127 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 127 insertions(+)

diff --git a/drivers/rtc/ds1337.c b/drivers/rtc/ds1337.c
index 9b31048e97..e12d368675 100644
--- a/drivers/rtc/ds1337.c
+++ b/drivers/rtc/ds1337.c
@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
  * (C) Copyright 2001-2008
+ * Copyright 2020 NXP
  * Wolfgang Denk, DENX Software Engineering, wd at denx.de.
  * Keith Outwater, keith_outwater at mvis.com`
  */
@@ -12,6 +13,7 @@
 
 #include <common.h>
 #include <command.h>
+#include <dm.h>
 #include <rtc.h>
 #include <i2c.h>
 
@@ -60,6 +62,7 @@
 #define RTC_STAT_BIT_OSF	0x80	/* Oscillator stop flag		*/
 
 
+#if !CONFIG_IS_ENABLED(DM_RTC)
 static uchar rtc_read (uchar reg);
 static void rtc_write (uchar reg, uchar val);
 
@@ -188,3 +191,127 @@ static void rtc_write (uchar reg, uchar val)
 {
 	i2c_reg_write (CONFIG_SYS_I2C_RTC_ADDR, reg, val);
 }
+#else
+static uchar rtc_read (struct udevice *dev, uchar reg)
+{
+	return (dm_i2c_reg_read (dev, reg));
+}
+
+static void rtc_write (struct udevice *dev, uchar reg, uchar val)
+{
+	dm_i2c_reg_write (dev, reg, val);
+}
+
+static int ds1337_rtc_get (struct udevice *dev, struct rtc_time *tmp)
+{
+	int rel = 0;
+	uchar sec, min, hour, mday, wday, mon_cent, year, control, status;
+
+	control = rtc_read (dev, RTC_CTL_REG_ADDR);
+	status = rtc_read (dev, RTC_STAT_REG_ADDR);
+	sec = rtc_read (dev, RTC_SEC_REG_ADDR);
+	min = rtc_read (dev, RTC_MIN_REG_ADDR);
+	hour = rtc_read (dev, RTC_HR_REG_ADDR);
+	wday = rtc_read (dev, RTC_DAY_REG_ADDR);
+	mday = rtc_read (dev, RTC_DATE_REG_ADDR);
+	mon_cent = rtc_read (dev, RTC_MON_REG_ADDR);
+	year = rtc_read (dev, RTC_YR_REG_ADDR);
+
+	/* No century bit, assume year 2000 */
+#ifdef CONFIG_RTC_DS1388
+	mon_cent |= 0x80;
+#endif
+
+	debug("Get RTC year: %02x mon/cent: %02x mday: %02x wday: %02x "
+		"hr: %02x min: %02x sec: %02x control: %02x status: %02x\n",
+		year, mon_cent, mday, wday, hour, min, sec, control, status);
+
+	if (status & RTC_STAT_BIT_OSF) {
+		printf ("### Warning: RTC oscillator has stopped\n");
+		/* clear the OSF flag */
+		rtc_write (dev, RTC_STAT_REG_ADDR,
+			   rtc_read (dev, RTC_STAT_REG_ADDR) & ~RTC_STAT_BIT_OSF);
+		rel = -1;
+	}
+
+	tmp->tm_sec  = bcd2bin (sec & 0x7F);
+	tmp->tm_min  = bcd2bin (min & 0x7F);
+	tmp->tm_hour = bcd2bin (hour & 0x3F);
+	tmp->tm_mday = bcd2bin (mday & 0x3F);
+	tmp->tm_mon  = bcd2bin (mon_cent & 0x1F);
+	tmp->tm_year = bcd2bin (year) + ((mon_cent & 0x80) ? 2000 : 1900);
+	tmp->tm_wday = bcd2bin ((wday - 1) & 0x07);
+	tmp->tm_yday = 0;
+	tmp->tm_isdst= 0;
+
+	debug("Get DATE: %4d-%02d-%02d (wday=%d)  TIME: %2d:%02d:%02d\n",
+		tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday,
+		tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
+
+	return rel;
+}
+
+static int ds1337_rtc_set (struct udevice *dev, const struct rtc_time *tmp)
+{
+	uchar century;
+
+	debug("Set DATE: %4d-%02d-%02d (wday=%d)  TIME: %2d:%02d:%02d\n",
+		tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday,
+		tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
+
+	rtc_write (dev, RTC_YR_REG_ADDR, bin2bcd (tmp->tm_year % 100));
+
+	century = (tmp->tm_year >= 2000) ? 0x80 : 0;
+	rtc_write (dev, RTC_MON_REG_ADDR, bin2bcd (tmp->tm_mon) | century);
+
+	rtc_write (dev, RTC_DAY_REG_ADDR, bin2bcd (tmp->tm_wday + 1));
+	rtc_write (dev, RTC_DATE_REG_ADDR, bin2bcd (tmp->tm_mday));
+	rtc_write (dev, RTC_HR_REG_ADDR, bin2bcd (tmp->tm_hour));
+	rtc_write (dev, RTC_MIN_REG_ADDR, bin2bcd (tmp->tm_min));
+	rtc_write (dev, RTC_SEC_REG_ADDR, bin2bcd (tmp->tm_sec));
+
+	return 0;
+}
+
+#ifdef CONFIG_RTC_DS1337_NOOSC
+ #define RTC_DS1337_RESET_VAL \
+	(RTC_CTL_BIT_INTCN | RTC_CTL_BIT_RS1 | RTC_CTL_BIT_RS2)
+#else
+ #define RTC_DS1337_RESET_VAL (RTC_CTL_BIT_RS1 | RTC_CTL_BIT_RS2)
+#endif
+static int ds1337_rtc_reset (struct udevice *dev)
+{
+#ifdef CONFIG_RTC_DS1337
+	rtc_write (dev, RTC_CTL_REG_ADDR, RTC_DS1337_RESET_VAL);
+#elif defined CONFIG_RTC_DS1388
+	rtc_write(dev, RTC_CTL_REG_ADDR, 0x0); /* hw default */
+#endif
+#ifdef CONFIG_RTC_DS1339_TCR_VAL
+	rtc_write (dev, RTC_TC_REG_ADDR, CONFIG_RTC_DS1339_TCR_VAL);
+#endif
+#ifdef CONFIG_RTC_DS1388_TCR_VAL
+	rtc_write(dev, RTC_TC_REG_ADDR, CONFIG_RTC_DS1388_TCR_VAL);
+#endif
+	return 0;
+}
+
+static const struct rtc_ops ds1337_rtc_ops = {
+	.get = ds1337_rtc_get,
+	.set = ds1337_rtc_set,
+	.reset = ds1337_rtc_reset,
+};
+
+static const struct udevice_id ds1337_rtc_ids[] = {
+	{ .compatible = "ds1337" },
+	{ .compatible = "ds1338" },
+	{ .compatible = "ds1338" },
+	{ }
+};
+
+U_BOOT_DRIVER(rtc_ds1337) = {
+	.name   = "rtc-ds1337",
+	.id     = UCLASS_RTC,
+	.of_match = ds1337_rtc_ids,
+	.ops    = &ds1337_rtc_ops,
+};
+#endif
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 45+ messages in thread

end of thread, other threads:[~2020-04-17  5:57 UTC | newest]

Thread overview: 45+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-12  8:54 [PATCH 01/27] rtc: ds1337: Add driver model support Biwen Li
2020-04-12  8:54 ` [PATCH 02/27] rtc: pt7c4338: " Biwen Li
2020-04-16  7:41   ` Priyanka Jain
2020-04-12  8:54 ` [PATCH 03/27] powerpc: create dts component of i2c to build up an SoC Biwen Li
2020-04-12  8:54 ` [PATCH 04/27] dm: powerpc: P5040DS: add i2c DM support Biwen Li
2020-04-16  8:08   ` Priyanka Jain
2020-04-16  8:19     ` Biwen Li
2020-04-12  8:54 ` [PATCH 05/27] configs: P5040DS: enable DM_I2C Biwen Li
2020-04-16  8:12   ` Priyanka Jain
2020-04-16  8:25     ` Biwen Li
2020-04-12  8:54 ` [PATCH 06/27] dm: powerpc: P1020: add i2c DM support Biwen Li
2020-04-16  8:30   ` Priyanka Jain
2020-04-16  8:44   ` Priyanka Jain
2020-04-16  8:52     ` Biwen Li
2020-04-12  8:54 ` [PATCH 07/27] configs: P1020RDB: enable DM_I2C and DM_RTC Biwen Li
2020-04-16  8:34   ` Priyanka Jain
2020-04-16  8:41     ` Biwen Li
2020-04-12  8:54 ` [PATCH 08/27] dm: powerpc: P2020RDB: add i2c DM support Biwen Li
2020-04-16  9:06   ` Priyanka Jain
2020-04-12  8:54 ` [PATCH 09/27] configs: P2020RDB: enable DM_I2C and DM_RTC Biwen Li
2020-04-12  8:54 ` [PATCH 10/27] dm: powerpc: P2041RDB: add i2c DM support Biwen Li
2020-04-12  8:54 ` [PATCH 11/27] config: P2041RDB: enable DM_I2C Biwen Li
2020-04-16  9:09   ` Priyanka Jain
2020-04-16  9:20     ` Biwen Li
2020-04-12  8:54 ` [PATCH 12/27] powerpc: dts: P3041: add i2c node Biwen Li
2020-04-12  8:54 ` [PATCH 13/27] configs: P3041DS: enable DM_I2C Biwen Li
2020-04-12  8:54 ` [PATCH 14/27] powerpc: dts: P4080: add i2c node Biwen Li
2020-04-12  8:54 ` [PATCH 15/27] configs: P4080DS: enable DM_I2C Biwen Li
2020-04-12  8:54 ` [PATCH 16/27] dm: powerpc: T1023/T1024: add i2c DM support Biwen Li
2020-04-16  9:24   ` Priyanka Jain
2020-04-12  8:54 ` [PATCH 17/27] configs: T1024RDB: enable DM_I2C and DM_RTC Biwen Li
2020-04-12  8:54 ` [PATCH 18/27] dm: ppc: p1010: add i2c DM support Biwen Li
2020-04-12  8:54 ` [PATCH 19/27] configs: P1010: Enable DM_I2C and DM_RTC Biwen Li
2020-04-12  8:54 ` [PATCH 20/27] dm: ppc: MPC8548CDS: add i2c DM support Biwen Li
2020-04-16  9:19   ` Priyanka Jain
2020-04-16  9:21     ` Biwen Li
2020-04-17  5:57     ` Biwen Li
2020-04-12  8:54 ` [PATCH 21/27] configs: MPC8548CDS: enable DM_I2C Biwen Li
2020-04-12  8:54 ` [PATCH 22/27] dm: ppc: T4240: add i2c DM support Biwen Li
2020-04-12  8:54 ` [PATCH 23/27] configs: T4240RDB: enable DM_I2C Biwen Li
2020-04-12  8:54 ` [PATCH 24/27] dm: powerpc: T2080/T2081: add i2c DM support Biwen Li
2020-04-12  8:54 ` [PATCH 25/27] configs: T2080: enable DM_I2C Biwen Li
2020-04-12  8:54 ` [PATCH 26/27] dm: powerpc: T1040/T1042: add i2c DM support Biwen Li
2020-04-12  8:54 ` [PATCH 27/27] configs: T1042D4RDB: enable DM_I2C and DM_RTC Biwen Li
2020-04-16  7:26 ` [PATCH 01/27] rtc: ds1337: Add driver model support Priyanka Jain

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.