diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-25 20:24:05 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-25 20:24:05 -0700 | 
| commit | 0dd61be7ec1be1b6820af978f901b9ae2c244dc6 (patch) | |
| tree | 1f49edaa21351034e7d1dff6511424e9a949cf6b /arch/xtensa/variants/s6000/gpio.c | |
| parent | 8dd90265ac0754da0df47d9c597f25187bb1c947 (diff) | |
| parent | ab7798ffcf98b11a9525cf65bacdae3fd58d357f (diff) | |
Merge branch 'irq-cleanup-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'irq-cleanup-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (23 commits)
  genirq: Expand generic show_interrupts()
  gpio: Fold irq_set_chip/irq_set_handler to irq_set_chip_and_handler
  gpio: Cleanup genirq namespace
  arm: ep93xx: Add basic interrupt info
  arm/gpio: Remove three copies of broken and racy debug code
  xtensa: Use generic show_interrupts()
  xtensa: Convert genirq namespace
  xtensa: Use generic IRQ Kconfig and set GENERIC_HARDIRQS_NO_DEPRECATED
  xtensa: Convert s6000 gpio irq_chip to new functions
  xtensa: Convert main irq_chip to new functions
  um: Use generic show_interrupts()
  um: Convert genirq namespace
  m32r: Use generic show_interrupts()
  m32r: Convert genirq namespace
  h8300: Use generic show_interrupts()
  h8300: Convert genirq namespace
  avr32: Cleanup eic_set_irq_type()
  avr32: Use generic show_interrupts()
  avr: Cleanup genirq namespace
  avr32: Use generic IRQ config, enable GENERIC_HARDIRQS_NO_DEPRECATED
  ...
Fix up trivial conflict in drivers/gpio/timbgpio.c
Diffstat (limited to 'arch/xtensa/variants/s6000/gpio.c')
| -rw-r--r-- | arch/xtensa/variants/s6000/gpio.c | 45 | 
1 files changed, 22 insertions, 23 deletions
diff --git a/arch/xtensa/variants/s6000/gpio.c b/arch/xtensa/variants/s6000/gpio.c index 380a70fff756..7af0757e001b 100644 --- a/arch/xtensa/variants/s6000/gpio.c +++ b/arch/xtensa/variants/s6000/gpio.c @@ -85,30 +85,29 @@ int s6_gpio_init(u32 afsel)  	return gpiochip_add(&gpiochip);  } -static void ack(unsigned int irq) +static void ack(struct irq_data *d)  { -	writeb(1 << (irq - IRQ_BASE), S6_REG_GPIO + S6_GPIO_IC); +	writeb(1 << (d->irq - IRQ_BASE), S6_REG_GPIO + S6_GPIO_IC);  } -static void mask(unsigned int irq) +static void mask(struct irq_data *d)  {  	u8 r = readb(S6_REG_GPIO + S6_GPIO_IE); -	r &= ~(1 << (irq - IRQ_BASE)); +	r &= ~(1 << (d->irq - IRQ_BASE));  	writeb(r, S6_REG_GPIO + S6_GPIO_IE);  } -static void unmask(unsigned int irq) +static void unmask(struct irq_data *d)  {  	u8 m = readb(S6_REG_GPIO + S6_GPIO_IE); -	m |= 1 << (irq - IRQ_BASE); +	m |= 1 << (d->irq - IRQ_BASE);  	writeb(m, S6_REG_GPIO + S6_GPIO_IE);  } -static int set_type(unsigned int irq, unsigned int type) +static int set_type(struct irq_data *d, unsigned int type)  { -	const u8 m = 1 << (irq - IRQ_BASE); +	const u8 m = 1 << (d->irq - IRQ_BASE);  	irq_flow_handler_t handler; -	struct irq_desc *desc;  	u8 reg;  	if (type == IRQ_TYPE_PROBE) { @@ -129,8 +128,7 @@ static int set_type(unsigned int irq, unsigned int type)  		handler = handle_edge_irq;  	}  	writeb(reg, S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_IS); -	desc = irq_to_desc(irq); -	desc->handle_irq = handler; +	__irq_set_handler_locked(irq, handler);  	reg = readb(S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_IEV);  	if (type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_EDGE_RISING)) @@ -150,22 +148,23 @@ static int set_type(unsigned int irq, unsigned int type)  static struct irq_chip gpioirqs = {  	.name = "GPIO", -	.ack = ack, -	.mask = mask, -	.unmask = unmask, -	.set_type = set_type, +	.irq_ack = ack, +	.irq_mask = mask, +	.irq_unmask = unmask, +	.irq_set_type = set_type,  };  static u8 demux_masks[4];  static void demux_irqs(unsigned int irq, struct irq_desc *desc)  { -	u8 *mask = get_irq_desc_data(desc); +	struct irq_chip *chip = irq_desc_get_chip(desc); +	u8 *mask = irq_desc_get_handler_data(desc);  	u8 pending;  	int cirq; -	desc->chip->mask(irq); -	desc->chip->ack(irq); +	chip->irq_mask(&desc->irq_data); +	chip->irq_ack(&desc->irq_data));  	pending = readb(S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_MIS) & *mask;  	cirq = IRQ_BASE - 1;  	while (pending) { @@ -174,7 +173,7 @@ static void demux_irqs(unsigned int irq, struct irq_desc *desc)  		pending >>= n;  		generic_handle_irq(cirq);  	} -	desc->chip->unmask(irq); +	chip->irq_unmask(&desc->irq_data));  }  extern const signed char *platform_irq_mappings[XTENSA_NR_IRQS]; @@ -219,11 +218,11 @@ void __init variant_init_irq(void)  				i = ffs(mask);  				cirq += i;  				mask >>= i; -				set_irq_chip(cirq, &gpioirqs); -				set_irq_type(irq, IRQ_TYPE_LEVEL_LOW); +				irq_set_chip(cirq, &gpioirqs); +				irq_set_irq_type(irq, IRQ_TYPE_LEVEL_LOW);  			} while (mask); -			set_irq_data(irq, demux_masks + n); -			set_irq_chained_handler(irq, demux_irqs); +			irq_set_handler_data(irq, demux_masks + n); +			irq_set_chained_handler(irq, demux_irqs);  			if (++n == ARRAY_SIZE(demux_masks))  				break;  		}  | 
