dprintk(4, "%s()\n", __func__);
 
        au0828_write(dev, REG_2FF, 0x01);
-       au0828_write(dev, REG_202, 0x07);
+
+       /* FIXME: There is a problem with i2c communications with xc5000 that
+          requires us to slow down the i2c clock until we have a better
+          strategy (such as using the secondary i2c bus to do firmware
+          loading */
+       if ((msg->addr << 1) == 0xc2) {
+               au0828_write(dev, REG_202, 0x40);
+       } else {
+               au0828_write(dev, REG_202, 0x07);
+       }
 
        /* Hardware needs 8 bit addresses */
        au0828_write(dev, REG_203, msg->addr << 1);
        dprintk(4, "%s()\n", __func__);
 
        au0828_write(dev, REG_2FF, 0x01);
-       au0828_write(dev, REG_202, 0x07);
+
+       /* FIXME: There is a problem with i2c communications with xc5000 that
+          requires us to slow down the i2c clock until we have a better
+          strategy (such as using the secondary i2c bus to do firmware
+          loading */
+       if ((msg->addr << 1) == 0xc2) {
+               au0828_write(dev, REG_202, 0x40);
+       } else {
+               au0828_write(dev, REG_202, 0x07);
+       }
 
        /* Hardware needs 8 bit addresses */
        au0828_write(dev, REG_203, msg->addr << 1);