Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 39aa437e authored by Olof Johansson's avatar Olof Johansson
Browse files

Merge branch 'queue/irq/arm' of...

Merge branch 'queue/irq/arm' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into next/cleanup

Merge "ARM: Interrupt cleanups and API change preparation" from Thomas
Gleixner:

The following patch series contains the following changes:

    - Consolidation of chained interrupt handler setup/removal

    - Switch to functions which avoid a redundant interrupt
      descriptor lookup

    - Preparation of interrupt flow handlers for the 'irq' argument
      removal

* 'queue/irq/arm' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

:
  ARM/orion/gpio: Prepare gpio_irq_handler for irq argument removal
  ARM/pxa: Prepare balloon3_irq_handler for irq argument removal
  ARM/pxa: Prepare *_irq_handler for irq argument removal
  ARM/dove: Prepare pmu_irq_handler for irq argument removal
  ARM/sa1111: Prepare sa1111_irq_handler for irq argument removal
  ARM/locomo: Prepare locomo_handler for irq argument removal
  ARM, irq: Use irq_desc_get_xxx() to avoid redundant lookup of irq_desc
  ARM/LPC32xx: Use irq_set_handler_locked()
  ARM/irq: Use access helper irq_data_get_affinity_mask()
  ARM/locomo: Consolidate chained IRQ handler install/remove
  ARM/orion: Consolidate chained IRQ handler install/remove

Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parents e8d36d5d f4acd122
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -138,9 +138,9 @@ static struct locomo_dev_info locomo_devices[] = {
	},
};

static void locomo_handler(unsigned int irq, struct irq_desc *desc)
static void locomo_handler(unsigned int __irq, struct irq_desc *desc)
{
	struct locomo *lchip = irq_get_chip_data(irq);
	struct locomo *lchip = irq_desc_get_chip_data(desc);
	int req, i;

	/* Acknowledge the parent IRQ */
@@ -150,6 +150,8 @@ static void locomo_handler(unsigned int irq, struct irq_desc *desc)
	req = locomo_readl(lchip->base + LOCOMO_ICR) & 0x0f00;

	if (req) {
		unsigned int irq;

		/* generate the next interrupt(s) */
		irq = lchip->irq_base;
		for (i = 0; i <= 3; i++, irq++) {
@@ -475,8 +477,7 @@ static void __locomo_remove(struct locomo *lchip)
	device_for_each_child(lchip->dev, NULL, locomo_remove_child);

	if (lchip->irq != NO_IRQ) {
		irq_set_chained_handler(lchip->irq, NULL);
		irq_set_handler_data(lchip->irq, NULL);
		irq_set_chained_handler_and_data(lchip->irq, NULL, NULL);
	}

	iounmap(lchip->base);
+3 −2
Original line number Diff line number Diff line
@@ -197,10 +197,11 @@ static struct sa1111_dev_info sa1111_devices[] = {
 * will call us again if there are more interrupts to process.
 */
static void
sa1111_irq_handler(unsigned int irq, struct irq_desc *desc)
sa1111_irq_handler(unsigned int __irq, struct irq_desc *desc)
{
	unsigned int irq = irq_desc_get_irq(desc);
	unsigned int stat0, stat1, i;
	struct sa1111 *sachip = irq_get_handler_data(irq);
	struct sa1111 *sachip = irq_desc_get_handler_data(desc);
	void __iomem *mapbase = sachip->base + SA1111_INTC;

	stat0 = sa1111_readl(mapbase + SA1111_INTSTATCLR0);
+2 −2
Original line number Diff line number Diff line
@@ -140,7 +140,7 @@ int __init arch_probe_nr_irqs(void)
static bool migrate_one_irq(struct irq_desc *desc)
{
	struct irq_data *d = irq_desc_get_irq_data(desc);
	const struct cpumask *affinity = d->affinity;
	const struct cpumask *affinity = irq_data_get_affinity_mask(d);
	struct irq_chip *c;
	bool ret = false;

@@ -160,7 +160,7 @@ static bool migrate_one_irq(struct irq_desc *desc)
	if (!c->irq_set_affinity)
		pr_debug("IRQ%u: unable to set affinity\n", d->irq);
	else if (c->irq_set_affinity(d, affinity, false) == IRQ_SET_MASK_OK && ret)
		cpumask_copy(d->affinity, affinity);
		cpumask_copy(irq_data_get_affinity_mask(d), affinity);

	return ret;
}
+2 −1
Original line number Diff line number Diff line
@@ -69,8 +69,9 @@ static struct irq_chip pmu_irq_chip = {
	.irq_ack	= pmu_irq_ack,
};

static void pmu_irq_handler(unsigned int irq, struct irq_desc *desc)
static void pmu_irq_handler(unsigned int __irq, struct irq_desc *desc)
{
	unsigned int irq = irq_desc_get_irq(desc);
	unsigned long cause = readl(PMU_INTERRUPT_CAUSE);

	cause &= readl(PMU_INTERRUPT_MASK);
+4 −4
Original line number Diff line number Diff line
@@ -283,25 +283,25 @@ static int lpc32xx_set_irq_type(struct irq_data *d, unsigned int type)
	case IRQ_TYPE_EDGE_RISING:
		/* Rising edge sensitive */
		__lpc32xx_set_irq_type(d->hwirq, 1, 1);
		__irq_set_handler_locked(d->irq, handle_edge_irq);
		irq_set_handler_locked(d, handle_edge_irq);
		break;

	case IRQ_TYPE_EDGE_FALLING:
		/* Falling edge sensitive */
		__lpc32xx_set_irq_type(d->hwirq, 0, 1);
		__irq_set_handler_locked(d->irq, handle_edge_irq);
		irq_set_handler_locked(d, handle_edge_irq);
		break;

	case IRQ_TYPE_LEVEL_LOW:
		/* Low level sensitive */
		__lpc32xx_set_irq_type(d->hwirq, 0, 0);
		__irq_set_handler_locked(d->irq, handle_level_irq);
		irq_set_handler_locked(d, handle_level_irq);
		break;

	case IRQ_TYPE_LEVEL_HIGH:
		/* High level sensitive */
		__lpc32xx_set_irq_type(d->hwirq, 1, 0);
		__irq_set_handler_locked(d->irq, handle_level_irq);
		irq_set_handler_locked(d, handle_level_irq);
		break;

	/* Other modes are not supported */
Loading