Lines Matching refs:data
292 /* Must be called with data->update_lock held, except during initialization */
293 static u8 f71805f_read8(struct f71805f_data *data, u8 reg)
295 outb(reg, data->addr + ADDR_REG_OFFSET);
296 return inb(data->addr + DATA_REG_OFFSET);
299 /* Must be called with data->update_lock held, except during initialization */
300 static void f71805f_write8(struct f71805f_data *data, u8 reg, u8 val)
302 outb(reg, data->addr + ADDR_REG_OFFSET);
303 outb(val, data->addr + DATA_REG_OFFSET);
309 * Must be called with data->update_lock held, except during initialization
311 static u16 f71805f_read16(struct f71805f_data *data, u8 reg)
315 outb(reg, data->addr + ADDR_REG_OFFSET);
316 val = inb(data->addr + DATA_REG_OFFSET) << 8;
317 outb(++reg, data->addr + ADDR_REG_OFFSET);
318 val |= inb(data->addr + DATA_REG_OFFSET);
323 /* Must be called with data->update_lock held, except during initialization */
324 static void f71805f_write16(struct f71805f_data *data, u8 reg, u16 val)
326 outb(reg, data->addr + ADDR_REG_OFFSET);
327 outb(val >> 8, data->addr + DATA_REG_OFFSET);
328 outb(++reg, data->addr + ADDR_REG_OFFSET);
329 outb(val & 0xff, data->addr + DATA_REG_OFFSET);
334 struct f71805f_data *data = dev_get_drvdata(dev);
337 mutex_lock(&data->update_lock);
340 if (time_after(jiffies, data->last_updated + 60 * HZ)
341 || !data->valid) {
343 if (!(data->has_in & (1 << nr)))
345 data->in_high[nr] = f71805f_read8(data,
347 data->in_low[nr] = f71805f_read8(data,
351 data->fan_low[nr] = f71805f_read16(data,
353 data->fan_target[nr] = f71805f_read16(data,
355 data->pwm_freq[nr] = f71805f_read8(data,
359 data->temp_high[nr] = f71805f_read8(data,
361 data->temp_hyst[nr] = f71805f_read8(data,
364 data->temp_mode = f71805f_read8(data, F71805F_REG_TEMP_MODE);
367 data->auto_points[nr].temp[apnr] =
368 f71805f_read8(data,
371 data->auto_points[nr].fan[apnr] =
372 f71805f_read16(data,
378 data->last_limits = jiffies;
382 if (time_after(jiffies, data->last_updated + HZ)
383 || !data->valid) {
385 if (!(data->has_in & (1 << nr)))
387 data->in[nr] = f71805f_read8(data,
391 data->fan[nr] = f71805f_read16(data,
393 data->fan_ctrl[nr] = f71805f_read8(data,
395 data->pwm[nr] = f71805f_read8(data,
399 data->temp[nr] = f71805f_read8(data,
402 data->alarms = f71805f_read8(data, F71805F_REG_STATUS(0))
403 + (f71805f_read8(data, F71805F_REG_STATUS(1)) << 8)
404 + (f71805f_read8(data, F71805F_REG_STATUS(2)) << 16);
406 data->last_updated = jiffies;
407 data->valid = 1;
410 mutex_unlock(&data->update_lock);
412 return data;
422 struct f71805f_data *data = f71805f_update_device(dev);
426 return sprintf(buf, "%ld\n", in0_from_reg(data->in[nr]));
432 struct f71805f_data *data = f71805f_update_device(dev);
436 return sprintf(buf, "%ld\n", in0_from_reg(data->in_high[nr]));
442 struct f71805f_data *data = f71805f_update_device(dev);
446 return sprintf(buf, "%ld\n", in0_from_reg(data->in_low[nr]));
452 struct f71805f_data *data = dev_get_drvdata(dev);
462 mutex_lock(&data->update_lock);
463 data->in_high[nr] = in0_to_reg(val);
464 f71805f_write8(data, F71805F_REG_IN_HIGH(nr), data->in_high[nr]);
465 mutex_unlock(&data->update_lock);
473 struct f71805f_data *data = dev_get_drvdata(dev);
483 mutex_lock(&data->update_lock);
484 data->in_low[nr] = in0_to_reg(val);
485 f71805f_write8(data, F71805F_REG_IN_LOW(nr), data->in_low[nr]);
486 mutex_unlock(&data->update_lock);
494 struct f71805f_data *data = f71805f_update_device(dev);
498 return sprintf(buf, "%ld\n", in_from_reg(data->in[nr]));
504 struct f71805f_data *data = f71805f_update_device(dev);
508 return sprintf(buf, "%ld\n", in_from_reg(data->in_high[nr]));
514 struct f71805f_data *data = f71805f_update_device(dev);
518 return sprintf(buf, "%ld\n", in_from_reg(data->in_low[nr]));
524 struct f71805f_data *data = dev_get_drvdata(dev);
534 mutex_lock(&data->update_lock);
535 data->in_high[nr] = in_to_reg(val);
536 f71805f_write8(data, F71805F_REG_IN_HIGH(nr), data->in_high[nr]);
537 mutex_unlock(&data->update_lock);
545 struct f71805f_data *data = dev_get_drvdata(dev);
555 mutex_lock(&data->update_lock);
556 data->in_low[nr] = in_to_reg(val);
557 f71805f_write8(data, F71805F_REG_IN_LOW(nr), data->in_low[nr]);
558 mutex_unlock(&data->update_lock);
566 struct f71805f_data *data = f71805f_update_device(dev);
570 return sprintf(buf, "%ld\n", fan_from_reg(data->fan[nr]));
576 struct f71805f_data *data = f71805f_update_device(dev);
580 return sprintf(buf, "%ld\n", fan_from_reg(data->fan_low[nr]));
586 struct f71805f_data *data = f71805f_update_device(dev);
590 return sprintf(buf, "%ld\n", fan_from_reg(data->fan_target[nr]));
596 struct f71805f_data *data = dev_get_drvdata(dev);
606 mutex_lock(&data->update_lock);
607 data->fan_low[nr] = fan_to_reg(val);
608 f71805f_write16(data, F71805F_REG_FAN_LOW(nr), data->fan_low[nr]);
609 mutex_unlock(&data->update_lock);
617 struct f71805f_data *data = dev_get_drvdata(dev);
627 mutex_lock(&data->update_lock);
628 data->fan_target[nr] = fan_to_reg(val);
629 f71805f_write16(data, F71805F_REG_FAN_TARGET(nr),
630 data->fan_target[nr]);
631 mutex_unlock(&data->update_lock);
639 struct f71805f_data *data = f71805f_update_device(dev);
643 return sprintf(buf, "%d\n", (int)data->pwm[nr]);
649 struct f71805f_data *data = f71805f_update_device(dev);
654 switch (data->fan_ctrl[nr] & FAN_CTRL_MODE_MASK) {
671 struct f71805f_data *data = f71805f_update_device(dev);
675 return sprintf(buf, "%lu\n", pwm_freq_from_reg(data->pwm_freq[nr]));
681 struct f71805f_data *data = f71805f_update_device(dev);
685 return sprintf(buf, "%d\n", pwm_mode_from_reg(data->fan_ctrl[nr]));
691 struct f71805f_data *data = dev_get_drvdata(dev);
704 mutex_lock(&data->update_lock);
705 data->pwm[nr] = val;
706 f71805f_write8(data, F71805F_REG_PWM_DUTY(nr), data->pwm[nr]);
707 mutex_unlock(&data->update_lock);
717 struct f71805f_data *data = dev_get_drvdata(dev);
737 mutex_lock(&data->update_lock);
738 reg = f71805f_read8(data, F71805F_REG_FAN_CTRL(nr))
751 data->fan_ctrl[nr] = reg;
752 f71805f_write8(data, F71805F_REG_FAN_CTRL(nr), reg);
753 mutex_unlock(&data->update_lock);
767 struct f71805f_data *data = dev_get_drvdata(dev);
777 mutex_lock(&data->update_lock);
778 data->pwm_freq[nr] = pwm_freq_to_reg(val);
779 f71805f_write8(data, F71805F_REG_PWM_FREQ(nr), data->pwm_freq[nr]);
780 mutex_unlock(&data->update_lock);
789 struct f71805f_data *data = dev_get_drvdata(dev);
795 temp_from_reg(data->auto_points[pwmnr].temp[apnr]));
802 struct f71805f_data *data = dev_get_drvdata(dev);
813 mutex_lock(&data->update_lock);
814 data->auto_points[pwmnr].temp[apnr] = temp_to_reg(val);
815 f71805f_write8(data, F71805F_REG_PWM_AUTO_POINT_TEMP(pwmnr, apnr),
816 data->auto_points[pwmnr].temp[apnr]);
817 mutex_unlock(&data->update_lock);
826 struct f71805f_data *data = dev_get_drvdata(dev);
832 fan_from_reg(data->auto_points[pwmnr].fan[apnr]));
839 struct f71805f_data *data = dev_get_drvdata(dev);
850 mutex_lock(&data->update_lock);
851 data->auto_points[pwmnr].fan[apnr] = fan_to_reg(val);
852 f71805f_write16(data, F71805F_REG_PWM_AUTO_POINT_FAN(pwmnr, apnr),
853 data->auto_points[pwmnr].fan[apnr]);
854 mutex_unlock(&data->update_lock);
862 struct f71805f_data *data = f71805f_update_device(dev);
866 return sprintf(buf, "%ld\n", temp_from_reg(data->temp[nr]));
872 struct f71805f_data *data = f71805f_update_device(dev);
876 return sprintf(buf, "%ld\n", temp_from_reg(data->temp_high[nr]));
882 struct f71805f_data *data = f71805f_update_device(dev);
886 return sprintf(buf, "%ld\n", temp_from_reg(data->temp_hyst[nr]));
892 struct f71805f_data *data = f71805f_update_device(dev);
897 return sprintf(buf, "%u\n", (data->temp_mode & (1 << nr)) ? 3 : 4);
903 struct f71805f_data *data = dev_get_drvdata(dev);
913 mutex_lock(&data->update_lock);
914 data->temp_high[nr] = temp_to_reg(val);
915 f71805f_write8(data, F71805F_REG_TEMP_HIGH(nr), data->temp_high[nr]);
916 mutex_unlock(&data->update_lock);
924 struct f71805f_data *data = dev_get_drvdata(dev);
934 mutex_lock(&data->update_lock);
935 data->temp_hyst[nr] = temp_to_reg(val);
936 f71805f_write8(data, F71805F_REG_TEMP_HYST(nr), data->temp_hyst[nr]);
937 mutex_unlock(&data->update_lock);
945 struct f71805f_data *data = f71805f_update_device(dev);
947 return sprintf(buf, "%lu\n", data->alarms & 0x7ff);
953 struct f71805f_data *data = f71805f_update_device(dev);
955 return sprintf(buf, "%lu\n", (data->alarms >> 16) & 0x07);
961 struct f71805f_data *data = f71805f_update_device(dev);
963 return sprintf(buf, "%lu\n", (data->alarms >> 11) & 0x07);
969 struct f71805f_data *data = f71805f_update_device(dev);
973 return sprintf(buf, "%lu\n", (data->alarms >> bitnr) & 1);
979 struct f71805f_data *data = dev_get_drvdata(dev);
981 return sprintf(buf, "%s\n", data->name);
1339 static void f71805f_init_device(struct f71805f_data *data)
1344 reg = f71805f_read8(data, F71805F_REG_START);
1347 f71805f_write8(data, F71805F_REG_START, (reg | 0x01) & ~0x40);
1355 data->fan_ctrl[i] = f71805f_read8(data,
1361 if (data->fan_ctrl[i] & FAN_CTRL_LATCH_FULL) {
1362 data->fan_ctrl[i] &= ~FAN_CTRL_LATCH_FULL;
1363 f71805f_write8(data, F71805F_REG_FAN_CTRL(i),
1364 data->fan_ctrl[i]);
1372 struct f71805f_data *data;
1381 data = devm_kzalloc(&pdev->dev, sizeof(struct f71805f_data),
1383 if (!data)
1394 data->addr = res->start;
1395 data->name = names[sio_data->kind];
1396 mutex_init(&data->update_lock);
1398 platform_set_drvdata(pdev, data);
1403 data->has_in = 0x1ff;
1406 data->has_in = 0x6ef;
1408 data->has_in |= (1 << 4); /* in4 */
1410 data->has_in |= (1 << 8); /* in8 */
1415 f71805f_init_device(data);
1421 if (data->has_in & (1 << 4)) { /* in4 */
1427 if (data->has_in & (1 << 8)) { /* in8 */
1433 if (data->has_in & (1 << 9)) { /* in9 (F71872F/FG only) */
1439 if (data->has_in & (1 << 10)) { /* in9 (F71872F/FG only) */
1447 if (!(data->fan_ctrl[i] & FAN_CTRL_DC_MODE)) {
1454 if (data->fan_ctrl[i] & FAN_CTRL_MODE_MANUAL) {
1466 data->hwmon_dev = hwmon_device_register(&pdev->dev);
1467 if (IS_ERR(data->hwmon_dev)) {
1468 err = PTR_ERR(data->hwmon_dev);
1485 struct f71805f_data *data = platform_get_drvdata(pdev);
1488 hwmon_device_unregister(data->hwmon_dev);
1536 pr_err("Platform data allocation failed\n");