Try changing all
i2c->i2c_i2com |= 0x80; /* Begin transmission */
to
i2c->i2c_i2com |= 0x80 | 0x01; /* Begin transmission */
That should remove the need to do force_reinit(cpm) I hope.
See http://ozlabs.org/pipermail/linuxppc-embedded/2005-August/019600.html for a litte more info.
Also, I think you should remove the busy wait code. Its not needed IMHO.
Jocke