|
@@ -28,12 +28,16 @@
|
|
|
#include <dtt.h>
|
|
|
#include <i2c.h>
|
|
|
|
|
|
+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);
|