I2C master mode

I am trying to get I2C working in master mode with my own port of Linux 2.6.14 kernel. My processor is the NS9750B-O-200 and I am monitoring the SDA and SCL signals on an oscilloscope. There is only one slave device on the I2C bus, that is a PIC microcontroller using address 3. When I try a read on a non-existant slave, I get the behaviour expected from the I2C standard ie start-address-stop with no acknowledge. However, when I try to read my real slave device, I see the correct address on the bus, with the R/W bit set properly, but the acknowledge from the slave is corrupted - it looks like the processor is still driving the SDA line - any ideas what is going on? what have I forgotten to configure?