diff options
| author | Jean Delvare <khali@linux-fr.org> | 2009-12-09 14:35:53 -0500 |
|---|---|---|
| committer | Jean Delvare <khali@linux-fr.org> | 2009-12-09 14:35:53 -0500 |
| commit | d42a2eb5ad9766fac96f27af93b1634e4ffde220 (patch) | |
| tree | 38d0cab10aaf75aebcb41135fc59775175c0d074 | |
| parent | b57dc3940a70a2c2460b628567a3cc76efe725f2 (diff) | |
hwmon: (lm85) Clean up detect function
As kind is now hard-coded to -1, there is room for code clean-ups.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
| -rw-r--r-- | drivers/hwmon/lm85.c | 157 |
1 files changed, 65 insertions, 92 deletions
diff --git a/drivers/hwmon/lm85.c b/drivers/hwmon/lm85.c index 6c53d987de10..d56da2e74708 100644 --- a/drivers/hwmon/lm85.c +++ b/drivers/hwmon/lm85.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | Copyright (c) 2002, 2003 Philip Pokorny <ppokorny@penguincomputing.com> | 5 | Copyright (c) 2002, 2003 Philip Pokorny <ppokorny@penguincomputing.com> |
| 6 | Copyright (c) 2003 Margit Schubert-While <margitsw@t-online.de> | 6 | Copyright (c) 2003 Margit Schubert-While <margitsw@t-online.de> |
| 7 | Copyright (c) 2004 Justin Thiessen <jthiessen@penguincomputing.com> | 7 | Copyright (c) 2004 Justin Thiessen <jthiessen@penguincomputing.com> |
| 8 | Copyright (C) 2007, 2008 Jean Delvare <khali@linux-fr.org> | 8 | Copyright (C) 2007--2009 Jean Delvare <khali@linux-fr.org> |
| 9 | 9 | ||
| 10 | Chip details at <http://www.national.com/ds/LM/LM85.pdf> | 10 | Chip details at <http://www.national.com/ds/LM/LM85.pdf> |
| 11 | 11 | ||
| @@ -1162,107 +1162,80 @@ static int lm85_detect(struct i2c_client *client, int kind, | |||
| 1162 | struct i2c_adapter *adapter = client->adapter; | 1162 | struct i2c_adapter *adapter = client->adapter; |
| 1163 | int address = client->addr; | 1163 | int address = client->addr; |
| 1164 | const char *type_name; | 1164 | const char *type_name; |
| 1165 | int company, verstep; | ||
| 1165 | 1166 | ||
| 1166 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { | 1167 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { |
| 1167 | /* We need to be able to do byte I/O */ | 1168 | /* We need to be able to do byte I/O */ |
| 1168 | return -ENODEV; | 1169 | return -ENODEV; |
| 1169 | } | 1170 | } |
| 1170 | 1171 | ||
| 1171 | /* If auto-detecting, determine the chip type */ | 1172 | /* Determine the chip type */ |
| 1172 | if (kind < 0) { | 1173 | company = lm85_read_value(client, LM85_REG_COMPANY); |
| 1173 | int company = lm85_read_value(client, LM85_REG_COMPANY); | 1174 | verstep = lm85_read_value(client, LM85_REG_VERSTEP); |
| 1174 | int verstep = lm85_read_value(client, LM85_REG_VERSTEP); | 1175 | |
| 1175 | 1176 | dev_dbg(&adapter->dev, "Detecting device at 0x%02x with " | |
| 1176 | dev_dbg(&adapter->dev, "Detecting device at 0x%02x with " | 1177 | "COMPANY: 0x%02x and VERSTEP: 0x%02x\n", |
| 1177 | "COMPANY: 0x%02x and VERSTEP: 0x%02x\n", | 1178 | address, company, verstep); |
| 1178 | address, company, verstep); | 1179 | |
| 1179 | 1180 | /* All supported chips have the version in common */ | |
| 1180 | /* All supported chips have the version in common */ | 1181 | if ((verstep & LM85_VERSTEP_VMASK) != LM85_VERSTEP_GENERIC && |
| 1181 | if ((verstep & LM85_VERSTEP_VMASK) != LM85_VERSTEP_GENERIC && | 1182 | (verstep & LM85_VERSTEP_VMASK) != LM85_VERSTEP_GENERIC2) { |
| 1182 | (verstep & LM85_VERSTEP_VMASK) != LM85_VERSTEP_GENERIC2) { | 1183 | dev_dbg(&adapter->dev, |
| 1183 | dev_dbg(&adapter->dev, "Autodetection failed: " | 1184 | "Autodetection failed: unsupported version\n"); |
| 1184 | "unsupported version\n"); | 1185 | return -ENODEV; |
| 1185 | return -ENODEV; | 1186 | } |
| 1186 | } | 1187 | type_name = "lm85"; |
| 1187 | kind = any_chip; | 1188 | |
| 1188 | 1189 | /* Now, refine the detection */ | |
| 1189 | /* Now, refine the detection */ | 1190 | if (company == LM85_COMPANY_NATIONAL) { |
| 1190 | if (company == LM85_COMPANY_NATIONAL) { | 1191 | switch (verstep) { |
| 1191 | switch (verstep) { | 1192 | case LM85_VERSTEP_LM85C: |
| 1192 | case LM85_VERSTEP_LM85C: | 1193 | type_name = "lm85c"; |
| 1193 | kind = lm85c; | 1194 | break; |
| 1194 | break; | 1195 | case LM85_VERSTEP_LM85B: |
| 1195 | case LM85_VERSTEP_LM85B: | 1196 | type_name = "lm85b"; |
| 1196 | kind = lm85b; | 1197 | break; |
| 1197 | break; | 1198 | case LM85_VERSTEP_LM96000_1: |
| 1198 | case LM85_VERSTEP_LM96000_1: | 1199 | case LM85_VERSTEP_LM96000_2: |
| 1199 | case LM85_VERSTEP_LM96000_2: | 1200 | /* Check for Winbond WPCD377I */ |
| 1200 | /* Check for Winbond WPCD377I */ | 1201 | if (lm85_is_fake(client)) { |
| 1201 | if (lm85_is_fake(client)) { | 1202 | dev_dbg(&adapter->dev, |
| 1202 | dev_dbg(&adapter->dev, | 1203 | "Found Winbond WPCD377I, ignoring\n"); |
| 1203 | "Found Winbond WPCD377I, " | 1204 | return -ENODEV; |
| 1204 | "ignoring\n"); | ||
| 1205 | return -ENODEV; | ||
| 1206 | } | ||
| 1207 | break; | ||
| 1208 | } | ||
| 1209 | } else if (company == LM85_COMPANY_ANALOG_DEV) { | ||
| 1210 | switch (verstep) { | ||
| 1211 | case LM85_VERSTEP_ADM1027: | ||
| 1212 | kind = adm1027; | ||
| 1213 | break; | ||
| 1214 | case LM85_VERSTEP_ADT7463: | ||
| 1215 | case LM85_VERSTEP_ADT7463C: | ||
| 1216 | kind = adt7463; | ||
| 1217 | break; | ||
| 1218 | case LM85_VERSTEP_ADT7468_1: | ||
| 1219 | case LM85_VERSTEP_ADT7468_2: | ||
| 1220 | kind = adt7468; | ||
| 1221 | break; | ||
| 1222 | } | ||
| 1223 | } else if (company == LM85_COMPANY_SMSC) { | ||
| 1224 | switch (verstep) { | ||
| 1225 | case LM85_VERSTEP_EMC6D100_A0: | ||
| 1226 | case LM85_VERSTEP_EMC6D100_A1: | ||
| 1227 | /* Note: we can't tell a '100 from a '101 */ | ||
| 1228 | kind = emc6d100; | ||
| 1229 | break; | ||
| 1230 | case LM85_VERSTEP_EMC6D102: | ||
| 1231 | kind = emc6d102; | ||
| 1232 | break; | ||
| 1233 | } | 1205 | } |
| 1234 | } else { | 1206 | break; |
| 1235 | dev_dbg(&adapter->dev, "Autodetection failed: " | 1207 | } |
| 1236 | "unknown vendor\n"); | 1208 | } else if (company == LM85_COMPANY_ANALOG_DEV) { |
| 1237 | return -ENODEV; | 1209 | switch (verstep) { |
| 1210 | case LM85_VERSTEP_ADM1027: | ||
| 1211 | type_name = "adm1027"; | ||
| 1212 | break; | ||
| 1213 | case LM85_VERSTEP_ADT7463: | ||
| 1214 | case LM85_VERSTEP_ADT7463C: | ||
| 1215 | type_name = "adt7463"; | ||
| 1216 | break; | ||
| 1217 | case LM85_VERSTEP_ADT7468_1: | ||
| 1218 | case LM85_VERSTEP_ADT7468_2: | ||
| 1219 | type_name = "adt7468"; | ||
| 1220 | break; | ||
| 1238 | } | 1221 | } |
| 1222 | } else if (company == LM85_COMPANY_SMSC) { | ||
| 1223 | switch (verstep) { | ||
| 1224 | case LM85_VERSTEP_EMC6D100_A0: | ||
| 1225 | case LM85_VERSTEP_EMC6D100_A1: | ||
| 1226 | /* Note: we can't tell a '100 from a '101 */ | ||
| 1227 | type_name = "emc6d100"; | ||
| 1228 | break; | ||
| 1229 | case LM85_VERSTEP_EMC6D102: | ||
| 1230 | type_name = "emc6d102"; | ||
| 1231 | break; | ||
| 1232 | } | ||
| 1233 | } else { | ||
| 1234 | dev_dbg(&adapter->dev, | ||
| 1235 | "Autodetection failed: unknown vendor\n"); | ||
| 1236 | return -ENODEV; | ||
| 1239 | } | 1237 | } |
| 1240 | 1238 | ||
| 1241 | switch (kind) { | ||
| 1242 | case lm85b: | ||
| 1243 | type_name = "lm85b"; | ||
| 1244 | break; | ||
| 1245 | case lm85c: | ||
| 1246 | type_name = "lm85c"; | ||
| 1247 | break; | ||
| 1248 | case adm1027: | ||
| 1249 | type_name = "adm1027"; | ||
| 1250 | break; | ||
| 1251 | case adt7463: | ||
| 1252 | type_name = "adt7463"; | ||
| 1253 | break; | ||
| 1254 | case adt7468: | ||
| 1255 | type_name = "adt7468"; | ||
| 1256 | break; | ||
| 1257 | case emc6d100: | ||
| 1258 | type_name = "emc6d100"; | ||
| 1259 | break; | ||
| 1260 | case emc6d102: | ||
| 1261 | type_name = "emc6d102"; | ||
| 1262 | break; | ||
| 1263 | default: | ||
| 1264 | type_name = "lm85"; | ||
| 1265 | } | ||
| 1266 | strlcpy(info->type, type_name, I2C_NAME_SIZE); | 1239 | strlcpy(info->type, type_name, I2C_NAME_SIZE); |
| 1267 | 1240 | ||
| 1268 | return 0; | 1241 | return 0; |
