Commit 8007ea35 authored by Jean Delvare's avatar Jean Delvare

hwmon: (adm1021) Clean up detect function

As kind is now hard-coded to -1, there is room for code clean-ups.
Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
parent 4e233cbe
...@@ -288,9 +288,8 @@ static int adm1021_detect(struct i2c_client *client, int kind, ...@@ -288,9 +288,8 @@ static int adm1021_detect(struct i2c_client *client, int kind,
struct i2c_board_info *info) struct i2c_board_info *info)
{ {
struct i2c_adapter *adapter = client->adapter; struct i2c_adapter *adapter = client->adapter;
int i; const char *type_name;
const char *type_name = ""; int conv_rate, status, config, man_id, dev_id;
int conv_rate, status, config;
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
pr_debug("adm1021: detect failed, " pr_debug("adm1021: detect failed, "
...@@ -303,62 +302,37 @@ static int adm1021_detect(struct i2c_client *client, int kind, ...@@ -303,62 +302,37 @@ static int adm1021_detect(struct i2c_client *client, int kind,
ADM1021_REG_CONV_RATE_R); ADM1021_REG_CONV_RATE_R);
config = i2c_smbus_read_byte_data(client, ADM1021_REG_CONFIG_R); config = i2c_smbus_read_byte_data(client, ADM1021_REG_CONFIG_R);
/* Now, we do the remaining detection. */ /* Check unused bits */
if (kind < 0) { if ((status & 0x03) || (config & 0x3F) || (conv_rate & 0xF8)) {
if ((status & 0x03) != 0x00 || (config & 0x3F) != 0x00 pr_debug("adm1021: detect failed, chip not detected!\n");
|| (conv_rate & 0xF8) != 0x00) { return -ENODEV;
pr_debug("adm1021: detect failed, "
"chip not detected!\n");
return -ENODEV;
}
} }
/* Determine the chip type. */ /* Determine the chip type. */
if (kind <= 0) { man_id = i2c_smbus_read_byte_data(client, ADM1021_REG_MAN_ID);
i = i2c_smbus_read_byte_data(client, ADM1021_REG_MAN_ID); dev_id = i2c_smbus_read_byte_data(client, ADM1021_REG_DEV_ID);
if (i == 0x41)
if ((i2c_smbus_read_byte_data(client,
ADM1021_REG_DEV_ID) & 0xF0) == 0x30)
kind = adm1023;
else
kind = adm1021;
else if (i == 0x49)
kind = thmc10;
else if (i == 0x23)
kind = gl523sm;
else if ((i == 0x4d) &&
(i2c_smbus_read_byte_data(client,
ADM1021_REG_DEV_ID) == 0x01))
kind = max1617a;
else if (i == 0x54)
kind = mc1066;
/* LM84 Mfr ID in a different place, and it has more unused bits */
else if (conv_rate == 0x00
&& (kind == 0 /* skip extra detection */
|| ((config & 0x7F) == 0x00
&& (status & 0xAB) == 0x00)))
kind = lm84;
else
kind = max1617;
}
if (kind == max1617) { if (man_id == 0x4d && dev_id == 0x01)
type_name = "max1617";
} else if (kind == max1617a) {
type_name = "max1617a"; type_name = "max1617a";
} else if (kind == adm1021) { else if (man_id == 0x41) {
type_name = "adm1021"; if ((dev_id & 0xF0) == 0x30)
} else if (kind == adm1023) { type_name = "adm1023";
type_name = "adm1023"; else
} else if (kind == thmc10) { type_name = "adm1021";
} else if (man_id == 0x49)
type_name = "thmc10"; type_name = "thmc10";
} else if (kind == lm84) { else if (man_id == 0x23)
type_name = "lm84";
} else if (kind == gl523sm) {
type_name = "gl523sm"; type_name = "gl523sm";
} else if (kind == mc1066) { else if (man_id == 0x54)
type_name = "mc1066"; type_name = "mc1066";
} /* LM84 Mfr ID in a different place, and it has more unused bits */
else if (conv_rate == 0x00
&& (config & 0x7F) == 0x00
&& (status & 0xAB) == 0x00)
type_name = "lm84";
else
type_name = "max1617";
pr_debug("adm1021: Detected chip %s at adapter %d, address 0x%02x.\n", pr_debug("adm1021: Detected chip %s at adapter %d, address 0x%02x.\n",
type_name, i2c_adapter_id(adapter), client->addr); type_name, i2c_adapter_id(adapter), client->addr);
strlcpy(info->type, type_name, I2C_NAME_SIZE); strlcpy(info->type, type_name, I2C_NAME_SIZE);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment