microcodepatch

Peter Desnoyers pdesnoyers at chinook.com
Thu Oct 25 05:06:31 EST 2001


The I2C driver doesn't work properly with the microcode patch - it
initializes tbptr and rbptr to 0, not r_tbase and r_rbase, and it uses
the INIT_TRX command (which the patched code doesn't support) instead of
separate INIT_RX and INIT_TX.

You might want to try the attached minor patch, which works for us.

--
.....................................................................
 Peter Desnoyers            (781) 457-1165   pdesnoyers at chinook.com
 Chinook Communications     (617) 661-1979   pjd at fred.cambridge.ma.us
 100 Hayden Ave, Lexington MA 02421
-------------- next part --------------
Index: i2c-algo-8xx.c
===================================================================
RCS file: /src/cvs/hardhat/devkit/lsp/motorola-mbx860/linux-2.4.2_hhl20/drivers/i2c/i2c-algo-8xx.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- i2c-algo-8xx.c	2001/07/24 17:23:38	1.1.1.1
+++ i2c-algo-8xx.c	2001/10/01 19:08:20	1.2
@@ -99,8 +99,12 @@
 		volatile cpm8xx_t *cp = cpm_adap->cp;

 		cp->cp_cpcr =
-			mk_cr_cmd(CPM_CR_CH_I2C, CPM_CR_INIT_TRX) | CPM_CR_FLG;
+			mk_cr_cmd(CPM_CR_CH_I2C, CPM_CR_INIT_RX) | CPM_CR_FLG;
 		while (cp->cp_cpcr & CPM_CR_FLG);
+
+		cp->cp_cpcr =
+			mk_cr_cmd(CPM_CR_CH_I2C, CPM_CR_INIT_TX) | CPM_CR_FLG;
+		while (cp->cp_cpcr & CPM_CR_FLG);
 	}

 	/* Select an arbitrary address.  Just make sure it is unique.
@@ -151,12 +155,12 @@

 	iip->iic_rstate = 0;
 	iip->iic_rdp = 0;
-	iip->iic_rbptr = 0;
+	iip->iic_rbptr = r_rbase;
 	iip->iic_rbc = 0;
 	iip->iic_rxtmp = 0;
 	iip->iic_tstate = 0;
 	iip->iic_tdp = 0;
-	iip->iic_tbptr = 0;
+	iip->iic_tbptr = r_tbase;
 	iip->iic_tbc = 0;
 	iip->iic_txtmp = 0;
 }


More information about the Linuxppc-embedded mailing list