public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Samuel Ortiz <sameo@linux.intel.com>
Subject: [patch 07/10] mfd: twl4030: Cleanup interrupt handling
Date: Fri, 25 Mar 2011 11:12:31 -0000	[thread overview]
Message-ID: <20110325111218.249659750@linutronix.de> (raw)
In-Reply-To: 20110325110939.701487744@linutronix.de

[-- Attachment #1: mfd-twl4.patch --]
[-- Type: text/plain, Size: 3250 bytes --]

irq_desc checking in a function which is called with that irq
descriptor locked, is pointless. Equally pointless as the irq desc
check in the interrupt service routine. The driver sets those lines
up, so that cant go away magically.

Remove the open coded handler magic and use the proper accessor.

No need to fiddle with irq_desc in the type setting function. The
original value is in irq_data and the core code stores the new setting
when the return value is 0.

This driver needs to be converted to threaded interrupts and buslock.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 drivers/mfd/twl4030-irq.c |   46 ++++++++--------------------------------------
 1 file changed, 8 insertions(+), 38 deletions(-)

Index: linux-2.6-tip/drivers/mfd/twl4030-irq.c
===================================================================
--- linux-2.6-tip.orig/drivers/mfd/twl4030-irq.c
+++ linux-2.6-tip/drivers/mfd/twl4030-irq.c
@@ -320,24 +320,8 @@ static int twl4030_irq_thread(void *data
 		for (module_irq = twl4030_irq_base;
 				pih_isr;
 				pih_isr >>= 1, module_irq++) {
-			if (pih_isr & 0x1) {
-				struct irq_desc *d = irq_to_desc(module_irq);
-
-				if (!d) {
-					pr_err("twl4030: Invalid SIH IRQ: %d\n",
-					       module_irq);
-					return -EINVAL;
-				}
-
-				/* These can't be masked ... always warn
-				 * if we get any surprises.
-				 */
-				if (d->status & IRQ_DISABLED)
-					note_interrupt(module_irq, d,
-							IRQ_NONE);
-				else
-					d->handle_irq(module_irq, d);
-			}
+			if (pih_isr & 0x1)
+				generic_handle_irq(module_irq);
 		}
 		local_irq_enable();
 
@@ -560,24 +544,18 @@ static void twl4030_sih_do_edge(struct w
 	/* Modify only the bits we know must change */
 	while (edge_change) {
 		int		i = fls(edge_change) - 1;
-		struct irq_desc	*d = irq_to_desc(i + agent->irq_base);
+		struct irq_data	*idata = irq_get_irq_data(i + agent->irq_base);
 		int		byte = 1 + (i >> 2);
 		int		off = (i & 0x3) * 2;
-
-		if (!d) {
-			pr_err("twl4030: Invalid IRQ: %d\n",
-			       i + agent->irq_base);
-			return;
-		}
+		unsigned int	type;
 
 		bytes[byte] &= ~(0x03 << off);
 
-		raw_spin_lock_irq(&d->lock);
-		if (d->status & IRQ_TYPE_EDGE_RISING)
+		type = irqd_get_trigger_type(idata);
+		if (type & IRQ_TYPE_EDGE_RISING)
 			bytes[byte] |= BIT(off + 1);
-		if (d->status & IRQ_TYPE_EDGE_FALLING)
+		if (type & IRQ_TYPE_EDGE_FALLING)
 			bytes[byte] |= BIT(off + 0);
-		raw_spin_unlock_irq(&d->lock);
 
 		edge_change &= ~BIT(i);
 	}
@@ -626,21 +604,13 @@ static void twl4030_sih_unmask(struct ir
 static int twl4030_sih_set_type(struct irq_data *data, unsigned trigger)
 {
 	struct sih_agent *sih = irq_data_get_irq_chip_data(data);
-	struct irq_desc *desc = irq_to_desc(data->irq);
 	unsigned long flags;
 
-	if (!desc) {
-		pr_err("twl4030: Invalid IRQ: %d\n", data->irq);
-		return -EINVAL;
-	}
-
 	if (trigger & ~(IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING))
 		return -EINVAL;
 
 	spin_lock_irqsave(&sih_agent_lock, flags);
-	if ((desc->status & IRQ_TYPE_SENSE_MASK) != trigger) {
-		desc->status &= ~IRQ_TYPE_SENSE_MASK;
-		desc->status |= trigger;
+	if (irqd_get_trigger_type(data) != trigger) {
 		sih->edge_change |= BIT(data->irq - sih->irq_base);
 		queue_work(wq, &sih->edge_work);
 	}



  parent reply	other threads:[~2011-03-25 11:13 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-25 11:12 [patch 00/10] mfd: irq cleanup and namespace conversion Thomas Gleixner
2011-03-25 11:12 ` [patch 01/10] mfd: asic3: Cleanup irq handling Thomas Gleixner
2011-03-25 11:12 ` [patch 02/10] mfd: 88pm860x: Remove unused irq_desc leftovers Thomas Gleixner
2011-03-25 11:12 ` [patch 03/10] mfd: ezx-pcap: Remvove open coded irq handling Thomas Gleixner
2011-03-25 11:12 ` [patch 04/10] mfd: htc-egpio: Cleanup interrupt handling Thomas Gleixner
2011-03-25 11:12 ` [patch 05/10] mfd: htc-i2cpld: " Thomas Gleixner
2011-03-25 11:12 ` [patch 06/10] mfd: mx8925: Remove irq_desc leftovers Thomas Gleixner
2011-03-25 11:12 ` [patch 08/10] mfd: twl6030: Cleanup interrupt handling Thomas Gleixner
2011-03-25 11:12 ` Thomas Gleixner [this message]
2011-03-25 11:12 ` [patch 09/10] mfd: Cleanup irq namespace Thomas Gleixner
2011-03-25 12:08   ` Mark Brown
2011-03-25 12:33     ` Thomas Gleixner
2011-03-25 12:41       ` Mark Brown
2011-03-25 11:12 ` [patch 10/10] mfd: Fold irq_set_chip/irq_set_handler Thomas Gleixner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110325111218.249659750@linutronix.de \
    --to=tglx@linutronix.de \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sameo@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox