All of lore.kernel.org
 help / color / mirror / Atom feed
* [lm-sensors] [patch 1/1] w83627hf hoist nr-1 offset out of
@ 2007-10-12 22:50 Jim Cromie
  2007-10-12 23:56 ` Jim Cromie
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Jim Cromie @ 2007-10-12 22:50 UTC (permalink / raw)
  To: lm-sensors

[-- Attachment #1: Type: text/plain, Size: 995 bytes --]

This hoists nr-1 offset out of (show|store)_temp_*(.*) callbacks, and into
SENSOR_DEVICE_ATTRs for sysfs tempN_X files.  It also combines
temp[1] and temp_add[2] (array) fields in w83627hf_data into 3 elem arrays,
which simplifies special-case handling of nr, allowing simplification
of callback
bodies and rerolling a flattened loop in w83627hf_update_device(struct
device *dev).  The array conversion changes temp[1] from u8 to u16,
but this was happening
implicitly via the helper functions anyway.


Signed-off-by:  Jim Cromie <jim.cromie@gmail.com>
---
$ diffstat diff.hwmon-w83627hf-hoist-temp-offsets
 drivers/hwmon/w83627hf.c |  121 +++++++++++++++++------------------------------
 1 files changed, 45 insertions(+), 76 deletions(-)

size shrinks too:
  12982    2652      36   15670    3d36 hwmon-demacro/drivers/hwmon/w83627hf.ko
  12850    2652      36   15538    3cb2 hwmon-hf-2/drivers/hwmon/w83627hf.ko

and the u8->u16 doesnt seem to cost anything in the data section. (padding?)

[-- Attachment #2: diff.hwmon-w83627hf-hoist-temp-offsets --]
[-- Type: application/octet-stream, Size: 7145 bytes --]

Binary files hwmon-demacro/arch/i386/boot/setup.elf and hwmon-hf-2/arch/i386/boot/setup.elf differ
diff -ruNp -X dontdiff -X exclude-diffs hwmon-demacro/drivers/hwmon/w83627hf.c hwmon-hf-2/drivers/hwmon/w83627hf.c
--- hwmon-demacro/drivers/hwmon/w83627hf.c	2007-10-11 16:03:10.000000000 -0600
+++ hwmon-hf-2/drivers/hwmon/w83627hf.c	2007-10-12 16:08:51.000000000 -0600
@@ -175,15 +175,10 @@ superio_exit(void)
 
 #define W83781D_REG_TEMP2_CONFIG 0x152
 #define W83781D_REG_TEMP3_CONFIG 0x252
-#define W83781D_REG_TEMP(nr)		((nr == 3) ? (0x0250) : \
-					((nr == 2) ? (0x0150) : \
-					             (0x27)))
-#define W83781D_REG_TEMP_HYST(nr)	((nr == 3) ? (0x253) : \
-					((nr == 2) ? (0x153) : \
-					             (0x3A)))
-#define W83781D_REG_TEMP_OVER(nr)	((nr == 3) ? (0x255) : \
-					((nr == 2) ? (0x155) : \
-					             (0x39)))
+/* these are zero-based, unlike config constants above */
+static u16 w83781d_reg_temp[]		= { 0x27, 0x150, 0x250 };
+static u16 w83781d_reg_temp_hyst[]	= { 0x3A, 0x153, 0x253 };
+static u16 w83781d_reg_temp_over[]	= { 0x39, 0x155, 0x255 };
 
 #define W83781D_REG_BANK 0x4E
 
@@ -360,12 +355,9 @@ struct w83627hf_data {
 	u8 in_min[9];		/* Register value */
 	u8 fan[3];		/* Register value */
 	u8 fan_min[3];		/* Register value */
-	u8 temp;
-	u8 temp_max;		/* Register value */
-	u8 temp_max_hyst;	/* Register value */
-	u16 temp_add[2];	/* Register value */
-	u16 temp_max_add[2];	/* Register value */
-	u16 temp_max_hyst_add[2]; /* Register value */
+	u16 temp[3];
+	u16 temp_max[3];	/* Register value */
+	u16 temp_max_hyst[3];	/* Register value */
 	u8 fan_div[3];		/* Register encoding, shifted right */
 	u8 vid;			/* Register encoding, combined */
 	u32 alarms;		/* Register encoding, combined */
@@ -610,12 +602,10 @@ show_temp(struct device *dev, struct dev
 {
 	int nr = to_sensor_dev_attr(devattr)->index;
 	struct w83627hf_data *data = w83627hf_update_device(dev);
-	if (nr >= 2) {	/* TEMP2 and TEMP3 */
-		return sprintf(buf, "%ld\n",
-			(long)LM75_TEMP_FROM_REG(data->temp_add[nr-2]));
-	} else {	/* TEMP1 */
-		return sprintf(buf, "%ld\n", (long)TEMP_FROM_REG(data->temp));
-	}
+
+	u16 tmp = data->temp[nr];
+	return sprintf(buf, "%ld\n", (long) (nr) ? LM75_TEMP_FROM_REG(tmp)
+		       				 : TEMP_FROM_REG(tmp));
 }
 
 static ssize_t
@@ -624,13 +614,10 @@ show_temp_max(struct device *dev, struct
 {
 	int nr = to_sensor_dev_attr(devattr)->index;
 	struct w83627hf_data *data = w83627hf_update_device(dev);
-	if (nr >= 2) {	/* TEMP2 and TEMP3 */
-		return sprintf(buf, "%ld\n",
-			(long)LM75_TEMP_FROM_REG(data->temp_max_add[nr-2]));
-	} else {	/* TEMP1 */
-		return sprintf(buf, "%ld\n",
-			(long)TEMP_FROM_REG(data->temp_max));
-	}
+
+	u16 tmp = data->temp_max[nr];
+	return sprintf(buf, "%ld\n", (long) (nr) ? LM75_TEMP_FROM_REG(tmp)
+		       				 : TEMP_FROM_REG(tmp));
 }
 
 static ssize_t
@@ -639,13 +626,11 @@ show_temp_max_hyst(struct device *dev, s
 {
 	int nr = to_sensor_dev_attr(devattr)->index;
 	struct w83627hf_data *data = w83627hf_update_device(dev);
-	if (nr >= 2) {	/* TEMP2 and TEMP3 */
-		return sprintf(buf, "%ld\n",
-			(long)LM75_TEMP_FROM_REG(data->temp_max_hyst_add[nr-2]));
-	} else {	/* TEMP1 */
-		return sprintf(buf, "%ld\n",
-			(long)TEMP_FROM_REG(data->temp_max_hyst));
-	}
+
+	u16 tmp = data->temp_max_hyst[nr];
+	return sprintf(buf, "%ld\n", (long) (nr >= 2) 
+		       ? LM75_TEMP_FROM_REG(tmp)
+		       : TEMP_FROM_REG(tmp));
 }
 
 static ssize_t
@@ -655,18 +640,16 @@ store_temp_max(struct device *dev, struc
 	int nr = to_sensor_dev_attr(devattr)->index;
 	struct w83627hf_data *data = dev_get_drvdata(dev);
 	long val = simple_strtol(buf, NULL, 10);
+	u16 tmp;
 
 	mutex_lock(&data->update_lock);
 
-	if (nr >= 2) {	/* TEMP2 and TEMP3 */
-		data->temp_max_add[nr-2] = LM75_TEMP_TO_REG(val);
-		w83627hf_write_value(data, W83781D_REG_TEMP_OVER(nr),
-				data->temp_max_add[nr-2]);
-	} else {	/* TEMP1 */
-		data->temp_max = TEMP_TO_REG(val);
-		w83627hf_write_value(data, W83781D_REG_TEMP_OVER(nr),
-			data->temp_max);
-	}
+	tmp = (nr) ? LM75_TEMP_TO_REG(val)
+		   : TEMP_TO_REG(val);
+
+	data->temp_max[nr] = tmp;
+	w83627hf_write_value(data, w83781d_reg_temp_over[nr], tmp);
+
 	mutex_unlock(&data->update_lock);
 	return count;
 }
@@ -678,29 +661,27 @@ store_temp_max_hyst(struct device *dev, 
 	int nr = to_sensor_dev_attr(devattr)->index;
 	struct w83627hf_data *data = dev_get_drvdata(dev);
 	long val = simple_strtol(buf, NULL, 10);
+	u16 tmp;
 
 	mutex_lock(&data->update_lock);
 
-	if (nr >= 2) {	/* TEMP2 and TEMP3 */
-		data->temp_max_hyst_add[nr-2] = LM75_TEMP_TO_REG(val);
-		w83627hf_write_value(data, W83781D_REG_TEMP_HYST(nr),
-				data->temp_max_hyst_add[nr-2]);
-	} else {	/* TEMP1 */
-		data->temp_max_hyst = TEMP_TO_REG(val);
-		w83627hf_write_value(data, W83781D_REG_TEMP_HYST(nr),
-			data->temp_max_hyst);
-	}
+	tmp = (nr) ? LM75_TEMP_TO_REG(val)
+		   : TEMP_TO_REG(val);
+
+	data->temp_max_hyst[nr] = tmp;
+	w83627hf_write_value(data, w83781d_reg_temp_hyst[nr], tmp);
+
 	mutex_unlock(&data->update_lock);
 	return count;
 }
 
 #define sysfs_temp_decl(offset) \
 static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO,		\
-			  show_temp, NULL, offset);			\
+			  show_temp, NULL, offset - 1);			\
 static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IRUGO|S_IWUSR,	 	\
-			  show_temp_max, store_temp_max, offset);	\
+			  show_temp_max, store_temp_max, offset - 1);	\
 static SENSOR_DEVICE_ATTR(temp##offset##_max_hyst, S_IRUGO|S_IWUSR,	\
-			  show_temp_max_hyst, store_temp_max_hyst, offset);
+			  show_temp_max_hyst, store_temp_max_hyst, offset - 1);
 
 sysfs_temp_decl(1);
 sysfs_temp_decl(2);
@@ -1543,7 +1524,7 @@ static void __devinit w83627hf_init_devi
 static struct w83627hf_data *w83627hf_update_device(struct device *dev)
 {
 	struct w83627hf_data *data = dev_get_drvdata(dev);
-	int i;
+	int i, num_temps = (data->type == w83697hf) ? 2 : 3;
 
 	mutex_lock(&data->update_lock);
 
@@ -1596,25 +1577,13 @@ static struct w83627hf_data *w83627hf_up
 					break;
 			}
 		}
-
-		data->temp = w83627hf_read_value(data, W83781D_REG_TEMP(1));
-		data->temp_max =
-		    w83627hf_read_value(data, W83781D_REG_TEMP_OVER(1));
-		data->temp_max_hyst =
-		    w83627hf_read_value(data, W83781D_REG_TEMP_HYST(1));
-		data->temp_add[0] =
-		    w83627hf_read_value(data, W83781D_REG_TEMP(2));
-		data->temp_max_add[0] =
-		    w83627hf_read_value(data, W83781D_REG_TEMP_OVER(2));
-		data->temp_max_hyst_add[0] =
-		    w83627hf_read_value(data, W83781D_REG_TEMP_HYST(2));
-		if (data->type != w83697hf) {
-			data->temp_add[1] =
-			  w83627hf_read_value(data, W83781D_REG_TEMP(3));
-			data->temp_max_add[1] =
-			  w83627hf_read_value(data, W83781D_REG_TEMP_OVER(3));
-			data->temp_max_hyst_add[1] =
-			  w83627hf_read_value(data, W83781D_REG_TEMP_HYST(3));
+		for (i=0; i<num_temps; i++) {
+			data->temp[i] = w83627hf_read_value(
+						data, w83781d_reg_temp[i]);
+			data->temp_max[i] = w83627hf_read_value(
+						data, w83781d_reg_temp_over[i]);
+			data->temp_max_hyst[i] = w83627hf_read_value(
+						data, w83781d_reg_temp_hyst[i]);
 		}
 
 		i = w83627hf_read_value(data, W83781D_REG_VID_FANDIV);

[-- Attachment #3: Type: text/plain, Size: 153 bytes --]

_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2007-10-16 10:46 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-10-12 22:50 [lm-sensors] [patch 1/1] w83627hf hoist nr-1 offset out of Jim Cromie
2007-10-12 23:56 ` Jim Cromie
2007-10-14  8:36 ` Jean Delvare
2007-10-14 23:10 ` Jim Cromie
2007-10-15 13:40 ` Jean Delvare
2007-10-16 10:46 ` Mark M. Hoffman

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.