]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - drivers/hwmon/lm73.c
spi: omap3_spi: add am43xx support to omap3_spi
[karo-tx-uboot.git] / drivers / hwmon / lm73.c
index f9ae01297bcdfd66813054977bb480aca0a4e3a5..c15c7514d86598562acaa07dd5d0ec25af189277 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2007
+ * (C) Copyright 2007-2008
  * Larry Johnson, lrj@acm.org
  *
  * based on dtt/lm75.c which is ...
@@ -7,23 +7,7 @@
  * (C) Copyright 2001
  * Bill Hunter,  Wave 7 Optics, williamhunter@mediaone.net
  *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 /*
  */
 
 #include <common.h>
-
-#ifdef CONFIG_DTT_LM73
-#if !defined(CFG_EEPROM_PAGE_WRITE_ENABLE) || \
-       (CFG_EEPROM_PAGE_WRITE_BITS < 1)
-# error "CFG_EEPROM_PAGE_WRITE_ENABLE must be defined and CFG_EEPROM_PAGE_WRITE_BITS must be greater than  1 to use CONFIG_DTT_LM73"
-#endif
-
 #include <i2c.h>
 #include <dtt.h>
 
  * Device code
  */
 #define DTT_I2C_DEV_CODE 0x48  /* National Semi's LM73 device */
-
-int dtt_read(int sensor, int reg)
+#define DTT_READ_TEMP          0x0
+#define DTT_CONFIG             0x1
+#define DTT_TEMP_HIGH          0x2
+#define DTT_TEMP_LOW           0x3
+#define DTT_CONTROL            0x4
+#define DTT_ID                 0x7
+
+int dtt_read(int const sensor, int const reg)
 {
        int dlen;
-       uchar data[2];
+       uint8_t data[2];
 
        /*
         * Validate 'reg' param and get register size.
@@ -69,27 +52,24 @@ int dtt_read(int sensor, int reg)
                return -1;
        }
        /*
-        * Calculate sensor address and register.
-        */
-       sensor = DTT_I2C_DEV_CODE + (sensor & 0x07);    /* calculate LM73 addr */
-       /*
-        * Now try to read the register.
+        * Try to read the register at the calculated sensor address.
         */
-       if (i2c_read(sensor, reg, 1, data, dlen) != 0)
+       if (0 !=
+           i2c_read(DTT_I2C_DEV_CODE + (sensor & 0x07), reg, 1, data, dlen))
                return -1;
        /*
         * Handle 2 byte result.
         */
        if (2 == dlen)
-               return ((int)((short)data[1] + (((short)data[0]) << 8)));
+               return (int)((unsigned)data[0] << 8 | (unsigned)data[1]);
 
        return (int)data[0];
 } /* dtt_read() */
 
-int dtt_write(int sensor, int reg, int val)
+int dtt_write(int const sensor, int const reg, int const val)
 {
        int dlen;
-       uchar data[2];
+       uint8_t data[2];
 
        /*
         * Validate 'reg' param and handle register size
@@ -98,28 +78,25 @@ int dtt_write(int sensor, int reg, int val)
        case DTT_CONFIG:
        case DTT_CONTROL:
                dlen = 1;
-               data[0] = (char)(val & 0xff);
+               data[0] = (uint8_t) val;
                break;
        case DTT_TEMP_HIGH:
        case DTT_TEMP_LOW:
                dlen = 2;
-               data[0] = (char)((val >> 8) & 0xff);    /* MSB first */
-               data[1] = (char)(val & 0xff);
+               data[0] = (uint8_t) (val >> 8); /* MSB first */
+               data[1] = (uint8_t) val;
                break;
        default:
                return -1;
        }
        /*
-        * Calculate sensor address and register.
-        */
-       sensor = DTT_I2C_DEV_CODE + (sensor & 0x07);    /* calculate LM73 addr */
-       /*
-        * Write value to register.
+        * Write value to register at the calculated sensor address.
         */
-       return i2c_write(sensor, reg, 1, data, dlen) != 0;
+       return 0 != i2c_write(DTT_I2C_DEV_CODE + (sensor & 0x07), reg, 1, data,
+                             dlen);
 } /* dtt_write() */
 
-static int _dtt_init(int sensor)
+int dtt_init_one(int const sensor)
 {
        int val;
 
@@ -127,55 +104,43 @@ static int _dtt_init(int sensor)
         * Validate the Identification register
         */
        if (0x0190 != dtt_read(sensor, DTT_ID))
-               return 1;
+               return -1;
        /*
         * Setup THIGH (upper-limit) and TLOW (lower-limit) registers
         */
-       val = CFG_DTT_MAX_TEMP << 7;
+       val = CONFIG_SYS_DTT_MAX_TEMP << 7;
        if (dtt_write(sensor, DTT_TEMP_HIGH, val))
-               return 1;
+               return -1;
 
-       val = CFG_DTT_MIN_TEMP << 7;
+       val = CONFIG_SYS_DTT_MIN_TEMP << 7;
        if (dtt_write(sensor, DTT_TEMP_LOW, val))
-               return 1;
+               return -1;
        /*
         * Setup configuraton register
         */
        /* config = alert active low, disabled, and reset */
        val = 0x64;
        if (dtt_write(sensor, DTT_CONFIG, val))
-               return 1;
+               return -1;
        /*
         * Setup control/status register
         */
        /* control = temp resolution 0.25C */
        val = 0x00;
        if (dtt_write(sensor, DTT_CONTROL, val))
-               return 1;
+               return -1;
 
        dtt_read(sensor, DTT_CONTROL);  /* clear temperature flags */
        return 0;
-} /* _dtt_init() */
+} /* dtt_init_one() */
 
-int dtt_init(void)
+int dtt_get_temp(int const sensor)
 {
-       int i;
-       unsigned char sensors[] = CONFIG_DTT_SENSORS;
-       const char *const header = "DTT:   ";
+       int const ret = dtt_read(sensor, DTT_READ_TEMP);
 
-       for (i = 0; i < sizeof(sensors); i++) {
-               if (_dtt_init(sensors[i]) != 0)
-                       printf("%s%d FAILED INIT\n", header, i + 1);
-               else
-                       printf("%s%d is %i C\n", header, i + 1,
-                              dtt_get_temp(sensors[i]));
+       if (ret < 0) {
+               printf("DTT temperature read failed.\n");
+               return 0;
        }
-       return 0;
-} /* dtt_init() */
-
-int dtt_get_temp(int sensor)
-{
-       return (dtt_read(sensor, DTT_READ_TEMP) + 0x0040) >> 7;
+       return (int)((int16_t) ret + 0x0040) >> 7;
 } /* dtt_get_temp() */
-
-#endif /* CONFIG_DTT_LM73 */