|
@@ -2388,54 +2388,41 @@ void ddb_ports_release(struct ddb *dev)
|
|
|
dev->link[0].irq[_nr].handler(dev->link[0].irq[_nr].data); } \
|
|
|
while (0)
|
|
|
|
|
|
+#define IRQ_HANDLE_NIBBLE(_shift) { \
|
|
|
+ if (s & (0x0000000f << ((_shift) & 0x1f))) { \
|
|
|
+ IRQ_HANDLE(0 + (_shift)); \
|
|
|
+ IRQ_HANDLE(1 + (_shift)); \
|
|
|
+ IRQ_HANDLE(2 + (_shift)); \
|
|
|
+ IRQ_HANDLE(3 + (_shift)); \
|
|
|
+ } \
|
|
|
+}
|
|
|
+
|
|
|
+#define IRQ_HANDLE_BYTE(_shift) { \
|
|
|
+ if (s & (0x000000ff << ((_shift) & 0x1f))) { \
|
|
|
+ IRQ_HANDLE(0 + (_shift)); \
|
|
|
+ IRQ_HANDLE(1 + (_shift)); \
|
|
|
+ IRQ_HANDLE(2 + (_shift)); \
|
|
|
+ IRQ_HANDLE(3 + (_shift)); \
|
|
|
+ IRQ_HANDLE(4 + (_shift)); \
|
|
|
+ IRQ_HANDLE(5 + (_shift)); \
|
|
|
+ IRQ_HANDLE(6 + (_shift)); \
|
|
|
+ IRQ_HANDLE(7 + (_shift)); \
|
|
|
+ } \
|
|
|
+}
|
|
|
+
|
|
|
static void irq_handle_msg(struct ddb *dev, u32 s)
|
|
|
{
|
|
|
dev->i2c_irq++;
|
|
|
- IRQ_HANDLE(0);
|
|
|
- IRQ_HANDLE(1);
|
|
|
- IRQ_HANDLE(2);
|
|
|
- IRQ_HANDLE(3);
|
|
|
+ IRQ_HANDLE_NIBBLE(0);
|
|
|
}
|
|
|
|
|
|
static void irq_handle_io(struct ddb *dev, u32 s)
|
|
|
{
|
|
|
dev->ts_irq++;
|
|
|
- if ((s & 0x000000f0)) {
|
|
|
- IRQ_HANDLE(4);
|
|
|
- IRQ_HANDLE(5);
|
|
|
- IRQ_HANDLE(6);
|
|
|
- IRQ_HANDLE(7);
|
|
|
- }
|
|
|
- if ((s & 0x0000ff00)) {
|
|
|
- IRQ_HANDLE(8);
|
|
|
- IRQ_HANDLE(9);
|
|
|
- IRQ_HANDLE(10);
|
|
|
- IRQ_HANDLE(11);
|
|
|
- IRQ_HANDLE(12);
|
|
|
- IRQ_HANDLE(13);
|
|
|
- IRQ_HANDLE(14);
|
|
|
- IRQ_HANDLE(15);
|
|
|
- }
|
|
|
- if ((s & 0x00ff0000)) {
|
|
|
- IRQ_HANDLE(16);
|
|
|
- IRQ_HANDLE(17);
|
|
|
- IRQ_HANDLE(18);
|
|
|
- IRQ_HANDLE(19);
|
|
|
- IRQ_HANDLE(20);
|
|
|
- IRQ_HANDLE(21);
|
|
|
- IRQ_HANDLE(22);
|
|
|
- IRQ_HANDLE(23);
|
|
|
- }
|
|
|
- if ((s & 0xff000000)) {
|
|
|
- IRQ_HANDLE(24);
|
|
|
- IRQ_HANDLE(25);
|
|
|
- IRQ_HANDLE(26);
|
|
|
- IRQ_HANDLE(27);
|
|
|
- IRQ_HANDLE(28);
|
|
|
- IRQ_HANDLE(29);
|
|
|
- IRQ_HANDLE(30);
|
|
|
- IRQ_HANDLE(31);
|
|
|
- }
|
|
|
+ IRQ_HANDLE_NIBBLE(4);
|
|
|
+ IRQ_HANDLE_BYTE(8);
|
|
|
+ IRQ_HANDLE_BYTE(16);
|
|
|
+ IRQ_HANDLE_BYTE(24);
|
|
|
}
|
|
|
|
|
|
irqreturn_t ddb_irq_handler0(int irq, void *dev_id)
|