Lines Matching refs:data

300 static u8 f71805f_read8(struct f71805f_data *data, u8 reg)  in f71805f_read8()  argument
302 outb(reg, data->addr + ADDR_REG_OFFSET); in f71805f_read8()
303 return inb(data->addr + DATA_REG_OFFSET); in f71805f_read8()
307 static void f71805f_write8(struct f71805f_data *data, u8 reg, u8 val) in f71805f_write8() argument
309 outb(reg, data->addr + ADDR_REG_OFFSET); in f71805f_write8()
310 outb(val, data->addr + DATA_REG_OFFSET); in f71805f_write8()
318 static u16 f71805f_read16(struct f71805f_data *data, u8 reg) in f71805f_read16() argument
322 outb(reg, data->addr + ADDR_REG_OFFSET); in f71805f_read16()
323 val = inb(data->addr + DATA_REG_OFFSET) << 8; in f71805f_read16()
324 outb(++reg, data->addr + ADDR_REG_OFFSET); in f71805f_read16()
325 val |= inb(data->addr + DATA_REG_OFFSET); in f71805f_read16()
331 static void f71805f_write16(struct f71805f_data *data, u8 reg, u16 val) in f71805f_write16() argument
333 outb(reg, data->addr + ADDR_REG_OFFSET); in f71805f_write16()
334 outb(val >> 8, data->addr + DATA_REG_OFFSET); in f71805f_write16()
335 outb(++reg, data->addr + ADDR_REG_OFFSET); in f71805f_write16()
336 outb(val & 0xff, data->addr + DATA_REG_OFFSET); in f71805f_write16()
341 struct f71805f_data *data = dev_get_drvdata(dev); in f71805f_update_device() local
344 mutex_lock(&data->update_lock); in f71805f_update_device()
347 if (time_after(jiffies, data->last_updated + 60 * HZ) in f71805f_update_device()
348 || !data->valid) { in f71805f_update_device()
350 if (!(data->has_in & (1 << nr))) in f71805f_update_device()
352 data->in_high[nr] = f71805f_read8(data, in f71805f_update_device()
354 data->in_low[nr] = f71805f_read8(data, in f71805f_update_device()
358 data->fan_low[nr] = f71805f_read16(data, in f71805f_update_device()
360 data->fan_target[nr] = f71805f_read16(data, in f71805f_update_device()
362 data->pwm_freq[nr] = f71805f_read8(data, in f71805f_update_device()
366 data->temp_high[nr] = f71805f_read8(data, in f71805f_update_device()
368 data->temp_hyst[nr] = f71805f_read8(data, in f71805f_update_device()
371 data->temp_mode = f71805f_read8(data, F71805F_REG_TEMP_MODE); in f71805f_update_device()
374 data->auto_points[nr].temp[apnr] = in f71805f_update_device()
375 f71805f_read8(data, in f71805f_update_device()
378 data->auto_points[nr].fan[apnr] = in f71805f_update_device()
379 f71805f_read16(data, in f71805f_update_device()
385 data->last_limits = jiffies; in f71805f_update_device()
389 if (time_after(jiffies, data->last_updated + HZ) in f71805f_update_device()
390 || !data->valid) { in f71805f_update_device()
392 if (!(data->has_in & (1 << nr))) in f71805f_update_device()
394 data->in[nr] = f71805f_read8(data, in f71805f_update_device()
398 data->fan[nr] = f71805f_read16(data, in f71805f_update_device()
400 data->fan_ctrl[nr] = f71805f_read8(data, in f71805f_update_device()
402 data->pwm[nr] = f71805f_read8(data, in f71805f_update_device()
406 data->temp[nr] = f71805f_read8(data, in f71805f_update_device()
409 data->alarms = f71805f_read8(data, F71805F_REG_STATUS(0)) in f71805f_update_device()
410 + (f71805f_read8(data, F71805F_REG_STATUS(1)) << 8) in f71805f_update_device()
411 + (f71805f_read8(data, F71805F_REG_STATUS(2)) << 16); in f71805f_update_device()
413 data->last_updated = jiffies; in f71805f_update_device()
414 data->valid = 1; in f71805f_update_device()
417 mutex_unlock(&data->update_lock); in f71805f_update_device()
419 return data; in f71805f_update_device()
429 struct f71805f_data *data = f71805f_update_device(dev); in show_in0() local
433 return sprintf(buf, "%ld\n", in0_from_reg(data->in[nr])); in show_in0()
439 struct f71805f_data *data = f71805f_update_device(dev); in show_in0_max() local
443 return sprintf(buf, "%ld\n", in0_from_reg(data->in_high[nr])); in show_in0_max()
449 struct f71805f_data *data = f71805f_update_device(dev); in show_in0_min() local
453 return sprintf(buf, "%ld\n", in0_from_reg(data->in_low[nr])); in show_in0_min()
459 struct f71805f_data *data = dev_get_drvdata(dev); in set_in0_max() local
469 mutex_lock(&data->update_lock); in set_in0_max()
470 data->in_high[nr] = in0_to_reg(val); in set_in0_max()
471 f71805f_write8(data, F71805F_REG_IN_HIGH(nr), data->in_high[nr]); in set_in0_max()
472 mutex_unlock(&data->update_lock); in set_in0_max()
480 struct f71805f_data *data = dev_get_drvdata(dev); in set_in0_min() local
490 mutex_lock(&data->update_lock); in set_in0_min()
491 data->in_low[nr] = in0_to_reg(val); in set_in0_min()
492 f71805f_write8(data, F71805F_REG_IN_LOW(nr), data->in_low[nr]); in set_in0_min()
493 mutex_unlock(&data->update_lock); in set_in0_min()
501 struct f71805f_data *data = f71805f_update_device(dev); in show_in() local
505 return sprintf(buf, "%ld\n", in_from_reg(data->in[nr])); in show_in()
511 struct f71805f_data *data = f71805f_update_device(dev); in show_in_max() local
515 return sprintf(buf, "%ld\n", in_from_reg(data->in_high[nr])); in show_in_max()
521 struct f71805f_data *data = f71805f_update_device(dev); in show_in_min() local
525 return sprintf(buf, "%ld\n", in_from_reg(data->in_low[nr])); in show_in_min()
531 struct f71805f_data *data = dev_get_drvdata(dev); in set_in_max() local
541 mutex_lock(&data->update_lock); in set_in_max()
542 data->in_high[nr] = in_to_reg(val); in set_in_max()
543 f71805f_write8(data, F71805F_REG_IN_HIGH(nr), data->in_high[nr]); in set_in_max()
544 mutex_unlock(&data->update_lock); in set_in_max()
552 struct f71805f_data *data = dev_get_drvdata(dev); in set_in_min() local
562 mutex_lock(&data->update_lock); in set_in_min()
563 data->in_low[nr] = in_to_reg(val); in set_in_min()
564 f71805f_write8(data, F71805F_REG_IN_LOW(nr), data->in_low[nr]); in set_in_min()
565 mutex_unlock(&data->update_lock); in set_in_min()
573 struct f71805f_data *data = f71805f_update_device(dev); in show_fan() local
577 return sprintf(buf, "%ld\n", fan_from_reg(data->fan[nr])); in show_fan()
583 struct f71805f_data *data = f71805f_update_device(dev); in show_fan_min() local
587 return sprintf(buf, "%ld\n", fan_from_reg(data->fan_low[nr])); in show_fan_min()
593 struct f71805f_data *data = f71805f_update_device(dev); in show_fan_target() local
597 return sprintf(buf, "%ld\n", fan_from_reg(data->fan_target[nr])); in show_fan_target()
603 struct f71805f_data *data = dev_get_drvdata(dev); in set_fan_min() local
613 mutex_lock(&data->update_lock); in set_fan_min()
614 data->fan_low[nr] = fan_to_reg(val); in set_fan_min()
615 f71805f_write16(data, F71805F_REG_FAN_LOW(nr), data->fan_low[nr]); in set_fan_min()
616 mutex_unlock(&data->update_lock); in set_fan_min()
624 struct f71805f_data *data = dev_get_drvdata(dev); in set_fan_target() local
634 mutex_lock(&data->update_lock); in set_fan_target()
635 data->fan_target[nr] = fan_to_reg(val); in set_fan_target()
636 f71805f_write16(data, F71805F_REG_FAN_TARGET(nr), in set_fan_target()
637 data->fan_target[nr]); in set_fan_target()
638 mutex_unlock(&data->update_lock); in set_fan_target()
646 struct f71805f_data *data = f71805f_update_device(dev); in show_pwm() local
650 return sprintf(buf, "%d\n", (int)data->pwm[nr]); in show_pwm()
656 struct f71805f_data *data = f71805f_update_device(dev); in show_pwm_enable() local
661 switch (data->fan_ctrl[nr] & FAN_CTRL_MODE_MASK) { in show_pwm_enable()
678 struct f71805f_data *data = f71805f_update_device(dev); in show_pwm_freq() local
682 return sprintf(buf, "%lu\n", pwm_freq_from_reg(data->pwm_freq[nr])); in show_pwm_freq()
688 struct f71805f_data *data = f71805f_update_device(dev); in show_pwm_mode() local
692 return sprintf(buf, "%d\n", pwm_mode_from_reg(data->fan_ctrl[nr])); in show_pwm_mode()
698 struct f71805f_data *data = dev_get_drvdata(dev); in set_pwm() local
711 mutex_lock(&data->update_lock); in set_pwm()
712 data->pwm[nr] = val; in set_pwm()
713 f71805f_write8(data, F71805F_REG_PWM_DUTY(nr), data->pwm[nr]); in set_pwm()
714 mutex_unlock(&data->update_lock); in set_pwm()
724 struct f71805f_data *data = dev_get_drvdata(dev); in set_pwm_enable() local
744 mutex_lock(&data->update_lock); in set_pwm_enable()
745 reg = f71805f_read8(data, F71805F_REG_FAN_CTRL(nr)) in set_pwm_enable()
758 data->fan_ctrl[nr] = reg; in set_pwm_enable()
759 f71805f_write8(data, F71805F_REG_FAN_CTRL(nr), reg); in set_pwm_enable()
760 mutex_unlock(&data->update_lock); in set_pwm_enable()
774 struct f71805f_data *data = dev_get_drvdata(dev); in set_pwm_freq() local
784 mutex_lock(&data->update_lock); in set_pwm_freq()
785 data->pwm_freq[nr] = pwm_freq_to_reg(val); in set_pwm_freq()
786 f71805f_write8(data, F71805F_REG_PWM_FREQ(nr), data->pwm_freq[nr]); in set_pwm_freq()
787 mutex_unlock(&data->update_lock); in set_pwm_freq()
796 struct f71805f_data *data = dev_get_drvdata(dev); in show_pwm_auto_point_temp() local
802 temp_from_reg(data->auto_points[pwmnr].temp[apnr])); in show_pwm_auto_point_temp()
809 struct f71805f_data *data = dev_get_drvdata(dev); in set_pwm_auto_point_temp() local
820 mutex_lock(&data->update_lock); in set_pwm_auto_point_temp()
821 data->auto_points[pwmnr].temp[apnr] = temp_to_reg(val); in set_pwm_auto_point_temp()
822 f71805f_write8(data, F71805F_REG_PWM_AUTO_POINT_TEMP(pwmnr, apnr), in set_pwm_auto_point_temp()
823 data->auto_points[pwmnr].temp[apnr]); in set_pwm_auto_point_temp()
824 mutex_unlock(&data->update_lock); in set_pwm_auto_point_temp()
833 struct f71805f_data *data = dev_get_drvdata(dev); in show_pwm_auto_point_fan() local
839 fan_from_reg(data->auto_points[pwmnr].fan[apnr])); in show_pwm_auto_point_fan()
846 struct f71805f_data *data = dev_get_drvdata(dev); in set_pwm_auto_point_fan() local
857 mutex_lock(&data->update_lock); in set_pwm_auto_point_fan()
858 data->auto_points[pwmnr].fan[apnr] = fan_to_reg(val); in set_pwm_auto_point_fan()
859 f71805f_write16(data, F71805F_REG_PWM_AUTO_POINT_FAN(pwmnr, apnr), in set_pwm_auto_point_fan()
860 data->auto_points[pwmnr].fan[apnr]); in set_pwm_auto_point_fan()
861 mutex_unlock(&data->update_lock); in set_pwm_auto_point_fan()
869 struct f71805f_data *data = f71805f_update_device(dev); in show_temp() local
873 return sprintf(buf, "%ld\n", temp_from_reg(data->temp[nr])); in show_temp()
879 struct f71805f_data *data = f71805f_update_device(dev); in show_temp_max() local
883 return sprintf(buf, "%ld\n", temp_from_reg(data->temp_high[nr])); in show_temp_max()
889 struct f71805f_data *data = f71805f_update_device(dev); in show_temp_hyst() local
893 return sprintf(buf, "%ld\n", temp_from_reg(data->temp_hyst[nr])); in show_temp_hyst()
899 struct f71805f_data *data = f71805f_update_device(dev); in show_temp_type() local
904 return sprintf(buf, "%u\n", (data->temp_mode & (1 << nr)) ? 3 : 4); in show_temp_type()
910 struct f71805f_data *data = dev_get_drvdata(dev); in set_temp_max() local
920 mutex_lock(&data->update_lock); in set_temp_max()
921 data->temp_high[nr] = temp_to_reg(val); in set_temp_max()
922 f71805f_write8(data, F71805F_REG_TEMP_HIGH(nr), data->temp_high[nr]); in set_temp_max()
923 mutex_unlock(&data->update_lock); in set_temp_max()
931 struct f71805f_data *data = dev_get_drvdata(dev); in set_temp_hyst() local
941 mutex_lock(&data->update_lock); in set_temp_hyst()
942 data->temp_hyst[nr] = temp_to_reg(val); in set_temp_hyst()
943 f71805f_write8(data, F71805F_REG_TEMP_HYST(nr), data->temp_hyst[nr]); in set_temp_hyst()
944 mutex_unlock(&data->update_lock); in set_temp_hyst()
952 struct f71805f_data *data = f71805f_update_device(dev); in show_alarms_in() local
954 return sprintf(buf, "%lu\n", data->alarms & 0x7ff); in show_alarms_in()
960 struct f71805f_data *data = f71805f_update_device(dev); in show_alarms_fan() local
962 return sprintf(buf, "%lu\n", (data->alarms >> 16) & 0x07); in show_alarms_fan()
968 struct f71805f_data *data = f71805f_update_device(dev); in show_alarms_temp() local
970 return sprintf(buf, "%lu\n", (data->alarms >> 11) & 0x07); in show_alarms_temp()
976 struct f71805f_data *data = f71805f_update_device(dev); in show_alarm() local
980 return sprintf(buf, "%lu\n", (data->alarms >> bitnr) & 1); in show_alarm()
986 struct f71805f_data *data = dev_get_drvdata(dev); in show_name() local
988 return sprintf(buf, "%s\n", data->name); in show_name()
1346 static void f71805f_init_device(struct f71805f_data *data) in f71805f_init_device() argument
1351 reg = f71805f_read8(data, F71805F_REG_START); in f71805f_init_device()
1354 f71805f_write8(data, F71805F_REG_START, (reg | 0x01) & ~0x40); in f71805f_init_device()
1362 data->fan_ctrl[i] = f71805f_read8(data, in f71805f_init_device()
1368 if (data->fan_ctrl[i] & FAN_CTRL_LATCH_FULL) { in f71805f_init_device()
1369 data->fan_ctrl[i] &= ~FAN_CTRL_LATCH_FULL; in f71805f_init_device()
1370 f71805f_write8(data, F71805F_REG_FAN_CTRL(i), in f71805f_init_device()
1371 data->fan_ctrl[i]); in f71805f_init_device()
1379 struct f71805f_data *data; in f71805f_probe() local
1388 data = devm_kzalloc(&pdev->dev, sizeof(struct f71805f_data), in f71805f_probe()
1390 if (!data) in f71805f_probe()
1401 data->addr = res->start; in f71805f_probe()
1402 data->name = names[sio_data->kind]; in f71805f_probe()
1403 mutex_init(&data->update_lock); in f71805f_probe()
1405 platform_set_drvdata(pdev, data); in f71805f_probe()
1410 data->has_in = 0x1ff; in f71805f_probe()
1413 data->has_in = 0x6ef; in f71805f_probe()
1415 data->has_in |= (1 << 4); /* in4 */ in f71805f_probe()
1417 data->has_in |= (1 << 8); /* in8 */ in f71805f_probe()
1422 f71805f_init_device(data); in f71805f_probe()
1428 if (data->has_in & (1 << 4)) { /* in4 */ in f71805f_probe()
1434 if (data->has_in & (1 << 8)) { /* in8 */ in f71805f_probe()
1440 if (data->has_in & (1 << 9)) { /* in9 (F71872F/FG only) */ in f71805f_probe()
1446 if (data->has_in & (1 << 10)) { /* in9 (F71872F/FG only) */ in f71805f_probe()
1454 if (!(data->fan_ctrl[i] & FAN_CTRL_DC_MODE)) { in f71805f_probe()
1461 if (data->fan_ctrl[i] & FAN_CTRL_MODE_MANUAL) { in f71805f_probe()
1473 data->hwmon_dev = hwmon_device_register(&pdev->dev); in f71805f_probe()
1474 if (IS_ERR(data->hwmon_dev)) { in f71805f_probe()
1475 err = PTR_ERR(data->hwmon_dev); in f71805f_probe()
1492 struct f71805f_data *data = platform_get_drvdata(pdev); in f71805f_remove() local
1495 hwmon_device_unregister(data->hwmon_dev); in f71805f_remove()