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

Commit 3b7cff66 authored by Lennert Buytenhek's avatar Lennert Buytenhek
Browse files

ARM: lh7a40x: irq_data conversion.

parent 3cdb791b
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -46,28 +46,28 @@ void __init kev7a400_map_io(void)

static u16 CPLD_IRQ_mask;	/* Mask for CPLD IRQs, 1 == unmasked */

static void kev7a400_ack_cpld_irq (u32 irq)
static void kev7a400_ack_cpld_irq(struct irq_data *d)
{
	CPLD_CL_INT = 1 << (irq - IRQ_KEV7A400_CPLD);
	CPLD_CL_INT = 1 << (d->irq - IRQ_KEV7A400_CPLD);
}

static void kev7a400_mask_cpld_irq (u32 irq)
static void kev7a400_mask_cpld_irq(struct irq_data *d)
{
	CPLD_IRQ_mask &= ~(1 << (irq - IRQ_KEV7A400_CPLD));
	CPLD_IRQ_mask &= ~(1 << (d->irq - IRQ_KEV7A400_CPLD));
	CPLD_WR_PB_INT_MASK = CPLD_IRQ_mask;
}

static void kev7a400_unmask_cpld_irq (u32 irq)
static void kev7a400_unmask_cpld_irq(struct irq_data *d)
{
	CPLD_IRQ_mask |= 1 << (irq - IRQ_KEV7A400_CPLD);
	CPLD_IRQ_mask |= 1 << (d->irq - IRQ_KEV7A400_CPLD);
	CPLD_WR_PB_INT_MASK = CPLD_IRQ_mask;
}

static struct irq_chip kev7a400_cpld_chip = {
	.name		= "CPLD",
	.ack	= kev7a400_ack_cpld_irq,
	.mask	= kev7a400_mask_cpld_irq,
	.unmask	= kev7a400_unmask_cpld_irq,
	.irq_ack	= kev7a400_ack_cpld_irq,
	.irq_mask	= kev7a400_mask_cpld_irq,
	.irq_unmask	= kev7a400_unmask_cpld_irq,
};


+13 −12
Original line number Diff line number Diff line
@@ -159,7 +159,7 @@ static void __init lpd7a40x_init (void)
#endif
}

static void lh7a40x_ack_cpld_irq (u32 irq)
static void lh7a40x_ack_cpld_irq(struct irq_data *d)
{
	/* CPLD doesn't have ack capability, but some devices may */

@@ -167,14 +167,14 @@ static void lh7a40x_ack_cpld_irq (u32 irq)
	/* The touch control *must* mask the interrupt because the
	 * interrupt bit is read by the driver to determine if the pen
	 * is still down. */
	if (irq == IRQ_TOUCH)
	if (d->irq == IRQ_TOUCH)
		CPLD_INTERRUPTS |= CPLD_INTMASK_TOUCH;
#endif
}

static void lh7a40x_mask_cpld_irq (u32 irq)
static void lh7a40x_mask_cpld_irq(struct irq_data *d)
{
	switch (irq) {
	switch (d->irq) {
	case IRQ_LPD7A40X_ETH_INT:
		CPLD_INTERRUPTS |= CPLD_INTMASK_ETHERNET;
		break;
@@ -186,9 +186,9 @@ static void lh7a40x_mask_cpld_irq (u32 irq)
	}
}

static void lh7a40x_unmask_cpld_irq (u32 irq)
static void lh7a40x_unmask_cpld_irq(struct irq_data *d)
{
	switch (irq) {
	switch (d->irq) {
	case IRQ_LPD7A40X_ETH_INT:
		CPLD_INTERRUPTS &= ~CPLD_INTMASK_ETHERNET;
		break;
@@ -202,16 +202,16 @@ static void lh7a40x_unmask_cpld_irq (u32 irq)

static struct irq_chip lpd7a40x_cpld_chip = {
	.name		= "CPLD",
	.ack	= lh7a40x_ack_cpld_irq,
	.mask	= lh7a40x_mask_cpld_irq,
	.unmask	= lh7a40x_unmask_cpld_irq,
	.irq_ack	= lh7a40x_ack_cpld_irq,
	.irq_mask	= lh7a40x_mask_cpld_irq,
	.irq_unmask	= lh7a40x_unmask_cpld_irq,
};

static void lpd7a40x_cpld_handler (unsigned int irq, struct irq_desc *desc)
{
	unsigned int mask = CPLD_INTERRUPTS;

	desc->chip->ack (irq);
	desc->irq_data.chip->irq_ack(&desc->irq_data);

	if ((mask & (1<<0)) == 0)	/* WLAN */
		generic_handle_irq(IRQ_LPD7A40X_ETH_INT);
@@ -221,7 +221,8 @@ static void lpd7a40x_cpld_handler (unsigned int irq, struct irq_desc *desc)
		generic_handle_irq(IRQ_TOUCH);
#endif

	desc->chip->unmask (irq); /* Level-triggered need this */
	/* Level-triggered need this */
	desc->irq_data.chip->irq_unmask(&desc->irq_data);
}


+15 −15
Original line number Diff line number Diff line
@@ -21,34 +21,34 @@

  /* CPU IRQ handling */

static void lh7a400_mask_irq (u32 irq)
static void lh7a400_mask_irq(struct irq_data *d)
{
	INTC_INTENC = (1 << irq);
	INTC_INTENC = (1 << d->irq);
}

static void lh7a400_unmask_irq (u32 irq)
static void lh7a400_unmask_irq(struct irq_data *d)
{
	INTC_INTENS = (1 << irq);
	INTC_INTENS = (1 << d->irq);
}

static void lh7a400_ack_gpio_irq (u32 irq)
static void lh7a400_ack_gpio_irq(struct irq_data *d)
{
	GPIO_GPIOFEOI = (1 << IRQ_TO_GPIO (irq));
	INTC_INTENC = (1 << irq);
	GPIO_GPIOFEOI = (1 << IRQ_TO_GPIO (d->irq));
	INTC_INTENC = (1 << d->irq);
}

static struct irq_chip lh7a400_internal_chip = {
	.name		= "MPU",
	.ack	= lh7a400_mask_irq, /* Level triggering -> mask is ack */
	.mask	= lh7a400_mask_irq,
	.unmask	= lh7a400_unmask_irq,
	.irq_ack	= lh7a400_mask_irq, /* Level triggering -> mask is ack */
	.irq_mask	= lh7a400_mask_irq,
	.irq_unmask	= lh7a400_unmask_irq,
};

static struct irq_chip lh7a400_gpio_chip = {
	.name		= "GPIO",
	.ack	= lh7a400_ack_gpio_irq,
	.mask	= lh7a400_mask_irq,
	.unmask	= lh7a400_unmask_irq,
	.irq_ack	= lh7a400_ack_gpio_irq,
	.irq_mask	= lh7a400_mask_irq,
	.irq_unmask	= lh7a400_unmask_irq,
};


+30 −30
Original line number Diff line number Diff line
@@ -43,64 +43,64 @@ static unsigned char irq_pri_vic2[] = {

  /* CPU IRQ handling */

static void lh7a404_vic1_mask_irq (u32 irq)
static void lh7a404_vic1_mask_irq(struct irq_data *d)
{
	VIC1_INTENCLR = (1 << irq);
	VIC1_INTENCLR = (1 << d->irq);
}

static void lh7a404_vic1_unmask_irq (u32 irq)
static void lh7a404_vic1_unmask_irq(struct irq_data *d)
{
	VIC1_INTEN = (1 << irq);
	VIC1_INTEN = (1 << d->irq);
}

static void lh7a404_vic2_mask_irq (u32 irq)
static void lh7a404_vic2_mask_irq(struct irq_data *d)
{
	VIC2_INTENCLR = (1 << (irq - 32));
	VIC2_INTENCLR = (1 << (d->irq - 32));
}

static void lh7a404_vic2_unmask_irq (u32 irq)
static void lh7a404_vic2_unmask_irq(struct irq_data *d)
{
	VIC2_INTEN = (1 << (irq - 32));
	VIC2_INTEN = (1 << (d->irq - 32));
}

static void lh7a404_vic1_ack_gpio_irq (u32 irq)
static void lh7a404_vic1_ack_gpio_irq(struct irq_data *d)
{
	GPIO_GPIOFEOI = (1 << IRQ_TO_GPIO (irq));
	VIC1_INTENCLR = (1 << irq);
	GPIO_GPIOFEOI = (1 << IRQ_TO_GPIO (d->irq));
	VIC1_INTENCLR = (1 << d->irq);
}

static void lh7a404_vic2_ack_gpio_irq (u32 irq)
static void lh7a404_vic2_ack_gpio_irq(struct irq_data *d)
{
	GPIO_GPIOFEOI = (1 << IRQ_TO_GPIO (irq));
	VIC2_INTENCLR = (1 << irq);
	GPIO_GPIOFEOI = (1 << IRQ_TO_GPIO (d->irq));
	VIC2_INTENCLR = (1 << d->irq);
}

static struct irq_chip lh7a404_vic1_chip = {
	.name		= "VIC1",
	.ack	= lh7a404_vic1_mask_irq, /* Because level-triggered */
	.mask	= lh7a404_vic1_mask_irq,
	.unmask	= lh7a404_vic1_unmask_irq,
	.irq_ack	= lh7a404_vic1_mask_irq, /* Because level-triggered */
	.irq_mask	= lh7a404_vic1_mask_irq,
	.irq_unmask	= lh7a404_vic1_unmask_irq,
};

static struct irq_chip lh7a404_vic2_chip = {
	.name		= "VIC2",
	.ack	= lh7a404_vic2_mask_irq, /* Because level-triggered */
	.mask	= lh7a404_vic2_mask_irq,
	.unmask	= lh7a404_vic2_unmask_irq,
	.irq_ack	= lh7a404_vic2_mask_irq, /* Because level-triggered */
	.irq_mask	= lh7a404_vic2_mask_irq,
	.irq_unmask	= lh7a404_vic2_unmask_irq,
};

static struct irq_chip lh7a404_gpio_vic1_chip = {
	.name		= "GPIO-VIC1",
	.ack	= lh7a404_vic1_ack_gpio_irq,
	.mask	= lh7a404_vic1_mask_irq,
	.unmask	= lh7a404_vic1_unmask_irq,
	.irq_ack	= lh7a404_vic1_ack_gpio_irq,
	.irq_mask	= lh7a404_vic1_mask_irq,
	.irq_unmask	= lh7a404_vic1_unmask_irq,
};

static struct irq_chip lh7a404_gpio_vic2_chip = {
	.name		= "GPIO-VIC2",
	.ack	= lh7a404_vic2_ack_gpio_irq,
	.mask	= lh7a404_vic2_mask_irq,
	.unmask	= lh7a404_vic2_unmask_irq,
	.irq_ack	= lh7a404_vic2_ack_gpio_irq,
	.irq_mask	= lh7a404_vic2_mask_irq,
	.irq_unmask	= lh7a404_vic2_unmask_irq,
};

  /* IRQ initialization */
+11 −11
Original line number Diff line number Diff line
@@ -20,14 +20,14 @@

#include "common.h"

static void lh7a40x_ack_cpld_irq (u32 irq)
static void lh7a40x_ack_cpld_irq(struct irq_data *d)
{
	/* CPLD doesn't have ack capability */
}

static void lh7a40x_mask_cpld_irq (u32 irq)
static void lh7a40x_mask_cpld_irq(struct irq_data *d)
{
	switch (irq) {
	switch (d->irq) {
	case IRQ_LPD7A40X_ETH_INT:
		CPLD_INTERRUPTS = CPLD_INTERRUPTS | 0x4;
		break;
@@ -37,9 +37,9 @@ static void lh7a40x_mask_cpld_irq (u32 irq)
	}
}

static void lh7a40x_unmask_cpld_irq (u32 irq)
static void lh7a40x_unmask_cpld_irq(struct irq_data *d)
{
	switch (irq) {
	switch (d->irq) {
	case IRQ_LPD7A40X_ETH_INT:
		CPLD_INTERRUPTS = CPLD_INTERRUPTS & ~ 0x4;
		break;
@@ -51,16 +51,16 @@ static void lh7a40x_unmask_cpld_irq (u32 irq)

static struct irq_chip lh7a40x_cpld_chip = {
	.name		= "CPLD",
	.ack	= lh7a40x_ack_cpld_irq,
	.mask	= lh7a40x_mask_cpld_irq,
	.unmask	= lh7a40x_unmask_cpld_irq,
	.irq_ack	= lh7a40x_ack_cpld_irq,
	.irq_mask	= lh7a40x_mask_cpld_irq,
	.irq_unmask	= lh7a40x_unmask_cpld_irq,
};

static void lh7a40x_cpld_handler (unsigned int irq, struct irq_desc *desc)
{
	unsigned int mask = CPLD_INTERRUPTS;

	desc->chip->ack (irq);
	desc->irq_data.chip->ack (irq);

	if ((mask & 0x1) == 0)	/* WLAN */
		generic_handle_irq(IRQ_LPD7A40X_ETH_INT);
@@ -68,7 +68,7 @@ static void lh7a40x_cpld_handler (unsigned int irq, struct irq_desc *desc)
	if ((mask & 0x2) == 0)	/* Touch */
		generic_handle_irq(IRQ_LPD7A400_TS);

	desc->chip->unmask (irq); /* Level-triggered need this */
	desc->irq_data.chip->unmask (irq); /* Level-triggered need this */
}