rtc: add support of mx27 rtc
Subsystems (3)
PATCH 1/1 rtc: add support of mx27 rtc
This driver has been tested on board armadeus apf27.
Signed-off-by Philippe Reynes <[email protected]>
--- arch/arm/include/asm/arch-mx27/imx-regs.h | 3 + arch/arm/include/asm/arch-mx27/regs-rtc.h | 40 ++++++++++++++ drivers/rtc/Makefile | 1 + drivers/rtc/mx27rtc.c | 83 +++++++++++++++++++++++++++++ 4 files changed, 127 insertions(+), 0 deletions(-) create mode 100644 arch/arm/include/asm/arch-mx27/regs-rtc.h create mode 100644 drivers/rtc/mx27rtc.c
arch/arm/include/asm/arch-mx27/imx-regs.h +3 -0
@@ -24,6 +24,8 @@#ifndef _IMX_REGS_H#define _IMX_REGS_H +#include <asm/arch/regs-rtc.h> +#ifndef __ASSEMBLY__extern void imx_gpio_mode (int gpio_mode);
@@ -224,6 +226,7 @@ struct fuse_bank0_regs {#define IMX_TIM1_BASE (0x03000 + IMX_IO_BASE)#define IMX_TIM2_BASE (0x04000 + IMX_IO_BASE)#define IMX_TIM3_BASE (0x05000 + IMX_IO_BASE) +#define IMX_RTC_BASE (0x07000 + IMX_IO_BASE)#define UART1_BASE (0x0a000 + IMX_IO_BASE)#define UART2_BASE (0x0b000 + IMX_IO_BASE)#define UART3_BASE (0x0c000 + IMX_IO_BASE)
arch/arm/include/asm/arch-mx27/regs-rtc.h new file +40 -0
@@ -0,0 +1,40 @@ +/* +* Freescale i.MX27 RTC Register Definitions +* +* Copyright (C) 2012 Philippe Reynes <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +*/ + +#ifndef __MX27_REGS_RTC_H__ +#define __MX27_REGS_RTC_H__ + +#ifndef __ASSEMBLY__ +struct rtc_regs { +u32 hourmin; +u32 seconds; +u32 alrm_hm; +u32 alrm_sec; +u32 rtcctl; +u32 rtcisr; +u32 rtcienr; +u32 stpwch; +u32 dayr; +u32 dayalarm; +}; +#endif /* __ASSEMBLY__*/ + +#endif /* __MX28_REGS_RTC_H__ */
drivers/rtc/Makefile +1 -0
@@ -57,6 +57,7 @@ COBJS-$(CONFIG_RTC_MK48T59) += mk48t59.o COBJS-$(CONFIG_RTC_MPC5200) += mpc5xxx.o COBJS-$(CONFIG_RTC_MPC8xx) += mpc8xx.o COBJS-$(CONFIG_RTC_MV) += mvrtc.o +COBJS-$(CONFIG_RTC_MX27) += mx27rtc.o COBJS-$(CONFIG_RTC_MXS) += mxsrtc.o COBJS-$(CONFIG_RTC_PCF8563) += pcf8563.o COBJS-$(CONFIG_RTC_PL031) += pl031.o
drivers/rtc/mx27rtc.c new file +83 -0
83 lines not on this page · raw message
Signature · 1 line
1.7.4.4
PATCH 1/1 rtc: add support of mx27 rtc
Am 08/08/2012 19:04, schrieb Philippe Reynes:
Quoted 4 lines
This driver has been tested on board armadeus apf27.
Signed-off-by Philippe Reynes <[email protected]>---
Hi Philippe,
Quoted 167 lines
arch/arm/include/asm/arch-mx27/imx-regs.h | 3 + arch/arm/include/asm/arch-mx27/regs-rtc.h | 40 ++++++++++++++ drivers/rtc/Makefile | 1 + drivers/rtc/mx27rtc.c | 83 +++++++++++++++++++++++++++++ 4 files changed, 127 insertions(+), 0 deletions(-) create mode 100644 arch/arm/include/asm/arch-mx27/regs-rtc.h create mode 100644 drivers/rtc/mx27rtc.carch/arm/include/asm/arch-mx27/imx-regs.h +3
-0@@ -24,6 +24,8 @@#ifndef _IMX_REGS_H#define _IMX_REGS_H +#include <asm/arch/regs-rtc.h> +#ifndef __ASSEMBLY__extern void imx_gpio_mode (int gpio_mode);@@ -224,6 +226,7 @@ struct fuse_bank0_regs {#define IMX_TIM1_BASE (0x03000 + IMX_IO_BASE)#define IMX_TIM2_BASE (0x04000 + IMX_IO_BASE)#define IMX_TIM3_BASE (0x05000 + IMX_IO_BASE) +#define IMX_RTC_BASE (0x07000 + IMX_IO_BASE)#define UART1_BASE (0x0a000 + IMX_IO_BASE)#define UART2_BASE (0x0b000 + IMX_IO_BASE)#define UART3_BASE (0x0c000 + IMX_IO_BASE)arch/arm/include/asm/arch-mx27/regs-rtc.h new file +40
-0@@ -0,0 +1,40 @@ +/* +* Freescale i.MX27 RTC Register Definitions +* +* Copyright (C) 2012 Philippe Reynes <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +*/ + +#ifndef __MX27_REGS_RTC_H__ +#define __MX27_REGS_RTC_H__ + +#ifndef __ASSEMBLY__ +struct rtc_regs { +u32 hourmin; +u32 seconds; +u32 alrm_hm; +u32 alrm_sec; +u32 rtcctl; +u32 rtcisr; +u32 rtcienr; +u32 stpwch; +u32 dayr; +u32 dayalarm; +}; +#endif /* __ASSEMBLY__*/ + +#endif /* __MX28_REGS_RTC_H__ */ drivers/rtc/Makefile +1
-0@@ -57,6 +57,7 @@ COBJS-$(CONFIG_RTC_MK48T59) += mk48t59.o COBJS-$(CONFIG_RTC_MPC5200) += mpc5xxx.o COBJS-$(CONFIG_RTC_MPC8xx) += mpc8xx.o COBJS-$(CONFIG_RTC_MV) += mvrtc.o +COBJS-$(CONFIG_RTC_MX27) += mx27rtc.o COBJS-$(CONFIG_RTC_MXS) += mxsrtc.o COBJS-$(CONFIG_RTC_PCF8563) += pcf8563.o COBJS-$(CONFIG_RTC_PL031) += pl031.odrivers/rtc/mx27rtc.c new file +73
-0@@ -0,0 +1,83 @@ +/* +* Freescale i.MX27 RTC Driver +* +* Copyright (C) 2012 Philippe Reynes <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +*/ + +#include <common.h> +#include <rtc.h> +#include <asm/io.h> +#include <asm/arch/imx-regs.h> + +#define HOUR_SHIFT 8 +#define HOUR_MASK 0x1f +#define MIN_SHIFT 0 +#define MIN_MASK 0x3f + +int rtc_get (struct rtc_time *time) +{ +struct rtc_regs *rtc_regs = (struct rtc_regs *)IMX_RTC_BASE ; +uint32_t day, hour, min, sec; + + day =readl (&rtc_regs->dayr); + hour =readl (&rtc_regs->hourmin); + sec =readl (&rtc_regs->seconds); + + min = (hour >>MIN_SHIFT ) &MIN_MASK ; + hour = (hour >>HOUR_SHIFT ) &HOUR_MASK ; + + sec += min *60 + hour *3600 + day *24 *3600 ; + +to_tm (sec, time); + +return 0 ; +} + +int rtc_set (struct rtc_time *time) +{ +struct rtc_regs *rtc_regs = (struct rtc_regs *)IMX_RTC_BASE ; +uint32_t day, hour, min, sec; + + sec =mktime (time->tm_year, time->tm_mon, time->tm_mday, + time->tm_hour, time->tm_min, time->tm_sec); + + day = sec / (24 *3600 ); + sec = sec % (24 *3600 ); + hour = sec /3600 ; + sec = sec %3600 ; + min = sec /60 ; + sec = sec %60 ; + + hour = (hour &HOUR_MASK ) <<HOUR_SHIFT ; + hour |= (min &MIN_MASK ) <<MIN_SHIFT ; + +writel (day, &rtc_regs->dayr); +writel (hour, &rtc_regs->hourmin); +writel (sec, &rtc_regs->seconds); + +return 0 ;
drivers/rtc/mx27rtc.c line 83
Quoted 10 lines
drivers/rtc/mx27rtc.c new file +10
-0+} + +void rtc_reset (void ) +{ +struct rtc_regs *rtc_regs = (struct rtc_regs *)IMX_RTC_BASE ; + +writel (0 , &rtc_regs->dayr); +writel (0 , &rtc_regs->hourmin); +writel (0 , &rtc_regs->seconds); +}
It looks good.
Acked-by Stefano Babic <[email protected]>
Best regards.
Stefano Babic
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de =====================================================================
PATCH 1/1 rtc: add support of mx27 rtc
In reply to Philippe ReynesQuoted 171 lines · Philippe Reynes
This driver has been tested on board armadeus apf27.
Signed-off-by Philippe Reynes <[email protected]>--- arch/arm/include/asm/arch-mx27/imx-regs.h | 3 + arch/arm/include/asm/arch-mx27/regs-rtc.h | 40 ++++++++++++++ drivers/rtc/Makefile | 1 + drivers/rtc/mx27rtc.c | 83 +++++++++++++++++++++++++++++ 4 files changed, 127 insertions(+), 0 deletions(-) create mode 100644 arch/arm/include/asm/arch-mx27/regs-rtc.h create mode 100644 drivers/rtc/mx27rtc.carch/arm/include/asm/arch-mx27/imx-regs.h +3
-0@@ -24,6 +24,8 @@#ifndef _IMX_REGS_H#define _IMX_REGS_H +#include <asm/arch/regs-rtc.h> +#ifndef __ASSEMBLY__extern void imx_gpio_mode (int gpio_mode);@@ -224,6 +226,7 @@ struct fuse_bank0_regs {#define IMX_TIM1_BASE (0x03000 + IMX_IO_BASE)#define IMX_TIM2_BASE (0x04000 + IMX_IO_BASE)#define IMX_TIM3_BASE (0x05000 + IMX_IO_BASE) +#define IMX_RTC_BASE (0x07000 + IMX_IO_BASE)#define UART1_BASE (0x0a000 + IMX_IO_BASE)#define UART2_BASE (0x0b000 + IMX_IO_BASE)#define UART3_BASE (0x0c000 + IMX_IO_BASE)arch/arm/include/asm/arch-mx27/regs-rtc.h new file +40
-0@@ -0,0 +1,40 @@ +/* +* Freescale i.MX27 RTC Register Definitions +* +* Copyright (C) 2012 Philippe Reynes <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +*/ + +#ifndef __MX27_REGS_RTC_H__ +#define __MX27_REGS_RTC_H__ + +#ifndef __ASSEMBLY__ +struct rtc_regs { +u32 hourmin; +u32 seconds; +u32 alrm_hm; +u32 alrm_sec; +u32 rtcctl; +u32 rtcisr; +u32 rtcienr; +u32 stpwch; +u32 dayr; +u32 dayalarm; +}; +#endif /* __ASSEMBLY__*/ + +#endif /* __MX28_REGS_RTC_H__ */ drivers/rtc/Makefile +1
-0@@ -57,6 +57,7 @@ COBJS-$(CONFIG_RTC_MK48T59) += mk48t59.o COBJS-$(CONFIG_RTC_MPC5200) += mpc5xxx.o COBJS-$(CONFIG_RTC_MPC8xx) += mpc8xx.o COBJS-$(CONFIG_RTC_MV) += mvrtc.o +COBJS-$(CONFIG_RTC_MX27) += mx27rtc.o COBJS-$(CONFIG_RTC_MXS) += mxsrtc.o COBJS-$(CONFIG_RTC_PCF8563) += pcf8563.o COBJS-$(CONFIG_RTC_PL031) += pl031.odrivers/rtc/mx27rtc.c new file +73
-0@@ -0,0 +1,83 @@ +/* +* Freescale i.MX27 RTC Driver +* +* Copyright (C) 2012 Philippe Reynes <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +* +*/ + +#include <common.h> +#include <rtc.h> +#include <asm/io.h> +#include <asm/arch/imx-regs.h> + +#define HOUR_SHIFT 8 +#define HOUR_MASK 0x1f +#define MIN_SHIFT 0 +#define MIN_MASK 0x3f + +int rtc_get (struct rtc_time *time) +{ +struct rtc_regs *rtc_regs = (struct rtc_regs *)IMX_RTC_BASE ; +uint32_t day, hour, min, sec; + + day =readl (&rtc_regs->dayr); + hour =readl (&rtc_regs->hourmin); + sec =readl (&rtc_regs->seconds); + + min = (hour >>MIN_SHIFT ) &MIN_MASK ; + hour = (hour >>HOUR_SHIFT ) &HOUR_MASK ; + + sec += min *60 + hour *3600 + day *24 *3600 ; + +to_tm (sec, time); + +return 0 ; +} + +int rtc_set (struct rtc_time *time) +{ +struct rtc_regs *rtc_regs = (struct rtc_regs *)IMX_RTC_BASE ; +uint32_t day, hour, min, sec; + + sec =mktime (time->tm_year, time->tm_mon, time->tm_mday, + time->tm_hour, time->tm_min, time->tm_sec); + + day = sec / (24 *3600 ); + sec = sec % (24 *3600 ); + hour = sec /3600 ; + sec = sec %3600 ; + min = sec /60 ; + sec = sec %60 ; + + hour = (hour &HOUR_MASK ) <<HOUR_SHIFT ; + hour |= (min &MIN_MASK ) <<MIN_SHIFT ; + +writel (day, &rtc_regs->dayr); +writel (hour, &rtc_regs->hourmin); +writel (sec, &rtc_regs->seconds); + +return 0 ;
drivers/rtc/mx27rtc.c line 83
Quoted 10 lines
drivers/rtc/mx27rtc.c new file +10
-0+} + +void rtc_reset (void ) +{ +struct rtc_regs *rtc_regs = (struct rtc_regs *)IMX_RTC_BASE ; + +writel (0 , &rtc_regs->dayr); +writel (0 , &rtc_regs->hourmin); +writel (0 , &rtc_regs->seconds); +}
Applied to u-boot-imx, thanks.
Best regards,
Stefano Babic
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================