PERFORCE change 100315 for review

Warner Losh imp at FreeBSD.org
Thu Jun 29 23:14:46 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=100315

Change 100315 by imp at imp_lighthouse on 2006/06/29 21:04:46

	Add support for multiple EEPROM devices on the iic bus.  Or at least
	for devices not at address 0.

Affected files ...

.. //depot/projects/arm/src/sys/boot/arm/at91/bootiic/env_vars.c#11 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/eeprom.c#5 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/lib.h#11 edit

Differences ...

==== //depot/projects/arm/src/sys/boot/arm/at91/bootiic/env_vars.c#11 (text+ko) ====

@@ -98,7 +98,7 @@
 		*cPtr++ = 0;
 	}
 
-	WriteEEPROM((unsigned)&BootCommandSection, env_table,
+	WriteEEPROM(0, (unsigned)&BootCommandSection, env_table,
 		sizeof(env_table));
 }
 

==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/eeprom.c#5 (text+ko) ====

@@ -83,7 +83,7 @@
  * .KB_C_FN_DEFINITION_END
  */
 void
-ReadEEPROM(unsigned ee_addr, char *data_addr, unsigned size)
+ReadEEPROM(unsigned addr, unsigned ee_off, char *data_addr, unsigned size)
 {
 	const AT91PS_TWI 	twiPtr = AT91C_BASE_TWI;
 	unsigned int status;
@@ -92,11 +92,11 @@
 	status = twiPtr->TWI_RHR;
 
 	// Set the TWI Master Mode Register
-	twiPtr->TWI_MMR = (TWSI_EEPROM_ADDRESS << 16) |
+	twiPtr->TWI_MMR = ((TWSI_EEPROM_ADDRESS | addr) << 16) |
 	    AT91C_TWI_IADRSZ_2_BYTE | AT91C_TWI_MREAD;
 
 	// Set TWI Internal Address Register
-	twiPtr->TWI_IADR = ee_addr;
+	twiPtr->TWI_IADR = ee_off;
 
 	// Start transfer
 	twiPtr->TWI_CR = AT91C_TWI_START;
@@ -128,8 +128,8 @@
 
 /*
  * .KB_C_FN_DEFINITION_START
- * void WriteEEPROM(unsigned ee_addr, char *data_addr, unsigned size)
- *  This global function writes data to the eeprom at ee_addr using data
+ * void WriteEEPROM(unsigned ee_off, char *data_addr, unsigned size)
+ *  This global function writes data to the eeprom at ee_off using data
  * from data_addr for size bytes.  Assume the TWI has been initialized.
  * This function does not utilize the page write mode as the write time is
  * much greater than the time required to access the device for byte-write
@@ -137,22 +137,22 @@
  * .KB_C_FN_DEFINITION_END
  */
 void
-WriteEEPROM(unsigned ee_addr, char *data_addr, unsigned size)
+WriteEEPROM(unsigned addr, unsigned ee_off, char *data_addr, unsigned size)
 {
 	const AT91PS_TWI 	twiPtr = AT91C_BASE_TWI;
 	unsigned		status;
 	char			test_data;
 
 	while (size--) {
-		if (!(ee_addr & 0x3f))
+		if (!(ee_off & 0x3f))
 			putchar('.');
 
 		// Set the TWI Master Mode Register
-		twiPtr->TWI_MMR = ((TWSI_EEPROM_ADDRESS << 16) |
+		twiPtr->TWI_MMR = (((TWSI_EEPROM_ADDRESS | addr) << 16) |
 		    AT91C_TWI_IADRSZ_2_BYTE) & ~AT91C_TWI_MREAD;
 
 		// Set TWI Internal Address Register
-		twiPtr->TWI_IADR = ee_addr++;
+		twiPtr->TWI_IADR = ee_off++;
 
 		status = twiPtr->TWI_SR;
 
@@ -173,7 +173,7 @@
 			continue;
 
 		// wait for write operation to complete
-		ReadEEPROM(ee_addr, &test_data, 1);
+		ReadEEPROM(addr, ee_off, &test_data, 1);
 	}
 
 	putchar('\r');

==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/lib.h#11 (text) ====

@@ -33,8 +33,9 @@
 
 /* The following function write eeprom at ee_addr using data 	*/
 /*  from data_add for size bytes.				*/
-void ReadEEPROM(unsigned ee_addr, char *data_addr, unsigned size);
-void WriteEEPROM(unsigned ee_addr, char *data_addr, unsigned size);
+void ReadEEPROM(unsigned addr, unsigned eeoff, char *data_addr, unsigned size);
+void WriteEEPROM(unsigned addr, unsigned eeoff, char *data_addr,
+  unsigned size);
 void InitEEPROM(void);
 
 /* XMODEM protocol */


More information about the p4-projects mailing list