Lines Matching refs:occ
124 static int occ_poll(struct occ *occ) in occ_poll() argument
127 u16 checksum = occ->poll_cmd_data + occ->seq_no + 1; in occ_poll()
132 cmd[0] = occ->seq_no++; /* sequence number */ in occ_poll()
136 cmd[4] = occ->poll_cmd_data; /* data */ in occ_poll()
142 rc = occ->send_cmd(occ, cmd); in occ_poll()
144 occ->last_error = rc; in occ_poll()
145 if (occ->error_count++ > OCC_ERROR_COUNT_THRESHOLD) in occ_poll()
146 occ->error = rc; in occ_poll()
152 occ->error_count = 0; in occ_poll()
153 occ->last_error = 0; in occ_poll()
154 occ->error = 0; in occ_poll()
157 header = (struct occ_poll_response_header *)occ->resp.data; in occ_poll()
159 if (occ->last_safe) { in occ_poll()
161 occ->last_safe + OCC_SAFE_TIMEOUT)) in occ_poll()
162 occ->error = -EHOSTDOWN; in occ_poll()
164 occ->last_safe = jiffies; in occ_poll()
167 occ->last_safe = 0; in occ_poll()
171 occ_sysfs_poll_done(occ); in occ_poll()
175 static int occ_set_user_power_cap(struct occ *occ, u16 user_power_cap) in occ_set_user_power_cap() argument
193 rc = mutex_lock_interruptible(&occ->lock); in occ_set_user_power_cap()
197 rc = occ->send_cmd(occ, cmd); in occ_set_user_power_cap()
199 mutex_unlock(&occ->lock); in occ_set_user_power_cap()
204 int occ_update_response(struct occ *occ) in occ_update_response() argument
206 int rc = mutex_lock_interruptible(&occ->lock); in occ_update_response()
212 if (time_after(jiffies, occ->last_update + OCC_UPDATE_FREQUENCY)) { in occ_update_response()
213 rc = occ_poll(occ); in occ_update_response()
214 occ->last_update = jiffies; in occ_update_response()
216 rc = occ->last_error; in occ_update_response()
219 mutex_unlock(&occ->lock); in occ_update_response()
229 struct occ *occ = dev_get_drvdata(dev); in occ_show_temp_1() local
230 struct occ_sensors *sensors = &occ->sensors; in occ_show_temp_1()
233 rc = occ_update_response(occ); in occ_show_temp_1()
265 struct occ *occ = dev_get_drvdata(dev); in occ_show_temp_2() local
266 struct occ_sensors *sensors = &occ->sensors; in occ_show_temp_2()
269 rc = occ_update_response(occ); in occ_show_temp_2()
316 struct occ *occ = dev_get_drvdata(dev); in occ_show_freq_1() local
317 struct occ_sensors *sensors = &occ->sensors; in occ_show_freq_1()
320 rc = occ_update_response(occ); in occ_show_freq_1()
346 struct occ *occ = dev_get_drvdata(dev); in occ_show_freq_2() local
347 struct occ_sensors *sensors = &occ->sensors; in occ_show_freq_2()
350 rc = occ_update_response(occ); in occ_show_freq_2()
376 struct occ *occ = dev_get_drvdata(dev); in occ_show_power_1() local
377 struct occ_sensors *sensors = &occ->sensors; in occ_show_power_1()
380 rc = occ_update_response(occ); in occ_show_power_1()
397 occ->powr_sample_time_us; in occ_show_power_1()
423 struct occ *occ = dev_get_drvdata(dev); in occ_show_power_2() local
424 struct occ_sensors *sensors = &occ->sensors; in occ_show_power_2()
427 rc = occ_update_response(occ); in occ_show_power_2()
444 occ->powr_sample_time_us; in occ_show_power_2()
462 struct occ *occ = dev_get_drvdata(dev); in occ_show_power_a0() local
463 struct occ_sensors *sensors = &occ->sensors; in occ_show_power_a0()
466 rc = occ_update_response(occ); in occ_show_power_a0()
482 occ->powr_sample_time_us; in occ_show_power_a0()
496 occ->powr_sample_time_us; in occ_show_power_a0()
510 occ->powr_sample_time_us; in occ_show_power_a0()
524 occ->powr_sample_time_us; in occ_show_power_a0()
542 struct occ *occ = dev_get_drvdata(dev); in occ_show_caps_1_2() local
543 struct occ_sensors *sensors = &occ->sensors; in occ_show_caps_1_2()
546 rc = occ_update_response(occ); in occ_show_caps_1_2()
574 if (occ->sensors.caps.version == 1) in occ_show_caps_1_2()
592 struct occ *occ = dev_get_drvdata(dev); in occ_show_caps_3() local
593 struct occ_sensors *sensors = &occ->sensors; in occ_show_caps_3()
596 rc = occ_update_response(occ); in occ_show_caps_3()
640 struct occ *occ = dev_get_drvdata(dev); in occ_store_caps_user() local
648 rc = occ_set_user_power_cap(occ, user_power_cap); in occ_store_caps_user()
660 struct occ *occ = dev_get_drvdata(dev); in occ_show_extended() local
661 struct occ_sensors *sensors = &occ->sensors; in occ_show_extended()
664 rc = occ_update_response(occ); in occ_show_extended()
724 static int occ_setup_sensor_attrs(struct occ *occ) in occ_setup_sensor_attrs() argument
727 struct device *dev = occ->bus_dev; in occ_setup_sensor_attrs()
728 struct occ_sensors *sensors = &occ->sensors; in occ_setup_sensor_attrs()
800 occ->attrs = devm_kzalloc(dev, sizeof(*occ->attrs) * num_attrs, in occ_setup_sensor_attrs()
802 if (!occ->attrs) in occ_setup_sensor_attrs()
806 occ->group.attrs = devm_kzalloc(dev, sizeof(*occ->group.attrs) * in occ_setup_sensor_attrs()
808 if (!occ->group.attrs) in occ_setup_sensor_attrs()
811 attr = occ->attrs; in occ_setup_sensor_attrs()
1009 sysfs_attr_init(&occ->attrs[i].sensor.dev_attr.attr); in occ_setup_sensor_attrs()
1010 occ->group.attrs[i] = &occ->attrs[i].sensor.dev_attr.attr; in occ_setup_sensor_attrs()
1017 static void occ_parse_poll_response(struct occ *occ) in occ_parse_poll_response() argument
1021 struct occ_sensors *sensors = &occ->sensors; in occ_parse_poll_response()
1022 struct occ_response *resp = &occ->resp; in occ_parse_poll_response()
1028 dev_info(occ->bus_dev, "OCC found, code level: %.16s\n", in occ_parse_poll_response()
1040 dev_warn(occ->bus_dev, "exceeded response buffer\n"); in occ_parse_poll_response()
1044 dev_dbg(occ->bus_dev, " %04x..%04x: %.4s (%d sensors)\n", in occ_parse_poll_response()
1060 dev_warn(occ->bus_dev, "sensor not supported %.4s\n", in occ_parse_poll_response()
1070 dev_dbg(occ->bus_dev, "Max resp size: %u+%zd=%zd\n", size, in occ_parse_poll_response()
1074 int occ_setup(struct occ *occ, const char *name) in occ_setup() argument
1078 mutex_init(&occ->lock); in occ_setup()
1079 occ->groups[0] = &occ->group; in occ_setup()
1082 rc = occ_poll(occ); in occ_setup()
1084 dev_info(occ->bus_dev, "host is not ready\n"); in occ_setup()
1087 dev_err(occ->bus_dev, "failed to get OCC poll response: %d\n", in occ_setup()
1092 occ_parse_poll_response(occ); in occ_setup()
1094 rc = occ_setup_sensor_attrs(occ); in occ_setup()
1096 dev_err(occ->bus_dev, "failed to setup sensor attrs: %d\n", in occ_setup()
1101 occ->hwmon = devm_hwmon_device_register_with_groups(occ->bus_dev, name, in occ_setup()
1102 occ, occ->groups); in occ_setup()
1103 if (IS_ERR(occ->hwmon)) { in occ_setup()
1104 rc = PTR_ERR(occ->hwmon); in occ_setup()
1105 dev_err(occ->bus_dev, "failed to register hwmon device: %d\n", in occ_setup()
1110 rc = occ_setup_sysfs(occ); in occ_setup()
1112 dev_err(occ->bus_dev, "failed to setup sysfs: %d\n", rc); in occ_setup()