6/9: i2c_init_board
PATCH 1/1 6/9: i2c_init_board
I2C_INIT_BOARD
==============
- introduced a new i2c_init_board() function, to be implemented by the board maintainers for boards that support it.
Robert
Signature · 101 lines
Dipl.-Ing. Robert Schwebel | http://www.pengutronix.de
Pengutronix - Linux Solutions for Science and Industry
Braunschweiger Str. 79, 31134 Hildesheim, Germany
Handelsregister: Amtsgericht Hildesheim, HRA 2686
Phone: +49-5121-28619-0 | Fax: +49-5121-28619-4
-------------- next part --------------
diff -urN -x CVS -x ptx-patches -x logfile -x logfile1 u-boot/README u-boot-ptx/README
--- u-boot/README 2003-03-06 08:41:17.000000000 +0100
+++ u-boot-ptx/README 2003-03-06 09:21:57.000000000 +0100
@@ -897,6 +897,16 @@
controls the rate of data transfer. The data rate thus
is 1 / (I2C_DELAY * 4).
+ CFG_I2C_INIT_BOARD
+
+ When a board is resetted during an i2c bus transfer chips
+ might think that the current transfer is still in progress.
+ On some boards it is possible to access the i2c SCLK line
+ directly, either by using the processor pin as a GPIO or
+ by having a second pin connected to the bus. If this option
+ is defined a custom i2c_coldstart() routine in
+ boards/xxx/board.c is run early in the boot sequence.
+
- SPI Support: CONFIG_SPI
diff -urN -x CVS -x ptx-patches -x logfile -x logfile1 u-boot/cpu/mpc8260/i2c.c u-boot-ptx/cpu/mpc8260/i2c.c
--- u-boot/cpu/mpc8260/i2c.c 2002-11-03 01:31:58.000000000 +0100
+++ u-boot-ptx/cpu/mpc8260/i2c.c 2003-03-06 10:41:59.000000000 +0100
@@ -221,6 +221,13 @@
volatile I2C_BD *rxbd, *txbd;
uint dpaddr;
+#ifdef CFG_I2C_INIT_BOARD
+ /* call board specific i2c bus reset routine before accessing the */
+ /* environment, which might be in a chip on that bus. For details */
+ /* about this problem see doc/I2C_Edge_Conditions. */
+ i2c_init_board();
+#endif
+
dpaddr = *((unsigned short*)(&immap->im_dprambase[PROFF_I2C_BASE]));
if (dpaddr == 0) {
/* need to allocate dual port ram */
diff -urN -x CVS -x ptx-patches -x logfile -x logfile1 u-boot/cpu/mpc8xx/i2c.c u-boot-ptx/cpu/mpc8xx/i2c.c
--- u-boot/cpu/mpc8xx/i2c.c 2002-10-02 22:40:41.000000000 +0200
+++ u-boot-ptx/cpu/mpc8xx/i2c.c 2003-03-06 10:42:46.000000000 +0100
@@ -215,6 +215,13 @@
volatile I2C_BD *rxbd, *txbd;
uint dpaddr;
+#ifdef CFG_I2C_INIT_BOARD
+ /* call board specific i2c bus reset routine before accessing the */
+ /* environment, which might be in a chip on that bus. For details */
+ /* about this problem see doc/I2C_Edge_Conditions. */
+ i2c_init_board();
+#endif
+
#ifdef CFG_I2C_UCODE_PATCH
iip = (iic_t *)&cp->cp_dpmem[iip->iic_rpbase];
#else
diff -urN -x CVS -x ptx-patches -x logfile -x logfile1 u-boot/cpu/ppc4xx/i2c.c u-boot-ptx/cpu/ppc4xx/i2c.c
--- u-boot/cpu/ppc4xx/i2c.c 2002-11-03 01:32:03.000000000 +0100
+++ u-boot-ptx/cpu/ppc4xx/i2c.c 2003-03-06 10:43:54.000000000 +0100
@@ -85,7 +85,15 @@
unsigned long freqOPB;
int val, divisor;
+#ifdef CFG_I2C_INIT_BOARD
+ /* call board specific i2c bus reset routine before accessing the */
+ /* environment, which might be in a chip on that bus. For details */
+ /* about this problem see doc/I2C_Edge_Conditions. */
+ i2c_init_board();
+#endif
+
/* Handle possible failed I2C state */
+ /* FIXME: put this into i2c_init_board()? */
_i2c_bus_reset ();
/* clear lo master address */
diff -urN -x CVS -x ptx-patches -x logfile -x logfile1 u-boot/cpu/xscale/i2c.c u-boot-ptx/cpu/xscale/i2c.c
--- u-boot/cpu/xscale/i2c.c 2003-03-06 01:02:09.000000000 +0100
+++ u-boot-ptx/cpu/xscale/i2c.c 2003-03-06 10:44:30.000000000 +0100
@@ -41,6 +41,7 @@
* - I2C_PXA_SLAVE_ADDR
*/
+#include <asm/arch/hardware.h>
#include <asm/arch/pxa-regs.h>
#include <i2c.h>
@@ -244,6 +245,12 @@
void i2c_init(int speed, int slaveaddr)
{
+#ifdef CFG_I2C_INIT_BOARD
+ /* call board specific i2c bus reset routine before accessing the */
+ /* environment, which might be in a chip on that bus. For details */
+ /* about this problem see doc/I2C_Edge_Conditions. */
+ i2c_init_board();
+#endif
}PATCH 1/1 6/9: i2c_init_board
Quoted 3 lines · In message <[email protected]> you wrote:
- introduced a new
i2c_init_board()function, to be implemented by the board maintainers for boards that support it.
...
Review
Quoted 3 lines
(quoted diff) +3
-0+ CFG_I2C_INIT_BOARD + + When a board is resetted during an i2c bus transfer chips
<fascist mode>
See your 7th grade English book if you don't know that it's reset|reset|reset.
</fascist mode>
Dear Robert, as you can see, nobody is perfect. Not even you. So please save your malicious comments.
Review
Quoted 4 lines
(quoted diff) +4
-0+ directly, either by using the processor pin as a GPIO or + by having a second pin connected to the bus. If this option + is defined a custom i2c_coldstart() routine in + boards/xxx/board.c is run early in the boot sequence.
Also, the comment seems to be wrong.
cpu/mpc8260/i2c.c
Quoted 2 lines
cpu/mpc8260/i2c.c +0
-0
...
Did you just miss it, or is there any special reason not to add this to cpu/mpc824x/drivers/i2c/i2c1.c , too?
Added.
Wolfgang Denk
Signature · 3 lines
Software Engineering: Embedded and Realtime Systems, Embedded Linux Phone: (+49)-8142-4596-87 Fax: (+49)-8142-4596-88 Email: wd at denx.de The high cost of living hasn't affected its popularity.