[PATCH] I2C: Add support for multiple I2C busses for RTC & DTT
This patch switches to the desired I2C bus when the date/dtt commands are called. This can be configured using the CFG_RTC_BUS_NUM and/or CFG_DTT_BUS_NUM defines. Signed-off-by: Stefan Roese <sr@denx.de>
This commit is contained in:
		
							parent
							
								
									4037ed3b63
								
							
						
					
					
						commit
						0dc018ece1
					
				
							
								
								
									
										10
									
								
								README
								
								
								
								
							
							
						
						
									
										10
									
								
								README
								
								
								
								
							| 
						 | 
				
			
			@ -1347,6 +1347,16 @@ The following options need to be configured:
 | 
			
		|||
		If defined, then this indicates the I2C bus number for DDR SPD.
 | 
			
		||||
		If not defined, then U-Boot assumes that SPD is on I2C bus 0.
 | 
			
		||||
 | 
			
		||||
		CFG_RTC_BUS_NUM
 | 
			
		||||
 | 
			
		||||
		If defined, then this indicates the I2C bus number for the RTC.
 | 
			
		||||
		If not defined, then U-Boot assumes that RTC is on I2C bus 0.
 | 
			
		||||
 | 
			
		||||
		CFG_DTT_BUS_NUM
 | 
			
		||||
 | 
			
		||||
		If defined, then this indicates the I2C bus number for the DTT.
 | 
			
		||||
		If not defined, then U-Boot assumes that DTT is on I2C bus 0.
 | 
			
		||||
 | 
			
		||||
		CONFIG_FSL_I2C
 | 
			
		||||
 | 
			
		||||
		Define this option if you want to use Freescale's I2C driver in
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,6 +27,7 @@
 | 
			
		|||
#include <common.h>
 | 
			
		||||
#include <command.h>
 | 
			
		||||
#include <rtc.h>
 | 
			
		||||
#include <i2c.h>
 | 
			
		||||
 | 
			
		||||
DECLARE_GLOBAL_DATA_PTR;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -44,6 +45,11 @@ int do_date (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
			
		|||
{
 | 
			
		||||
	struct rtc_time tm;
 | 
			
		||||
	int rcode = 0;
 | 
			
		||||
	int old_bus;
 | 
			
		||||
 | 
			
		||||
	/* switch to correct I2C bus */
 | 
			
		||||
	old_bus = I2C_GET_BUS();
 | 
			
		||||
	I2C_SET_BUS(CFG_RTC_BUS_NUM);
 | 
			
		||||
 | 
			
		||||
	switch (argc) {
 | 
			
		||||
	case 2:			/* set date & time */
 | 
			
		||||
| 
						 | 
				
			
			@ -56,7 +62,7 @@ int do_date (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
			
		|||
			/* insert new date & time */
 | 
			
		||||
			if (mk_date (argv[1], &tm) != 0) {
 | 
			
		||||
				puts ("## Bad date format\n");
 | 
			
		||||
				return 1;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			/* and write to RTC */
 | 
			
		||||
			rtc_set (&tm);
 | 
			
		||||
| 
						 | 
				
			
			@ -71,11 +77,15 @@ int do_date (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 | 
			
		|||
				"unknown " : RELOC(weekdays[tm.tm_wday]),
 | 
			
		||||
			tm.tm_hour, tm.tm_min, tm.tm_sec);
 | 
			
		||||
 | 
			
		||||
		return 0;
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		printf ("Usage:\n%s\n", cmdtp->usage);
 | 
			
		||||
		rcode = 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* switch back to original I2C bus */
 | 
			
		||||
	I2C_SET_BUS(old_bus);
 | 
			
		||||
 | 
			
		||||
	return rcode;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,19 +28,27 @@
 | 
			
		|||
#if (CONFIG_COMMANDS & CFG_CMD_DTT)
 | 
			
		||||
 | 
			
		||||
#include <dtt.h>
 | 
			
		||||
#include <i2c.h>
 | 
			
		||||
 | 
			
		||||
int do_dtt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 | 
			
		||||
{
 | 
			
		||||
	int i;
 | 
			
		||||
	unsigned char sensors[] = CONFIG_DTT_SENSORS;
 | 
			
		||||
	int old_bus;
 | 
			
		||||
 | 
			
		||||
	/* switch to correct I2C bus */
 | 
			
		||||
	old_bus = I2C_GET_BUS();
 | 
			
		||||
	I2C_SET_BUS(CFG_DTT_BUS_NUM);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Loop through sensors, read
 | 
			
		||||
	 * temperature, and output it.
 | 
			
		||||
	 */
 | 
			
		||||
	for (i = 0; i < sizeof (sensors); i++) {
 | 
			
		||||
	for (i = 0; i < sizeof (sensors); i++)
 | 
			
		||||
		printf ("DTT%d: %i C\n", i + 1, dtt_get_temp (sensors[i]));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* switch back to original I2C bus */
 | 
			
		||||
	I2C_SET_BUS(old_bus);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}	/* do_dtt() */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -144,6 +144,9 @@ dtt_init (void)
 | 
			
		|||
	unsigned char sensors[] = CONFIG_DTT_SENSORS;
 | 
			
		||||
	const char *const header = "DTT:   ";
 | 
			
		||||
 | 
			
		||||
	/* switch to correct I2C bus */
 | 
			
		||||
	I2C_SET_BUS(CFG_DTT_BUS_NUM);
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < sizeof(sensors); i++) {
 | 
			
		||||
		if (_dtt_init(sensors[i]) != 0)
 | 
			
		||||
			printf ("%s%d FAILED INIT\n", header, i+1);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue