From 780f13a9e1a21098c6255aaa1c46ed80aa7a436c Mon Sep 17 00:00:00 2001 From: Heiko Schocher Date: Mon, 1 Aug 2011 04:01:43 +0000 Subject: hwmon: do not init sensors on startup The U-Boot Design Principles[1] clearly say: Initialize devices only when they are needed within U-Boot, i.e. don't initialize the Ethernet interface(s) unless U-Boot performs a download over Ethernet; don't initialize any IDE or USB devices unless U-Boot actually tries to load files from these, etc. (and don't forget to shut down these devices after using them - otherwise nasty things may happen when you try to boot your OS). So, do not initialize and read the sensors on startup. Signed-off-by: Heiko Schocher cc: Wolfgang Denk cc: Holger Brunck --- common/cmd_dtt.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'common/cmd_dtt.c') diff --git a/common/cmd_dtt.c b/common/cmd_dtt.c index 3388e43ca0..5bba12d4d0 100644 --- a/common/cmd_dtt.c +++ b/common/cmd_dtt.c @@ -28,12 +28,16 @@ #include #include +static unsigned long sensor_initialized; + int do_dtt (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) { int i; unsigned char sensors[] = CONFIG_DTT_SENSORS; int old_bus; + /* Force a compilation error, if there are more then 32 sensors */ + BUILD_BUG_ON(sizeof(sensors) > 32); /* switch to correct I2C bus */ old_bus = I2C_GET_BUS(); I2C_SET_BUS(CONFIG_SYS_DTT_BUS_NUM); @@ -42,8 +46,16 @@ int do_dtt (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) * Loop through sensors, read * temperature, and output it. */ - for (i = 0; i < sizeof (sensors); i++) - printf ("DTT%d: %i C\n", i + 1, dtt_get_temp (sensors[i])); + for (i = 0; i < sizeof(sensors); i++) { + if ((sensor_initialized & (1 << i)) == 0) { + if (dtt_init_one(sensors[i]) != 0) { + printf("DTT%d: Failed init!\n", i); + continue; + } + sensor_initialized |= (1 << 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); -- cgit v1.2.1