static ssize_t set_fan_min(struct device *dev, struct device_attribute *da, const char *buf, size_t count) { struct sensor_device_attribute *attr = to_sensor_dev_attr(da); struct lm78_data *data = dev_get_drvdata(dev); int nr = attr->index; unsigned long val; int err; err = kstrtoul(buf, 10, &val); if (err) return err; mutex_lock(&data->update_lock); data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr])); lm78_write_value(data, LM78_REG_FAN_MIN(nr), data->fan_min[nr]); mutex_unlock(&data->update_lock); return count; }
static void lm78_init_device(struct lm78_data *data) { u8 config; int i; config = lm78_read_value(data, LM78_REG_CONFIG); if ((config & 0x09) != 0x01) lm78_write_value(data, LM78_REG_CONFIG, (config & 0xf7) | 0x01); for (i = 0; i < 3; i++) { data->fan_min[i] = lm78_read_value(data, LM78_REG_FAN_MIN(i)); } mutex_init(&data->update_lock); }
static void lm78_init_device(struct lm78_data *data) { u8 config; int i; /* Start monitoring */ config = lm78_read_value(data, LM78_REG_CONFIG); if ((config & 0x09) != 0x01) lm78_write_value(data, LM78_REG_CONFIG, (config & 0xf7) | 0x01); /* A few vars need to be filled upon startup */ for (i = 0; i < 3; i++) { data->fan_min[i] = lm78_read_value(data, LM78_REG_FAN_MIN(i)); } mutex_init(&data->update_lock); }