cx_write(MO_AUD_INTSTAT, status);
        if (debug > 1  ||  (status & mask & ~0xff))
                cx88_print_irqbits(core->name, "irq aud",
-                                  cx88_aud_irqs, status, mask);
+                                  cx88_aud_irqs, ARRAY_SIZE(cx88_aud_irqs),
+                                  status, mask);
        /* risc op code error */
        if (status & (1 << 16)) {
                printk(KERN_WARNING "%s/0: audio risc op code error\n",core->name);
 
 };
 
 void cx88_print_irqbits(char *name, char *tag, char **strings,
-                       u32 bits, u32 mask)
+                       int len, u32 bits, u32 mask)
 {
        unsigned int i;
 
        printk(KERN_DEBUG "%s: %s [0x%x]", name, tag, bits);
-       for (i = 0; i < 32; i++) {
+       for (i = 0; i < len; i++) {
                if (!(bits & (1 << i)))
                        continue;
                if (strings[i])
        }
        if (!handled)
                cx88_print_irqbits(core->name, "irq pci",
-                                  cx88_pci_irqs, status,
-                                  core->pci_irqmask);
+                                  cx88_pci_irqs, ARRAY_SIZE(cx88_pci_irqs),
+                                  status, core->pci_irqmask);
        return handled;
 }
 
 
 
        if (debug || (status & mask & ~0xff))
                cx88_print_irqbits(core->name, "irq mpeg ",
-                                  cx88_mpeg_irqs, status, mask);
+                                  cx88_mpeg_irqs, ARRAY_SIZE(cx88_mpeg_irqs),
+                                  status, mask);
 
        /* risc op code error */
        if (status & (1 << 16)) {
 
        cx_write(MO_VID_INTSTAT, status);
        if (irq_debug  ||  (status & mask & ~0xff))
                cx88_print_irqbits(core->name, "irq vid",
-                                  cx88_vid_irqs, status, mask);
+                                  cx88_vid_irqs, ARRAY_SIZE(cx88_vid_irqs),
+                                  status, mask);
 
        /* risc op code error */
        if (status & (1 << 16)) {
 
 /* cx88-core.c                                                 */
 
 extern void cx88_print_irqbits(char *name, char *tag, char **strings,
-                              u32 bits, u32 mask);
+                              int len, u32 bits, u32 mask);
 
 extern int cx88_core_irq(struct cx88_core *core, u32 status);
 extern void cx88_wakeup(struct cx88_core *core,