Commit 7f444bf0 authored by Guenter Roeck's avatar Guenter Roeck

hwmon: (ads2828) Only keep data in device data structure if needed

The variables diff_input, ext_vref, and vref_mv are only used in the probe
function and therefore don't need to be kept in the device data structure.
Reviewed-and-Tested-by: default avatarRobert Rosengren <robert.rosengren@axis.com>
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent bea0bab0
...@@ -49,9 +49,6 @@ enum ads7828_chips { ads7828, ads7830 }; ...@@ -49,9 +49,6 @@ enum ads7828_chips { ads7828, ads7830 };
/* Client specific data */ /* Client specific data */
struct ads7828_data { struct ads7828_data {
struct regmap *regmap; struct regmap *regmap;
bool diff_input; /* Differential input */
bool ext_vref; /* External voltage reference */
unsigned int vref_mv; /* voltage reference value */
u8 cmd_byte; /* Command byte without channel bits */ u8 cmd_byte; /* Command byte without channel bits */
unsigned int lsb_resol; /* Resolution of the ADC sample LSB */ unsigned int lsb_resol; /* Resolution of the ADC sample LSB */
}; };
...@@ -120,39 +117,38 @@ static int ads7828_probe(struct i2c_client *client, ...@@ -120,39 +117,38 @@ static int ads7828_probe(struct i2c_client *client,
struct ads7828_platform_data *pdata = dev_get_platdata(dev); struct ads7828_platform_data *pdata = dev_get_platdata(dev);
struct ads7828_data *data; struct ads7828_data *data;
struct device *hwmon_dev; struct device *hwmon_dev;
unsigned int vref_mv = ADS7828_INT_VREF_MV;
bool diff_input = false;
bool ext_vref = false;
data = devm_kzalloc(dev, sizeof(struct ads7828_data), GFP_KERNEL); data = devm_kzalloc(dev, sizeof(struct ads7828_data), GFP_KERNEL);
if (!data) if (!data)
return -ENOMEM; return -ENOMEM;
if (pdata) { if (pdata) {
data->diff_input = pdata->diff_input; diff_input = pdata->diff_input;
data->ext_vref = pdata->ext_vref; ext_vref = pdata->ext_vref;
if (data->ext_vref) if (ext_vref && pdata->vref_mv)
data->vref_mv = pdata->vref_mv; vref_mv = pdata->vref_mv;
} }
/* Bound Vref with min/max values if it was provided */ /* Bound Vref with min/max values */
if (data->vref_mv) vref_mv = clamp_val(vref_mv, ADS7828_EXT_VREF_MV_MIN,
data->vref_mv = clamp_val(data->vref_mv,
ADS7828_EXT_VREF_MV_MIN,
ADS7828_EXT_VREF_MV_MAX); ADS7828_EXT_VREF_MV_MAX);
else
data->vref_mv = ADS7828_INT_VREF_MV;
/* ADS7828 uses 12-bit samples, while ADS7830 is 8-bit */ /* ADS7828 uses 12-bit samples, while ADS7830 is 8-bit */
if (id->driver_data == ads7828) { if (id->driver_data == ads7828) {
data->lsb_resol = DIV_ROUND_CLOSEST(data->vref_mv * 1000, 4096); data->lsb_resol = DIV_ROUND_CLOSEST(vref_mv * 1000, 4096);
data->regmap = devm_regmap_init_i2c(client, data->regmap = devm_regmap_init_i2c(client,
&ads2828_regmap_config); &ads2828_regmap_config);
} else { } else {
data->lsb_resol = DIV_ROUND_CLOSEST(data->vref_mv * 1000, 256); data->lsb_resol = DIV_ROUND_CLOSEST(vref_mv * 1000, 256);
data->regmap = devm_regmap_init_i2c(client, data->regmap = devm_regmap_init_i2c(client,
&ads2830_regmap_config); &ads2830_regmap_config);
} }
data->cmd_byte = data->ext_vref ? ADS7828_CMD_PD1 : ADS7828_CMD_PD3; data->cmd_byte = ext_vref ? ADS7828_CMD_PD1 : ADS7828_CMD_PD3;
if (!data->diff_input) if (!diff_input)
data->cmd_byte |= ADS7828_CMD_SD_SE; data->cmd_byte |= ADS7828_CMD_SD_SE;
hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
......
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