--- linux-2.6.23/drivers/i2c/busses/i2c-stm.c.orig	2009-08-10 18:21:30.000000000 +0800
+++ linux-2.6.23/drivers/i2c/busses/i2c-stm.c	2009-08-10 18:21:39.000000000 +0800
@@ -330,6 +330,9 @@ static irqreturn_t iic_state_machine(int
 							  (NULL, "comms_clk")));
 
 		trsc->start_state = IIC_FSM_START;
+                ssc_store32(adap, SSC_CTL, SSC_CTL_SR | SSC_CTL_EN | SSC_CTL_MS |
+                    SSC_CTL_PO | SSC_CTL_PH | SSC_CTL_HB | 0x8);
+                
 
 		/* Enable RX FIFO, enable clock stretch on TX empty */
 		ssc_store32(adap, SSC_CTL, SSC_CTL_EN | SSC_CTL_MS |
@@ -693,9 +696,9 @@ static int iic_wait_free_bus(struct iic_
 		return 1;
 	}
 
-	iic_ssc_reset(adap);
+	//iic_ssc_reset(adap);
 
-	for (idx = 0; idx < 10; ++idx) {
+	for (idx = 0; idx < 10/*5*/; ++idx) {
 		reg = ssc_load32(adap, SSC_STA);
 		dbg_print("iic_wait_free_bus: status = 0x%08x\n", reg);
 		if (!(reg & SSC_STA_BUSY))
