[lm-sensors] [PATCH 05/10] hwmon: (lm85) Misc cleanups

Jean Delvare khali at linux-fr.org
Sat Apr 12 19:57:11 CEST 2008


Misc cleanups to the lm85 hardware monitoring driver:
* Mark constant arrays as const.
* Remove useless masks.
* Have lm85_write_value return void - nobody is checking the returned
  value anyway and in some cases it was plain wrong.
* Remove useless initializations.
* Rename new_client to client in lm85_detect.
* Replace cascaded if/else with a switch/case in lm85_detect.
* Group similar loops in lm85_update_device.
* Remove legacy comments.

Signed-off-by: Jean Delvare <khali at linux-fr.org>
---
 drivers/hwmon/lm85.c |  151 ++++++++++++++++++++++----------------------------
 1 file changed, 67 insertions(+), 84 deletions(-)

--- linux-2.6.25-rc8.orig/drivers/hwmon/lm85.c	2008-04-03 14:18:50.000000000 +0200
+++ linux-2.6.25-rc8/drivers/hwmon/lm85.c	2008-04-03 15:27:45.000000000 +0200
@@ -110,7 +110,7 @@ I2C_CLIENT_INSMOD_6(lm85b, lm85c, adm102
  */
 
 /* IN are scaled acording to built-in resistors */
-static int lm85_scaling[] = {  /* .001 Volts */
+static const int lm85_scaling[] = {  /* .001 Volts */
 	2500, 2250, 3300, 5000, 12000,
 	3300, 1500, 1800 /*EMC6D100*/
 };
@@ -164,7 +164,7 @@ static inline u16 FAN_TO_REG(unsigned lo
  */
 
 /* These are the zone temperature range encodings in .001 degree C */
-static int lm85_range_map[] = {
+static const int lm85_range_map[] = {
 	2000,  2500,  3300,  4000,  5000,  6600,
 	8000, 10000, 13300, 16000, 20000, 26600,
 	32000, 40000, 53300, 80000
@@ -191,13 +191,8 @@ static int RANGE_TO_REG(int range)
 }
 #define RANGE_FROM_REG(val)	lm85_range_map[(val) & 0x0f]
 
-/* These are the Acoustic Enhancement, or Temperature smoothing encodings
- * NOTE: The enable/disable bit is INCLUDED in these encodings as the
- *       MSB (bit 3, value 8).  If the enable bit is 0, the encoded value
- *       is ignored, or set to 0.
- */
 /* These are the PWM frequency encodings */
-static int lm85_freq_map[] = { /* .1 Hz */
+static const int lm85_freq_map[] = { /* .1 Hz */
 	100, 150, 230, 300, 380, 470, 620, 940
 };
 
@@ -210,7 +205,7 @@ static int FREQ_TO_REG(int freq)
 	for (i = 0; i < 7; ++i)
 		if (freq <= lm85_freq_map[i])
 			break;
-	return i & 0x07;
+	return i;
 }
 #define FREQ_FROM_REG(val)	lm85_freq_map[(val) & 0x07]
 
@@ -226,8 +221,8 @@ static int FREQ_TO_REG(int freq)
  *     -2 -- PWM responds to manual control
  */
 
-static int lm85_zone_map[] = { 1, 2, 3, -1, 0, 23, 123, -2 };
-#define ZONE_FROM_REG(val)	lm85_zone_map[((val) >> 5) & 0x07]
+static const int lm85_zone_map[] = { 1, 2, 3, -1, 0, 23, 123, -2 };
+#define ZONE_FROM_REG(val)	lm85_zone_map[(val) >> 5]
 
 static int ZONE_TO_REG(int zone)
 {
@@ -238,7 +233,7 @@ static int ZONE_TO_REG(int zone)
 			break;
 	if (i > 7)   /* Not found. */
 		i = 3;  /* Always 100% */
-	return (i & 0x07) << 5;
+	return i << 5;
 }
 
 #define HYST_TO_REG(val)	SENSORS_LIMIT(((val) + 500) / 1000, 0, 15)
@@ -322,7 +317,7 @@ static int lm85_detect(struct i2c_adapte
 static int lm85_detach_client(struct i2c_client *client);
 
 static int lm85_read_value(struct i2c_client *client, u8 reg);
-static int lm85_write_value(struct i2c_client *client, u8 reg, int value);
+static void lm85_write_value(struct i2c_client *client, u8 reg, int value);
 static struct lm85_data *lm85_update_device(struct device *dev);
 static void lm85_init_client(struct i2c_client *client);
 
@@ -1096,13 +1091,12 @@ static int lm85_detect(struct i2c_adapte
 		int kind)
 {
 	int company, verstep;
-	struct i2c_client *new_client = NULL;
+	struct i2c_client *client;
 	struct lm85_data *data;
 	int err = 0;
-	const char *type_name = "";
+	const char *type_name;
 
-	if (!i2c_check_functionality(adapter,
-					I2C_FUNC_SMBUS_BYTE_DATA)) {
+	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
 		/* We need to be able to do byte I/O */
 		goto ERROR0;
 	}
@@ -1116,21 +1110,20 @@ static int lm85_detect(struct i2c_adapte
 		goto ERROR0;
 	}
 
-	new_client = &data->client;
-	i2c_set_clientdata(new_client, data);
-	new_client->addr = address;
-	new_client->adapter = adapter;
-	new_client->driver = &lm85_driver;
-	new_client->flags = 0;
+	client = &data->client;
+	i2c_set_clientdata(client, data);
+	client->addr = address;
+	client->adapter = adapter;
+	client->driver = &lm85_driver;
 
 	/* Now, we do the remaining detection. */
 
-	company = lm85_read_value(new_client, LM85_REG_COMPANY);
-	verstep = lm85_read_value(new_client, LM85_REG_VERSTEP);
+	company = lm85_read_value(client, LM85_REG_COMPANY);
+	verstep = lm85_read_value(client, LM85_REG_VERSTEP);
 
 	dev_dbg(&adapter->dev, "Detecting device at %d,0x%02x with"
 		" COMPANY: 0x%02x and VERSTEP: 0x%02x\n",
-		i2c_adapter_id(new_client->adapter), new_client->addr,
+		i2c_adapter_id(client->adapter), client->addr,
 		company, verstep);
 
 	/* If auto-detecting, Determine the chip type. */
@@ -1197,56 +1190,65 @@ static int lm85_detect(struct i2c_adapte
 	}
 
 	/* Fill in the chip specific driver values */
-	if (kind == any_chip)
-		type_name = "lm85";
-	else if (kind == lm85b)
+	switch (kind) {
+	case lm85b:
 		type_name = "lm85b";
-	else if (kind == lm85c)
+		break;
+	case lm85c:
 		type_name = "lm85c";
-	else if (kind == adm1027)
+		break;
+	case adm1027:
 		type_name = "adm1027";
-	else if (kind == adt7463)
+		break;
+	case adt7463:
 		type_name = "adt7463";
-	else if (kind == emc6d100)
+		break;
+	case emc6d100:
 		type_name = "emc6d100";
-	else if (kind == emc6d102)
+		break;
+	case emc6d102:
 		type_name = "emc6d102";
-	strlcpy(new_client->name, type_name, I2C_NAME_SIZE);
+		break;
+	default:
+		type_name = "lm85";
+	}
+	strlcpy(client->name, type_name, I2C_NAME_SIZE);
 
 	/* Fill in the remaining client fields */
 	data->type = kind;
-	data->valid = 0;
 	mutex_init(&data->update_lock);
 
 	/* Tell the I2C layer a new client has arrived */
-	if ((err = i2c_attach_client(new_client)))
+	err = i2c_attach_client(client);
+	if (err)
 		goto ERROR1;
 
 	/* Set the VRM version */
 	data->vrm = vid_which_vrm();
 
 	/* Initialize the LM85 chip */
-	lm85_init_client(new_client);
+	lm85_init_client(client);
 
 	/* Register sysfs hooks */
-	if ((err = sysfs_create_group(&new_client->dev.kobj, &lm85_group)))
+	err = sysfs_create_group(&client->dev.kobj, &lm85_group);
+	if (err)
 		goto ERROR2;
 
 	/* The ADT7463 has an optional VRM 10 mode where pin 21 is used
 	   as a sixth digital VID input rather than an analog input. */
-	data->vid = lm85_read_value(new_client, LM85_REG_VID);
+	data->vid = lm85_read_value(client, LM85_REG_VID);
 	if (!(kind == adt7463 && (data->vid & 0x80)))
-		if ((err = sysfs_create_group(&new_client->dev.kobj,
+		if ((err = sysfs_create_group(&client->dev.kobj,
 					&lm85_group_in4)))
 			goto ERROR3;
 
 	/* The EMC6D100 has 3 additional voltage inputs */
 	if (kind == emc6d100)
-		if ((err = sysfs_create_group(&new_client->dev.kobj,
+		if ((err = sysfs_create_group(&client->dev.kobj,
 					&lm85_group_in567)))
 			goto ERROR3;
 
-	data->hwmon_dev = hwmon_device_register(&new_client->dev);
+	data->hwmon_dev = hwmon_device_register(&client->dev);
 	if (IS_ERR(data->hwmon_dev)) {
 		err = PTR_ERR(data->hwmon_dev);
 		goto ERROR3;
@@ -1256,12 +1258,12 @@ static int lm85_detect(struct i2c_adapte
 
 	/* Error out and cleanup code */
  ERROR3:
-	sysfs_remove_group(&new_client->dev.kobj, &lm85_group);
-	sysfs_remove_group(&new_client->dev.kobj, &lm85_group_in4);
+	sysfs_remove_group(&client->dev.kobj, &lm85_group);
+	sysfs_remove_group(&client->dev.kobj, &lm85_group_in4);
 	if (kind == emc6d100)
-		sysfs_remove_group(&new_client->dev.kobj, &lm85_group_in567);
+		sysfs_remove_group(&client->dev.kobj, &lm85_group_in567);
  ERROR2:
-	i2c_detach_client(new_client);
+	i2c_detach_client(client);
  ERROR1:
 	kfree(data);
  ERROR0:
@@ -1308,10 +1310,8 @@ static int lm85_read_value(struct i2c_cl
 	return res;
 }
 
-static int lm85_write_value(struct i2c_client *client, u8 reg, int value)
+static void lm85_write_value(struct i2c_client *client, u8 reg, int value)
 {
-	int res;
-
 	switch (reg) {
 	case LM85_REG_FAN(0):  /* Write WORD data */
 	case LM85_REG_FAN(1):
@@ -1322,16 +1322,13 @@ static int lm85_write_value(struct i2c_c
 	case LM85_REG_FAN_MIN(2):
 	case LM85_REG_FAN_MIN(3):
 	/* NOTE: ALARM is read only, so not included here */
-		res = i2c_smbus_write_byte_data(client, reg, value & 0xff);
-		res |= i2c_smbus_write_byte_data(client, reg + 1,
-						 (value >> 8) & 0xff);
+		i2c_smbus_write_byte_data(client, reg, value & 0xff);
+		i2c_smbus_write_byte_data(client, reg + 1, value >> 8);
 		break;
 	default:	/* Write BYTE data */
-		res = i2c_smbus_write_byte_data(client, reg, value);
+		i2c_smbus_write_byte_data(client, reg, value);
 		break;
 	}
-
-	return res;
 }
 
 static void lm85_init_client(struct i2c_client *client)
@@ -1413,6 +1410,8 @@ static struct lm85_data *lm85_update_dev
 		for (i = 0; i <= 3; ++i) {
 			data->in[i] =
 			    lm85_read_value(client, LM85_REG_IN(i));
+			data->fan[i] =
+			    lm85_read_value(client, LM85_REG_FAN(i));
 		}
 
 		if (!(data->type == adt7463 && (data->vid & 0x80))) {
@@ -1420,17 +1419,9 @@ static struct lm85_data *lm85_update_dev
 				      LM85_REG_IN(4));
 		}
 
-		for (i = 0; i <= 3; ++i) {
-			data->fan[i] =
-			    lm85_read_value(client, LM85_REG_FAN(i));
-		}
-
 		for (i = 0; i <= 2; ++i) {
 			data->temp[i] =
 			    lm85_read_value(client, LM85_REG_TEMP(i));
-		}
-
-		for (i = 0; i <= 2; ++i) {
 			data->pwm[i] =
 			    lm85_read_value(client, LM85_REG_PWM(i));
 		}
@@ -1461,13 +1452,13 @@ static struct lm85_data *lm85_update_dev
 						   EMC6D102_REG_EXTEND_ADC4);
 			data->in_ext[0] = ext3 & 0x0f;
 			data->in_ext[1] = ext4 & 0x0f;
-			data->in_ext[2] = (ext4 >> 4) & 0x0f;
-			data->in_ext[3] = (ext3 >> 4) & 0x0f;
-			data->in_ext[4] = (ext2 >> 4) & 0x0f;
+			data->in_ext[2] = ext4 >> 4;
+			data->in_ext[3] = ext3 >> 4;
+			data->in_ext[4] = ext2 >> 4;
 
 			data->temp_ext[0] = ext1 & 0x0f;
 			data->temp_ext[1] = ext2 & 0x0f;
-			data->temp_ext[2] = (ext1 >> 4) & 0x0f;
+			data->temp_ext[2] = ext1 >> 4;
 		}
 
 		data->last_reading = jiffies;
@@ -1483,6 +1474,8 @@ static struct lm85_data *lm85_update_dev
 			    lm85_read_value(client, LM85_REG_IN_MIN(i));
 			data->in_max[i] =
 			    lm85_read_value(client, LM85_REG_IN_MAX(i));
+			data->fan_min[i] =
+			    lm85_read_value(client, LM85_REG_FAN_MIN(i));
 		}
 
 		if (!(data->type == adt7463 && (data->vid & 0x80))) {
@@ -1501,25 +1494,19 @@ static struct lm85_data *lm85_update_dev
 			}
 		}
 
-		for (i = 0; i <= 3; ++i) {
-			data->fan_min[i] =
-			    lm85_read_value(client, LM85_REG_FAN_MIN(i));
-		}
-
 		for (i = 0; i <= 2; ++i) {
+			int val;
+
 			data->temp_min[i] =
 			    lm85_read_value(client, LM85_REG_TEMP_MIN(i));
 			data->temp_max[i] =
 			    lm85_read_value(client, LM85_REG_TEMP_MAX(i));
-		}
 
-		for (i = 0; i <= 2; ++i) {
-			int val;
 			data->autofan[i].config =
 			    lm85_read_value(client, LM85_REG_AFAN_CONFIG(i));
 			val = lm85_read_value(client, LM85_REG_AFAN_RANGE(i));
 			data->autofan[i].freq = val & 0x07;
-			data->zone[i].range = (val >> 4) & 0x0f;
+			data->zone[i].range = val >> 4;
 			data->autofan[i].min_pwm =
 			    lm85_read_value(client, LM85_REG_AFAN_MINPWM(i));
 			data->zone[i].limit =
@@ -1534,11 +1521,11 @@ static struct lm85_data *lm85_update_dev
 		data->autofan[2].min_off = (i & 0x80) != 0;
 
 		i = lm85_read_value(client, LM85_REG_AFAN_HYST1);
-		data->zone[0].hyst = (i>>4) & 0x0f;
+		data->zone[0].hyst = i >> 4;
 		data->zone[1].hyst = i & 0x0f;
 
 		i = lm85_read_value(client, LM85_REG_AFAN_HYST2);
-		data->zone[2].hyst = (i>>4) & 0x0f;
+		data->zone[2].hyst = i >> 4;
 
 		data->last_config = jiffies;
 	}  /* last_config */
@@ -1561,14 +1548,10 @@ static void  __exit sm_lm85_exit(void)
 	i2c_del_driver(&lm85_driver);
 }
 
-/* Thanks to Richard Barrington for adding the LM85 to sensors-detect.
- * Thanks to Margit Schubert-While <margitsw at t-online.de> for help with
- *     post 2.7.0 CVS changes.
- */
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Philip Pokorny <ppokorny at penguincomputing.com>, "
 	"Margit Schubert-While <margitsw at t-online.de>, "
-	"Justin Thiessen <jthiessen at penguincomputing.com");
+	"Justin Thiessen <jthiessen at penguincomputing.com>");
 MODULE_DESCRIPTION("LM85-B, LM85-C driver");
 
 module_init(sm_lm85_init);

-- 
Jean Delvare




More information about the lm-sensors mailing list