[v7 1/8] rtc: pcf8563: Add driver model support
Priyanka Jain
priyanka.jain at nxp.com
Tue Dec 24 06:18:35 CET 2019
>-----Original Message-----
>From: Biwen Li <biwen.li at nxp.com>
>Sent: Tuesday, December 24, 2019 8:01 AM
>To: Jagdish Gediya <jagdish.gediya at nxp.com>; Priyanka Jain
><priyanka.jain at nxp.com>; hs at denx.de; jagan at amarulasolutions.com;
>aford173 at gmail.com; Alison Wang <alison.wang at nxp.com>;
>jh80.chung at samsung.com; Pramod Kumar <pramod.kumar_1 at nxp.com>;
>Rajesh Bhagat <rajesh.bhagat at nxp.com>; Ruchika Gupta
><ruchika.gupta at nxp.com>; olteanv at gmail.com
>Cc: Xiaobo Xie <xiaobo.xie at nxp.com>; Jiafei Pan <jiafei.pan at nxp.com>; u-
>boot at lists.denx.de; Biwen Li <biwen.li at nxp.com>
>Subject: [v7 1/8] rtc: pcf8563: Add driver model support
>
>Add support of driver model of pcf8563
>
>Signed-off-by: Biwen Li <biwen.li at nxp.com>
>---
>Changes in v7:
> - remove copyright
>
>Changes in v6:
> - none
>
>Changes in v5:
> - none
>
>Changes in v4:
> - update commit messages
> - update copyright
>
>Changes in v3:
> - update commit messages
>
>Changes in v2:
> - none
>
> drivers/rtc/pcf8563.c | 107 ++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 107 insertions(+)
>
>diff --git a/drivers/rtc/pcf8563.c b/drivers/rtc/pcf8563.c index
>a839d6cc98..44204e133e 100644
>--- a/drivers/rtc/pcf8563.c
>+++ b/drivers/rtc/pcf8563.c
>@@ -12,9 +12,11 @@
>
> #include <common.h>
> #include <command.h>
>+#include <dm.h>
> #include <rtc.h>
> #include <i2c.h>
>
>+#if !CONFIG_IS_ENABLED(DM_RTC)
> static uchar rtc_read (uchar reg);
> static void rtc_write (uchar reg, uchar val);
>
>@@ -115,3 +117,108 @@ static void rtc_write (uchar reg, uchar val) {
> i2c_reg_write (CONFIG_SYS_I2C_RTC_ADDR, reg, val); }
>+#else
>+static int pcf8563_rtc_get(struct udevice *dev, struct rtc_time *tmp) {
>+ int rel = 0;
>+ uchar sec, min, hour, mday, wday, mon_cent, year;
>+
>+ sec = dm_i2c_reg_read(dev, 0x02);
>+ min = dm_i2c_reg_read(dev, 0x03);
>+ hour = dm_i2c_reg_read(dev, 0x04);
>+ mday = dm_i2c_reg_read(dev, 0x05);
>+ wday = dm_i2c_reg_read(dev, 0x06);
>+ mon_cent = dm_i2c_reg_read(dev, 0x07);
>+ year = dm_i2c_reg_read(dev, 0x08);
>+
>+ debug ("Get RTC year: %02x mon/cent: %02x mday: %02x wday: %02x
>"
>+ "hr: %02x min: %02x sec: %02x\n",
>+ year, mon_cent, mday, wday,
>+ hour, min, sec);
>+ debug ("Alarms: wday: %02x day: %02x hour: %02x min: %02x\n",
>+ dm_i2c_reg_read(dev, 0x0C),
>+ dm_i2c_reg_read(dev, 0x0B),
>+ dm_i2c_reg_read(dev, 0x0A),
>+ dm_i2c_reg_read(dev, 0x09));
>+
>+ if (sec & 0x80) {
>+ puts ("### Warning: RTC Low Voltage - date/time not
>reliable\n");
>+ 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) ? 1900 : 2000);
>+ tmp->tm_wday = bcd2bin (wday & 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 pcf8563_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);
>+
>+ dm_i2c_reg_write(dev, 0x08, bin2bcd(tmp->tm_year % 100));
>+
>+ century = (tmp->tm_year >= 2000) ? 0 : 0x80;
>+ dm_i2c_reg_write(dev, 0x07, bin2bcd(tmp->tm_mon) | century);
>+
>+ dm_i2c_reg_write(dev, 0x06, bin2bcd(tmp->tm_wday));
>+ dm_i2c_reg_write(dev, 0x05, bin2bcd(tmp->tm_mday));
>+ dm_i2c_reg_write(dev, 0x04, bin2bcd(tmp->tm_hour));
>+ dm_i2c_reg_write(dev, 0x03, bin2bcd(tmp->tm_min));
>+ dm_i2c_reg_write(dev, 0x02, bin2bcd(tmp->tm_sec));
>+
>+ return 0;
>+}
>+
>+static int pcf8563_rtc_reset(struct udevice *dev) {
>+ /* clear all control & status registers */
>+ dm_i2c_reg_write(dev, 0x00, 0x00);
>+ dm_i2c_reg_write(dev, 0x01, 0x00);
>+ dm_i2c_reg_write(dev, 0x0D, 0x00);
>+
>+ /* clear Voltage Low bit */
>+ dm_i2c_reg_write(dev, 0x02, dm_i2c_reg_read (dev, 0x02) & 0x7F);
>+
>+ /* reset all alarms */
>+ dm_i2c_reg_write(dev, 0x09, 0x00);
>+ dm_i2c_reg_write(dev, 0x0A, 0x00);
>+ dm_i2c_reg_write(dev, 0x0B, 0x00);
>+ dm_i2c_reg_write(dev, 0x0C, 0x00);
>+
>+ return 0;
>+}
>+
>+static const struct rtc_ops pcf8563_rtc_ops = {
>+ .get = pcf8563_rtc_get,
>+ .set = pcf8563_rtc_set,
>+ .reset = pcf8563_rtc_reset,
>+};
>+
>+static const struct udevice_id pcf8563_rtc_ids[] = {
>+ { .compatible = "nxp,pcf8563" },
>+ { }
>+};
>+
>+U_BOOT_DRIVER(rtc_pcf8563) = {
>+ .name = "rtc-pcf8563",
>+ .id = UCLASS_RTC,
>+ .of_match = pcf8563_rtc_ids,
>+ .ops = &pcf8563_rtc_ops,
>+};
>+#endif
>--
>2.17.1
Biwen,
Adding/updating copyright depends on the contribution that you are making to particular file.
NXP policy is in-lined with open-source policy which also suggest to add/update copyright
when you are making significant changes.
In review, Fabio has raised concern over copyright addition in case of one line addition.
But he has not suggested to remove all copyright changes.
Thanks
Priyanka
More information about the U-Boot
mailing list