return ret;
 
        for (i = 0; i < bytes / 2; i++) {
-               buf[i] = be16_to_cpu(buf[i]);
-
                dev_vdbg(wm8994->dev, "Read %04x from R%d(0x%x)\n",
-                        buf[i], reg + i, reg + i);
+                        be16_to_cpu(buf[i]), reg + i, reg + i);
        }
 
        return 0;
        if (ret < 0)
                return ret;
        else
-               return val;
+               return be16_to_cpu(val);
 }
 EXPORT_SYMBOL_GPL(wm8994_reg_read);
 
  * @wm8994: Device to read from
  * @reg: First register
  * @count: Number of registers
- * @buf: Buffer to fill.
+ * @buf: Buffer to fill.  The data will be returned big endian.
  */
 int wm8994_bulk_read(struct wm8994 *wm8994, unsigned short reg,
                     int count, u16 *buf)
        if (ret < 0)
                goto out;
 
+       r = be16_to_cpu(r);
+
        r &= ~mask;
        r |= val;
 
 
                return IRQ_NONE;
        }
 
-       /* Apply masking */
-       for (i = 0; i < WM8994_NUM_IRQ_REGS; i++)
+       /* Bit swap and apply masking */
+       for (i = 0; i < WM8994_NUM_IRQ_REGS; i++) {
+               status[i] = be16_to_cpu(status[i]);
                status[i] &= ~wm8994->irq_masks_cur[i];
+       }
 
        /* Report */
        for (i = 0; i < ARRAY_SIZE(wm8994_irqs); i++) {