Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 231339
b: refs/heads/master
c: a3f4c92
h: refs/heads/master
i:
  231337: 8daccd2
  231335: 7364ae9
v: v3
  • Loading branch information
Lennert Buytenhek committed Jan 13, 2011
1 parent 22b5d66 commit fb127dd
Show file tree
Hide file tree
Showing 16 changed files with 145 additions and 130 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 406b005045ad18ffa08c439545801e1c8cec4b5e
refs/heads/master: a3f4c927d379cfaa597bc8ff75dc9d28f8d9200e
23 changes: 14 additions & 9 deletions trunk/arch/arm/mach-pxa/balloon3.c
Original file line number Diff line number Diff line change
Expand Up @@ -477,25 +477,25 @@ static inline void balloon3_leds_init(void) {}
/******************************************************************************
* FPGA IRQ
******************************************************************************/
static void balloon3_mask_irq(unsigned int irq)
static void balloon3_mask_irq(struct irq_data *d)
{
int balloon3_irq = (irq - BALLOON3_IRQ(0));
int balloon3_irq = (d->irq - BALLOON3_IRQ(0));
balloon3_irq_enabled &= ~(1 << balloon3_irq);
__raw_writel(~balloon3_irq_enabled, BALLOON3_INT_CONTROL_REG);
}

static void balloon3_unmask_irq(unsigned int irq)
static void balloon3_unmask_irq(struct irq_data *d)
{
int balloon3_irq = (irq - BALLOON3_IRQ(0));
int balloon3_irq = (d->irq - BALLOON3_IRQ(0));
balloon3_irq_enabled |= (1 << balloon3_irq);
__raw_writel(~balloon3_irq_enabled, BALLOON3_INT_CONTROL_REG);
}

static struct irq_chip balloon3_irq_chip = {
.name = "FPGA",
.ack = balloon3_mask_irq,
.mask = balloon3_mask_irq,
.unmask = balloon3_unmask_irq,
.irq_ack = balloon3_mask_irq,
.irq_mask = balloon3_mask_irq,
.irq_unmask = balloon3_unmask_irq,
};

static void balloon3_irq_handler(unsigned int irq, struct irq_desc *desc)
Expand All @@ -504,8 +504,13 @@ static void balloon3_irq_handler(unsigned int irq, struct irq_desc *desc)
balloon3_irq_enabled;
do {
/* clear useless edge notification */
if (desc->chip->ack)
desc->chip->ack(BALLOON3_AUX_NIRQ);
if (desc->irq_data.chip->irq_ack) {
struct irq_data *d;

d = irq_get_irq_data(BALLOON3_AUX_NIRQ);
desc->irq_data.chip->irq_ack(d);
}

while (pending) {
irq = BALLOON3_IRQ(0) + __ffs(pending);
generic_handle_irq(irq);
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/arm/mach-pxa/cm-x2xx-pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ void __init cmx2xx_pci_adjust_zones(unsigned long *zone_size,
static void cmx2xx_it8152_irq_demux(unsigned int irq, struct irq_desc *desc)
{
/* clear our parent irq */
desc->chip->ack(irq);
desc->irq_data.chip->irq_ack(&desc->irq_data);

it8152_irq_demux(irq, desc);
}
Expand Down
4 changes: 3 additions & 1 deletion trunk/arch/arm/mach-pxa/generic.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@
* published by the Free Software Foundation.
*/

struct irq_data;
struct sys_timer;

extern struct sys_timer pxa_timer;
extern void __init pxa_init_irq(int irq_nr,
int (*set_wake)(unsigned int, unsigned int));
int (*set_wake)(struct irq_data *,
unsigned int));
extern void __init pxa25x_init_irq(void);
#ifdef CONFIG_CPU_PXA26x
extern void __init pxa26x_init_irq(void);
Expand Down
50 changes: 25 additions & 25 deletions trunk/arch/arm/mach-pxa/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,37 +53,37 @@ static inline int cpu_has_ipr(void)
return !cpu_is_pxa25x();
}

static void pxa_mask_irq(unsigned int irq)
static void pxa_mask_irq(struct irq_data *d)
{
void __iomem *base = get_irq_chip_data(irq);
void __iomem *base = irq_data_get_irq_chip_data(d);
uint32_t icmr = __raw_readl(base + ICMR);

icmr &= ~(1 << IRQ_BIT(irq));
icmr &= ~(1 << IRQ_BIT(d->irq));
__raw_writel(icmr, base + ICMR);
}

static void pxa_unmask_irq(unsigned int irq)
static void pxa_unmask_irq(struct irq_data *d)
{
void __iomem *base = get_irq_chip_data(irq);
void __iomem *base = irq_data_get_irq_chip_data(d);
uint32_t icmr = __raw_readl(base + ICMR);

icmr |= 1 << IRQ_BIT(irq);
icmr |= 1 << IRQ_BIT(d->irq);
__raw_writel(icmr, base + ICMR);
}

static struct irq_chip pxa_internal_irq_chip = {
.name = "SC",
.ack = pxa_mask_irq,
.mask = pxa_mask_irq,
.unmask = pxa_unmask_irq,
.irq_ack = pxa_mask_irq,
.irq_mask = pxa_mask_irq,
.irq_unmask = pxa_unmask_irq,
};

/*
* GPIO IRQs for GPIO 0 and 1
*/
static int pxa_set_low_gpio_type(unsigned int irq, unsigned int type)
static int pxa_set_low_gpio_type(struct irq_data *d, unsigned int type)
{
int gpio = irq - IRQ_GPIO0;
int gpio = d->irq - IRQ_GPIO0;

if (__gpio_is_occupied(gpio)) {
pr_err("%s failed: GPIO is configured\n", __func__);
Expand All @@ -103,31 +103,31 @@ static int pxa_set_low_gpio_type(unsigned int irq, unsigned int type)
return 0;
}

static void pxa_ack_low_gpio(unsigned int irq)
static void pxa_ack_low_gpio(struct irq_data *d)
{
GEDR0 = (1 << (irq - IRQ_GPIO0));
GEDR0 = (1 << (d->irq - IRQ_GPIO0));
}

static void pxa_mask_low_gpio(unsigned int irq)
static void pxa_mask_low_gpio(struct irq_data *d)
{
struct irq_desc *desc = irq_to_desc(irq);
struct irq_desc *desc = irq_to_desc(d->irq);

desc->chip->mask(irq);
desc->irq_data.chip->irq_mask(d);
}

static void pxa_unmask_low_gpio(unsigned int irq)
static void pxa_unmask_low_gpio(struct irq_data *d)
{
struct irq_desc *desc = irq_to_desc(irq);
struct irq_desc *desc = irq_to_desc(d->irq);

desc->chip->unmask(irq);
desc->irq_data.chip->irq_unmask(d);
}

static struct irq_chip pxa_low_gpio_chip = {
.name = "GPIO-l",
.ack = pxa_ack_low_gpio,
.mask = pxa_mask_low_gpio,
.unmask = pxa_unmask_low_gpio,
.set_type = pxa_set_low_gpio_type,
.irq_ack = pxa_ack_low_gpio,
.irq_mask = pxa_mask_low_gpio,
.irq_unmask = pxa_unmask_low_gpio,
.irq_set_type = pxa_set_low_gpio_type,
};

static void __init pxa_init_low_gpio_irq(set_wake_t fn)
Expand All @@ -145,7 +145,7 @@ static void __init pxa_init_low_gpio_irq(set_wake_t fn)
set_irq_flags(irq, IRQF_VALID);
}

pxa_low_gpio_chip.set_wake = fn;
pxa_low_gpio_chip.irq_set_wake = fn;
}

static inline void __iomem *irq_base(int i)
Expand Down Expand Up @@ -188,7 +188,7 @@ void __init pxa_init_irq(int irq_nr, set_wake_t fn)
/* only unmasked interrupts kick us out of idle */
__raw_writel(1, irq_base(0) + ICCR);

pxa_internal_irq_chip.set_wake = fn;
pxa_internal_irq_chip.irq_set_wake = fn;
pxa_init_low_gpio_irq(fn);
}

Expand Down
17 changes: 9 additions & 8 deletions trunk/arch/arm/mach-pxa/lpd270.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,29 +95,29 @@ static unsigned long lpd270_pin_config[] __initdata = {

static unsigned int lpd270_irq_enabled;

static void lpd270_mask_irq(unsigned int irq)
static void lpd270_mask_irq(struct irq_data *d)
{
int lpd270_irq = irq - LPD270_IRQ(0);
int lpd270_irq = d->irq - LPD270_IRQ(0);

__raw_writew(~(1 << lpd270_irq), LPD270_INT_STATUS);

lpd270_irq_enabled &= ~(1 << lpd270_irq);
__raw_writew(lpd270_irq_enabled, LPD270_INT_MASK);
}

static void lpd270_unmask_irq(unsigned int irq)
static void lpd270_unmask_irq(struct irq_data *d)
{
int lpd270_irq = irq - LPD270_IRQ(0);
int lpd270_irq = d->irq - LPD270_IRQ(0);

lpd270_irq_enabled |= 1 << lpd270_irq;
__raw_writew(lpd270_irq_enabled, LPD270_INT_MASK);
}

static struct irq_chip lpd270_irq_chip = {
.name = "CPLD",
.ack = lpd270_mask_irq,
.mask = lpd270_mask_irq,
.unmask = lpd270_unmask_irq,
.irq_ack = lpd270_mask_irq,
.irq_mask = lpd270_mask_irq,
.irq_unmask = lpd270_unmask_irq,
};

static void lpd270_irq_handler(unsigned int irq, struct irq_desc *desc)
Expand All @@ -126,7 +126,8 @@ static void lpd270_irq_handler(unsigned int irq, struct irq_desc *desc)

pending = __raw_readw(LPD270_INT_STATUS) & lpd270_irq_enabled;
do {
desc->chip->ack(irq); /* clear useless edge notification */
/* clear useless edge notification */
desc->irq_data.chip->irq_ack(&desc->irq_data);
if (likely(pending)) {
irq = LPD270_IRQ(0) + __ffs(pending);
generic_handle_irq(irq);
Expand Down
17 changes: 9 additions & 8 deletions trunk/arch/arm/mach-pxa/lubbock.c
Original file line number Diff line number Diff line change
Expand Up @@ -122,32 +122,33 @@ EXPORT_SYMBOL(lubbock_set_misc_wr);

static unsigned long lubbock_irq_enabled;

static void lubbock_mask_irq(unsigned int irq)
static void lubbock_mask_irq(struct irq_data *d)
{
int lubbock_irq = (irq - LUBBOCK_IRQ(0));
int lubbock_irq = (d->irq - LUBBOCK_IRQ(0));
LUB_IRQ_MASK_EN = (lubbock_irq_enabled &= ~(1 << lubbock_irq));
}

static void lubbock_unmask_irq(unsigned int irq)
static void lubbock_unmask_irq(struct irq_data *d)
{
int lubbock_irq = (irq - LUBBOCK_IRQ(0));
int lubbock_irq = (d->irq - LUBBOCK_IRQ(0));
/* the irq can be acknowledged only if deasserted, so it's done here */
LUB_IRQ_SET_CLR &= ~(1 << lubbock_irq);
LUB_IRQ_MASK_EN = (lubbock_irq_enabled |= (1 << lubbock_irq));
}

static struct irq_chip lubbock_irq_chip = {
.name = "FPGA",
.ack = lubbock_mask_irq,
.mask = lubbock_mask_irq,
.unmask = lubbock_unmask_irq,
.irq_ack = lubbock_mask_irq,
.irq_mask = lubbock_mask_irq,
.irq_unmask = lubbock_unmask_irq,
};

static void lubbock_irq_handler(unsigned int irq, struct irq_desc *desc)
{
unsigned long pending = LUB_IRQ_SET_CLR & lubbock_irq_enabled;
do {
desc->chip->ack(irq); /* clear our parent irq */
/* clear our parent irq */
desc->irq_data.chip->irq_ack(&desc->irq_data);
if (likely(pending)) {
irq = LUBBOCK_IRQ(0) + __ffs(pending);
generic_handle_irq(irq);
Expand Down
17 changes: 9 additions & 8 deletions trunk/arch/arm/mach-pxa/mainstone.c
Original file line number Diff line number Diff line change
Expand Up @@ -123,32 +123,33 @@ static unsigned long mainstone_pin_config[] = {

static unsigned long mainstone_irq_enabled;

static void mainstone_mask_irq(unsigned int irq)
static void mainstone_mask_irq(struct irq_data *d)
{
int mainstone_irq = (irq - MAINSTONE_IRQ(0));
int mainstone_irq = (d->irq - MAINSTONE_IRQ(0));
MST_INTMSKENA = (mainstone_irq_enabled &= ~(1 << mainstone_irq));
}

static void mainstone_unmask_irq(unsigned int irq)
static void mainstone_unmask_irq(struct irq_data *d)
{
int mainstone_irq = (irq - MAINSTONE_IRQ(0));
int mainstone_irq = (d->irq - MAINSTONE_IRQ(0));
/* the irq can be acknowledged only if deasserted, so it's done here */
MST_INTSETCLR &= ~(1 << mainstone_irq);
MST_INTMSKENA = (mainstone_irq_enabled |= (1 << mainstone_irq));
}

static struct irq_chip mainstone_irq_chip = {
.name = "FPGA",
.ack = mainstone_mask_irq,
.mask = mainstone_mask_irq,
.unmask = mainstone_unmask_irq,
.irq_ack = mainstone_mask_irq,
.irq_mask = mainstone_mask_irq,
.irq_unmask = mainstone_unmask_irq,
};

static void mainstone_irq_handler(unsigned int irq, struct irq_desc *desc)
{
unsigned long pending = MST_INTSETCLR & mainstone_irq_enabled;
do {
desc->chip->ack(irq); /* clear useless edge notification */
/* clear useless edge notification */
desc->irq_data.chip->irq_ack(&desc->irq_data);
if (likely(pending)) {
irq = MAINSTONE_IRQ(0) + __ffs(pending);
generic_handle_irq(irq);
Expand Down
15 changes: 8 additions & 7 deletions trunk/arch/arm/mach-pxa/pcm990-baseboard.c
Original file line number Diff line number Diff line change
Expand Up @@ -241,31 +241,32 @@ static struct platform_device pcm990_backlight_device = {

static unsigned long pcm990_irq_enabled;

static void pcm990_mask_ack_irq(unsigned int irq)
static void pcm990_mask_ack_irq(struct irq_data *d)
{
int pcm990_irq = (irq - PCM027_IRQ(0));
int pcm990_irq = (d->irq - PCM027_IRQ(0));
PCM990_INTMSKENA = (pcm990_irq_enabled &= ~(1 << pcm990_irq));
}

static void pcm990_unmask_irq(unsigned int irq)
static void pcm990_unmask_irq(struct irq_data *d)
{
int pcm990_irq = (irq - PCM027_IRQ(0));
int pcm990_irq = (d->irq - PCM027_IRQ(0));
/* the irq can be acknowledged only if deasserted, so it's done here */
PCM990_INTSETCLR |= 1 << pcm990_irq;
PCM990_INTMSKENA = (pcm990_irq_enabled |= (1 << pcm990_irq));
}

static struct irq_chip pcm990_irq_chip = {
.mask_ack = pcm990_mask_ack_irq,
.unmask = pcm990_unmask_irq,
.irq_mask_ack = pcm990_mask_ack_irq,
.irq_unmask = pcm990_unmask_irq,
};

static void pcm990_irq_handler(unsigned int irq, struct irq_desc *desc)
{
unsigned long pending = (~PCM990_INTSETCLR) & pcm990_irq_enabled;

do {
desc->chip->ack(irq); /* clear our parent IRQ */
/* clear our parent IRQ */
desc->irq_data.chip->irq_ack(&desc->irq_data);
if (likely(pending)) {
irq = PCM027_IRQ(0) + __ffs(pending);
generic_handle_irq(irq);
Expand Down
7 changes: 4 additions & 3 deletions trunk/arch/arm/mach-pxa/pxa25x.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include <linux/platform_device.h>
#include <linux/suspend.h>
#include <linux/sysdev.h>
#include <linux/irq.h>

#include <asm/mach/map.h>
#include <mach/hardware.h>
Expand Down Expand Up @@ -282,15 +283,15 @@ static inline void pxa25x_init_pm(void) {}
/* PXA25x: supports wakeup from GPIO0..GPIO15 and RTC alarm
*/

static int pxa25x_set_wake(unsigned int irq, unsigned int on)
static int pxa25x_set_wake(struct irq_data *d, unsigned int on)
{
int gpio = IRQ_TO_GPIO(irq);
int gpio = IRQ_TO_GPIO(d->irq);
uint32_t mask = 0;

if (gpio >= 0 && gpio < 85)
return gpio_set_wake(gpio, on);

if (irq == IRQ_RTCAlrm) {
if (d->irq == IRQ_RTCAlrm) {
mask = PWER_RTC;
goto set_pwer;
}
Expand Down
Loading

0 comments on commit fb127dd

Please sign in to comment.