[U-Boot] [PATCH 1/3] rtc: add driver for internal RTC on kirkwood SoC

2011-05-12 Thread Chris Packham
From: Luuk Paulussen luuk.paulus...@alliedtelesis.co.nz

Signed-off-by: Luuk Paulussen luuk.paulus...@alliedtelesis.co.nz
Acked-by: Chris Packham chris.pack...@alliedtelesis.co.nz
Cc: Prafulla Wadaskar prafu...@marvell.com
---
 arch/arm/include/asm/arch-kirkwood/kirkwood.h |2 +
 drivers/rtc/Makefile  |1 +
 drivers/rtc/kirkwood.c|   76 +
 3 files changed, 79 insertions(+), 0 deletions(-)
 create mode 100644 drivers/rtc/kirkwood.c

diff --git a/arch/arm/include/asm/arch-kirkwood/kirkwood.h 
b/arch/arm/include/asm/arch-kirkwood/kirkwood.h
index 0104418..15922eb 100644
--- a/arch/arm/include/asm/arch-kirkwood/kirkwood.h
+++ b/arch/arm/include/asm/arch-kirkwood/kirkwood.h
@@ -50,6 +50,8 @@
 #define KW_MPP_BASE(KW_REGISTER(0x1))
 #define KW_GPIO0_BASE  (KW_REGISTER(0x10100))
 #define KW_GPIO1_BASE  (KW_REGISTER(0x10140))
+#define KW_RTC_TIME(KW_REGISTER(0x10300))
+#define KW_RTC_DATE(KW_REGISTER(0x10304))
 #define KW_NANDF_BASE  (KW_REGISTER(0x10418))
 #define KW_SPI_BASE(KW_REGISTER(0x10600))
 #define KW_CPU_WIN_BASE(KW_REGISTER(0x2))
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
index e4be4a4..ec064d9 100644
--- a/drivers/rtc/Makefile
+++ b/drivers/rtc/Makefile
@@ -43,6 +43,7 @@ COBJS-$(CONFIG_RTC_DS174x) += ds174x.o
 COBJS-$(CONFIG_RTC_DS3231) += ds3231.o
 COBJS-$(CONFIG_RTC_FTRTC010) += ftrtc010.o
 COBJS-$(CONFIG_RTC_ISL1208) += isl1208.o
+COBJS-$(CONFIG_RTC_KIRKWOOD) += kirkwood.o
 COBJS-$(CONFIG_RTC_M41T11) += m41t11.o
 COBJS-$(CONFIG_RTC_M41T60) += m41t60.o
 COBJS-$(CONFIG_RTC_M41T62) += m41t62.o
diff --git a/drivers/rtc/kirkwood.c b/drivers/rtc/kirkwood.c
new file mode 100644
index 000..5c9bc81
--- /dev/null
+++ b/drivers/rtc/kirkwood.c
@@ -0,0 +1,76 @@
+/*
+ * Driver for the RTC in Marvell SoCs.
+ *
+ * Based on Linux Kernel driver.
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed as is without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include common.h
+#include command.h
+#include rtc.h
+#include bcd.h
+#include asm/arch/kirkwood.h
+
+#if defined(CONFIG_CMD_DATE)
+
+#define RTC_TIME_REG_OFFS  0
+#define RTC_SECONDS_OFFS   0
+#define RTC_MINUTES_OFFS   8
+#define RTC_HOURS_OFFS 16
+#define RTC_WDAY_OFFS  24
+#define RTC_HOURS_12H_MODE (1  22) /* 12 hours mode */
+
+#define RTC_DATE_REG_OFFS  4
+#define RTC_MDAY_OFFS  0
+#define RTC_MONTH_OFFS 8
+#define RTC_YEAR_OFFS  16
+#define KIRKWOOD_YEAR_BASE 2000
+
+int rtc_set(struct rtc_time *tmp)
+{
+   ulong   rtc_reg;
+
+   GregorianDay (tmp);
+
+   rtc_reg = (bin2bcd(tmp-tm_sec)  RTC_SECONDS_OFFS) |
+   (bin2bcd(tmp-tm_min)  RTC_MINUTES_OFFS) |
+   (bin2bcd(tmp-tm_hour)  RTC_HOURS_OFFS) |
+   (bin2bcd(tmp-tm_wday)  RTC_WDAY_OFFS);
+   writel(rtc_reg, KW_RTC_TIME);
+
+   rtc_reg = (bin2bcd(tmp-tm_mday)  RTC_MDAY_OFFS) |
+   (bin2bcd(tmp-tm_mon + 1)  RTC_MONTH_OFFS) |
+   (bin2bcd(tmp-tm_year - KIRKWOOD_YEAR_BASE)  
RTC_YEAR_OFFS);
+   writel(rtc_reg, KW_RTC_DATE);
+
+   return 0;
+}
+
+int rtc_get(struct rtc_time *tmp)
+{
+   ulong   rtc_time, rtc_date;
+
+   rtc_time = readl(KW_RTC_TIME);
+   rtc_date = readl(KW_RTC_DATE);
+
+   tmp-tm_sec = bcd2bin(rtc_time  0x7f);
+   tmp-tm_min = bcd2bin((rtc_time  RTC_MINUTES_OFFS)  0x7f);
+   tmp-tm_hour = bcd2bin((rtc_time  RTC_HOURS_OFFS)  0x3f); /* assume 
24 hours mode */
+   tmp-tm_mday = bcd2bin(rtc_date  0x3f);
+   tmp-tm_wday = bcd2bin((rtc_time  RTC_WDAY_OFFS)  0x7);
+   tmp-tm_mon = bcd2bin((rtc_date  RTC_MONTH_OFFS)  0x3f) - 1;
+   /* hw counts from year 2000, but tm_year is relative to 0 */
+   tmp-tm_year = bcd2bin((rtc_date  RTC_YEAR_OFFS)  0xff) + 
KIRKWOOD_YEAR_BASE;
+
+   return 0;
+}
+
+void rtc_reset(void)
+{
+   return;
+}
+
+#endif /* CONFIG_CMD_DATE */
-- 
1.7.4.1

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH 1/3] rtc: add driver for internal RTC on kirkwood SoC

2011-05-12 Thread Chris Packham
From: Luuk Paulussen luuk.paulus...@alliedtelesis.co.nz

Signed-off-by: Luuk Paulussen luuk.paulus...@alliedtelesis.co.nz
Acked-by: Chris Packham chris.pack...@alliedtelesis.co.nz
Cc: Prafulla Wadaskar prafu...@marvell.com
---
 arch/arm/include/asm/arch-kirkwood/kirkwood.h |2 +
 drivers/rtc/Makefile  |1 +
 drivers/rtc/kirkwood.c|   76 +
 3 files changed, 79 insertions(+), 0 deletions(-)
 create mode 100644 drivers/rtc/kirkwood.c

diff --git a/arch/arm/include/asm/arch-kirkwood/kirkwood.h 
b/arch/arm/include/asm/arch-kirkwood/kirkwood.h
index 0104418..15922eb 100644
--- a/arch/arm/include/asm/arch-kirkwood/kirkwood.h
+++ b/arch/arm/include/asm/arch-kirkwood/kirkwood.h
@@ -50,6 +50,8 @@
 #define KW_MPP_BASE(KW_REGISTER(0x1))
 #define KW_GPIO0_BASE  (KW_REGISTER(0x10100))
 #define KW_GPIO1_BASE  (KW_REGISTER(0x10140))
+#define KW_RTC_TIME(KW_REGISTER(0x10300))
+#define KW_RTC_DATE(KW_REGISTER(0x10304))
 #define KW_NANDF_BASE  (KW_REGISTER(0x10418))
 #define KW_SPI_BASE(KW_REGISTER(0x10600))
 #define KW_CPU_WIN_BASE(KW_REGISTER(0x2))
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
index e4be4a4..ec064d9 100644
--- a/drivers/rtc/Makefile
+++ b/drivers/rtc/Makefile
@@ -43,6 +43,7 @@ COBJS-$(CONFIG_RTC_DS174x) += ds174x.o
 COBJS-$(CONFIG_RTC_DS3231) += ds3231.o
 COBJS-$(CONFIG_RTC_FTRTC010) += ftrtc010.o
 COBJS-$(CONFIG_RTC_ISL1208) += isl1208.o
+COBJS-$(CONFIG_RTC_KIRKWOOD) += kirkwood.o
 COBJS-$(CONFIG_RTC_M41T11) += m41t11.o
 COBJS-$(CONFIG_RTC_M41T60) += m41t60.o
 COBJS-$(CONFIG_RTC_M41T62) += m41t62.o
diff --git a/drivers/rtc/kirkwood.c b/drivers/rtc/kirkwood.c
new file mode 100644
index 000..5c9bc81
--- /dev/null
+++ b/drivers/rtc/kirkwood.c
@@ -0,0 +1,76 @@
+/*
+ * Driver for the RTC in Marvell SoCs.
+ *
+ * Based on Linux Kernel driver.
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed as is without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include common.h
+#include command.h
+#include rtc.h
+#include bcd.h
+#include asm/arch/kirkwood.h
+
+#if defined(CONFIG_CMD_DATE)
+
+#define RTC_TIME_REG_OFFS  0
+#define RTC_SECONDS_OFFS   0
+#define RTC_MINUTES_OFFS   8
+#define RTC_HOURS_OFFS 16
+#define RTC_WDAY_OFFS  24
+#define RTC_HOURS_12H_MODE (1  22) /* 12 hours mode */
+
+#define RTC_DATE_REG_OFFS  4
+#define RTC_MDAY_OFFS  0
+#define RTC_MONTH_OFFS 8
+#define RTC_YEAR_OFFS  16
+#define KIRKWOOD_YEAR_BASE 2000
+
+int rtc_set(struct rtc_time *tmp)
+{
+   ulong   rtc_reg;
+
+   GregorianDay (tmp);
+
+   rtc_reg = (bin2bcd(tmp-tm_sec)  RTC_SECONDS_OFFS) |
+   (bin2bcd(tmp-tm_min)  RTC_MINUTES_OFFS) |
+   (bin2bcd(tmp-tm_hour)  RTC_HOURS_OFFS) |
+   (bin2bcd(tmp-tm_wday)  RTC_WDAY_OFFS);
+   writel(rtc_reg, KW_RTC_TIME);
+
+   rtc_reg = (bin2bcd(tmp-tm_mday)  RTC_MDAY_OFFS) |
+   (bin2bcd(tmp-tm_mon + 1)  RTC_MONTH_OFFS) |
+   (bin2bcd(tmp-tm_year - KIRKWOOD_YEAR_BASE)  
RTC_YEAR_OFFS);
+   writel(rtc_reg, KW_RTC_DATE);
+
+   return 0;
+}
+
+int rtc_get(struct rtc_time *tmp)
+{
+   ulong   rtc_time, rtc_date;
+
+   rtc_time = readl(KW_RTC_TIME);
+   rtc_date = readl(KW_RTC_DATE);
+
+   tmp-tm_sec = bcd2bin(rtc_time  0x7f);
+   tmp-tm_min = bcd2bin((rtc_time  RTC_MINUTES_OFFS)  0x7f);
+   tmp-tm_hour = bcd2bin((rtc_time  RTC_HOURS_OFFS)  0x3f); /* assume 
24 hours mode */
+   tmp-tm_mday = bcd2bin(rtc_date  0x3f);
+   tmp-tm_wday = bcd2bin((rtc_time  RTC_WDAY_OFFS)  0x7);
+   tmp-tm_mon = bcd2bin((rtc_date  RTC_MONTH_OFFS)  0x3f) - 1;
+   /* hw counts from year 2000, but tm_year is relative to 0 */
+   tmp-tm_year = bcd2bin((rtc_date  RTC_YEAR_OFFS)  0xff) + 
KIRKWOOD_YEAR_BASE;
+
+   return 0;
+}
+
+void rtc_reset(void)
+{
+   return;
+}
+
+#endif /* CONFIG_CMD_DATE */
-- 
1.7.4.1

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 1/3] rtc: add driver for internal RTC on kirkwood SoC

2011-05-12 Thread Chris Packham
On Fri, May 13, 2011 at 1:29 PM, Chris Packham judge.pack...@gmail.com wrote:
 From: Luuk Paulussen luuk.paulus...@alliedtelesis.co.nz

 Signed-off-by: Luuk Paulussen luuk.paulus...@alliedtelesis.co.nz
 Acked-by: Chris Packham chris.pack...@alliedtelesis.co.nz
 Cc: Prafulla Wadaskar prafu...@marvell.com

Sorry for the spam. I was just trying (and failing) to get git to add the Cc.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot