Lines Matching refs:data

145 static inline int smsc47m1_read_value(struct smsc47m1_data *data, u8 reg)  in smsc47m1_read_value()  argument
147 return inb_p(data->addr + reg); in smsc47m1_read_value()
150 static inline void smsc47m1_write_value(struct smsc47m1_data *data, u8 reg, in smsc47m1_write_value() argument
153 outb_p(value, data->addr + reg); in smsc47m1_write_value()
159 struct smsc47m1_data *data = dev_get_drvdata(dev); in smsc47m1_update_device() local
161 mutex_lock(&data->update_lock); in smsc47m1_update_device()
163 if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || init) { in smsc47m1_update_device()
165 fan_nr = data->type == smsc47m2 ? 3 : 2; in smsc47m1_update_device()
168 data->fan[i] = smsc47m1_read_value(data, in smsc47m1_update_device()
170 data->fan_preload[i] = smsc47m1_read_value(data, in smsc47m1_update_device()
172 data->pwm[i] = smsc47m1_read_value(data, in smsc47m1_update_device()
176 i = smsc47m1_read_value(data, SMSC47M1_REG_FANDIV); in smsc47m1_update_device()
177 data->fan_div[0] = (i >> 4) & 0x03; in smsc47m1_update_device()
178 data->fan_div[1] = i >> 6; in smsc47m1_update_device()
180 data->alarms = smsc47m1_read_value(data, in smsc47m1_update_device()
183 if (data->alarms) in smsc47m1_update_device()
184 smsc47m1_write_value(data, SMSC47M1_REG_ALARM, 0xC0); in smsc47m1_update_device()
187 data->fan_div[2] = (smsc47m1_read_value(data, in smsc47m1_update_device()
189 data->alarms |= (smsc47m1_read_value(data, in smsc47m1_update_device()
192 if (data->alarms & 0x04) in smsc47m1_update_device()
193 smsc47m1_write_value(data, in smsc47m1_update_device()
198 data->last_updated = jiffies; in smsc47m1_update_device()
201 mutex_unlock(&data->update_lock); in smsc47m1_update_device()
202 return data; in smsc47m1_update_device()
209 struct smsc47m1_data *data = smsc47m1_update_device(dev, 0); in get_fan() local
217 int rpm = (data->pwm[nr] & 0x7F) == 0x00 ? 0 : in get_fan()
218 FAN_FROM_REG(data->fan[nr], in get_fan()
219 DIV_FROM_REG(data->fan_div[nr]), in get_fan()
220 data->fan_preload[nr]); in get_fan()
228 struct smsc47m1_data *data = smsc47m1_update_device(dev, 0); in get_fan_min() local
230 int rpm = MIN_FROM_REG(data->fan_preload[nr], in get_fan_min()
231 DIV_FROM_REG(data->fan_div[nr])); in get_fan_min()
239 struct smsc47m1_data *data = smsc47m1_update_device(dev, 0); in get_fan_div() local
240 return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[attr->index])); in get_fan_div()
247 struct smsc47m1_data *data = smsc47m1_update_device(dev, 0); in get_fan_alarm() local
248 return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1); in get_fan_alarm()
255 struct smsc47m1_data *data = smsc47m1_update_device(dev, 0); in get_pwm() local
256 return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm[attr->index])); in get_pwm()
263 struct smsc47m1_data *data = smsc47m1_update_device(dev, 0); in get_pwm_en() local
264 return sprintf(buf, "%d\n", PWM_EN_FROM_REG(data->pwm[attr->index])); in get_pwm_en()
270 struct smsc47m1_data *data = smsc47m1_update_device(dev, 0); in get_alarms() local
271 return sprintf(buf, "%d\n", data->alarms); in get_alarms()
278 struct smsc47m1_data *data = dev_get_drvdata(dev); in set_fan_min() local
288 mutex_lock(&data->update_lock); in set_fan_min()
289 rpmdiv = val * DIV_FROM_REG(data->fan_div[nr]); in set_fan_min()
292 mutex_unlock(&data->update_lock); in set_fan_min()
296 data->fan_preload[nr] = 192 - ((983040 + rpmdiv / 2) / rpmdiv); in set_fan_min()
297 smsc47m1_write_value(data, SMSC47M1_REG_FAN_PRELOAD[nr], in set_fan_min()
298 data->fan_preload[nr]); in set_fan_min()
299 mutex_unlock(&data->update_lock); in set_fan_min()
314 struct smsc47m1_data *data = dev_get_drvdata(dev); in set_fan_div() local
319 u8 old_div = DIV_FROM_REG(data->fan_div[nr]); in set_fan_div()
328 mutex_lock(&data->update_lock); in set_fan_div()
331 data->fan_div[nr] = 0; in set_fan_div()
334 data->fan_div[nr] = 1; in set_fan_div()
337 data->fan_div[nr] = 2; in set_fan_div()
340 data->fan_div[nr] = 3; in set_fan_div()
343 mutex_unlock(&data->update_lock); in set_fan_div()
350 tmp = smsc47m1_read_value(data, SMSC47M1_REG_FANDIV) in set_fan_div()
352 tmp |= data->fan_div[nr] << (4 + 2 * nr); in set_fan_div()
353 smsc47m1_write_value(data, SMSC47M1_REG_FANDIV, tmp); in set_fan_div()
356 tmp = smsc47m1_read_value(data, SMSC47M2_REG_FANDIV3) & 0xCF; in set_fan_div()
357 tmp |= data->fan_div[2] << 4; in set_fan_div()
358 smsc47m1_write_value(data, SMSC47M2_REG_FANDIV3, tmp); in set_fan_div()
363 tmp = 192 - (old_div * (192 - data->fan_preload[nr]) in set_fan_div()
365 data->fan_preload[nr] = clamp_val(tmp, 0, 191); in set_fan_div()
366 smsc47m1_write_value(data, SMSC47M1_REG_FAN_PRELOAD[nr], in set_fan_div()
367 data->fan_preload[nr]); in set_fan_div()
368 mutex_unlock(&data->update_lock); in set_fan_div()
377 struct smsc47m1_data *data = dev_get_drvdata(dev); in set_pwm() local
389 mutex_lock(&data->update_lock); in set_pwm()
390 data->pwm[nr] &= 0x81; /* Preserve additional bits */ in set_pwm()
391 data->pwm[nr] |= PWM_TO_REG(val); in set_pwm()
392 smsc47m1_write_value(data, SMSC47M1_REG_PWM[nr], in set_pwm()
393 data->pwm[nr]); in set_pwm()
394 mutex_unlock(&data->update_lock); in set_pwm()
403 struct smsc47m1_data *data = dev_get_drvdata(dev); in set_pwm_en() local
415 mutex_lock(&data->update_lock); in set_pwm_en()
416 data->pwm[nr] &= 0xFE; /* preserve the other bits */ in set_pwm_en()
417 data->pwm[nr] |= !val; in set_pwm_en()
418 smsc47m1_write_value(data, SMSC47M1_REG_PWM[nr], in set_pwm_en()
419 data->pwm[nr]); in set_pwm_en()
420 mutex_unlock(&data->update_lock); in set_pwm_en()
448 struct smsc47m1_data *data = dev_get_drvdata(dev); in show_name() local
450 return sprintf(buf, "%s\n", data->name); in show_name()
708 struct smsc47m1_data *data; in smsc47m1_probe() local
724 data = devm_kzalloc(dev, sizeof(struct smsc47m1_data), GFP_KERNEL); in smsc47m1_probe()
725 if (!data) in smsc47m1_probe()
728 data->addr = res->start; in smsc47m1_probe()
729 data->type = sio_data->type; in smsc47m1_probe()
730 data->name = names[sio_data->type]; in smsc47m1_probe()
731 mutex_init(&data->update_lock); in smsc47m1_probe()
732 platform_set_drvdata(pdev, data); in smsc47m1_probe()
738 pwm1 = (smsc47m1_read_value(data, SMSC47M1_REG_PPIN(0)) & 0x05) in smsc47m1_probe()
740 pwm2 = (smsc47m1_read_value(data, SMSC47M1_REG_PPIN(1)) & 0x05) in smsc47m1_probe()
742 if (data->type == smsc47m2) { in smsc47m1_probe()
743 fan1 = (smsc47m1_read_value(data, SMSC47M2_REG_TPIN1) in smsc47m1_probe()
745 fan2 = (smsc47m1_read_value(data, SMSC47M2_REG_TPIN2) in smsc47m1_probe()
747 fan3 = (smsc47m1_read_value(data, SMSC47M2_REG_TPIN3) in smsc47m1_probe()
749 pwm3 = (smsc47m1_read_value(data, SMSC47M2_REG_PPIN3) in smsc47m1_probe()
752 fan1 = (smsc47m1_read_value(data, SMSC47M1_REG_TPIN(0)) in smsc47m1_probe()
754 fan2 = (smsc47m1_read_value(data, SMSC47M1_REG_TPIN(1)) in smsc47m1_probe()
796 } else if (data->type == smsc47m2) in smsc47m1_probe()
820 } else if (data->type == smsc47m2) in smsc47m1_probe()
827 data->hwmon_dev = hwmon_device_register(dev); in smsc47m1_probe()
828 if (IS_ERR(data->hwmon_dev)) { in smsc47m1_probe()
829 err = PTR_ERR(data->hwmon_dev); in smsc47m1_probe()
842 struct smsc47m1_data *data = platform_get_drvdata(pdev); in smsc47m1_remove() local
844 hwmon_device_unregister(data->hwmon_dev); in smsc47m1_remove()