248 min = FAN_FROM_REG(data->fan_min[nr],
249 DIV_FROM_REG(data->fan_div[nr]));
250
251 switch (val) {
252 case 1: data->fan_div[nr] = 0; break;
253 case 2: data->fan_div[nr] = 1; break;
254 case 4: data->fan_div[nr] = 2; break;
255 case 8: data->fan_div[nr] = 3; break;
256 default:
257 dev_err(&client->dev, "fan_div value %ld not "
258 "supported. Choose one of 1, 2, 4 or 8!\n", val);
259 mutex_unlock(&data->update_lock);
260 return -EINVAL;
261 }
262
263 reg = (lm80_read_value(client, LM80_REG_FANDIV) & ~(3 << (2 * (nr + 1))))
264 | (data->fan_div[nr] << (2 * (nr + 1)));
265 lm80_write_value(client, LM80_REG_FANDIV, reg);
266
267
268 data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
269 lm80_write_value(client, LM80_REG_FAN_MIN(nr + 1), data->fan_min[nr]);
270 mutex_unlock(&data->update_lock);
271
272 return count;
273}
274
275static ssize_t show_temp_input1(struct device *dev, struct device_attribute *attr, char *buf)
276{
277 struct lm80_data *data = lm80_update_device(dev);
278 return sprintf(buf, "%ld\n", TEMP_FROM_REG(data->temp));
279}
280
281#define show_temp(suffix, value) \
282static ssize_t show_temp_##suffix(struct device *dev, struct device_attribute *attr, char *buf) \
283{ \
284 struct lm80_data *data = lm80_update_device(dev); \
285 return sprintf(buf, "%d\n", TEMP_LIMIT_FROM_REG(data->value)); \
286}
287show_temp(hot_max, temp_hot_max);
288show_temp(hot_hyst, temp_hot_hyst);