
-----Original Message----- From: Biwen Li biwen.li@nxp.com Sent: Tuesday, December 24, 2019 8:01 AM To: Jagdish Gediya jagdish.gediya@nxp.com; Priyanka Jain priyanka.jain@nxp.com; hs@denx.de; jagan@amarulasolutions.com; aford173@gmail.com; Alison Wang alison.wang@nxp.com; jh80.chung@samsung.com; Pramod Kumar pramod.kumar_1@nxp.com; Rajesh Bhagat rajesh.bhagat@nxp.com; Ruchika Gupta ruchika.gupta@nxp.com; olteanv@gmail.com Cc: Xiaobo Xie xiaobo.xie@nxp.com; Jiafei Pan jiafei.pan@nxp.com; u- boot@lists.denx.de; Biwen Li biwen.li@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@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