mirror of
https://git.yoctoproject.org/meta-ti
synced 2026-01-12 01:20:20 +00:00
linux-3.0: rtc-twl: Updated Sakoman patches with newer versions
This fixes all IRQ kernel panics that were showing up on my BeagleBoard-xM * Refreshed patch that switched to using threaded IRQ (0009-rtc-twl-Switch-to-using-threaded-irq.patch) * Added patch to fix registration vs init order (0010-fix-registration-vs-init-order.patch) * Modified batter recharge patch to be applyable with the other changes (0014-rtc-twl-add-support-for-backup-battery-recharge.patch) Summary of patches added/updated: [PATCH 1/2] rtc: twl: Use threaded IRQ, remove IRQ enable in interrupt handler [PATCH 2/2] rtc: twl: Fix registration vs. init order kernel.org patchwork links: http://www.spinics.net/lists/linux-omap/msg54794.html http://www.mail-archive.com/linux-omap@vger.kernel.org/msg53176.html Signed-off-by: Joel A Fernandes <agnel.joel@gmail.com> Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
This commit is contained in:
committed by
Koen Kooi
parent
1eb2449fae
commit
6c4f3e4a16
@@ -1,25 +1,61 @@
|
||||
From 61f6890ed80c09e40841221d238410a8d9ebace6 Mon Sep 17 00:00:00 2001
|
||||
From: Ilkka Koskinen <ilkka.koskinen@nokia.com>
|
||||
Date: Wed, 16 Mar 2011 16:07:14 +0000
|
||||
Subject: [PATCH 09/13] rtc-twl: Switch to using threaded irq
|
||||
From patchwork Wed Jul 27 07:07:20 2011
|
||||
Subject: [1/2] rtc: twl: Use threaded IRQ,
|
||||
remove IRQ enable in interrupt handler
|
||||
Date: Wed, 27 Jul 2011 07:07:20 -0000
|
||||
From: Todd Poynor <toddpoynor@google.com>
|
||||
X-Patchwork-Id: 1010862
|
||||
Message-Id: <1311750441-5559-1-git-send-email-toddpoynor@google.com>
|
||||
To: Alessandro Zummo <a.zummo@towertech.it>
|
||||
Cc: rtc-linux@googlegroups.com, linux-omap@vger.kernel.org,
|
||||
linux-kernel@vger.kernel.org, Todd Poynor <toddpoynor@google.com>
|
||||
|
||||
IRQs disabled on entry to twl_rtc_interrupt is not a consequence
|
||||
of LOCKDEP; both twl6030 and twl4030 explicitly disable IRQs
|
||||
before calling the module IRQ handlers.
|
||||
|
||||
The ISR should not be enabling IRQs; use a threaded IRQ handler
|
||||
instead.
|
||||
|
||||
Also fixes warnings:
|
||||
|
||||
WARNING: at kernel/irq/handle.c:130 handle_irq_event_percpu+nnn
|
||||
irq nnn handler twl_rtc_interrupt+nnn enabled interrupts
|
||||
|
||||
Signed-off-by: Todd Poynor <toddpoynor@google.com>
|
||||
|
||||
---
|
||||
drivers/rtc/rtc-twl.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
drivers/rtc/rtc-twl.c | 14 +++-----------
|
||||
1 files changed, 3 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/drivers/rtc/rtc-twl.c b/drivers/rtc/rtc-twl.c
|
||||
index f9a2799..f3e5045 100644
|
||||
index 9a81f77..ece41b9 100644
|
||||
--- a/drivers/rtc/rtc-twl.c
|
||||
+++ b/drivers/rtc/rtc-twl.c
|
||||
@@ -462,7 +462,7 @@ static int __devinit twl_rtc_probe(struct platform_device *pdev)
|
||||
@@ -362,14 +362,6 @@ static irqreturn_t twl_rtc_interrupt(int irq, void *rtc)
|
||||
int res;
|
||||
u8 rd_reg;
|
||||
|
||||
-#ifdef CONFIG_LOCKDEP
|
||||
- /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which
|
||||
- * we don't want and can't tolerate. Although it might be
|
||||
- * friendlier not to borrow this thread context...
|
||||
- */
|
||||
- local_irq_enable();
|
||||
-#endif
|
||||
-
|
||||
res = twl_rtc_read_u8(&rd_reg, REG_RTC_STATUS_REG);
|
||||
if (res)
|
||||
goto out;
|
||||
@@ -462,9 +454,9 @@ static int __devinit twl_rtc_probe(struct platform_device *pdev)
|
||||
if (ret < 0)
|
||||
goto out1;
|
||||
|
||||
- ret = request_irq(irq, twl_rtc_interrupt,
|
||||
- IRQF_TRIGGER_RISING,
|
||||
- dev_name(&rtc->dev), rtc);
|
||||
+ ret = request_threaded_irq(irq, NULL, twl_rtc_interrupt,
|
||||
IRQF_TRIGGER_RISING,
|
||||
dev_name(&rtc->dev), rtc);
|
||||
+ IRQF_TRIGGER_RISING,
|
||||
+ dev_name(&rtc->dev), rtc);
|
||||
if (ret < 0) {
|
||||
--
|
||||
1.6.6.1
|
||||
|
||||
dev_err(&pdev->dev, "IRQ is not free.\n");
|
||||
goto out1;
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
From patchwork Wed Jul 27 07:07:21 2011
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: 7bit
|
||||
Subject: [2/2] rtc: twl: Fix registration vs. init order
|
||||
Date: Wed, 27 Jul 2011 07:07:21 -0000
|
||||
From: Todd Poynor <toddpoynor@google.com>
|
||||
X-Patchwork-Id: 1010892
|
||||
Message-Id: <1311750441-5559-2-git-send-email-toddpoynor@google.com>
|
||||
To: Alessandro Zummo <a.zummo@towertech.it>
|
||||
Cc: rtc-linux@googlegroups.com, linux-omap@vger.kernel.org,
|
||||
linux-kernel@vger.kernel.org, Todd Poynor <toddpoynor@google.com>
|
||||
|
||||
Only register as an RTC device after the hardware has been
|
||||
successfully initialized. The RTC class driver will call
|
||||
back to this driver to read a pending alarm, and other
|
||||
drivers watching for new devices on the RTC class may
|
||||
read the RTC time upon registration. Such access might
|
||||
occur while the RTC is stopped, prior to clearing
|
||||
pending alarms, etc.
|
||||
|
||||
The new ordering also avoids leaving the platform
|
||||
device drvdata set to an unregistered struct rtc_device *
|
||||
on probe errors.
|
||||
|
||||
Signed-off-by: Todd Poynor <toddpoynor@google.com>
|
||||
|
||||
---
|
||||
drivers/rtc/rtc-twl.c | 52 ++++++++++++++++++++++--------------------------
|
||||
1 files changed, 24 insertions(+), 28 deletions(-)
|
||||
|
||||
diff --git a/drivers/rtc/rtc-twl.c b/drivers/rtc/rtc-twl.c
|
||||
index ece41b9..20687d5 100644
|
||||
--- a/drivers/rtc/rtc-twl.c
|
||||
+++ b/drivers/rtc/rtc-twl.c
|
||||
@@ -420,24 +420,12 @@ static struct rtc_class_ops twl_rtc_ops = {
|
||||
static int __devinit twl_rtc_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct rtc_device *rtc;
|
||||
- int ret = 0;
|
||||
+ int ret = -EINVAL;
|
||||
int irq = platform_get_irq(pdev, 0);
|
||||
u8 rd_reg;
|
||||
|
||||
if (irq <= 0)
|
||||
- return -EINVAL;
|
||||
-
|
||||
- rtc = rtc_device_register(pdev->name,
|
||||
- &pdev->dev, &twl_rtc_ops, THIS_MODULE);
|
||||
- if (IS_ERR(rtc)) {
|
||||
- ret = PTR_ERR(rtc);
|
||||
- dev_err(&pdev->dev, "can't register RTC device, err %ld\n",
|
||||
- PTR_ERR(rtc));
|
||||
- goto out0;
|
||||
-
|
||||
- }
|
||||
-
|
||||
- platform_set_drvdata(pdev, rtc);
|
||||
+ goto out1;
|
||||
|
||||
ret = twl_rtc_read_u8(&rd_reg, REG_RTC_STATUS_REG);
|
||||
if (ret < 0)
|
||||
@@ -454,14 +442,6 @@ static int __devinit twl_rtc_probe(struct platform_device *pdev)
|
||||
if (ret < 0)
|
||||
goto out1;
|
||||
|
||||
- ret = request_threaded_irq(irq, NULL, twl_rtc_interrupt,
|
||||
- IRQF_TRIGGER_RISING,
|
||||
- dev_name(&rtc->dev), rtc);
|
||||
- if (ret < 0) {
|
||||
- dev_err(&pdev->dev, "IRQ is not free.\n");
|
||||
- goto out1;
|
||||
- }
|
||||
-
|
||||
if (twl_class_is_6030()) {
|
||||
twl6030_interrupt_unmask(TWL6030_RTC_INT_MASK,
|
||||
REG_INT_MSK_LINE_A);
|
||||
@@ -472,28 +452,44 @@ static int __devinit twl_rtc_probe(struct platform_device *pdev)
|
||||
/* Check RTC module status, Enable if it is off */
|
||||
ret = twl_rtc_read_u8(&rd_reg, REG_RTC_CTRL_REG);
|
||||
if (ret < 0)
|
||||
- goto out2;
|
||||
+ goto out1;
|
||||
|
||||
if (!(rd_reg & BIT_RTC_CTRL_REG_STOP_RTC_M)) {
|
||||
dev_info(&pdev->dev, "Enabling TWL-RTC.\n");
|
||||
rd_reg = BIT_RTC_CTRL_REG_STOP_RTC_M;
|
||||
ret = twl_rtc_write_u8(rd_reg, REG_RTC_CTRL_REG);
|
||||
if (ret < 0)
|
||||
- goto out2;
|
||||
+ goto out1;
|
||||
}
|
||||
|
||||
/* init cached IRQ enable bits */
|
||||
ret = twl_rtc_read_u8(&rtc_irq_bits, REG_RTC_INTERRUPTS_REG);
|
||||
if (ret < 0)
|
||||
+ goto out1;
|
||||
+
|
||||
+ rtc = rtc_device_register(pdev->name,
|
||||
+ &pdev->dev, &twl_rtc_ops, THIS_MODULE);
|
||||
+ if (IS_ERR(rtc)) {
|
||||
+ ret = PTR_ERR(rtc);
|
||||
+ dev_err(&pdev->dev, "can't register RTC device, err %ld\n",
|
||||
+ PTR_ERR(rtc));
|
||||
+ goto out1;
|
||||
+ }
|
||||
+
|
||||
+ ret = request_threaded_irq(irq, NULL, twl_rtc_interrupt,
|
||||
+ IRQF_TRIGGER_RISING,
|
||||
+ dev_name(&rtc->dev), rtc);
|
||||
+ if (ret < 0) {
|
||||
+ dev_err(&pdev->dev, "IRQ is not free.\n");
|
||||
goto out2;
|
||||
+ }
|
||||
|
||||
- return ret;
|
||||
+ platform_set_drvdata(pdev, rtc);
|
||||
+ return 0;
|
||||
|
||||
out2:
|
||||
- free_irq(irq, rtc);
|
||||
-out1:
|
||||
rtc_device_unregister(rtc);
|
||||
-out0:
|
||||
+out1:
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -7,14 +7,16 @@ Subject: [PATCH 10/13] rtc-twl: add support for backup battery recharge
|
||||
drivers/rtc/rtc-twl.c | 25 +++++++++++++++++++++++++
|
||||
1 files changed, 25 insertions(+), 0 deletions(-)
|
||||
|
||||
|
||||
diff --git a/drivers/rtc/rtc-twl.c b/drivers/rtc/rtc-twl.c
|
||||
index f3e5045..1fe1bc9 100644
|
||||
index a64494e..552446b 100644
|
||||
--- a/drivers/rtc/rtc-twl.c
|
||||
+++ b/drivers/rtc/rtc-twl.c
|
||||
@@ -30,6 +30,23 @@
|
||||
@@ -30,7 +30,24 @@
|
||||
|
||||
#include <linux/i2c/twl.h>
|
||||
|
||||
-
|
||||
+/*
|
||||
+ * PM_RECEIVER block register offsets (use TWL4030_MODULE_PM_RECEIVER)
|
||||
+ */
|
||||
@@ -32,12 +34,13 @@ index f3e5045..1fe1bc9 100644
|
||||
+#define BIT_PM_RECEIVER_BB_CFG_BBISEL_150UA 0x01
|
||||
+#define BIT_PM_RECEIVER_BB_CFG_BBISEL_500UA 0x02
|
||||
+#define BIT_PM_RECEIVER_BB_CFG_BBISEL_1MA 0x03
|
||||
|
||||
+
|
||||
/*
|
||||
* RTC block register offsets (use TWL_MODULE_RTC)
|
||||
@@ -495,6 +512,14 @@ static int __devinit twl_rtc_probe(struct platform_device *pdev)
|
||||
if (ret < 0)
|
||||
*/
|
||||
@@ -484,6 +501,14 @@ static int __devinit twl_rtc_probe(struct platform_device *pdev)
|
||||
goto out2;
|
||||
}
|
||||
|
||||
+ /* enable backup battery charging */
|
||||
+ /* use a conservative 25uA @ 3.1V */
|
||||
@@ -47,9 +50,6 @@ index f3e5045..1fe1bc9 100644
|
||||
+ BIT_PM_RECEIVER_BB_CFG_BBISEL_25UA,
|
||||
+ REG_BB_CFG);
|
||||
+
|
||||
return ret;
|
||||
|
||||
out2:
|
||||
--
|
||||
1.6.6.1
|
||||
platform_set_drvdata(pdev, rtc);
|
||||
return 0;
|
||||
|
||||
@@ -9,7 +9,7 @@ COMPATIBLE_MACHINE = "(beagleboard)"
|
||||
SRCREV_pn-${PN} = "94ed5b4788a7cdbe68bc7cb8516972cbebdc8274"
|
||||
|
||||
# The main PR is now using MACHINE_KERNEL_PR, for omap3 see conf/machine/include/omap3.inc
|
||||
MACHINE_KERNEL_PR_append = "k"
|
||||
MACHINE_KERNEL_PR_append = "m"
|
||||
|
||||
FILESPATHPKG_prepend = "linux-3.0:"
|
||||
|
||||
@@ -208,10 +208,11 @@ SRC_URI += "git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-3.0.y.git
|
||||
file://sakoman/0007-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch \
|
||||
file://sakoman/0008-Revert-omap2_mcspi-Flush-posted-writes.patch \
|
||||
file://sakoman/0009-rtc-twl-Switch-to-using-threaded-irq.patch \
|
||||
file://sakoman/0010-rtc-twl-add-support-for-backup-battery-recharge.patch \
|
||||
file://sakoman/0010-fix-registration-vs-init-order.patch \
|
||||
file://sakoman/0011-soc-codecs-Enable-audio-capture-by-default-for-twl40.patch \
|
||||
file://sakoman/0012-soc-codecs-twl4030-Turn-on-mic-bias-by-default.patch \
|
||||
file://sakoman/0013-omap-mmc-twl4030-move-clock-input-selection-prior-to.patch \
|
||||
file://sakoman/0014-rtc-twl-add-support-for-backup-battery-recharge.patch \
|
||||
\
|
||||
file://sgx/0001-ARM-L2-Add-and-export-outer_clean_all.patch \
|
||||
file://defconfig"
|
||||
|
||||
Reference in New Issue
Block a user