summaryrefslogtreecommitdiff
path: root/target/linux/coldfire/patches/046-Convert-rtc-drivers-to-use-the-alarm_irq_enable-meth.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/coldfire/patches/046-Convert-rtc-drivers-to-use-the-alarm_irq_enable-meth.patch')
-rw-r--r--target/linux/coldfire/patches/046-Convert-rtc-drivers-to-use-the-alarm_irq_enable-meth.patch109
1 files changed, 109 insertions, 0 deletions
diff --git a/target/linux/coldfire/patches/046-Convert-rtc-drivers-to-use-the-alarm_irq_enable-meth.patch b/target/linux/coldfire/patches/046-Convert-rtc-drivers-to-use-the-alarm_irq_enable-meth.patch
new file mode 100644
index 0000000..e1c346c
--- /dev/null
+++ b/target/linux/coldfire/patches/046-Convert-rtc-drivers-to-use-the-alarm_irq_enable-meth.patch
@@ -0,0 +1,109 @@
+From ab2284cd4730b9ea29937ee3a0ef1bcdc6b3159d Mon Sep 17 00:00:00 2001
+From: Alison Wang <b18965@freescale.com>
+Date: Thu, 4 Aug 2011 09:59:54 +0800
+Subject: [PATCH 46/52] Convert rtc drivers to use the alarm_irq_enable method
+
+Old rtc drivers use the ioctl method instead of the alarm_irq_enable
+method for enabling alarm interupts. With the new virtualized RTC
+rework, its important for drivers to use the alarm_irq_enable instead.
+
+This patch converts the drivers that use the AIE ioctl method to
+use the alarm_irq_enable method.
+
+Signed-off-by: Alison Wang <b18965@freescale.com>
+---
+ drivers/rtc/rtc-m5441x.c | 22 +++++++++++-----------
+ drivers/rtc/rtc-mcf.c | 23 +++++++++++------------
+ 2 files changed, 22 insertions(+), 23 deletions(-)
+
+--- a/drivers/rtc/rtc-m5441x.c
++++ b/drivers/rtc/rtc-m5441x.c
+@@ -400,17 +400,6 @@ static int mcf_rtc_ioctl(struct device *
+ writew((readw(MCF_RTC_IER) | PIE_BIT_DEF[i][1]), MCF_RTC_IER);
+ spin_unlock_irq(&rtc_lock);
+ return 0;
+- case RTC_AIE_OFF:
+- spin_lock_irq(&rtc_lock);
+- writew((readw(MCF_RTC_IER) & ~MCF_RTC_ISR_ALM), MCF_RTC_IER);
+- spin_unlock_irq(&rtc_lock);
+- return 0;
+-
+- case RTC_AIE_ON:
+- spin_lock_irq(&rtc_lock);
+- writew((readw(MCF_RTC_IER) | MCF_RTC_ISR_ALM), MCF_RTC_IER);
+- spin_unlock_irq(&rtc_lock);
+- return 0;
+
+ case RTC_UIE_OFF: /* UIE is for the 1Hz interrupt */
+ spin_lock_irq(&rtc_lock);
+@@ -427,6 +416,16 @@ static int mcf_rtc_ioctl(struct device *
+ return -ENOIOCTLCMD;
+ }
+
++static int mcf_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
++{
++ if (enabled)
++ writew((readw(MCF_RTC_IER) | MCF_RTC_ISR_ALM), MCF_RTC_IER);
++ else
++ writew((readw(MCF_RTC_IER) & ~MCF_RTC_ISR_ALM), MCF_RTC_IER);
++
++ return 0;
++}
++
+ /*!
+ * This function reads the current RTC time into tm in Gregorian date.
+ *
+@@ -534,6 +533,7 @@ static struct rtc_class_ops mcf_rtc_ops
+ .set_time = mcf_rtc_set_time,
+ .read_alarm = mcf_rtc_read_alarm,
+ .set_alarm = mcf_rtc_set_alarm,
++ .alarm_irq_enable = mcf_rtc_alarm_irq_enable,
+ };
+
+ static int __devinit mcf_rtc_probe(struct platform_device *pdev)
+--- a/drivers/rtc/rtc-mcf.c
++++ b/drivers/rtc/rtc-mcf.c
+@@ -298,18 +298,6 @@ static int mcf_rtc_ioctl(struct device *
+ writel((readl(MCF_RTC_IER) | PIE_BIT_DEF[i][1]), MCF_RTC_IER);
+ spin_unlock_irq(&rtc_lock);
+ return 0;
+- case RTC_AIE_OFF:
+- spin_lock_irq(&rtc_lock);
+- writel((readl(MCF_RTC_IER) & ~MCF_RTC_ISR_ALM), MCF_RTC_IER);
+- spin_unlock_irq(&rtc_lock);
+- return 0;
+-
+- case RTC_AIE_ON:
+- spin_lock_irq(&rtc_lock);
+- writel((readl(MCF_RTC_IER) | MCF_RTC_ISR_ALM), MCF_RTC_IER);
+- spin_unlock_irq(&rtc_lock);
+- return 0;
+-
+ case RTC_UIE_OFF: /* UIE is for the 1Hz interrupt */
+ spin_lock_irq(&rtc_lock);
+ writel((readl(MCF_RTC_IER) & ~MCF_RTC_ISR_1HZ), MCF_RTC_IER);
+@@ -325,6 +313,16 @@ static int mcf_rtc_ioctl(struct device *
+ return -ENOIOCTLCMD;
+ }
+
++static int mcf_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
++{
++ if (enabled)
++ writel((readl(MCF_RTC_IER) | MCF_RTC_ISR_ALM), MCF_RTC_IER);
++ else
++ writel((readl(MCF_RTC_IER) & ~MCF_RTC_ISR_ALM), MCF_RTC_IER);
++
++ return 0;
++}
++
+ /*!
+ * This function reads the current RTC time into tm in Gregorian date.
+ *
+@@ -466,6 +464,7 @@ static struct rtc_class_ops mcf_rtc_ops
+ .read_alarm = mcf_rtc_read_alarm,
+ .set_alarm = mcf_rtc_set_alarm,
+ .proc = mcf_rtc_proc,
++ .alarm_irq_enable = mcf_rtc_alarm_irq_enable,
+ };
+
+ static int __devinit mcf_rtc_probe(struct platform_device *pdev)