diff options
| -rw-r--r-- | drivers/hwmon/lm85.c | 151 |
1 files changed, 67 insertions, 84 deletions
diff --git a/drivers/hwmon/lm85.c b/drivers/hwmon/lm85.c index 645b98c187c2..c7e10af0173f 100644 --- a/drivers/hwmon/lm85.c +++ b/drivers/hwmon/lm85.c | |||
| @@ -110,7 +110,7 @@ I2C_CLIENT_INSMOD_6(lm85b, lm85c, adm1027, adt7463, emc6d100, emc6d102); | |||
| 110 | */ | 110 | */ |
| 111 | 111 | ||
| 112 | /* IN are scaled acording to built-in resistors */ | 112 | /* IN are scaled acording to built-in resistors */ |
| 113 | static int lm85_scaling[] = { /* .001 Volts */ | 113 | static const int lm85_scaling[] = { /* .001 Volts */ |
| 114 | 2500, 2250, 3300, 5000, 12000, | 114 | 2500, 2250, 3300, 5000, 12000, |
| 115 | 3300, 1500, 1800 /*EMC6D100*/ | 115 | 3300, 1500, 1800 /*EMC6D100*/ |
| 116 | }; | 116 | }; |
| @@ -164,7 +164,7 @@ static inline u16 FAN_TO_REG(unsigned long val) | |||
| 164 | */ | 164 | */ |
| 165 | 165 | ||
| 166 | /* These are the zone temperature range encodings in .001 degree C */ | 166 | /* These are the zone temperature range encodings in .001 degree C */ |
| 167 | static int lm85_range_map[] = { | 167 | static const int lm85_range_map[] = { |
| 168 | 2000, 2500, 3300, 4000, 5000, 6600, 8000, 10000, | 168 | 2000, 2500, 3300, 4000, 5000, 6600, 8000, 10000, |
| 169 | 13300, 16000, 20000, 26600, 32000, 40000, 53300, 80000 | 169 | 13300, 16000, 20000, 26600, 32000, 40000, 53300, 80000 |
| 170 | }; | 170 | }; |
| @@ -190,13 +190,8 @@ static int RANGE_TO_REG(int range) | |||
| 190 | } | 190 | } |
| 191 | #define RANGE_FROM_REG(val) lm85_range_map[(val) & 0x0f] | 191 | #define RANGE_FROM_REG(val) lm85_range_map[(val) & 0x0f] |
| 192 | 192 | ||
| 193 | /* These are the Acoustic Enhancement, or Temperature smoothing encodings | ||
| 194 | * NOTE: The enable/disable bit is INCLUDED in these encodings as the | ||
| 195 | * MSB (bit 3, value 8). If the enable bit is 0, the encoded value | ||
| 196 | * is ignored, or set to 0. | ||
| 197 | */ | ||
| 198 | /* These are the PWM frequency encodings */ | 193 | /* These are the PWM frequency encodings */ |
| 199 | static int lm85_freq_map[] = { /* .1 Hz */ | 194 | static const int lm85_freq_map[] = { /* .1 Hz */ |
| 200 | 100, 150, 230, 300, 380, 470, 620, 940 | 195 | 100, 150, 230, 300, 380, 470, 620, 940 |
| 201 | }; | 196 | }; |
| 202 | 197 | ||
| @@ -209,7 +204,7 @@ static int FREQ_TO_REG(int freq) | |||
| 209 | for (i = 0; i < 7; ++i) | 204 | for (i = 0; i < 7; ++i) |
| 210 | if (freq <= lm85_freq_map[i]) | 205 | if (freq <= lm85_freq_map[i]) |
| 211 | break; | 206 | break; |
| 212 | return i & 0x07; | 207 | return i; |
| 213 | } | 208 | } |
| 214 | #define FREQ_FROM_REG(val) lm85_freq_map[(val) & 0x07] | 209 | #define FREQ_FROM_REG(val) lm85_freq_map[(val) & 0x07] |
| 215 | 210 | ||
| @@ -225,8 +220,8 @@ static int FREQ_TO_REG(int freq) | |||
| 225 | * -2 -- PWM responds to manual control | 220 | * -2 -- PWM responds to manual control |
| 226 | */ | 221 | */ |
| 227 | 222 | ||
| 228 | static int lm85_zone_map[] = { 1, 2, 3, -1, 0, 23, 123, -2 }; | 223 | static const int lm85_zone_map[] = { 1, 2, 3, -1, 0, 23, 123, -2 }; |
| 229 | #define ZONE_FROM_REG(val) lm85_zone_map[((val) >> 5) & 0x07] | 224 | #define ZONE_FROM_REG(val) lm85_zone_map[(val) >> 5] |
| 230 | 225 | ||
| 231 | static int ZONE_TO_REG(int zone) | 226 | static int ZONE_TO_REG(int zone) |
| 232 | { | 227 | { |
| @@ -237,7 +232,7 @@ static int ZONE_TO_REG(int zone) | |||
| 237 | break; | 232 | break; |
| 238 | if (i > 7) /* Not found. */ | 233 | if (i > 7) /* Not found. */ |
| 239 | i = 3; /* Always 100% */ | 234 | i = 3; /* Always 100% */ |
| 240 | return (i & 0x07) << 5; | 235 | return i << 5; |
| 241 | } | 236 | } |
| 242 | 237 | ||
| 243 | #define HYST_TO_REG(val) SENSORS_LIMIT(((val) + 500) / 1000, 0, 15) | 238 | #define HYST_TO_REG(val) SENSORS_LIMIT(((val) + 500) / 1000, 0, 15) |
| @@ -321,7 +316,7 @@ static int lm85_detect(struct i2c_adapter *adapter, int address, | |||
| 321 | static int lm85_detach_client(struct i2c_client *client); | 316 | static int lm85_detach_client(struct i2c_client *client); |
| 322 | 317 | ||
| 323 | static int lm85_read_value(struct i2c_client *client, u8 reg); | 318 | static int lm85_read_value(struct i2c_client *client, u8 reg); |
| 324 | static int lm85_write_value(struct i2c_client *client, u8 reg, int value); | 319 | static void lm85_write_value(struct i2c_client *client, u8 reg, int value); |
| 325 | static struct lm85_data *lm85_update_device(struct device *dev); | 320 | static struct lm85_data *lm85_update_device(struct device *dev); |
| 326 | static void lm85_init_client(struct i2c_client *client); | 321 | static void lm85_init_client(struct i2c_client *client); |
| 327 | 322 | ||
| @@ -1095,13 +1090,12 @@ static int lm85_detect(struct i2c_adapter *adapter, int address, | |||
| 1095 | int kind) | 1090 | int kind) |
| 1096 | { | 1091 | { |
| 1097 | int company, verstep; | 1092 | int company, verstep; |
| 1098 | struct i2c_client *new_client = NULL; | 1093 | struct i2c_client *client; |
| 1099 | struct lm85_data *data; | 1094 | struct lm85_data *data; |
| 1100 | int err = 0; | 1095 | int err = 0; |
| 1101 | const char *type_name = ""; | 1096 | const char *type_name; |
| 1102 | 1097 | ||
| 1103 | if (!i2c_check_functionality(adapter, | 1098 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { |
| 1104 | I2C_FUNC_SMBUS_BYTE_DATA)) { | ||
| 1105 | /* We need to be able to do byte I/O */ | 1099 | /* We need to be able to do byte I/O */ |
| 1106 | goto ERROR0; | 1100 | goto ERROR0; |
| 1107 | } | 1101 | } |
| @@ -1115,21 +1109,20 @@ static int lm85_detect(struct i2c_adapter *adapter, int address, | |||
| 1115 | goto ERROR0; | 1109 | goto ERROR0; |
| 1116 | } | 1110 | } |
| 1117 | 1111 | ||
| 1118 | new_client = &data->client; | 1112 | client = &data->client; |
| 1119 | i2c_set_clientdata(new_client, data); | 1113 | i2c_set_clientdata(client, data); |
| 1120 | new_client->addr = address; | 1114 | client->addr = address; |
| 1121 | new_client->adapter = adapter; | 1115 | client->adapter = adapter; |
| 1122 | new_client->driver = &lm85_driver; | 1116 | client->driver = &lm85_driver; |
| 1123 | new_client->flags = 0; | ||
| 1124 | 1117 | ||
| 1125 | /* Now, we do the remaining detection. */ | 1118 | /* Now, we do the remaining detection. */ |
| 1126 | 1119 | ||
| 1127 | company = lm85_read_value(new_client, LM85_REG_COMPANY); | 1120 | company = lm85_read_value(client, LM85_REG_COMPANY); |
| 1128 | verstep = lm85_read_value(new_client, LM85_REG_VERSTEP); | 1121 | verstep = lm85_read_value(client, LM85_REG_VERSTEP); |
| 1129 | 1122 | ||
| 1130 | dev_dbg(&adapter->dev, "Detecting device at %d,0x%02x with" | 1123 | dev_dbg(&adapter->dev, "Detecting device at %d,0x%02x with" |
| 1131 | " COMPANY: 0x%02x and VERSTEP: 0x%02x\n", | 1124 | " COMPANY: 0x%02x and VERSTEP: 0x%02x\n", |
| 1132 | i2c_adapter_id(new_client->adapter), new_client->addr, | 1125 | i2c_adapter_id(client->adapter), client->addr, |
| 1133 | company, verstep); | 1126 | company, verstep); |
| 1134 | 1127 | ||
| 1135 | /* If auto-detecting, Determine the chip type. */ | 1128 | /* If auto-detecting, Determine the chip type. */ |
| @@ -1196,56 +1189,65 @@ static int lm85_detect(struct i2c_adapter *adapter, int address, | |||
| 1196 | } | 1189 | } |
| 1197 | 1190 | ||
| 1198 | /* Fill in the chip specific driver values */ | 1191 | /* Fill in the chip specific driver values */ |
| 1199 | if (kind == any_chip) | 1192 | switch (kind) { |
| 1200 | type_name = "lm85"; | 1193 | case lm85b: |
| 1201 | else if (kind == lm85b) | ||
| 1202 | type_name = "lm85b"; | 1194 | type_name = "lm85b"; |
| 1203 | else if (kind == lm85c) | 1195 | break; |
| 1196 | case lm85c: | ||
| 1204 | type_name = "lm85c"; | 1197 | type_name = "lm85c"; |
| 1205 | else if (kind == adm1027) | 1198 | break; |
| 1199 | case adm1027: | ||
| 1206 | type_name = "adm1027"; | 1200 | type_name = "adm1027"; |
| 1207 | else if (kind == adt7463) | 1201 | break; |
| 1202 | case adt7463: | ||
| 1208 | type_name = "adt7463"; | 1203 | type_name = "adt7463"; |
| 1209 | else if (kind == emc6d100) | 1204 | break; |
| 1205 | case emc6d100: | ||
| 1210 | type_name = "emc6d100"; | 1206 | type_name = "emc6d100"; |
| 1211 | else if (kind == emc6d102) | 1207 | break; |
| 1208 | case emc6d102: | ||
| 1212 | type_name = "emc6d102"; | 1209 | type_name = "emc6d102"; |
| 1213 | strlcpy(new_client->name, type_name, I2C_NAME_SIZE); | 1210 | break; |
| 1211 | default: | ||
| 1212 | type_name = "lm85"; | ||
| 1213 | } | ||
| 1214 | strlcpy(client->name, type_name, I2C_NAME_SIZE); | ||
| 1214 | 1215 | ||
| 1215 | /* Fill in the remaining client fields */ | 1216 | /* Fill in the remaining client fields */ |
| 1216 | data->type = kind; | 1217 | data->type = kind; |
| 1217 | data->valid = 0; | ||
| 1218 | mutex_init(&data->update_lock); | 1218 | mutex_init(&data->update_lock); |
| 1219 | 1219 | ||
| 1220 | /* Tell the I2C layer a new client has arrived */ | 1220 | /* Tell the I2C layer a new client has arrived */ |
| 1221 | if ((err = i2c_attach_client(new_client))) | 1221 | err = i2c_attach_client(client); |
| 1222 | if (err) | ||
| 1222 | goto ERROR1; | 1223 | goto ERROR1; |
| 1223 | 1224 | ||
| 1224 | /* Set the VRM version */ | 1225 | /* Set the VRM version */ |
| 1225 | data->vrm = vid_which_vrm(); | 1226 | data->vrm = vid_which_vrm(); |
| 1226 | 1227 | ||
| 1227 | /* Initialize the LM85 chip */ | 1228 | /* Initialize the LM85 chip */ |
| 1228 | lm85_init_client(new_client); | 1229 | lm85_init_client(client); |
| 1229 | 1230 | ||
| 1230 | /* Register sysfs hooks */ | 1231 | /* Register sysfs hooks */ |
| 1231 | if ((err = sysfs_create_group(&new_client->dev.kobj, &lm85_group))) | 1232 | err = sysfs_create_group(&client->dev.kobj, &lm85_group); |
| 1233 | if (err) | ||
| 1232 | goto ERROR2; | 1234 | goto ERROR2; |
| 1233 | 1235 | ||
| 1234 | /* The ADT7463 has an optional VRM 10 mode where pin 21 is used | 1236 | /* The ADT7463 has an optional VRM 10 mode where pin 21 is used |
| 1235 | as a sixth digital VID input rather than an analog input. */ | 1237 | as a sixth digital VID input rather than an analog input. */ |
| 1236 | data->vid = lm85_read_value(new_client, LM85_REG_VID); | 1238 | data->vid = lm85_read_value(client, LM85_REG_VID); |
| 1237 | if (!(kind == adt7463 && (data->vid & 0x80))) | 1239 | if (!(kind == adt7463 && (data->vid & 0x80))) |
| 1238 | if ((err = sysfs_create_group(&new_client->dev.kobj, | 1240 | if ((err = sysfs_create_group(&client->dev.kobj, |
| 1239 | &lm85_group_in4))) | 1241 | &lm85_group_in4))) |
| 1240 | goto ERROR3; | 1242 | goto ERROR3; |
| 1241 | 1243 | ||
| 1242 | /* The EMC6D100 has 3 additional voltage inputs */ | 1244 | /* The EMC6D100 has 3 additional voltage inputs */ |
| 1243 | if (kind == emc6d100) | 1245 | if (kind == emc6d100) |
| 1244 | if ((err = sysfs_create_group(&new_client->dev.kobj, | 1246 | if ((err = sysfs_create_group(&client->dev.kobj, |
| 1245 | &lm85_group_in567))) | 1247 | &lm85_group_in567))) |
| 1246 | goto ERROR3; | 1248 | goto ERROR3; |
| 1247 | 1249 | ||
| 1248 | data->hwmon_dev = hwmon_device_register(&new_client->dev); | 1250 | data->hwmon_dev = hwmon_device_register(&client->dev); |
| 1249 | if (IS_ERR(data->hwmon_dev)) { | 1251 | if (IS_ERR(data->hwmon_dev)) { |
| 1250 | err = PTR_ERR(data->hwmon_dev); | 1252 | err = PTR_ERR(data->hwmon_dev); |
| 1251 | goto ERROR3; | 1253 | goto ERROR3; |
| @@ -1255,12 +1257,12 @@ static int lm85_detect(struct i2c_adapter *adapter, int address, | |||
| 1255 | 1257 | ||
| 1256 | /* Error out and cleanup code */ | 1258 | /* Error out and cleanup code */ |
| 1257 | ERROR3: | 1259 | ERROR3: |
| 1258 | sysfs_remove_group(&new_client->dev.kobj, &lm85_group); | 1260 | sysfs_remove_group(&client->dev.kobj, &lm85_group); |
| 1259 | sysfs_remove_group(&new_client->dev.kobj, &lm85_group_in4); | 1261 | sysfs_remove_group(&client->dev.kobj, &lm85_group_in4); |
| 1260 | if (kind == emc6d100) | 1262 | if (kind == emc6d100) |
| 1261 | sysfs_remove_group(&new_client->dev.kobj, &lm85_group_in567); | 1263 | sysfs_remove_group(&client->dev.kobj, &lm85_group_in567); |
| 1262 | ERROR2: | 1264 | ERROR2: |
| 1263 | i2c_detach_client(new_client); | 1265 | i2c_detach_client(client); |
| 1264 | ERROR1: | 1266 | ERROR1: |
| 1265 | kfree(data); | 1267 | kfree(data); |
| 1266 | ERROR0: | 1268 | ERROR0: |
| @@ -1307,10 +1309,8 @@ static int lm85_read_value(struct i2c_client *client, u8 reg) | |||
| 1307 | return res; | 1309 | return res; |
| 1308 | } | 1310 | } |
| 1309 | 1311 | ||
| 1310 | static int lm85_write_value(struct i2c_client *client, u8 reg, int value) | 1312 | static void lm85_write_value(struct i2c_client *client, u8 reg, int value) |
| 1311 | { | 1313 | { |
| 1312 | int res; | ||
| 1313 | |||
| 1314 | switch (reg) { | 1314 | switch (reg) { |
| 1315 | case LM85_REG_FAN(0): /* Write WORD data */ | 1315 | case LM85_REG_FAN(0): /* Write WORD data */ |
| 1316 | case LM85_REG_FAN(1): | 1316 | case LM85_REG_FAN(1): |
| @@ -1321,16 +1321,13 @@ static int lm85_write_value(struct i2c_client *client, u8 reg, int value) | |||
| 1321 | case LM85_REG_FAN_MIN(2): | 1321 | case LM85_REG_FAN_MIN(2): |
| 1322 | case LM85_REG_FAN_MIN(3): | 1322 | case LM85_REG_FAN_MIN(3): |
| 1323 | /* NOTE: ALARM is read only, so not included here */ | 1323 | /* NOTE: ALARM is read only, so not included here */ |
| 1324 | res = i2c_smbus_write_byte_data(client, reg, value & 0xff); | 1324 | i2c_smbus_write_byte_data(client, reg, value & 0xff); |
| 1325 | res |= i2c_smbus_write_byte_data(client, reg + 1, | 1325 | i2c_smbus_write_byte_data(client, reg + 1, value >> 8); |
| 1326 | (value >> 8) & 0xff); | ||
| 1327 | break; | 1326 | break; |
| 1328 | default: /* Write BYTE data */ | 1327 | default: /* Write BYTE data */ |
| 1329 | res = i2c_smbus_write_byte_data(client, reg, value); | 1328 | i2c_smbus_write_byte_data(client, reg, value); |
| 1330 | break; | 1329 | break; |
| 1331 | } | 1330 | } |
| 1332 | |||
| 1333 | return res; | ||
| 1334 | } | 1331 | } |
| 1335 | 1332 | ||
| 1336 | static void lm85_init_client(struct i2c_client *client) | 1333 | static void lm85_init_client(struct i2c_client *client) |
| @@ -1414,6 +1411,8 @@ static struct lm85_data *lm85_update_device(struct device *dev) | |||
| 1414 | for (i = 0; i <= 3; ++i) { | 1411 | for (i = 0; i <= 3; ++i) { |
| 1415 | data->in[i] = | 1412 | data->in[i] = |
| 1416 | lm85_read_value(client, LM85_REG_IN(i)); | 1413 | lm85_read_value(client, LM85_REG_IN(i)); |
| 1414 | data->fan[i] = | ||
| 1415 | lm85_read_value(client, LM85_REG_FAN(i)); | ||
| 1417 | } | 1416 | } |
| 1418 | 1417 | ||
| 1419 | if (!(data->type == adt7463 && (data->vid & 0x80))) { | 1418 | if (!(data->type == adt7463 && (data->vid & 0x80))) { |
| @@ -1421,17 +1420,9 @@ static struct lm85_data *lm85_update_device(struct device *dev) | |||
| 1421 | LM85_REG_IN(4)); | 1420 | LM85_REG_IN(4)); |
| 1422 | } | 1421 | } |
| 1423 | 1422 | ||
| 1424 | for (i = 0; i <= 3; ++i) { | ||
| 1425 | data->fan[i] = | ||
| 1426 | lm85_read_value(client, LM85_REG_FAN(i)); | ||
| 1427 | } | ||
| 1428 | |||
| 1429 | for (i = 0; i <= 2; ++i) { | 1423 | for (i = 0; i <= 2; ++i) { |
| 1430 | data->temp[i] = | 1424 | data->temp[i] = |
| 1431 | lm85_read_value(client, LM85_REG_TEMP(i)); | 1425 | lm85_read_value(client, LM85_REG_TEMP(i)); |
| 1432 | } | ||
| 1433 | |||
| 1434 | for (i = 0; i <= 2; ++i) { | ||
| 1435 | data->pwm[i] = | 1426 | data->pwm[i] = |
| 1436 | lm85_read_value(client, LM85_REG_PWM(i)); | 1427 | lm85_read_value(client, LM85_REG_PWM(i)); |
| 1437 | } | 1428 | } |
| @@ -1462,13 +1453,13 @@ static struct lm85_data *lm85_update_device(struct device *dev) | |||
| 1462 | EMC6D102_REG_EXTEND_ADC4); | 1453 | EMC6D102_REG_EXTEND_ADC4); |
| 1463 | data->in_ext[0] = ext3 & 0x0f; | 1454 | data->in_ext[0] = ext3 & 0x0f; |
| 1464 | data->in_ext[1] = ext4 & 0x0f; | 1455 | data->in_ext[1] = ext4 & 0x0f; |
| 1465 | data->in_ext[2] = (ext4 >> 4) & 0x0f; | 1456 | data->in_ext[2] = ext4 >> 4; |
| 1466 | data->in_ext[3] = (ext3 >> 4) & 0x0f; | 1457 | data->in_ext[3] = ext3 >> 4; |
| 1467 | data->in_ext[4] = (ext2 >> 4) & 0x0f; | 1458 | data->in_ext[4] = ext2 >> 4; |
| 1468 | 1459 | ||
| 1469 | data->temp_ext[0] = ext1 & 0x0f; | 1460 | data->temp_ext[0] = ext1 & 0x0f; |
| 1470 | data->temp_ext[1] = ext2 & 0x0f; | 1461 | data->temp_ext[1] = ext2 & 0x0f; |
| 1471 | data->temp_ext[2] = (ext1 >> 4) & 0x0f; | 1462 | data->temp_ext[2] = ext1 >> 4; |
| 1472 | } | 1463 | } |
| 1473 | 1464 | ||
| 1474 | data->last_reading = jiffies; | 1465 | data->last_reading = jiffies; |
| @@ -1484,6 +1475,8 @@ static struct lm85_data *lm85_update_device(struct device *dev) | |||
| 1484 | lm85_read_value(client, LM85_REG_IN_MIN(i)); | 1475 | lm85_read_value(client, LM85_REG_IN_MIN(i)); |
| 1485 | data->in_max[i] = | 1476 | data->in_max[i] = |
| 1486 | lm85_read_value(client, LM85_REG_IN_MAX(i)); | 1477 | lm85_read_value(client, LM85_REG_IN_MAX(i)); |
| 1478 | data->fan_min[i] = | ||
| 1479 | lm85_read_value(client, LM85_REG_FAN_MIN(i)); | ||
| 1487 | } | 1480 | } |
| 1488 | 1481 | ||
| 1489 | if (!(data->type == adt7463 && (data->vid & 0x80))) { | 1482 | if (!(data->type == adt7463 && (data->vid & 0x80))) { |
| @@ -1502,25 +1495,19 @@ static struct lm85_data *lm85_update_device(struct device *dev) | |||
| 1502 | } | 1495 | } |
| 1503 | } | 1496 | } |
| 1504 | 1497 | ||
| 1505 | for (i = 0; i <= 3; ++i) { | ||
| 1506 | data->fan_min[i] = | ||
| 1507 | lm85_read_value(client, LM85_REG_FAN_MIN(i)); | ||
| 1508 | } | ||
| 1509 | |||
| 1510 | for (i = 0; i <= 2; ++i) { | 1498 | for (i = 0; i <= 2; ++i) { |
| 1499 | int val; | ||
| 1500 | |||
| 1511 | data->temp_min[i] = | 1501 | data->temp_min[i] = |
| 1512 | lm85_read_value(client, LM85_REG_TEMP_MIN(i)); | 1502 | lm85_read_value(client, LM85_REG_TEMP_MIN(i)); |
| 1513 | data->temp_max[i] = | 1503 | data->temp_max[i] = |
| 1514 | lm85_read_value(client, LM85_REG_TEMP_MAX(i)); | 1504 | lm85_read_value(client, LM85_REG_TEMP_MAX(i)); |
| 1515 | } | ||
| 1516 | 1505 | ||
| 1517 | for (i = 0; i <= 2; ++i) { | ||
| 1518 | int val; | ||
| 1519 | data->autofan[i].config = | 1506 | data->autofan[i].config = |
| 1520 | lm85_read_value(client, LM85_REG_AFAN_CONFIG(i)); | 1507 | lm85_read_value(client, LM85_REG_AFAN_CONFIG(i)); |
| 1521 | val = lm85_read_value(client, LM85_REG_AFAN_RANGE(i)); | 1508 | val = lm85_read_value(client, LM85_REG_AFAN_RANGE(i)); |
| 1522 | data->autofan[i].freq = val & 0x07; | 1509 | data->autofan[i].freq = val & 0x07; |
| 1523 | data->zone[i].range = (val >> 4) & 0x0f; | 1510 | data->zone[i].range = val >> 4; |
| 1524 | data->autofan[i].min_pwm = | 1511 | data->autofan[i].min_pwm = |
| 1525 | lm85_read_value(client, LM85_REG_AFAN_MINPWM(i)); | 1512 | lm85_read_value(client, LM85_REG_AFAN_MINPWM(i)); |
| 1526 | data->zone[i].limit = | 1513 | data->zone[i].limit = |
| @@ -1535,11 +1522,11 @@ static struct lm85_data *lm85_update_device(struct device *dev) | |||
| 1535 | data->autofan[2].min_off = (i & 0x80) != 0; | 1522 | data->autofan[2].min_off = (i & 0x80) != 0; |
| 1536 | 1523 | ||
| 1537 | i = lm85_read_value(client, LM85_REG_AFAN_HYST1); | 1524 | i = lm85_read_value(client, LM85_REG_AFAN_HYST1); |
| 1538 | data->zone[0].hyst = (i >> 4) & 0x0f; | 1525 | data->zone[0].hyst = i >> 4; |
| 1539 | data->zone[1].hyst = i & 0x0f; | 1526 | data->zone[1].hyst = i & 0x0f; |
| 1540 | 1527 | ||
| 1541 | i = lm85_read_value(client, LM85_REG_AFAN_HYST2); | 1528 | i = lm85_read_value(client, LM85_REG_AFAN_HYST2); |
| 1542 | data->zone[2].hyst = (i >> 4) & 0x0f; | 1529 | data->zone[2].hyst = i >> 4; |
| 1543 | 1530 | ||
| 1544 | data->last_config = jiffies; | 1531 | data->last_config = jiffies; |
| 1545 | } /* last_config */ | 1532 | } /* last_config */ |
| @@ -1562,14 +1549,10 @@ static void __exit sm_lm85_exit(void) | |||
| 1562 | i2c_del_driver(&lm85_driver); | 1549 | i2c_del_driver(&lm85_driver); |
| 1563 | } | 1550 | } |
| 1564 | 1551 | ||
| 1565 | /* Thanks to Richard Barrington for adding the LM85 to sensors-detect. | ||
| 1566 | * Thanks to Margit Schubert-While <margitsw@t-online.de> for help with | ||
| 1567 | * post 2.7.0 CVS changes. | ||
| 1568 | */ | ||
| 1569 | MODULE_LICENSE("GPL"); | 1552 | MODULE_LICENSE("GPL"); |
| 1570 | MODULE_AUTHOR("Philip Pokorny <ppokorny@penguincomputing.com>, " | 1553 | MODULE_AUTHOR("Philip Pokorny <ppokorny@penguincomputing.com>, " |
| 1571 | "Margit Schubert-While <margitsw@t-online.de>, " | 1554 | "Margit Schubert-While <margitsw@t-online.de>, " |
| 1572 | "Justin Thiessen <jthiessen@penguincomputing.com"); | 1555 | "Justin Thiessen <jthiessen@penguincomputing.com>"); |
| 1573 | MODULE_DESCRIPTION("LM85-B, LM85-C driver"); | 1556 | MODULE_DESCRIPTION("LM85-B, LM85-C driver"); |
| 1574 | 1557 | ||
| 1575 | module_init(sm_lm85_init); | 1558 | module_init(sm_lm85_init); |
