blob: 5bba12d4d02af5ec9f38d22f397616bf3f9aed1c [file] [log] [blame]
wdenk38635852002-08-27 05:55:31 +00001/*
2 * (C) Copyright 2001
3 * Erik Theisen, Wave 7 Optics, etheisen@mindspring.com
4 *
5 * See file CREDITS for list of people who contributed to this
6 * project.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of
11 * the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21 * MA 02111-1307 USA
22 */
23
24#include <common.h>
25#include <config.h>
26#include <command.h>
wdenk38635852002-08-27 05:55:31 +000027
wdenk38635852002-08-27 05:55:31 +000028#include <dtt.h>
Stefan Roese0dc018e2007-02-20 10:51:26 +010029#include <i2c.h>
wdenk38635852002-08-27 05:55:31 +000030
Heiko Schocher780f13a2011-08-01 04:01:43 +000031static unsigned long sensor_initialized;
32
Wolfgang Denk54841ab2010-06-28 22:00:46 +020033int do_dtt (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
wdenk38635852002-08-27 05:55:31 +000034{
35 int i;
36 unsigned char sensors[] = CONFIG_DTT_SENSORS;
Stefan Roese0dc018e2007-02-20 10:51:26 +010037 int old_bus;
38
Heiko Schocher780f13a2011-08-01 04:01:43 +000039 /* Force a compilation error, if there are more then 32 sensors */
40 BUILD_BUG_ON(sizeof(sensors) > 32);
Stefan Roese0dc018e2007-02-20 10:51:26 +010041 /* switch to correct I2C bus */
42 old_bus = I2C_GET_BUS();
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +020043 I2C_SET_BUS(CONFIG_SYS_DTT_BUS_NUM);
wdenk38635852002-08-27 05:55:31 +000044
45 /*
46 * Loop through sensors, read
47 * temperature, and output it.
48 */
Heiko Schocher780f13a2011-08-01 04:01:43 +000049 for (i = 0; i < sizeof(sensors); i++) {
50 if ((sensor_initialized & (1 << i)) == 0) {
51 if (dtt_init_one(sensors[i]) != 0) {
52 printf("DTT%d: Failed init!\n", i);
53 continue;
54 }
55 sensor_initialized |= (1 << i);
56 }
57 printf("DTT%d: %i C\n", i + 1, dtt_get_temp(sensors[i]));
58 }
Stefan Roese0dc018e2007-02-20 10:51:26 +010059
60 /* switch back to original I2C bus */
61 I2C_SET_BUS(old_bus);
wdenk38635852002-08-27 05:55:31 +000062
63 return 0;
64} /* do_dtt() */
65
wdenk8bde7f72003-06-27 21:31:46 +000066/***************************************************/
67
wdenk0d498392003-07-01 21:06:45 +000068U_BOOT_CMD(
69 dtt, 1, 1, do_dtt,
Wolfgang Denka89c33d2009-05-24 17:06:54 +020070 "Read temperature from Digital Thermometer and Thermostat",
71 ""
wdenk8bde7f72003-06-27 21:31:46 +000072);