X-Git-Url: http://git.ozo.com/?a=blobdiff_plain;f=package%2Fbroadcom-diag%2Fsrc%2Fgpio.h;h=6d83039ee709d17083e56a3130196cd7fa104433;hb=ee4ec8bc542c697636a3f6a9722a884b8e7dc7f2;hp=982caddae4e384616f472d0bd75013545141967d;hpb=c7a59f885d9372e0a8695f6906587a2fa0931e20;p=openwrt-10.03%2F.git diff --git a/package/broadcom-diag/src/gpio.h b/package/broadcom-diag/src/gpio.h index 982caddae..6d83039ee 100644 --- a/package/broadcom-diag/src/gpio.h +++ b/package/broadcom-diag/src/gpio.h @@ -53,7 +53,7 @@ static inline u32 gpio_intpolarity(u32 mask, u32 value) gpio_op(polarity, mask, value); } -static void gpio_set_irqenable(int enabled, irqreturn_t (*handler)(int, void *, struct pt_regs *)) +static void gpio_set_irqenable(int enabled, irqreturn_t (*handler)(int, void *)) { int irq; @@ -63,12 +63,15 @@ static void gpio_set_irqenable(int enabled, irqreturn_t (*handler)(int, void *, irq = ssb_mips_irq(ssb.extif.dev) + 2; else return; - if (enabled) - request_irq(irq, handler, SA_SHIRQ | SA_SAMPLE_RANDOM, "gpio", handler); - else + if (enabled) { + if (request_irq(irq, handler, IRQF_SHARED | IRQF_SAMPLE_RANDOM, "gpio", handler)) + return; + } else { free_irq(irq, handler); + } - gpio_intmask(1, (enabled ? 1 : 0)); + if (ssb.chipco.dev) + ssb_write32_masked(ssb.chipco.dev, SSB_CHIPCO_IRQMASK, SSB_CHIPCO_IRQ_GPIO, (enabled ? SSB_CHIPCO_IRQ_GPIO : 0)); } #else