diff options
Diffstat (limited to 'arch/mips/emma/markeins/irq.c')
| -rw-r--r-- | arch/mips/emma/markeins/irq.c | 78 | 
1 files changed, 32 insertions, 46 deletions
diff --git a/arch/mips/emma/markeins/irq.c b/arch/mips/emma/markeins/irq.c index 3a96799eb65..b880a83e4d4 100644 --- a/arch/mips/emma/markeins/irq.c +++ b/arch/mips/emma/markeins/irq.c @@ -27,20 +27,16 @@  #include <linux/delay.h>  #include <asm/irq_cpu.h> -#include <asm/system.h>  #include <asm/mipsregs.h>  #include <asm/addrspace.h>  #include <asm/bootinfo.h>  #include <asm/emma/emma2rh.h> -static void emma2rh_irq_enable(unsigned int irq) +static void emma2rh_irq_enable(struct irq_data *d)  { -	u32 reg_value; -	u32 reg_bitmask; -	u32 reg_index; - -	irq -= EMMA2RH_IRQ_BASE; +	unsigned int irq = d->irq - EMMA2RH_IRQ_BASE; +	u32 reg_value, reg_bitmask, reg_index;  	reg_index = EMMA2RH_BHIF_INT_EN_0 +  		    (EMMA2RH_BHIF_INT_EN_1 - EMMA2RH_BHIF_INT_EN_0) * (irq / 32); @@ -49,13 +45,10 @@ static void emma2rh_irq_enable(unsigned int irq)  	emma2rh_out32(reg_index, reg_value | reg_bitmask);  } -static void emma2rh_irq_disable(unsigned int irq) +static void emma2rh_irq_disable(struct irq_data *d)  { -	u32 reg_value; -	u32 reg_bitmask; -	u32 reg_index; - -	irq -= EMMA2RH_IRQ_BASE; +	unsigned int irq = d->irq - EMMA2RH_IRQ_BASE; +	u32 reg_value, reg_bitmask, reg_index;  	reg_index = EMMA2RH_BHIF_INT_EN_0 +  		    (EMMA2RH_BHIF_INT_EN_1 - EMMA2RH_BHIF_INT_EN_0) * (irq / 32); @@ -66,10 +59,8 @@ static void emma2rh_irq_disable(unsigned int irq)  struct irq_chip emma2rh_irq_controller = {  	.name = "emma2rh_irq", -	.ack = emma2rh_irq_disable, -	.mask = emma2rh_irq_disable, -	.mask_ack = emma2rh_irq_disable, -	.unmask = emma2rh_irq_enable, +	.irq_mask = emma2rh_irq_disable, +	.irq_unmask = emma2rh_irq_enable,  };  void emma2rh_irq_init(void) @@ -77,28 +68,26 @@ void emma2rh_irq_init(void)  	u32 i;  	for (i = 0; i < NUM_EMMA2RH_IRQ; i++) -		set_irq_chip_and_handler_name(EMMA2RH_IRQ_BASE + i, +		irq_set_chip_and_handler_name(EMMA2RH_IRQ_BASE + i,  					      &emma2rh_irq_controller,  					      handle_level_irq, "level");  } -static void emma2rh_sw_irq_enable(unsigned int irq) +static void emma2rh_sw_irq_enable(struct irq_data *d)  { +	unsigned int irq = d->irq - EMMA2RH_SW_IRQ_BASE;  	u32 reg; -	irq -= EMMA2RH_SW_IRQ_BASE; -  	reg = emma2rh_in32(EMMA2RH_BHIF_SW_INT_EN);  	reg |= 1 << irq;  	emma2rh_out32(EMMA2RH_BHIF_SW_INT_EN, reg);  } -static void emma2rh_sw_irq_disable(unsigned int irq) +static void emma2rh_sw_irq_disable(struct irq_data *d)  { +	unsigned int irq = d->irq - EMMA2RH_SW_IRQ_BASE;  	u32 reg; -	irq -= EMMA2RH_SW_IRQ_BASE; -  	reg = emma2rh_in32(EMMA2RH_BHIF_SW_INT_EN);  	reg &= ~(1 << irq);  	emma2rh_out32(EMMA2RH_BHIF_SW_INT_EN, reg); @@ -106,10 +95,8 @@ static void emma2rh_sw_irq_disable(unsigned int irq)  struct irq_chip emma2rh_sw_irq_controller = {  	.name = "emma2rh_sw_irq", -	.ack = emma2rh_sw_irq_disable, -	.mask = emma2rh_sw_irq_disable, -	.mask_ack = emma2rh_sw_irq_disable, -	.unmask = emma2rh_sw_irq_enable, +	.irq_mask = emma2rh_sw_irq_disable, +	.irq_unmask = emma2rh_sw_irq_enable,  };  void emma2rh_sw_irq_init(void) @@ -117,44 +104,43 @@ void emma2rh_sw_irq_init(void)  	u32 i;  	for (i = 0; i < NUM_EMMA2RH_IRQ_SW; i++) -		set_irq_chip_and_handler_name(EMMA2RH_SW_IRQ_BASE + i, +		irq_set_chip_and_handler_name(EMMA2RH_SW_IRQ_BASE + i,  					      &emma2rh_sw_irq_controller,  					      handle_level_irq, "level");  } -static void emma2rh_gpio_irq_enable(unsigned int irq) +static void emma2rh_gpio_irq_enable(struct irq_data *d)  { +	unsigned int irq = d->irq - EMMA2RH_GPIO_IRQ_BASE;  	u32 reg; -	irq -= EMMA2RH_GPIO_IRQ_BASE; -  	reg = emma2rh_in32(EMMA2RH_GPIO_INT_MASK);  	reg |= 1 << irq;  	emma2rh_out32(EMMA2RH_GPIO_INT_MASK, reg);  } -static void emma2rh_gpio_irq_disable(unsigned int irq) +static void emma2rh_gpio_irq_disable(struct irq_data *d)  { +	unsigned int irq = d->irq - EMMA2RH_GPIO_IRQ_BASE;  	u32 reg; -	irq -= EMMA2RH_GPIO_IRQ_BASE; -  	reg = emma2rh_in32(EMMA2RH_GPIO_INT_MASK);  	reg &= ~(1 << irq);  	emma2rh_out32(EMMA2RH_GPIO_INT_MASK, reg);  } -static void emma2rh_gpio_irq_ack(unsigned int irq) +static void emma2rh_gpio_irq_ack(struct irq_data *d)  { -	irq -= EMMA2RH_GPIO_IRQ_BASE; +	unsigned int irq = d->irq - EMMA2RH_GPIO_IRQ_BASE; +  	emma2rh_out32(EMMA2RH_GPIO_INT_ST, ~(1 << irq));  } -static void emma2rh_gpio_irq_mask_ack(unsigned int irq) +static void emma2rh_gpio_irq_mask_ack(struct irq_data *d)  { +	unsigned int irq = d->irq - EMMA2RH_GPIO_IRQ_BASE;  	u32 reg; -	irq -= EMMA2RH_GPIO_IRQ_BASE;  	emma2rh_out32(EMMA2RH_GPIO_INT_ST, ~(1 << irq));  	reg = emma2rh_in32(EMMA2RH_GPIO_INT_MASK); @@ -164,10 +150,10 @@ static void emma2rh_gpio_irq_mask_ack(unsigned int irq)  struct irq_chip emma2rh_gpio_irq_controller = {  	.name = "emma2rh_gpio_irq", -	.ack = emma2rh_gpio_irq_ack, -	.mask = emma2rh_gpio_irq_disable, -	.mask_ack = emma2rh_gpio_irq_mask_ack, -	.unmask = emma2rh_gpio_irq_enable, +	.irq_ack = emma2rh_gpio_irq_ack, +	.irq_mask = emma2rh_gpio_irq_disable, +	.irq_mask_ack = emma2rh_gpio_irq_mask_ack, +	.irq_unmask = emma2rh_gpio_irq_enable,  };  void emma2rh_gpio_irq_init(void) @@ -175,14 +161,14 @@ void emma2rh_gpio_irq_init(void)  	u32 i;  	for (i = 0; i < NUM_EMMA2RH_IRQ_GPIO; i++) -		set_irq_chip_and_handler_name(EMMA2RH_GPIO_IRQ_BASE + i, +		irq_set_chip_and_handler_name(EMMA2RH_GPIO_IRQ_BASE + i,  					      &emma2rh_gpio_irq_controller,  					      handle_edge_irq, "edge");  }  static struct irqaction irq_cascade = {  	   .handler = no_action, -	   .flags = 0, +	   .flags = IRQF_NO_THREAD,  	   .name = "cascade",  	   .dev_id = NULL,  	   .next = NULL, @@ -306,7 +292,7 @@ void __init arch_init_irq(void)  asmlinkage void plat_irq_dispatch(void)  { -        unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM; +	unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM;  	if (pending & STATUSF_IP7)  		do_IRQ(MIPS_CPU_IRQ_BASE + 7);  | 
