From: ppokorny@penguincomputing.com (Philip Pokorny)
To: lm-sensors@vger.kernel.org
Subject: EMC6D100 patch
Date: Thu, 19 May 2005 06:24:03 +0000 [thread overview]
Message-ID: <3F065CC2.8010108@penguincomputing.com> (raw)
I had previously put some EMC6D100 support into the LM85 driver.
This patch adds support for the additional 3 voltage inputs on the EMC6D100.
I also took a closer look at the docs and it doesn't look like we can tell a
EMC6D100 from a ...101 so I've removed the 101 "kind". I also avoided
problems with the doc generator...
Please apply before 2.8.0...
:v)
-------------- next part --------------
Index: lm_sensors2/kernel/chips/lm85.c
=================================RCS file: /home/cvs/lm_sensors2/kernel/chips/lm85.c,v
retrieving revision 1.7
diff -u -r1.7 lm85.c
--- lm_sensors2/kernel/chips/lm85.c 4 Jul 2003 08:41:28 -0000 1.7
+++ lm_sensors2/kernel/chips/lm85.c 5 Jul 2003 05:12:41 -0000
@@ -52,6 +52,7 @@
Cleaned up some compiler warnings.
Fixed problem with Operating Point and THERM counting
2003-03-21 Initial support for EMC6D100 and EMC6D101 chips
+ 2003-06-30 Add support for EMC6D100 extra voltage inputs.
*/
#include <linux/version.h>
@@ -80,7 +81,7 @@
static unsigned int normal_isa_range[] = { SENSORS_ISA_END };
/* Insmod parameters */
-SENSORS_INSMOD_6(lm85b, lm85c, adm1027, adt7463, emc6d100, emc6d101);
+SENSORS_INSMOD_5(lm85b, lm85c, adm1027, adt7463, emc6d100);
/* Many LM85 constants specified below */
@@ -113,11 +114,15 @@
#define LM85_COMPANY_NATIONAL 0x01
#define LM85_COMPANY_ANALOG_DEV 0x41
#define LM85_COMPANY_SMSC 0x5c
+#define LM85_VERSTEP_VMASK 0xf0
+#define LM85_VERSTEP_SMASK 0x0f
#define LM85_VERSTEP_GENERIC 0x60
#define LM85_VERSTEP_LM85C 0x60
#define LM85_VERSTEP_LM85B 0x62
#define LM85_VERSTEP_ADM1027 0x60
#define LM85_VERSTEP_ADT7463 0x62
+#define LM85_VERSTEP_EMC6D100_A0 0x60
+#define LM85_VERSTEP_EMC6D100_A1 0x61
#define LM85_REG_CONFIG 0x40
@@ -156,6 +161,15 @@
#define ADT7463_REG_THERM_LIMIT 0x7A
#define ADT7463_REG_CONFIG4 0x7D
+#define EMC6D100_REG_SFR 0x7c
+#define EMC6D100_REG_ALARM3 0x7d
+#define EMC6D100_REG_CONF 0x7f
+#define EMC6D100_REG_INT_EN 0x80
+/* IN5, IN6 and IN7 */
+#define EMC6D100_REG_IN(nr) (0x70 + ((nr)-5))
+#define EMC6D100_REG_IN_MIN(nr) (0x73 + ((nr)-5) * 2)
+#define EMC6D100_REG_IN_MAX(nr) (0x74 + ((nr)-5) * 2)
+
/* Conversions. Rounding and limit checking is only done on the TO_REG
variants. Note that you should be a bit careful with which arguments
these macros are called: arguments may be evaluated more than once.
@@ -168,7 +182,8 @@
/* IN are scaled acording to built-in resistors */
static int lm85_scaling[] = { /* .001 Volts */
- 2500, 2250, 3300, 5000, 12000
+ 2500, 2250, 3300, 5000, 12000,
+ 3300, 1500, 1800, /* EMC6D100 */
};
#define SCALE(val,from,to) (((val)*(to) + ((from)/2))/(from))
#define INS_TO_REG(n,val) (SENSORS_LIMIT(SCALE(val,lm85_scaling[n],192),0,255))
@@ -384,9 +399,9 @@
unsigned long last_reading; /* In jiffies */
unsigned long last_config; /* In jiffies */
- u8 in[5]; /* Register value */
- u8 in_max[5]; /* Register value */
- u8 in_min[5]; /* Register value */
+ u8 in[8]; /* Register value */
+ u8 in_max[8]; /* Register value */
+ u8 in_min[8]; /* Register value */
s8 temp[3]; /* Register value */
s8 temp_min[3]; /* Register value */
s8 temp_max[3]; /* Register value */
@@ -407,8 +422,8 @@
long therm_total; /* Cummulative therm count */
long therm_ovfl; /* Count of therm overflows */
u8 therm_limit; /* Register value */
- u16 alarms; /* Register encoding, combined */
- u16 alarm_mask; /* Register encoding, combined */
+ u32 alarms; /* Register encoding, combined */
+ u32 alarm_mask; /* Register encoding, combined */
struct lm85_autofan autofan[3];
struct lm85_zone zone[3];
};
@@ -465,6 +480,9 @@
static void adt7463_therm_signal(struct i2c_client *client, int operation,
int ctl_name, int *nrels_mag, long *results);
+static void emc6d100_in(struct i2c_client *client, int operation,
+ int ctl_name, int *nrels_mag, long *results);
+
static struct i2c_driver lm85_driver = {
.owner = THIS_MODULE,
.name = "LM85 compatible sensor driver",
@@ -663,12 +681,23 @@
};
#define CTLTBL_ADT7463 (sizeof(adt7463_specific)/sizeof(adt7463_specific[0]))
+static ctl_table emc6d100_specific[] = {
+ {EMC6D100_SYSCTL_IN5, "in5", NULL, 0, 0644, NULL, &i2c_proc_real,
+ &i2c_sysctl_real, NULL, &emc6d100_in},
+ {EMC6D100_SYSCTL_IN6, "in6", NULL, 0, 0644, NULL, &i2c_proc_real,
+ &i2c_sysctl_real, NULL, &emc6d100_in},
+ {EMC6D100_SYSCTL_IN7, "in7", NULL, 0, 0644, NULL, &i2c_proc_real,
+ &i2c_sysctl_real, NULL, &emc6d100_in},
+/* {0} The doc generator needs this. */
+};
+#define CTLTBL_EMC6D100 (sizeof(emc6d100_specific)/sizeof(emc6d100_specific[0]))
+
#define MAX2(a,b) ((a)>(b)?(a):(b))
#define MAX3(a,b,c) ((a)>(b)?MAX2((a),(c)):MAX2((b),(c)))
#define MAX4(a,b,c,d) ((a)>(b)?MAX3((a),(c),(d)):MAX3((b),(c),(d)))
-#define CTLTBL_MAX (CTLTBL_COMMON + MAX2(CTLTBL_LM85, CTLTBL_ADM1027+CTLTBL_ADT7463))
+#define CTLTBL_MAX (CTLTBL_COMMON + MAX3(CTLTBL_LM85, CTLTBL_ADM1027+CTLTBL_ADT7463, CTLTBL_EMC6D100))
/* This function is called when:
* lm85_driver is inserted (when this module is loaded), for each
@@ -747,9 +776,10 @@
&& verstep = LM85_VERSTEP_LM85B ) {
kind = lm85b ;
} else if( company = LM85_COMPANY_NATIONAL
- && (verstep & 0xf0) = LM85_VERSTEP_GENERIC ) {
+ && (verstep & LM85_VERSTEP_VMASK) = LM85_VERSTEP_GENERIC) {
+ printk("lm85: Detected National Semiconductor chip\n");
printk("lm85: Unrecgonized version/stepping 0x%02x"
- " Defaulting to LM85.\n", verstep );
+ " Defaulting to Generic LM85.\n", verstep );
kind = any_chip ;
} else if( company = LM85_COMPANY_ANALOG_DEV
&& verstep = LM85_VERSTEP_ADM1027 ) {
@@ -758,16 +788,29 @@
&& verstep = LM85_VERSTEP_ADT7463 ) {
kind = adt7463 ;
} else if( company = LM85_COMPANY_ANALOG_DEV
- && (verstep & 0xf0) = LM85_VERSTEP_GENERIC ) {
+ && (verstep & LM85_VERSTEP_VMASK) = LM85_VERSTEP_GENERIC) {
+ printk("lm85: Detected Analog Devices chip\n");
printk("lm85: Unrecgonized version/stepping 0x%02x"
- " Defaulting to ADM1027.\n", verstep );
- kind = adm1027 ;
+ " Defaulting to Generic LM85.\n", verstep );
+ kind = any_chip ;
+ } else if( company = LM85_COMPANY_SMSC
+ && (verstep = LM85_VERSTEP_EMC6D100_A0
+ || verstep = LM85_VERSTEP_EMC6D100_A1) ) {
+ /* Unfortunately, we can't tell a '100 from a '101
+ * from the registers. Since a '101 is a '100
+ * in a package with fewer pins and therefore no
+ * 3.3V, 1.5V or 1.8V inputs, perhaps if those
+ * inputs read 0, then it's a '101.
+ */
+ kind = emc6d100 ;
} else if( company = LM85_COMPANY_SMSC
- && (verstep & 0xf0) = LM85_VERSTEP_GENERIC ) {
- printk("lm85: Your EMC6D10x has version/stepping 0x%02x"
- " Please notify lm_sensors team.\n", verstep );
- kind = emc6d101 ;
- } else if( kind = 0 && (verstep & 0xf0) = 0x60) {
+ && (verstep & LM85_VERSTEP_VMASK) = LM85_VERSTEP_GENERIC) {
+ printk("lm85: Detected SMSC chip\n");
+ printk("lm85: Unrecognized version/stepping 0x%02x"
+ " Defaulting to Generic LM85.\n", verstep );
+ kind = any_chip ;
+ } else if( kind = any_chip
+ && (verstep & LM85_VERSTEP_VMASK) = LM85_VERSTEP_GENERIC) {
printk("lm85: Generic LM85 Version 6 detected\n");
/* Leave kind as "any_chip" */
} else {
@@ -775,7 +818,7 @@
printk("lm85: Autodetection failed\n");
#endif
/* Not an LM85 ... */
- if( kind = 0 ) { /* User used force=x,y */
+ if( kind = any_chip ) { /* User used force=x,y */
printk("lm85: Generic LM85 Version 6 not"
" found at %d,0x%02x. Try force_lm85c.\n",
i2c_adapter_id(adapter), address );
@@ -821,12 +864,8 @@
case emc6d100 :
type_name = "emc6d100";
strcpy(new_client->name, "SMSC EMC6D100");
- template_used = 0 ;
- break ;
- case emc6d101 :
- type_name = "emc6d101";
- strcpy(new_client->name, "SMSC EMC6D101");
- template_used = 0 ;
+ memcpy(template, emc6d100_specific, sizeof(emc6d100_specific));
+ template_used = CTLTBL_EMC6D100 ;
break ;
default :
printk("lm85: Internal error, invalid kind (%d)!", kind);
@@ -923,15 +962,15 @@
case ADM1027_REG_EXTEND_ADC : /* Read ADC1 and ADC2 */
reg &= 0xff ; /* Pseudo words have address + 0x0100 */
res = i2c_smbus_read_byte_data(client, reg) & 0xff ;
- res |= i2c_smbus_read_byte_data(client, reg+1) << 8 ;
+ res |= (i2c_smbus_read_byte_data(client, reg+1) & 0xff) << 8 ;
break ;
case ADT7463_REG_TMIN_CTL : /* Read WORD MSB, LSB */
reg &= 0xff ; /* Pseudo words have address + 0x0100 */
- res = i2c_smbus_read_byte_data(client, reg) << 8 ;
+ res = (i2c_smbus_read_byte_data(client, reg) & 0xff) << 8 ;
res |= i2c_smbus_read_byte_data(client, reg+1) & 0xff ;
break ;
default: /* Read BYTE data */
- res = i2c_smbus_read_byte_data(client, reg & 0xff);
+ res = i2c_smbus_read_byte_data(client, reg & 0xff) & 0xff ;
break ;
}
@@ -1034,6 +1073,8 @@
}
};
+ /* FIXME? Display EMC6D100 config info? */
+
/* WE INTENTIONALLY make no changes to the limits,
* offsets, pwms, fans and zones. If they were
* configured, we don't want to mess with them.
@@ -1101,6 +1142,8 @@
lm85_read_value(client, LM85_REG_PWM(i));
}
+ data->alarms = lm85_read_value(client, LM85_REG_ALARM);
+
switch( ((struct lm85_data *)(client->data))->type ) {
case adt7463 :
/* REG_THERM code duplicated in therm_signal() */
@@ -1112,11 +1155,20 @@
++data->therm_ovfl ;
}
break ;
+ case emc6d100 :
+ /* Three more voltage sensors */
+ for (i = 5; i <= 7; ++i) {
+ data->in[i] + lm85_read_value(client, EMC6D100_REG_IN(i));
+ }
+ /* More alarm bits */
+ data->alarms |+ lm85_read_value(client, EMC6D100_REG_ALARM3) << 16;
+
+ break ;
default : break ; /* no warnings */
}
- data->alarms = lm85_read_value(client, LM85_REG_ALARM);
-
data->last_reading = jiffies ;
}; /* last_reading */
@@ -1210,6 +1262,14 @@
data->alarm_mask = lm85_read_value(client,
ADM1027_REG_INTMASK );
break ;
+ case emc6d100 :
+ for (i = 5; i <= 7; ++i) {
+ data->in_min[i] + lm85_read_value(client, EMC6D100_REG_IN_MIN(i));
+ data->in_max[i] + lm85_read_value(client, EMC6D100_REG_IN_MAX(i));
+ }
+ break ;
default : break ; /* no warnings */
}
@@ -1921,6 +1981,41 @@
up(&data->update_lock);
}
}
+
+void emc6d100_in(struct i2c_client *client, int operation, int ctl_name,
+ int *nrels_mag, long *results)
+{
+ struct lm85_data *data = client->data;
+ int nr = ctl_name - EMC6D100_SYSCTL_IN5 +5;
+
+ if (nr < 5 || nr > 7)
+ return ; /* ERROR */
+
+ if (operation = SENSORS_PROC_REAL_INFO)
+ *nrels_mag = 3; /* 1.000 */
+ else if (operation = SENSORS_PROC_REAL_READ) {
+ int ext = 0 ;
+ lm85_update_client(client);
+ results[0] = INS_FROM_REG(nr,data->in_min[nr]);
+ results[1] = INS_FROM_REG(nr,data->in_max[nr]);
+ results[2] = INS_FROM_REG(nr,data->in[nr]);
+ *nrels_mag = 3;
+ } else if (operation = SENSORS_PROC_REAL_WRITE) {
+ down(&data->update_lock);
+ if (*nrels_mag > 1) {
+ data->in_max[nr] = INS_TO_REG(nr,results[1]);
+ lm85_write_value(client, EMC6D100_REG_IN_MAX(nr),
+ data->in_max[nr]);
+ }
+ if (*nrels_mag > 0) {
+ data->in_min[nr] = INS_TO_REG(nr,results[0]);
+ lm85_write_value(client, EMC6D100_REG_IN_MIN(nr),
+ data->in_min[nr]);
+ }
+ up(&data->update_lock);
+ }
+}
+
static int __init sm_lm85_init(void)
{
Index: lm_sensors2/lib/chips.c
=================================RCS file: /home/cvs/lm_sensors2/lib/chips.c,v
retrieving revision 1.83
diff -u -r1.83 chips.c
--- lm_sensors2/lib/chips.c 4 Jul 2003 08:44:58 -0000 1.83
+++ lm_sensors2/lib/chips.c 5 Jul 2003 05:13:12 -0000
@@ -2772,6 +2772,12 @@
SENSORS_MODE_R, LM85_SYSCTL_IN3, VALUE(3), 3 },
{ SENSORS_LM85_IN4, "in4", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
SENSORS_MODE_R, LM85_SYSCTL_IN4, VALUE(3), 3 },
+ { SENSORS_LM85_IN5, "in5", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
+ SENSORS_MODE_R, EMC6D100_SYSCTL_IN5, VALUE(3), 3 },
+ { SENSORS_LM85_IN6, "in6", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
+ SENSORS_MODE_R, EMC6D100_SYSCTL_IN6, VALUE(3), 3 },
+ { SENSORS_LM85_IN7, "in7", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
+ SENSORS_MODE_R, EMC6D100_SYSCTL_IN7, VALUE(3), 3 },
{ SENSORS_LM85_IN0_MIN, "in0_min", SENSORS_LM85_IN0, SENSORS_LM85_IN0,
SENSORS_MODE_RW, LM85_SYSCTL_IN0, VALUE(1), 3 },
{ SENSORS_LM85_IN1_MIN, "in1_min", SENSORS_LM85_IN1, SENSORS_LM85_IN1,
@@ -2782,6 +2788,12 @@
SENSORS_MODE_RW, LM85_SYSCTL_IN3, VALUE(1), 3 },
{ SENSORS_LM85_IN4_MIN, "in4_min", SENSORS_LM85_IN4, SENSORS_LM85_IN4,
SENSORS_MODE_RW, LM85_SYSCTL_IN4, VALUE(1), 3 },
+ { SENSORS_LM85_IN5_MIN, "in5_min", SENSORS_LM85_IN5, SENSORS_LM85_IN5,
+ SENSORS_MODE_RW, EMC6D100_SYSCTL_IN5, VALUE(1), 3 },
+ { SENSORS_LM85_IN6_MIN, "in6_min", SENSORS_LM85_IN6, SENSORS_LM85_IN6,
+ SENSORS_MODE_RW, EMC6D100_SYSCTL_IN6, VALUE(1), 3 },
+ { SENSORS_LM85_IN7_MIN, "in7_min", SENSORS_LM85_IN7, SENSORS_LM85_IN7,
+ SENSORS_MODE_RW, EMC6D100_SYSCTL_IN7, VALUE(1), 3 },
{ SENSORS_LM85_IN0_MAX, "in0_max", SENSORS_LM85_IN0, SENSORS_LM85_IN0,
SENSORS_MODE_RW, LM85_SYSCTL_IN0, VALUE(2), 3 },
{ SENSORS_LM85_IN1_MAX, "in1_max", SENSORS_LM85_IN1, SENSORS_LM85_IN1,
@@ -2792,6 +2804,12 @@
SENSORS_MODE_RW, LM85_SYSCTL_IN3, VALUE(2), 3 },
{ SENSORS_LM85_IN4_MAX, "in4_max", SENSORS_LM85_IN4, SENSORS_LM85_IN4,
SENSORS_MODE_RW, LM85_SYSCTL_IN4, VALUE(2), 3 },
+ { SENSORS_LM85_IN5_MAX, "in5_max", SENSORS_LM85_IN5, SENSORS_LM85_IN5,
+ SENSORS_MODE_RW, EMC6D100_SYSCTL_IN5, VALUE(2), 3 },
+ { SENSORS_LM85_IN6_MAX, "in6_max", SENSORS_LM85_IN6, SENSORS_LM85_IN6,
+ SENSORS_MODE_RW, EMC6D100_SYSCTL_IN6, VALUE(2), 3 },
+ { SENSORS_LM85_IN7_MAX, "in7_max", SENSORS_LM85_IN7, SENSORS_LM85_IN7,
+ SENSORS_MODE_RW, EMC6D100_SYSCTL_IN7, VALUE(2), 3 },
{ SENSORS_LM85_FAN1, "fan1", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
SENSORS_MODE_R, LM85_SYSCTL_FAN1, VALUE(2), 0 },
{ SENSORS_LM85_FAN2, "fan2", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
@@ -4328,6 +4346,7 @@
{ SENSORS_LM85_PREFIX, lm85_features },
{ SENSORS_LM85B_PREFIX, lm85_features },
{ SENSORS_LM85C_PREFIX, lm85_features },
+ { SENSORS_EMC6D100_PREFIX, lm85_features },
{ SENSORS_ADM1027_PREFIX, adm1027_features },
{ SENSORS_ADT7463_PREFIX, adm1027_features },
{ SENSORS_LM83_PREFIX, lm83_features },
Index: lm_sensors2/lib/chips.h
=================================RCS file: /home/cvs/lm_sensors2/lib/chips.h,v
retrieving revision 1.65
diff -u -r1.65 chips.h
--- lm_sensors2/lib/chips.h 3 Jul 2003 17:30:46 -0000 1.65
+++ lm_sensors2/lib/chips.h 5 Jul 2003 05:13:22 -0000
@@ -337,6 +337,7 @@
#define SENSORS_LM85C_PREFIX "lm85c"
#define SENSORS_ADM1027_PREFIX "adm1027"
#define SENSORS_ADT7463_PREFIX "adt7463"
+#define SENSORS_EMC6D100_PREFIX "emc6d100"
#define SENSORS_ADM1027_ALARM_MASK 1 /* RW -- alarm_mask */
#define SENSORS_ADM1027_FAN1_PPR 2 /* RW -- fan1_ppr */
@@ -354,82 +355,91 @@
#define SENSORS_ADM1027_TEMP2_OFFSET 14 /* RW -- temp2_offset */
#define SENSORS_ADM1027_TEMP3_OFFSET 15 /* RW -- temp3_offset */
#define SENSORS_LM85_ALARMS 16 /* R -- alarms */
-#define SENSORS_LM85_FAN1 17 /* R -- fan1 */
-#define SENSORS_LM85_FAN1_MIN 18 /* RW -- fan1_min */
-#define SENSORS_LM85_FAN1_TACH_MODE 19 /* RW -- fan1_tach_mode */
-#define SENSORS_LM85_FAN2 20 /* R -- fan2 */
-#define SENSORS_LM85_FAN2_MIN 21 /* RW -- fan2_min */
-#define SENSORS_LM85_FAN2_TACH_MODE 22 /* RW -- fan2_tach_mode */
-#define SENSORS_LM85_FAN3 23 /* R -- fan3 */
-#define SENSORS_LM85_FAN3_MIN 24 /* RW -- fan3_min */
-#define SENSORS_LM85_FAN3_TACH_MODE 25 /* RW -- fan3_tach_mode */
-#define SENSORS_LM85_FAN4 26 /* R -- fan4 */
-#define SENSORS_LM85_FAN4_MIN 27 /* RW -- fan4_min */
-#define SENSORS_LM85_IN0 28 /* R -- in0 */
-#define SENSORS_LM85_IN0_MAX 29 /* RW -- in0_max */
-#define SENSORS_LM85_IN0_MIN 30 /* RW -- in0_min */
-#define SENSORS_LM85_IN1 31 /* R -- in1 */
-#define SENSORS_LM85_IN1_MAX 32 /* RW -- in1_max */
-#define SENSORS_LM85_IN1_MIN 33 /* RW -- in1_min */
-#define SENSORS_LM85_IN2 34 /* R -- in2 */
-#define SENSORS_LM85_IN2_MAX 35 /* RW -- in2_max */
-#define SENSORS_LM85_IN2_MIN 36 /* RW -- in2_min */
-#define SENSORS_LM85_IN3 37 /* R -- in3 */
-#define SENSORS_LM85_IN3_MAX 38 /* RW -- in3_max */
-#define SENSORS_LM85_IN3_MIN 39 /* RW -- in3_min */
-#define SENSORS_LM85_IN4 40 /* R -- in4 */
-#define SENSORS_LM85_IN4_MAX 41 /* RW -- in4_max */
-#define SENSORS_LM85_IN4_MIN 42 /* RW -- in4_min */
-#define SENSORS_LM85_PWM1 43 /* RW -- pwm1 */
-#define SENSORS_LM85_PWM1_FREQ 44 /* RW -- pwm1_freq */
-#define SENSORS_LM85_PWM1_INVERT 45 /* RW -- pwm1_invert */
-#define SENSORS_LM85_PWM1_MIN 46 /* RW -- pwm1_min */
-#define SENSORS_LM85_PWM1_MIN_CTL 47 /* RW -- pwm1_min_ctl */
-#define SENSORS_LM85_PWM1_SPINUP 48 /* RW -- pwm1_spinup */
-#define SENSORS_LM85_PWM1_SPINUP_CTL 49 /* RW -- pwm1_spinup_ctl */
-#define SENSORS_LM85_PWM1_ZONE 50 /* RW -- pwm1_zone */
-#define SENSORS_LM85_PWM2 51 /* RW -- pwm2 */
-#define SENSORS_LM85_PWM2_FREQ 52 /* RW -- pwm2_freq */
-#define SENSORS_LM85_PWM2_INVERT 53 /* RW -- pwm2_invert */
-#define SENSORS_LM85_PWM2_MIN 54 /* RW -- pwm2_min */
-#define SENSORS_LM85_PWM2_MIN_CTL 55 /* RW -- pwm2_min_ctl */
-#define SENSORS_LM85_PWM2_SPINUP 56 /* RW -- pwm2_spinup */
-#define SENSORS_LM85_PWM2_SPINUP_CTL 57 /* RW -- pwm2_spinup_ctl */
-#define SENSORS_LM85_PWM2_ZONE 58 /* RW -- pwm2_zone */
-#define SENSORS_LM85_PWM3 59 /* RW -- pwm3 */
-#define SENSORS_LM85_PWM3_FREQ 60 /* RW -- pwm3_freq */
-#define SENSORS_LM85_PWM3_INVERT 61 /* RW -- pwm3_invert */
-#define SENSORS_LM85_PWM3_MIN 62 /* RW -- pwm3_min */
-#define SENSORS_LM85_PWM3_MIN_CTL 63 /* RW -- pwm3_min_ctl */
-#define SENSORS_LM85_PWM3_SPINUP 64 /* RW -- pwm3_spinup */
-#define SENSORS_LM85_PWM3_SPINUP_CTL 65 /* RW -- pwm3_spinup_ctl */
-#define SENSORS_LM85_PWM3_ZONE 66 /* RW -- pwm3_zone */
-#define SENSORS_LM85_TEMP1 67 /* R -- temp1 */
-#define SENSORS_LM85_TEMP1_MAX 68 /* RW -- temp1_max */
-#define SENSORS_LM85_TEMP1_MIN 69 /* RW -- temp1_min */
-#define SENSORS_LM85_TEMP2 70 /* R -- temp2 */
-#define SENSORS_LM85_TEMP2_MAX 71 /* RW -- temp2_max */
-#define SENSORS_LM85_TEMP2_MIN 72 /* RW -- temp2_min */
-#define SENSORS_LM85_TEMP3 73 /* R -- temp3 */
-#define SENSORS_LM85_TEMP3_MAX 74 /* RW -- temp3_max */
-#define SENSORS_LM85_TEMP3_MIN 75 /* RW -- temp3_min */
-#define SENSORS_LM85_VID 76 /* R -- vid */
-#define SENSORS_LM85_VRM 77 /* RW -- vrm */
-#define SENSORS_LM85_ZONE1_CRITICAL 78 /* RW -- zone1_critical */
-#define SENSORS_LM85_ZONE1_HYST 79 /* RW -- zone1_hyst */
-#define SENSORS_LM85_ZONE1_LIMIT 80 /* RW -- zone1_limit */
-#define SENSORS_LM85_ZONE1_RANGE 81 /* RW -- zone1_range */
-#define SENSORS_LM85_ZONE1_SMOOTH 82 /* RW -- zone1_smooth */
-#define SENSORS_LM85_ZONE2_CRITICAL 83 /* RW -- zone2_critical */
-#define SENSORS_LM85_ZONE2_HYST 84 /* RW -- zone2_hyst */
-#define SENSORS_LM85_ZONE2_LIMIT 85 /* RW -- zone2_limit */
-#define SENSORS_LM85_ZONE2_RANGE 86 /* RW -- zone2_range */
-#define SENSORS_LM85_ZONE2_SMOOTH 87 /* RW -- zone2_smooth */
-#define SENSORS_LM85_ZONE3_CRITICAL 88 /* RW -- zone3_critical */
-#define SENSORS_LM85_ZONE3_HYST 89 /* RW -- zone3_hyst */
-#define SENSORS_LM85_ZONE3_LIMIT 90 /* RW -- zone3_limit */
-#define SENSORS_LM85_ZONE3_RANGE 91 /* RW -- zone3_range */
-#define SENSORS_LM85_ZONE3_SMOOTH 92 /* RW -- zone3_smooth */
+#define SENSORS_LM85_VID 17 /* R -- vid */
+#define SENSORS_LM85_VRM 18 /* RW -- vrm */
+#define SENSORS_LM85_FAN1 19 /* R -- fan1 */
+#define SENSORS_LM85_FAN1_MIN 20 /* RW -- fan1_min */
+#define SENSORS_LM85_FAN1_TACH_MODE 21 /* RW -- fan1_tach_mode */
+#define SENSORS_LM85_FAN2 22 /* R -- fan2 */
+#define SENSORS_LM85_FAN2_MIN 23 /* RW -- fan2_min */
+#define SENSORS_LM85_FAN2_TACH_MODE 24 /* RW -- fan2_tach_mode */
+#define SENSORS_LM85_FAN3 25 /* R -- fan3 */
+#define SENSORS_LM85_FAN3_MIN 26 /* RW -- fan3_min */
+#define SENSORS_LM85_FAN3_TACH_MODE 27 /* RW -- fan3_tach_mode */
+#define SENSORS_LM85_FAN4 28 /* R -- fan4 */
+#define SENSORS_LM85_FAN4_MIN 29 /* RW -- fan4_min */
+#define SENSORS_LM85_IN0 30 /* R -- in0 */
+#define SENSORS_LM85_IN0_MAX 31 /* RW -- in0_max */
+#define SENSORS_LM85_IN0_MIN 32 /* RW -- in0_min */
+#define SENSORS_LM85_IN1 33 /* R -- in1 */
+#define SENSORS_LM85_IN1_MAX 34 /* RW -- in1_max */
+#define SENSORS_LM85_IN1_MIN 35 /* RW -- in1_min */
+#define SENSORS_LM85_IN2 36 /* R -- in2 */
+#define SENSORS_LM85_IN2_MAX 37 /* RW -- in2_max */
+#define SENSORS_LM85_IN2_MIN 38 /* RW -- in2_min */
+#define SENSORS_LM85_IN3 39 /* R -- in3 */
+#define SENSORS_LM85_IN3_MAX 40 /* RW -- in3_max */
+#define SENSORS_LM85_IN3_MIN 41 /* RW -- in3_min */
+#define SENSORS_LM85_IN4 42 /* R -- in4 */
+#define SENSORS_LM85_IN4_MAX 43 /* RW -- in4_max */
+#define SENSORS_LM85_IN4_MIN 44 /* RW -- in4_min */
+#define SENSORS_LM85_IN5 45 /* R -- in5 */
+#define SENSORS_LM85_IN5_MAX 46 /* RW -- in5_max */
+#define SENSORS_LM85_IN5_MIN 47 /* RW -- in5_min */
+#define SENSORS_LM85_IN6 48 /* R -- in6 */
+#define SENSORS_LM85_IN6_MAX 49 /* RW -- in6_max */
+#define SENSORS_LM85_IN6_MIN 50 /* RW -- in6_min */
+#define SENSORS_LM85_IN7 51 /* R -- in7 */
+#define SENSORS_LM85_IN7_MAX 52 /* RW -- in7_max */
+#define SENSORS_LM85_IN7_MIN 53 /* RW -- in7_min */
+#define SENSORS_LM85_PWM1 54 /* RW -- pwm1 */
+#define SENSORS_LM85_PWM1_FREQ 55 /* RW -- pwm1_freq */
+#define SENSORS_LM85_PWM1_INVERT 56 /* RW -- pwm1_invert */
+#define SENSORS_LM85_PWM1_MIN 57 /* RW -- pwm1_min */
+#define SENSORS_LM85_PWM1_MIN_CTL 58 /* RW -- pwm1_min_ctl */
+#define SENSORS_LM85_PWM1_SPINUP 59 /* RW -- pwm1_spinup */
+#define SENSORS_LM85_PWM1_SPINUP_CTL 60 /* RW -- pwm1_spinup_ctl */
+#define SENSORS_LM85_PWM1_ZONE 61 /* RW -- pwm1_zone */
+#define SENSORS_LM85_PWM2 62 /* RW -- pwm2 */
+#define SENSORS_LM85_PWM2_FREQ 63 /* RW -- pwm2_freq */
+#define SENSORS_LM85_PWM2_INVERT 64 /* RW -- pwm2_invert */
+#define SENSORS_LM85_PWM2_MIN 65 /* RW -- pwm2_min */
+#define SENSORS_LM85_PWM2_MIN_CTL 66 /* RW -- pwm2_min_ctl */
+#define SENSORS_LM85_PWM2_SPINUP 67 /* RW -- pwm2_spinup */
+#define SENSORS_LM85_PWM2_SPINUP_CTL 68 /* RW -- pwm2_spinup_ctl */
+#define SENSORS_LM85_PWM2_ZONE 69 /* RW -- pwm2_zone */
+#define SENSORS_LM85_PWM3 70 /* RW -- pwm3 */
+#define SENSORS_LM85_PWM3_FREQ 71 /* RW -- pwm3_freq */
+#define SENSORS_LM85_PWM3_INVERT 72 /* RW -- pwm3_invert */
+#define SENSORS_LM85_PWM3_MIN 73 /* RW -- pwm3_min */
+#define SENSORS_LM85_PWM3_MIN_CTL 74 /* RW -- pwm3_min_ctl */
+#define SENSORS_LM85_PWM3_SPINUP 75 /* RW -- pwm3_spinup */
+#define SENSORS_LM85_PWM3_SPINUP_CTL 76 /* RW -- pwm3_spinup_ctl */
+#define SENSORS_LM85_PWM3_ZONE 77 /* RW -- pwm3_zone */
+#define SENSORS_LM85_TEMP1 78 /* R -- temp1 */
+#define SENSORS_LM85_TEMP1_MAX 79 /* RW -- temp1_max */
+#define SENSORS_LM85_TEMP1_MIN 80 /* RW -- temp1_min */
+#define SENSORS_LM85_TEMP2 81 /* R -- temp2 */
+#define SENSORS_LM85_TEMP2_MAX 82 /* RW -- temp2_max */
+#define SENSORS_LM85_TEMP2_MIN 83 /* RW -- temp2_min */
+#define SENSORS_LM85_TEMP3 84 /* R -- temp3 */
+#define SENSORS_LM85_TEMP3_MAX 85 /* RW -- temp3_max */
+#define SENSORS_LM85_TEMP3_MIN 86 /* RW -- temp3_min */
+#define SENSORS_LM85_ZONE1_CRITICAL 87 /* RW -- zone1_critical */
+#define SENSORS_LM85_ZONE1_HYST 88 /* RW -- zone1_hyst */
+#define SENSORS_LM85_ZONE1_LIMIT 89 /* RW -- zone1_limit */
+#define SENSORS_LM85_ZONE1_RANGE 90 /* RW -- zone1_range */
+#define SENSORS_LM85_ZONE1_SMOOTH 91 /* RW -- zone1_smooth */
+#define SENSORS_LM85_ZONE2_CRITICAL 92 /* RW -- zone2_critical */
+#define SENSORS_LM85_ZONE2_HYST 93 /* RW -- zone2_hyst */
+#define SENSORS_LM85_ZONE2_LIMIT 94 /* RW -- zone2_limit */
+#define SENSORS_LM85_ZONE2_RANGE 95 /* RW -- zone2_range */
+#define SENSORS_LM85_ZONE2_SMOOTH 96 /* RW -- zone2_smooth */
+#define SENSORS_LM85_ZONE3_CRITICAL 97 /* RW -- zone3_critical */
+#define SENSORS_LM85_ZONE3_HYST 98 /* RW -- zone3_hyst */
+#define SENSORS_LM85_ZONE3_LIMIT 99 /* RW -- zone3_limit */
+#define SENSORS_LM85_ZONE3_RANGE 100 /* RW -- zone3_range */
+#define SENSORS_LM85_ZONE3_SMOOTH 101 /* RW -- zone3_smooth */
/* Winbond W83781D chips */
Index: lm_sensors2/prog/sensors/chips.c
=================================RCS file: /home/cvs/lm_sensors2/prog/sensors/chips.c,v
retrieving revision 1.84
diff -u -r1.84 chips.c
--- lm_sensors2/prog/sensors/chips.c 3 Jul 2003 17:45:32 -0000 1.84
+++ lm_sensors2/prog/sensors/chips.c 5 Jul 2003 05:13:42 -0000
@@ -1473,13 +1473,14 @@
char *label = NULL;
double cur, min, max;
int alarms, alarm_mask, valid;
- int is85, is1027;
+ int is85, is1027, is6d100;
is85 = !strcmp(name->prefix,"lm85")
|| !strcmp(name->prefix,"lm85b")
|| !strcmp(name->prefix,"lm85c") ;
is1027 = !strcmp(name->prefix,"adm1027")
|| !strcmp(name->prefix,"adt7463") ;
+ is6d100 = !strcmp(name->prefix,"emc6d100") ;
if (!sensors_get_feature(*name,SENSORS_LM85_ALARMS,&cur))
alarms = cur + 0.5;
@@ -1569,6 +1570,45 @@
} else
printf("ERROR: Can't get IN4 data!\n");
free_the_label(&label);
+
+ if( is6d100 ) {
+ if (!sensors_get_label_and_valid(*name,SENSORS_LM85_IN5,&label,&valid) &&
+ !sensors_get_feature(*name,SENSORS_LM85_IN5,&cur) &&
+ !sensors_get_feature(*name,SENSORS_LM85_IN5_MIN,&min) &&
+ !sensors_get_feature(*name,SENSORS_LM85_IN5_MAX,&max)) {
+ if (valid) {
+ print_label(label,10);
+ printf("%+6.2f V (min = %+6.2f V, max = %+6.2f V) %s\n",
+ cur,min,max,alarms&LM85_ALARM_IN5?"ALARM":"");
+ }
+ } else
+ printf("ERROR: Can't get IN5 data!\n");
+ free_the_label(&label);
+ if (!sensors_get_label_and_valid(*name,SENSORS_LM85_IN6,&label,&valid) &&
+ !sensors_get_feature(*name,SENSORS_LM85_IN6,&cur) &&
+ !sensors_get_feature(*name,SENSORS_LM85_IN6_MIN,&min) &&
+ !sensors_get_feature(*name,SENSORS_LM85_IN6_MAX,&max)) {
+ if (valid) {
+ print_label(label,10);
+ printf("%+6.2f V (min = %+6.2f V, max = %+6.2f V) %s\n",
+ cur,min,max,alarms&LM85_ALARM_IN6?"ALARM":"");
+ }
+ } else
+ printf("ERROR: Can't get IN6 data!\n");
+ free_the_label(&label);
+ if (!sensors_get_label_and_valid(*name,SENSORS_LM85_IN7,&label,&valid) &&
+ !sensors_get_feature(*name,SENSORS_LM85_IN7,&cur) &&
+ !sensors_get_feature(*name,SENSORS_LM85_IN7_MIN,&min) &&
+ !sensors_get_feature(*name,SENSORS_LM85_IN7_MAX,&max)) {
+ if (valid) {
+ print_label(label,10);
+ printf("%+6.2f V (min = %+6.2f V, max = %+6.2f V) %s\n",
+ cur,min,max,alarms&LM85_ALARM_IN7?"ALARM":"");
+ }
+ } else
+ printf("ERROR: Can't get IN7 data!\n");
+ free_the_label(&label);
+ }
if (!sensors_get_label_and_valid(*name,SENSORS_LM85_FAN1,&label,&valid) &&
!sensors_get_feature(*name,SENSORS_LM85_FAN1,&cur) &&
Index: lm_sensors2/prog/sensors/main.c
=================================RCS file: /home/cvs/lm_sensors2/prog/sensors/main.c,v
retrieving revision 1.66
diff -u -r1.66 main.c
--- lm_sensors2/prog/sensors/main.c 3 Jul 2003 17:45:32 -0000 1.66
+++ lm_sensors2/prog/sensors/main.c 5 Jul 2003 05:13:44 -0000
@@ -324,7 +324,8 @@
!strcmp(name.prefix,"lm85b") ||
!strcmp(name.prefix,"lm85c") ||
!strcmp(name.prefix,"adm1027") ||
- !strcmp(name.prefix,"adt7463") )
+ !strcmp(name.prefix,"adt7463") ||
+ !strcmp(name.prefix,"emc6d100") )
print_lm85(&name);
else if (!strcmp(name.prefix,"lm87"))
print_lm87(&name);
next reply other threads:[~2005-05-19 6:24 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-19 6:24 Philip Pokorny [this message]
2005-05-19 6:24 ` EMC6D100 patch Philip Pokorny
2005-05-19 6:24 ` Mark D. Studebaker
2005-05-19 6:24 ` Philip Pokorny
2005-05-19 6:24 ` Philip Pokorny
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3F065CC2.8010108@penguincomputing.com \
--to=ppokorny@penguincomputing.com \
--cc=lm-sensors@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.