Patchwork [U-Boot,3/8] hwmon: Extend lm63.c to support LM64

login
register
mail settings
Submitter Dirk Eibach
Date April 6, 2011, 11:53 a.m.
Message ID <1302090830-15824-4-git-send-email-eibach@gdsys.de>
Download mbox | patch
Permalink /patch/90016/
State Superseded
Headers show

Comments

Dirk Eibach - April 6, 2011, 11:53 a.m.
This patch adds support for the National LM64 temperature
sensor with integrated fan control to lm63.c.
It's used on the GDSys DLVision-10G board (405EP).

Main difference between LM63 and LM64 is 16°C offset in sensor
readings.

Signed-off-by: Dirk Eibach <eibach@gdsys.de>
---
 drivers/hwmon/lm63.c           |   28 ++++++++++++++++++++++++----
 include/configs/dlvision-10g.h |    2 +-
 2 files changed, 25 insertions(+), 5 deletions(-)
Stefan Roese - April 13, 2011, 8:47 a.m.
Hi Dirk,

On Wednesday 06 April 2011 13:53:45 Dirk Eibach wrote:
> This patch adds support for the National LM64 temperature
> sensor with integrated fan control to lm63.c.
> It's used on the GDSys DLVision-10G board (405EP).
> 
> Main difference between LM63 and LM64 is 16°C offset in sensor
> readings.
> 
> Signed-off-by: Dirk Eibach <eibach@gdsys.de>
> ---
>  drivers/hwmon/lm63.c           |   28 ++++++++++++++++++++++++----
>  include/configs/dlvision-10g.h |    2 +-
>  2 files changed, 25 insertions(+), 5 deletions(-)

Please split this patch, one patch to extend the lm63 driver and one to add 
its support to your board config header. This way I can apply the ppc4xx 
specific patches without the hwmon change.

And while at it, I suggest to remove the hwmon change from this patchset and 
send it as a separate patch.

Thanks.
 
Cheers,
Stefan

--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office@denx.de

Patch

diff --git a/drivers/hwmon/lm63.c b/drivers/hwmon/lm63.c
index 03616e1..2f1f3cf 100644
--- a/drivers/hwmon/lm63.c
+++ b/drivers/hwmon/lm63.c
@@ -23,14 +23,15 @@ 
  */
 
 /*
- * National LM63 Temperature Sensor
+ * National LM63/LM64 Temperature Sensor
+ * Main difference: LM 64 has -16 Kelvin temperature offset
  */
 
 #include <common.h>
 #include <i2c.h>
 #include <dtt.h>
 
-#define DTT_I2C_DEV_CODE 0x4C	/* National LM63 device */
+#define DTT_I2C_LM63_ADDR	0x4C	/* National LM63 device */
 
 #define DTT_READ_TEMP_RMT_MSB	0x01
 #define DTT_CONFIG		0x03
@@ -58,7 +59,8 @@  int dtt_read(int sensor, int reg)
 	/*
 	 * Calculate sensor address and register.
 	 */
-	sensor = DTT_I2C_DEV_CODE;	/* address of lm63 is not adjustable */
+	if (!sensor)
+		sensor = DTT_I2C_LM63_ADDR;	/* legacy config */
 
 	dlen = 1;
 
@@ -79,7 +81,8 @@  int dtt_write(int sensor, int reg, int val)
 	/*
 	 * Calculate sensor address and register.
 	 */
-	sensor = DTT_I2C_DEV_CODE;	/* address of lm63 is not adjustable */
+	if (!sensor)
+		sensor = DTT_I2C_LM63_ADDR;	/* legacy config */
 
 	dlen = 1;
 	data[0] = (char)(val & 0xff);
@@ -93,6 +96,11 @@  int dtt_write(int sensor, int reg, int val)
 	return 0;
 }				/* dtt_write() */
 
+static int is_lm64(int sensor)
+{
+	return sensor && (sensor != DTT_I2C_LM63_ADDR);
+}
+
 static int _dtt_init(int sensor)
 {
 	int i;
@@ -117,14 +125,23 @@  static int _dtt_init(int sensor)
 		return 1;
 
 	/*
+	 * Make sure PWM Lookup-Table is writeable
+	 */
+	if (dtt_write(sensor, DTT_FAN_CONFIG, 0x20) != 0)
+		return 1;
+
+	/*
 	 * Setup PWM Lookup-Table
 	 */
 	for (i = 0; i < sizeof(pwm_lookup) / sizeof(struct pwm_lookup_entry);
 	     i++) {
 		int address = DTT_PWM_LOOKUP_BASE + 2 * i;
 		val = pwm_lookup[i].temp;
+		if (is_lm64(sensor))
+			val -= 16;
 		if (dtt_write(sensor, address, val) != 0)
 			return 1;
+		val = dtt_read(sensor, address);
 		val = pwm_lookup[i].pwm;
 		if (dtt_write(sensor, address + 1, val) != 0)
 			return 1;
@@ -152,6 +169,9 @@  int dtt_get_temp(int sensor)
 	s16 temp = (dtt_read(sensor, DTT_READ_TEMP_RMT_MSB) << 8)
 	    | (dtt_read(sensor, DTT_READ_TEMP_RMT_LSB));
 
+	if (is_lm64(sensor))
+		temp += 16 << 8;
+
 	/* Ignore LSB for now, U-Boot only prints natural numbers */
 	return temp >> 8;
 }
diff --git a/include/configs/dlvision-10g.h b/include/configs/dlvision-10g.h
index f7609d7..ae209fa 100644
--- a/include/configs/dlvision-10g.h
+++ b/include/configs/dlvision-10g.h
@@ -111,7 +111,7 @@ 
 
 /* Temp sensor/hwmon/dtt */
 #define CONFIG_DTT_LM63		1	/* National LM63	*/
-#define CONFIG_DTT_SENSORS	{ 0 }	/* Sensor addresses	*/
+#define CONFIG_DTT_SENSORS	{ 0x4c, 0x4e }	/* Sensor addresses	*/
 #define CONFIG_DTT_PWM_LOOKUPTABLE	\
 		{ { 40, 10 }, { 50, 20 }, { 60, 40 } }
 #define CONFIG_DTT_TACH_LIMIT	0xa10