public inbox for linux-omap@vger.kernel.org
 help / color / mirror / Atom feed
From: Felipe Balbi <balbi@ti.com>
To: Tony Lindgren <tony@atomide.com>
Cc: "Linux OMAP Mailing List" <linux-omap@vger.kernel.org>,
	"Michael Büsch" <mb@bu3sch.de>, "Felipe Balbi" <balbi@ti.com>
Subject: [PATCH 13/22] cbus: tahvo: start using irq_chip
Date: Mon, 11 Jul 2011 14:17:26 +0300	[thread overview]
Message-ID: <1310383055-20211-14-git-send-email-balbi@ti.com> (raw)
In-Reply-To: <1310383055-20211-1-git-send-email-balbi@ti.com>

in order to chieve that, we needed to allocate
our children devices (currently only one) and
fix up the irq handler.

Signed-off-by: Felipe Balbi <balbi@ti.com>
---
 arch/arm/mach-omap1/board-nokia770.c |    6 --
 arch/arm/mach-omap2/board-n8x0.c     |    6 --
 drivers/cbus/tahvo.c                 |  110 ++++++++++++++++++++++++---------
 3 files changed, 80 insertions(+), 42 deletions(-)

diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c
index 5eb1a7f..ecdf77b 100644
--- a/arch/arm/mach-omap1/board-nokia770.c
+++ b/arch/arm/mach-omap1/board-nokia770.c
@@ -155,11 +155,6 @@ static struct platform_device tahvo_device = {
 	},
 };
 
-static struct platform_device tahvo_usb_device = {
-	.name		= "tahvo-usb",
-	.id		= -1,
-};
-
 static void __init nokia770_cbus_init(void)
 {
 	int		ret;
@@ -200,7 +195,6 @@ static void __init nokia770_cbus_init(void)
 
 	tahvo_resource[0].start = gpio_to_irq(40);
 	platform_device_register(&tahvo_device);
-	platform_device_register(&tahvo_usb_device);
 }
 
 #else
diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c
index f7548e4..295b4d7 100644
--- a/arch/arm/mach-omap2/board-n8x0.c
+++ b/arch/arm/mach-omap2/board-n8x0.c
@@ -251,11 +251,6 @@ static struct platform_device tahvo_device = {
 	},
 };
 
-static struct platform_device tahvo_usb_device = {
-	.name		= "tahvo-usb",
-	.id		= -1,
-};
-
 static void __init n8x0_cbus_init(void)
 {
 	int		ret;
@@ -297,7 +292,6 @@ static void __init n8x0_cbus_init(void)
 
 	tahvo_resource[0].start = gpio_to_irq(111);
 	platform_device_register(&tahvo_device);
-	platform_device_register(&tahvo_usb_device);
 }
 
 #else
diff --git a/drivers/cbus/tahvo.c b/drivers/cbus/tahvo.c
index 3aaf0eb..f01defc 100644
--- a/drivers/cbus/tahvo.c
+++ b/drivers/cbus/tahvo.c
@@ -215,39 +215,26 @@ EXPORT_SYMBOL(tahvo_set_backlight_level);
 
 static irqreturn_t tahvo_irq_handler(int irq, void *_tahvo)
 {
-	struct tahvo_irq_handler_desc *hnd;
-
 	struct tahvo		*tahvo = _tahvo;
 	u16			id;
 	u16			im;
-	int			i;
-
-	for (;;) {
-		id = __tahvo_read_reg(tahvo, TAHVO_REG_IDR);
-		im = ~__tahvo_read_reg(tahvo, TAHVO_REG_IMR);
-		id &= im;
-
-		if (!id)
-			break;
-
-		for (i = 0; id != 0; i++, id >>= 1) {
-			if (!(id & 1))
-				continue;
-			hnd = &tahvo_irq_handlers[i];
-			if (hnd->func == NULL) {
-				/* Spurious tahvo interrupt - just ack it */
-				dev_err(tahvo->dev, "Spurious interrupt "
-						 "(id %d)\n", i);
-				tahvo_disable_irq(i);
-				tahvo_ack_irq(i);
-				continue;
-			}
-			hnd->func(hnd->arg);
-			/*
-			 * Don't acknowledge the interrupt here
-			 * It must be done explicitly
-			 */
-		}
+
+	id = __tahvo_read_reg(tahvo, TAHVO_REG_IDR);
+	im = __tahvo_read_reg(tahvo, TAHVO_REG_IMR);
+	id &= ~im;
+
+	if (!id) {
+		dev_vdbg(tahvo->dev, "No IRQ, spurious ?\n");
+		return IRQ_NONE;
+	}
+
+	while (id) {
+		unsigned long	pending = __ffs(id);
+		unsigned int	irq;
+
+		id &= ~BIT(pending);
+		irq = pending + tahvo->irq_base;
+		handle_nested_irq(irq);
 	}
 
 	return IRQ_HANDLED;
@@ -397,6 +384,63 @@ static void tahvo_irq_init(struct tahvo *tahvo)
 
 /* -------------------------------------------------------------------------- */
 
+static struct resource generic_resources[] = {
+	{
+		.start		= -EINVAL,	/* fixed later */
+		.flags		= IORESOURCE_IRQ,
+	},
+};
+
+static struct device *tahvo_allocate_child(const char *name,
+		struct device *parent, int irq)
+{
+	struct platform_device	*pdev;
+	int			ret;
+
+	pdev = platform_device_alloc(name, -1);
+	if (!pdev) {
+		dev_dbg(parent, "can't allocate %s\n", name);
+		goto err0;
+	}
+
+	pdev->dev.parent = parent;
+
+	generic_resources[0].start = irq;
+
+	ret = platform_device_add_resources(pdev,
+			generic_resources, ARRAY_SIZE(generic_resources));
+	if (ret < 0) {
+		dev_dbg(parent, "can't add resources to %s\n", name);
+		goto err1;
+	}
+
+	ret = platform_device_add(pdev);
+	if (ret < 0) {
+		dev_dbg(parent, "can't add %s\n", name);
+		goto err1;
+	}
+
+	return &pdev->dev;
+
+err1:
+	platform_device_put(pdev);
+
+err0:
+	return NULL;
+}
+
+static int tahvo_allocate_children(struct device *parent, int irq_base)
+{
+	struct device		*child;
+
+	child = tahvo_allocate_child("tahvo-usb", parent,
+			irq_base + TAHVO_INT_VBUSON);
+	if (!child)
+		return -ENOMEM;
+
+	return 0;
+}
+
 static int __devinit tahvo_probe(struct platform_device *pdev)
 {
 	struct tahvo		*tahvo;
@@ -450,6 +494,12 @@ static int __devinit tahvo_probe(struct platform_device *pdev)
 		goto err2;
 	}
 
+	ret = tahvo_allocate_children(&pdev->dev, tahvo->irq_base);
+	if (ret < 0) {
+		dev_err(&pdev->dev, "failed to allocate children\n");
+		goto err2;
+	}
+
 	dev_err(&pdev->dev, "%s v%d.%d found\n",
 			tahvo->is_betty ? "Betty" : "Tahvo",
 			(rev >> 4) & 0x0f, rev & 0x0f);
-- 
1.7.6


  parent reply	other threads:[~2011-07-11 11:18 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-11 11:17 [PATCH 00/22] Tahvo cleanups and Retu optimization Felipe Balbi
2011-07-11 11:17 ` [PATCH 01/22] cbus: tahvo: convert spinlock into mutex Felipe Balbi
2011-07-11 11:17 ` [PATCH 02/22] cbus: tahvo: move to __devinit/__devexit sections Felipe Balbi
2011-07-11 11:17 ` [PATCH 03/22] cbus: tahvo: a switch looks better Felipe Balbi
2011-07-11 11:17 ` [PATCH 04/22] cbus: tahvo: don't go over 80 columns Felipe Balbi
2011-07-11 11:17 ` [PATCH 05/22] cbus: tahvo: drop the tasklet Felipe Balbi
2011-07-11 11:17 ` [PATCH 06/22] cbus: retu: set IRQF_ONESHOT flag Felipe Balbi
2011-07-11 11:17 ` [PATCH 07/22] cbus: tahvo: git it a context structure Felipe Balbi
2011-07-11 11:17 ` [PATCH 08/22] cbus: tahvo: pass tahvo to IRQ handler Felipe Balbi
2011-07-11 11:17 ` [PATCH 09/22] cbus: tahvo: introduce __tahvo_(read/write)_reg Felipe Balbi
2011-07-11 11:17 ` [PATCH 10/22] cbus: tahvo: drop some unneded defines Felipe Balbi
2011-07-11 11:17 ` [PATCH 11/22] cbus: retu: IRQ demux optimization Felipe Balbi
2011-07-11 11:17 ` [PATCH 12/22] cbus: tahvo: give it an irq_chip Felipe Balbi
2011-07-11 11:17 ` Felipe Balbi [this message]
2011-07-11 11:17 ` [PATCH 14/22] cbus: tahvo: usb: fix up to use threaded irqs Felipe Balbi
2011-07-11 11:17 ` [PATCH 15/22] cbus: tahvo drop the legacy interfaces Felipe Balbi
2011-07-11 11:17 ` [PATCH 16/22] cbus: tahvo: usb: drop unused variable Felipe Balbi
2011-07-11 11:17 ` [PATCH 17/22] cbus: tahvo: no need to mask interrupts on exit Felipe Balbi
2011-07-11 11:17 ` [PATCH 18/22] cbus: tahvo: drop the get_status hack Felipe Balbi
2011-07-11 11:17 ` [PATCH 19/22] cbus: tahvo: drop more unused interfaces Felipe Balbi
2011-07-11 11:17 ` [PATCH 20/22] cbus: tahvo: pass child device pointer Felipe Balbi
2011-07-11 11:17 ` [PATCH 21/22] cbus: tahvo: drop backlight interfaces Felipe Balbi
2011-07-11 11:17 ` [PATCH 22/22] cbus: tahvo: drop static global pointer Felipe Balbi
2011-07-11 11:28 ` [PATCH 00/22] Tahvo cleanups and Retu optimization Michael Büsch
2011-07-11 13:12   ` Felipe Balbi
2011-07-11 13:41     ` Michael Büsch
2011-07-11 13:45       ` Felipe Balbi
2011-07-11 13:51         ` Michael Büsch
2011-07-11 14:03           ` Felipe Balbi
2011-07-11 14:19             ` Michael Büsch

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=1310383055-20211-14-git-send-email-balbi@ti.com \
    --to=balbi@ti.com \
    --cc=linux-omap@vger.kernel.org \
    --cc=mb@bu3sch.de \
    --cc=tony@atomide.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