1
0
mirror of https://github.com/DigitalDevices/dddvb.git synced 2023-10-10 13:37:43 +02:00

add defines to simply IRQ handler

This commit is contained in:
Ralph Metzler 2017-12-05 19:37:29 +01:00
parent eabde4ab5a
commit 611065f572

View File

@ -2709,7 +2709,17 @@ void ddb_ports_release(struct ddb *dev)
dev->link[0].irq[_n].handler(dev->link[0].irq[_n].data); } \
while (0)
#define IRQ_HANDLE_BYTE(_shift) { \
#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)); \
@ -2725,51 +2735,16 @@ void ddb_ports_release(struct ddb *dev)
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)
@ -2842,46 +2817,10 @@ static irqreturn_t irq_handle_v2_n(struct ddb *dev, u32 n)
return IRQ_NONE;
ddbwritel(dev, s, reg);
if ((s & 0x000000ff)) {
IRQ_HANDLE(0 + off);
IRQ_HANDLE(1 + off);
IRQ_HANDLE(2 + off);
IRQ_HANDLE(3 + off);
IRQ_HANDLE(4 + off);
IRQ_HANDLE(5 + off);
IRQ_HANDLE(6 + off);
IRQ_HANDLE(7 + off);
}
if ((s & 0x0000ff00)) {
IRQ_HANDLE(8 + off);
IRQ_HANDLE(9 + off);
IRQ_HANDLE(10 + off);
IRQ_HANDLE(11 + off);
IRQ_HANDLE(12 + off);
IRQ_HANDLE(13 + off);
IRQ_HANDLE(14 + off);
IRQ_HANDLE(15 + off);
}
if ((s & 0x00ff0000)) {
IRQ_HANDLE(16 + off);
IRQ_HANDLE(17 + off);
IRQ_HANDLE(18 + off);
IRQ_HANDLE(19 + off);
IRQ_HANDLE(20 + off);
IRQ_HANDLE(21 + off);
IRQ_HANDLE(22 + off);
IRQ_HANDLE(23 + off);
}
if ((s & 0xff000000)) {
IRQ_HANDLE(24 + off);
IRQ_HANDLE(25 + off);
IRQ_HANDLE(26 + off);
IRQ_HANDLE(27 + off);
IRQ_HANDLE(28 + off);
IRQ_HANDLE(29 + off);
IRQ_HANDLE(30 + off);
IRQ_HANDLE(31 + off);
}
IRQ_HANDLE_BYTE(0 + off);
IRQ_HANDLE_BYTE(8 + off);
IRQ_HANDLE_BYTE(16 + off);
IRQ_HANDLE_BYTE(24 + off);
return IRQ_HANDLED;
}
@ -2903,10 +2842,7 @@ irqreturn_t ddb_irq_handler_v2(int irq, void *dev_id)
irq_handle_v2_n(dev, 2);
if (s & 0x00000004)
irq_handle_v2_n(dev, 3);
IRQ_HANDLE(8);
IRQ_HANDLE(9);
IRQ_HANDLE(10);
IRQ_HANDLE(11);
IRQ_HANDLE_NIBBLE(8);
} while ((s = 0xffff & ddbreadl(dev, INTERRUPT_V2_STATUS)));
return ret;