Lines Matching refs:data

268 static int abituguru_wait(struct abituguru_data *data, u8 state)  in abituguru_wait()  argument
272 while (inb_p(data->addr + ABIT_UGURU_DATA) != state) { in abituguru_wait()
287 static int abituguru_ready(struct abituguru_data *data) in abituguru_ready() argument
291 if (data->uguru_ready) in abituguru_ready()
295 outb(0x00, data->addr + ABIT_UGURU_DATA); in abituguru_ready()
298 if (abituguru_wait(data, ABIT_UGURU_STATUS_READY)) { in abituguru_ready()
305 while (inb_p(data->addr + ABIT_UGURU_CMD) != 0xAC) { in abituguru_ready()
320 while (inb_p(data->addr + ABIT_UGURU_DATA) != ABIT_UGURU_STATUS_INPUT) { in abituguru_ready()
330 data->uguru_ready = 1; in abituguru_ready()
340 static int abituguru_send_address(struct abituguru_data *data, in abituguru_send_address() argument
354 if (abituguru_ready(data) != 0) in abituguru_send_address()
356 outb(bank_addr, data->addr + ABIT_UGURU_DATA); in abituguru_send_address()
357 data->uguru_ready = 0; in abituguru_send_address()
363 if (abituguru_wait(data, ABIT_UGURU_STATUS_INPUT)) { in abituguru_send_address()
379 outb(sensor_addr, data->addr + ABIT_UGURU_CMD); in abituguru_send_address()
388 static int abituguru_read(struct abituguru_data *data, in abituguru_read() argument
394 i = abituguru_send_address(data, bank_addr, sensor_addr, retries); in abituguru_read()
400 if (abituguru_wait(data, ABIT_UGURU_STATUS_READ)) { in abituguru_read()
407 buf[i] = inb(data->addr + ABIT_UGURU_CMD); in abituguru_read()
411 abituguru_ready(data); in abituguru_read()
420 static int abituguru_write(struct abituguru_data *data, in abituguru_write() argument
430 i = abituguru_send_address(data, bank_addr, sensor_addr, in abituguru_write()
437 if (abituguru_wait(data, ABIT_UGURU_STATUS_WRITE)) { in abituguru_write()
443 outb(buf[i], data->addr + ABIT_UGURU_CMD); in abituguru_write()
451 if (abituguru_wait(data, ABIT_UGURU_STATUS_READ)) { in abituguru_write()
459 while (inb_p(data->addr + ABIT_UGURU_CMD) != 0xAC) { in abituguru_write()
471 abituguru_ready(data); in abituguru_write()
485 abituguru_detect_bank1_sensor_type(struct abituguru_data *data, in abituguru_detect_bank1_sensor_type() argument
501 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1, sensor_addr, &val, in abituguru_detect_bank1_sensor_type()
536 if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2, sensor_addr, in abituguru_detect_bank1_sensor_type()
546 if (abituguru_read(data, ABIT_UGURU_ALARM_BANK, 0, buf, 3, in abituguru_detect_bank1_sensor_type()
550 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1 + 1, in abituguru_detect_bank1_sensor_type()
573 if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2, sensor_addr, in abituguru_detect_bank1_sensor_type()
583 if (abituguru_read(data, ABIT_UGURU_ALARM_BANK, 0, buf, 3, in abituguru_detect_bank1_sensor_type()
587 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1 + 1, in abituguru_detect_bank1_sensor_type()
610 if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2, in abituguru_detect_bank1_sensor_type()
611 sensor_addr, data->bank1_settings[sensor_addr], in abituguru_detect_bank1_sensor_type()
642 abituguru_detect_no_bank2_sensors(struct abituguru_data *data) in abituguru_detect_no_bank2_sensors() argument
647 data->bank2_sensors = fan_sensors; in abituguru_detect_no_bank2_sensors()
650 (int)data->bank2_sensors); in abituguru_detect_no_bank2_sensors()
664 if (data->bank2_settings[i][0] & ~0xC9) { in abituguru_detect_no_bank2_sensors()
667 i, (unsigned int)data->bank2_settings[i][0]); in abituguru_detect_no_bank2_sensors()
672 if (data->bank2_settings[i][1] < in abituguru_detect_no_bank2_sensors()
677 (int)data->bank2_settings[i][1], in abituguru_detect_no_bank2_sensors()
681 if (data->bank2_settings[i][1] > in abituguru_detect_no_bank2_sensors()
686 (int)data->bank2_settings[i][1], in abituguru_detect_no_bank2_sensors()
692 data->bank2_sensors = i; in abituguru_detect_no_bank2_sensors()
694 (int)data->bank2_sensors); in abituguru_detect_no_bank2_sensors()
698 abituguru_detect_no_pwms(struct abituguru_data *data) in abituguru_detect_no_pwms() argument
703 data->pwms = pwms; in abituguru_detect_no_pwms()
705 "\"pwms\" module param\n", (int)data->pwms); in abituguru_detect_no_pwms()
716 if (data->pwm_settings[i][0] & ~0x8F) { in abituguru_detect_no_pwms()
719 i, (unsigned int)data->pwm_settings[i][0]); in abituguru_detect_no_pwms()
727 for (j = 0; j < data->bank1_sensors[ABIT_UGURU_TEMP_SENSOR]; in abituguru_detect_no_pwms()
729 if (data->bank1_address[ABIT_UGURU_TEMP_SENSOR][j] == in abituguru_detect_no_pwms()
730 (data->pwm_settings[i][0] & 0x0F)) in abituguru_detect_no_pwms()
733 if (j == data->bank1_sensors[ABIT_UGURU_TEMP_SENSOR]) { in abituguru_detect_no_pwms()
737 data->pwm_settings[i][0] & 0x0F); in abituguru_detect_no_pwms()
749 if (data->pwm_settings[i][j] < min) { in abituguru_detect_no_pwms()
754 (int)data->pwm_settings[i][j], in abituguru_detect_no_pwms()
758 if (data->pwm_settings[i][j] > abituguru_pwm_max[j]) { in abituguru_detect_no_pwms()
763 (int)data->pwm_settings[i][j], in abituguru_detect_no_pwms()
770 if (data->pwm_settings[i][1] >= data->pwm_settings[i][2]) { in abituguru_detect_no_pwms()
774 (int)data->pwm_settings[i][1], in abituguru_detect_no_pwms()
775 (int)data->pwm_settings[i][2]); in abituguru_detect_no_pwms()
778 if (data->pwm_settings[i][3] >= data->pwm_settings[i][4]) { in abituguru_detect_no_pwms()
782 (int)data->pwm_settings[i][3], in abituguru_detect_no_pwms()
783 (int)data->pwm_settings[i][4]); in abituguru_detect_no_pwms()
789 data->pwms = i; in abituguru_detect_no_pwms()
790 ABIT_UGURU_DEBUG(2, " found: %d PWM outputs\n", (int)data->pwms); in abituguru_detect_no_pwms()
804 struct abituguru_data *data = abituguru_update_device(dev); in show_bank1_value() local
805 if (!data) in show_bank1_value()
807 return sprintf(buf, "%d\n", (data->bank1_value[attr->index] * in show_bank1_value()
808 data->bank1_max_value[attr->index] + 128) / 255); in show_bank1_value()
815 struct abituguru_data *data = dev_get_drvdata(dev); in show_bank1_setting() local
817 (data->bank1_settings[attr->index][attr->nr] * in show_bank1_setting()
818 data->bank1_max_value[attr->index] + 128) / 255); in show_bank1_setting()
825 struct abituguru_data *data = abituguru_update_device(dev); in show_bank2_value() local
826 if (!data) in show_bank2_value()
828 return sprintf(buf, "%d\n", (data->bank2_value[attr->index] * in show_bank2_value()
836 struct abituguru_data *data = dev_get_drvdata(dev); in show_bank2_setting() local
838 (data->bank2_settings[attr->index][attr->nr] * in show_bank2_setting()
846 struct abituguru_data *data = dev_get_drvdata(dev); in store_bank1_setting() local
855 val = (val * 255 + data->bank1_max_value[attr->index] / 2) / in store_bank1_setting()
856 data->bank1_max_value[attr->index]; in store_bank1_setting()
860 mutex_lock(&data->update_lock); in store_bank1_setting()
861 if (data->bank1_settings[attr->index][attr->nr] != val) { in store_bank1_setting()
862 u8 orig_val = data->bank1_settings[attr->index][attr->nr]; in store_bank1_setting()
863 data->bank1_settings[attr->index][attr->nr] = val; in store_bank1_setting()
864 if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK1 + 2, in store_bank1_setting()
865 attr->index, data->bank1_settings[attr->index], in store_bank1_setting()
867 data->bank1_settings[attr->index][attr->nr] = orig_val; in store_bank1_setting()
871 mutex_unlock(&data->update_lock); in store_bank1_setting()
879 struct abituguru_data *data = dev_get_drvdata(dev); in store_bank2_setting() local
895 mutex_lock(&data->update_lock); in store_bank2_setting()
896 if (data->bank2_settings[attr->index][attr->nr] != val) { in store_bank2_setting()
897 u8 orig_val = data->bank2_settings[attr->index][attr->nr]; in store_bank2_setting()
898 data->bank2_settings[attr->index][attr->nr] = val; in store_bank2_setting()
899 if (abituguru_write(data, ABIT_UGURU_SENSOR_BANK2 + 2, in store_bank2_setting()
900 attr->index, data->bank2_settings[attr->index], in store_bank2_setting()
902 data->bank2_settings[attr->index][attr->nr] = orig_val; in store_bank2_setting()
906 mutex_unlock(&data->update_lock); in store_bank2_setting()
914 struct abituguru_data *data = abituguru_update_device(dev); in show_bank1_alarm() local
915 if (!data) in show_bank1_alarm()
924 if ((data->alarms[attr->index / 8] & (0x01 << (attr->index % 8))) && in show_bank1_alarm()
925 (data->bank1_settings[attr->index][0] & attr->nr)) in show_bank1_alarm()
935 struct abituguru_data *data = abituguru_update_device(dev); in show_bank2_alarm() local
936 if (!data) in show_bank2_alarm()
938 if (data->alarms[2] & (0x01 << attr->index)) in show_bank2_alarm()
948 struct abituguru_data *data = dev_get_drvdata(dev); in show_bank1_mask() local
949 if (data->bank1_settings[attr->index][0] & attr->nr) in show_bank1_mask()
959 struct abituguru_data *data = dev_get_drvdata(dev); in show_bank2_mask() local
960 if (data->bank2_settings[attr->index][0] & attr->nr) in show_bank2_mask()
970 struct abituguru_data *data = dev_get_drvdata(dev); in store_bank1_mask() local
980 mutex_lock(&data->update_lock); in store_bank1_mask()
981 orig_val = data->bank1_settings[attr->index][0]; in store_bank1_mask()
984 data->bank1_settings[attr->index][0] |= attr->nr; in store_bank1_mask()
986 data->bank1_settings[attr->index][0] &= ~attr->nr; in store_bank1_mask()
988 if ((data->bank1_settings[attr->index][0] != orig_val) && in store_bank1_mask()
989 (abituguru_write(data, in store_bank1_mask()
991 data->bank1_settings[attr->index], 3) < 1)) { in store_bank1_mask()
992 data->bank1_settings[attr->index][0] = orig_val; in store_bank1_mask()
995 mutex_unlock(&data->update_lock); in store_bank1_mask()
1003 struct abituguru_data *data = dev_get_drvdata(dev); in store_bank2_mask() local
1013 mutex_lock(&data->update_lock); in store_bank2_mask()
1014 orig_val = data->bank2_settings[attr->index][0]; in store_bank2_mask()
1017 data->bank2_settings[attr->index][0] |= attr->nr; in store_bank2_mask()
1019 data->bank2_settings[attr->index][0] &= ~attr->nr; in store_bank2_mask()
1021 if ((data->bank2_settings[attr->index][0] != orig_val) && in store_bank2_mask()
1022 (abituguru_write(data, in store_bank2_mask()
1024 data->bank2_settings[attr->index], 2) < 1)) { in store_bank2_mask()
1025 data->bank2_settings[attr->index][0] = orig_val; in store_bank2_mask()
1028 mutex_unlock(&data->update_lock); in store_bank2_mask()
1037 struct abituguru_data *data = dev_get_drvdata(dev); in show_pwm_setting() local
1038 return sprintf(buf, "%d\n", data->pwm_settings[attr->index][attr->nr] * in show_pwm_setting()
1046 struct abituguru_data *data = dev_get_drvdata(dev); in store_pwm_setting() local
1069 mutex_lock(&data->update_lock); in store_pwm_setting()
1072 (val >= data->pwm_settings[attr->index][attr->nr + 1])) in store_pwm_setting()
1075 (val <= data->pwm_settings[attr->index][attr->nr - 1])) in store_pwm_setting()
1077 else if (data->pwm_settings[attr->index][attr->nr] != val) { in store_pwm_setting()
1078 u8 orig_val = data->pwm_settings[attr->index][attr->nr]; in store_pwm_setting()
1079 data->pwm_settings[attr->index][attr->nr] = val; in store_pwm_setting()
1080 if (abituguru_write(data, ABIT_UGURU_FAN_PWM + 1, in store_pwm_setting()
1081 attr->index, data->pwm_settings[attr->index], in store_pwm_setting()
1083 data->pwm_settings[attr->index][attr->nr] = in store_pwm_setting()
1088 mutex_unlock(&data->update_lock); in store_pwm_setting()
1096 struct abituguru_data *data = dev_get_drvdata(dev); in show_pwm_sensor() local
1102 for (i = 0; i < data->bank1_sensors[ABIT_UGURU_TEMP_SENSOR]; i++) in show_pwm_sensor()
1103 if (data->bank1_address[ABIT_UGURU_TEMP_SENSOR][i] == in show_pwm_sensor()
1104 (data->pwm_settings[attr->index][0] & 0x0F)) in show_pwm_sensor()
1114 struct abituguru_data *data = dev_get_drvdata(dev); in store_pwm_sensor() local
1124 if (val == 0 || val > data->bank1_sensors[ABIT_UGURU_TEMP_SENSOR]) in store_pwm_sensor()
1129 mutex_lock(&data->update_lock); in store_pwm_sensor()
1130 orig_val = data->pwm_settings[attr->index][0]; in store_pwm_sensor()
1131 address = data->bank1_address[ABIT_UGURU_TEMP_SENSOR][val]; in store_pwm_sensor()
1132 data->pwm_settings[attr->index][0] &= 0xF0; in store_pwm_sensor()
1133 data->pwm_settings[attr->index][0] |= address; in store_pwm_sensor()
1134 if (data->pwm_settings[attr->index][0] != orig_val) { in store_pwm_sensor()
1135 if (abituguru_write(data, ABIT_UGURU_FAN_PWM + 1, attr->index, in store_pwm_sensor()
1136 data->pwm_settings[attr->index], 5) < 1) { in store_pwm_sensor()
1137 data->pwm_settings[attr->index][0] = orig_val; in store_pwm_sensor()
1141 mutex_unlock(&data->update_lock); in store_pwm_sensor()
1149 struct abituguru_data *data = dev_get_drvdata(dev); in show_pwm_enable() local
1151 if (data->pwm_settings[attr->index][0] & ABIT_UGURU_FAN_PWM_ENABLE) in show_pwm_enable()
1160 struct abituguru_data *data = dev_get_drvdata(dev); in store_pwm_enable() local
1170 mutex_lock(&data->update_lock); in store_pwm_enable()
1171 orig_val = data->pwm_settings[attr->index][0]; in store_pwm_enable()
1174 data->pwm_settings[attr->index][0] &= in store_pwm_enable()
1178 data->pwm_settings[attr->index][0] |= ABIT_UGURU_FAN_PWM_ENABLE; in store_pwm_enable()
1183 if ((data->pwm_settings[attr->index][0] != orig_val) && in store_pwm_enable()
1184 (abituguru_write(data, ABIT_UGURU_FAN_PWM + 1, in store_pwm_enable()
1185 attr->index, data->pwm_settings[attr->index], in store_pwm_enable()
1187 data->pwm_settings[attr->index][0] = orig_val; in store_pwm_enable()
1190 mutex_unlock(&data->update_lock); in store_pwm_enable()
1272 struct abituguru_data *data; in abituguru_probe() local
1284 data = devm_kzalloc(&pdev->dev, sizeof(struct abituguru_data), in abituguru_probe()
1286 if (!data) in abituguru_probe()
1289 data->addr = platform_get_resource(pdev, IORESOURCE_IO, 0)->start; in abituguru_probe()
1290 mutex_init(&data->update_lock); in abituguru_probe()
1291 platform_set_drvdata(pdev, data); in abituguru_probe()
1294 if (inb_p(data->addr + ABIT_UGURU_DATA) == ABIT_UGURU_STATUS_INPUT) in abituguru_probe()
1295 data->uguru_ready = 1; in abituguru_probe()
1302 if (abituguru_read(data, ABIT_UGURU_ALARM_BANK, 0, in abituguru_probe()
1303 data->alarms, 3, ABIT_UGURU_MAX_RETRIES) != 3) in abituguru_probe()
1307 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1, i, in abituguru_probe()
1308 &data->bank1_value[i], 1, in abituguru_probe()
1311 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK1+1, i, in abituguru_probe()
1312 data->bank1_settings[i], 3, in abituguru_probe()
1324 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK2, i, in abituguru_probe()
1325 &data->bank2_value[i], 1, in abituguru_probe()
1328 if (abituguru_read(data, ABIT_UGURU_SENSOR_BANK2+1, i, in abituguru_probe()
1329 data->bank2_settings[i], 2, in abituguru_probe()
1334 if (abituguru_read(data, ABIT_UGURU_FAN_PWM, i, in abituguru_probe()
1335 data->pwm_settings[i], 5, in abituguru_probe()
1339 data->last_updated = jiffies; in abituguru_probe()
1343 sysfs_filename = data->sysfs_names; in abituguru_probe()
1346 res = abituguru_detect_bank1_sensor_type(data, probe_order[i]); in abituguru_probe()
1356 attr.name, data->bank1_sensors[res] + res) in abituguru_probe()
1358 data->sysfs_attr[sysfs_attr_i] = in abituguru_probe()
1360 data->sysfs_attr[sysfs_attr_i].dev_attr.attr.name = in abituguru_probe()
1362 data->sysfs_attr[sysfs_attr_i].index = probe_order[i]; in abituguru_probe()
1367 data->bank1_max_value[probe_order[i]] = in abituguru_probe()
1369 data->bank1_address[res][data->bank1_sensors[res]] = in abituguru_probe()
1371 data->bank1_sensors[res]++; in abituguru_probe()
1374 abituguru_detect_no_bank2_sensors(data); in abituguru_probe()
1375 for (i = 0; i < data->bank2_sensors; i++) { in abituguru_probe()
1380 data->sysfs_attr[sysfs_attr_i] = in abituguru_probe()
1382 data->sysfs_attr[sysfs_attr_i].dev_attr.attr.name = in abituguru_probe()
1384 data->sysfs_attr[sysfs_attr_i].index = i; in abituguru_probe()
1391 abituguru_detect_no_pwms(data); in abituguru_probe()
1392 for (i = 0; i < data->pwms; i++) { in abituguru_probe()
1397 data->sysfs_attr[sysfs_attr_i] = in abituguru_probe()
1399 data->sysfs_attr[sysfs_attr_i].dev_attr.attr.name = in abituguru_probe()
1401 data->sysfs_attr[sysfs_attr_i].index = i; in abituguru_probe()
1419 &data->sysfs_attr[i].dev_attr); in abituguru_probe()
1430 data->hwmon_dev = hwmon_device_register(&pdev->dev); in abituguru_probe()
1431 if (!IS_ERR(data->hwmon_dev)) in abituguru_probe()
1434 res = PTR_ERR(data->hwmon_dev); in abituguru_probe()
1436 for (i = 0; data->sysfs_attr[i].dev_attr.attr.name; i++) in abituguru_probe()
1437 device_remove_file(&pdev->dev, &data->sysfs_attr[i].dev_attr); in abituguru_probe()
1447 struct abituguru_data *data = platform_get_drvdata(pdev); in abituguru_remove() local
1449 hwmon_device_unregister(data->hwmon_dev); in abituguru_remove()
1450 for (i = 0; data->sysfs_attr[i].dev_attr.attr.name; i++) in abituguru_remove()
1451 device_remove_file(&pdev->dev, &data->sysfs_attr[i].dev_attr); in abituguru_remove()
1462 struct abituguru_data *data = dev_get_drvdata(dev); in abituguru_update_device() local
1466 mutex_lock(&data->update_lock); in abituguru_update_device()
1467 if (time_after(jiffies, data->last_updated + HZ)) { in abituguru_update_device()
1469 err = abituguru_read(data, ABIT_UGURU_ALARM_BANK, 0, in abituguru_update_device()
1470 data->alarms, 3, 0); in abituguru_update_device()
1474 err = abituguru_read(data, ABIT_UGURU_SENSOR_BANK1, in abituguru_update_device()
1475 i, &data->bank1_value[i], 1, 0); in abituguru_update_device()
1478 err = abituguru_read(data, ABIT_UGURU_SENSOR_BANK1 + 1, in abituguru_update_device()
1479 i, data->bank1_settings[i], 3, 0); in abituguru_update_device()
1483 for (i = 0; i < data->bank2_sensors; i++) { in abituguru_update_device()
1484 err = abituguru_read(data, ABIT_UGURU_SENSOR_BANK2, i, in abituguru_update_device()
1485 &data->bank2_value[i], 1, 0); in abituguru_update_device()
1491 data->update_timeouts = 0; in abituguru_update_device()
1496 if (data->update_timeouts < 255u) in abituguru_update_device()
1497 data->update_timeouts++; in abituguru_update_device()
1498 if (data->update_timeouts <= ABIT_UGURU_MAX_TIMEOUTS) { in abituguru_update_device()
1506 (int)data->update_timeouts); in abituguru_update_device()
1510 data->last_updated = jiffies; in abituguru_update_device()
1512 mutex_unlock(&data->update_lock); in abituguru_update_device()
1515 return data; in abituguru_update_device()
1523 struct abituguru_data *data = dev_get_drvdata(dev); in abituguru_suspend() local
1528 mutex_lock(&data->update_lock); in abituguru_suspend()
1534 struct abituguru_data *data = dev_get_drvdata(dev); in abituguru_resume() local
1536 if (inb_p(data->addr + ABIT_UGURU_DATA) != ABIT_UGURU_STATUS_INPUT) in abituguru_resume()
1537 data->uguru_ready = 0; in abituguru_resume()
1538 mutex_unlock(&data->update_lock); in abituguru_resume()