@@ -1921,6 +1921,7 @@ static int lm90_probe_channel_from_dt(struct i2c_client *client,
struct lm90_data *data)
{
u32 id;
+ s32 val;
int err;
struct device *dev = &client->dev;
@@ -1944,6 +1945,25 @@ static int lm90_probe_channel_from_dt(struct i2c_client *client,
if (data->channel_label[id])
data->channel_config[id] |= HWMON_T_LABEL;
+ err = of_property_read_s32(child, "offset", &val);
+ if (!err) {
+ if (id == 0) {
+ dev_err(dev, "offset can't be set for internal channel\n");
+ return -EINVAL;
+ }
+
+ if (id == 1)
+ err = lm90_set_temp11(data, REMOTE_OFFSET, val);
+ else
+ err = lm90_set_temp11(data, REMOTE2_OFFSET, val);
+
+ if (err) {
+ dev_err(dev, "can't set offset %d for channel %d (%d)\n",
+ val, id, err);
+ return err;
+ }
+ }
+
return 0;
}
@@ -2091,6 +2111,12 @@ static int lm90_probe(struct i2c_client *client)
err = lm90_update_confreg(data, data->config | 0x04);
if (err)
return err;
+
+ /*
+ * In lm90_parse_dt_channel_info() we might set offset, so we need
+ * to use correct format indication before that
+ */
+ data->flags |= LM90_FLAG_ADT7461_EXT;
}
}