[U-Boot] [PATCH 6/9 v8] TMU: Add TMU support in dtt command
Simon Glass
sjg at chromium.org
Tue Feb 5 17:55:05 CET 2013
Hi Akshay,
On Tue, Feb 5, 2013 at 3:57 AM, Akshay Saraswat <akshay.s at samsung.com> wrote:
> Add generic TMU support alongwith i2c sensors in dtt command
> to enable temperature reading in cases where TMU is present
> instead of i2c sensors.
>
> Signed-off-by: Akshay Saraswat <akshay.s at samsung.com>
> ---
> Changes since v7:
> - Made sensor_initialized static again.
> - Changed return type to int in dtt_init declaration.
>
> common/cmd_dtt.c | 63 ++++++++++++++++++++++++++++++++----------------------
> include/dtt.h | 2 +-
> 2 files changed, 38 insertions(+), 27 deletions(-)
>
> diff --git a/common/cmd_dtt.c b/common/cmd_dtt.c
> index cd94423..799e1c7 100644
> --- a/common/cmd_dtt.c
> +++ b/common/cmd_dtt.c
> @@ -27,52 +27,52 @@
>
> #include <dtt.h>
> #include <i2c.h>
> +#include <tmu.h>
>
> +#if defined CONFIG_DTT_SENSORS
> static unsigned long sensor_initialized;
> +#endif
>
> -static void _initialize_dtt(void)
> +int dtt_tmu(void)
> {
> - int i;
> - unsigned char sensors[] = CONFIG_DTT_SENSORS;
> +#if defined CONFIG_TMU_CMD_DTT
> + int cur_temp;
>
> - 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);
> - }
> + /* Sense and return latest thermal info */
> + if (tmu_monitor(&cur_temp) == TMU_STATUS_INIT) {
> + puts("TMU is in unknown state, temperature is invalid\n");
> + return -1;
> }
> -}
> -
> -void dtt_init(void)
> -{
> - int old_bus;
> -
> - /* switch to correct I2C bus */
> - old_bus = I2C_GET_BUS();
> - I2C_SET_BUS(CONFIG_SYS_DTT_BUS_NUM);
> -
> - _initialize_dtt();
> + printf("Current temperature: %u degrees Celsius\n", cur_temp);
> +#endif
>
> - /* switch back to original I2C bus */
> - I2C_SET_BUS(old_bus);
> + return 0;
> }
>
> -int do_dtt (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
> +int dtt_init(void)
I think this function is supposed to initialize the sensors but you
have changed it to print them out. Other places call this function and
likely rely on the current behaviour.
I think all you need to do is:
- leave the two _initialize_dtt() and init_dtt() functions as they were
- put the code for the old dtt command into a function, like
dtt_i2c(), but leave it largely as is
Really then all you are doing is putting the current code in do_dtt()
into a dtt_i2c() function, and adding calls to dtt_i2c() and dtt_tmu()
from the now-empty do_dtt(). You actually have do_dtt() correct below,
although I suggest dtt_i2c() is a better name for the function than
dtt_init().
It is unfortunate that the existing code is so fixed-purpose, and not
particularly clean, but this approach should allow you to do what you
need.
> {
> +#if defined CONFIG_DTT_SENSORS
> 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);
>
> - _initialize_dtt();
> + /* Initialize dtt sensors */
> + 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);
> + }
> + }
>
> /*
> * Loop through sensors, read
> @@ -83,8 +83,19 @@ int do_dtt (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
>
> /* switch back to original I2C bus */
> I2C_SET_BUS(old_bus);
> +#endif
>
> return 0;
> +}
> +
> +int do_dtt(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
> +{
> + int err = 0;
> +
> + err |= dtt_init();
> + err |= dtt_tmu();
> +
> + return err;
> } /* do_dtt() */
>
> /***************************************************/
> diff --git a/include/dtt.h b/include/dtt.h
> index 6d5534d..94fbce3 100644
> --- a/include/dtt.h
> +++ b/include/dtt.h
> @@ -52,7 +52,7 @@
> #endif
> #endif /* CONFIG_DTT_ADM1021 */
>
> -extern void dtt_init(void);
> +extern int dtt_init(void);
> extern int dtt_init_one(int);
> extern int dtt_read(int sensor, int reg);
> extern int dtt_write(int sensor, int reg, int val);
> --
> 1.7.9.5
>
Regards,
Simon
More information about the U-Boot
mailing list