Thread (22 messages) 22 messages, 5 authors, 2014-09-22

RE: [PATCH 1/3 v2] GPIO: gpio-dwapb: Enable platform driver binding to MFD driver

From: Chen, Alvin <hidden>
Date: 2014-09-06 10:47:15
Also in: linux-gpio, lkml

quoted
quoted
-	irq_set_chained_handler(irq, dwapb_irq_handler);
-	irq_set_handler_data(irq, gpio);
+	if (!pp->irq_shared) {
+		irq_set_chained_handler(pp->irq, dwapb_irq_handler);
+		irq_set_handler_data(pp->irq, gpio);
+	} else {
+		/*
+		 * Request a shared IRQ since where MFD would have devices
+		 * using the same irq pin
+		 */
+		err = devm_request_irq(gpio->dev, pp->irq,
+				       dwapb_irq_handler_mfd,
+				       IRQF_SHARED, "gpio-dwapb-mfd", gpio);
+		if (err) {
+			dev_err(gpio->dev, "error requesting IRQ\n");
+			irq_domain_remove(gpio->domain);
+			gpio->domain = NULL;
+			return;
+		}
+	}
I think this need some better documentation. Why is it safe to use
devm_request_irq rather than irq_set_chained_handler here?
Usually it is preferred to use irq_set_chained_handler() for the chained handler
so the handler does not show up in /proc/interrupts.
This requires an exclusive non-shared handler which is not the case on the intel
platform. So they have to use devm_request_irq() instead.
Yes, for Intel Quark, it has a single PCI function exporting a GPIO and I2C controller, and
the irq is shared by GPIO and I2C, so we need shared irq as the comments said.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help