Lines Matching refs:occ
132 static int occ_poll(struct occ *occ) in occ_poll() argument
135 u16 checksum = occ->poll_cmd_data + occ->seq_no + 1; in occ_poll()
140 cmd[0] = occ->seq_no++; /* sequence number */ in occ_poll()
144 cmd[4] = occ->poll_cmd_data; /* data */ in occ_poll()
150 rc = occ->send_cmd(occ, cmd); in occ_poll()
152 occ->last_error = rc; in occ_poll()
153 if (occ->error_count++ > OCC_ERROR_COUNT_THRESHOLD) in occ_poll()
154 occ->error = rc; in occ_poll()
160 occ->error_count = 0; in occ_poll()
161 occ->last_error = 0; in occ_poll()
162 occ->error = 0; in occ_poll()
165 header = (struct occ_poll_response_header *)occ->resp.data; in occ_poll()
167 if (occ->last_safe) { in occ_poll()
169 occ->last_safe + OCC_SAFE_TIMEOUT)) in occ_poll()
170 occ->error = -EHOSTDOWN; in occ_poll()
172 occ->last_safe = jiffies; in occ_poll()
175 occ->last_safe = 0; in occ_poll()
179 occ_sysfs_poll_done(occ); in occ_poll()
183 static int occ_set_user_power_cap(struct occ *occ, u16 user_power_cap) in occ_set_user_power_cap() argument
201 rc = mutex_lock_interruptible(&occ->lock); in occ_set_user_power_cap()
205 rc = occ->send_cmd(occ, cmd); in occ_set_user_power_cap()
207 mutex_unlock(&occ->lock); in occ_set_user_power_cap()
212 int occ_update_response(struct occ *occ) in occ_update_response() argument
214 int rc = mutex_lock_interruptible(&occ->lock); in occ_update_response()
220 if (time_after(jiffies, occ->next_update)) { in occ_update_response()
221 rc = occ_poll(occ); in occ_update_response()
222 occ->next_update = jiffies + OCC_UPDATE_FREQUENCY; in occ_update_response()
224 rc = occ->last_error; in occ_update_response()
227 mutex_unlock(&occ->lock); in occ_update_response()
237 struct occ *occ = dev_get_drvdata(dev); in occ_show_temp_1() local
238 struct occ_sensors *sensors = &occ->sensors; in occ_show_temp_1()
241 rc = occ_update_response(occ); in occ_show_temp_1()
273 struct occ *occ = dev_get_drvdata(dev); in occ_show_temp_2() local
274 struct occ_sensors *sensors = &occ->sensors; in occ_show_temp_2()
277 rc = occ_update_response(occ); in occ_show_temp_2()
324 struct occ *occ = dev_get_drvdata(dev); in occ_show_temp_10() local
325 struct occ_sensors *sensors = &occ->sensors; in occ_show_temp_10()
328 rc = occ_update_response(occ); in occ_show_temp_10()
371 struct occ *occ = dev_get_drvdata(dev); in occ_show_freq_1() local
372 struct occ_sensors *sensors = &occ->sensors; in occ_show_freq_1()
375 rc = occ_update_response(occ); in occ_show_freq_1()
401 struct occ *occ = dev_get_drvdata(dev); in occ_show_freq_2() local
402 struct occ_sensors *sensors = &occ->sensors; in occ_show_freq_2()
405 rc = occ_update_response(occ); in occ_show_freq_2()
431 struct occ *occ = dev_get_drvdata(dev); in occ_show_power_1() local
432 struct occ_sensors *sensors = &occ->sensors; in occ_show_power_1()
435 rc = occ_update_response(occ); in occ_show_power_1()
452 occ->powr_sample_time_us; in occ_show_power_1()
478 struct occ *occ = dev_get_drvdata(dev); in occ_show_power_2() local
479 struct occ_sensors *sensors = &occ->sensors; in occ_show_power_2()
482 rc = occ_update_response(occ); in occ_show_power_2()
499 occ->powr_sample_time_us; in occ_show_power_2()
517 struct occ *occ = dev_get_drvdata(dev); in occ_show_power_a0() local
518 struct occ_sensors *sensors = &occ->sensors; in occ_show_power_a0()
521 rc = occ_update_response(occ); in occ_show_power_a0()
537 occ->powr_sample_time_us; in occ_show_power_a0()
551 occ->powr_sample_time_us; in occ_show_power_a0()
565 occ->powr_sample_time_us; in occ_show_power_a0()
579 occ->powr_sample_time_us; in occ_show_power_a0()
597 struct occ *occ = dev_get_drvdata(dev); in occ_show_caps_1_2() local
598 struct occ_sensors *sensors = &occ->sensors; in occ_show_caps_1_2()
601 rc = occ_update_response(occ); in occ_show_caps_1_2()
629 if (occ->sensors.caps.version == 1) in occ_show_caps_1_2()
647 struct occ *occ = dev_get_drvdata(dev); in occ_show_caps_3() local
648 struct occ_sensors *sensors = &occ->sensors; in occ_show_caps_3()
651 rc = occ_update_response(occ); in occ_show_caps_3()
695 struct occ *occ = dev_get_drvdata(dev); in occ_store_caps_user() local
703 rc = occ_set_user_power_cap(occ, user_power_cap); in occ_store_caps_user()
715 struct occ *occ = dev_get_drvdata(dev); in occ_show_extended() local
716 struct occ_sensors *sensors = &occ->sensors; in occ_show_extended()
719 rc = occ_update_response(occ); in occ_show_extended()
780 static int occ_setup_sensor_attrs(struct occ *occ) in occ_setup_sensor_attrs() argument
783 struct device *dev = occ->bus_dev; in occ_setup_sensor_attrs()
784 struct occ_sensors *sensors = &occ->sensors; in occ_setup_sensor_attrs()
860 occ->attrs = devm_kzalloc(dev, sizeof(*occ->attrs) * num_attrs, in occ_setup_sensor_attrs()
862 if (!occ->attrs) in occ_setup_sensor_attrs()
866 occ->group.attrs = devm_kzalloc(dev, sizeof(*occ->group.attrs) * in occ_setup_sensor_attrs()
868 if (!occ->group.attrs) in occ_setup_sensor_attrs()
871 attr = occ->attrs; in occ_setup_sensor_attrs()
1078 sysfs_attr_init(&occ->attrs[i].sensor.dev_attr.attr); in occ_setup_sensor_attrs()
1079 occ->group.attrs[i] = &occ->attrs[i].sensor.dev_attr.attr; in occ_setup_sensor_attrs()
1086 static void occ_parse_poll_response(struct occ *occ) in occ_parse_poll_response() argument
1090 struct occ_sensors *sensors = &occ->sensors; in occ_parse_poll_response()
1091 struct occ_response *resp = &occ->resp; in occ_parse_poll_response()
1097 dev_info(occ->bus_dev, "OCC found, code level: %.16s\n", in occ_parse_poll_response()
1109 dev_warn(occ->bus_dev, "exceeded response buffer\n"); in occ_parse_poll_response()
1113 dev_dbg(occ->bus_dev, " %04x..%04x: %.4s (%d sensors)\n", in occ_parse_poll_response()
1129 dev_warn(occ->bus_dev, "sensor not supported %.4s\n", in occ_parse_poll_response()
1139 dev_dbg(occ->bus_dev, "Max resp size: %u+%zd=%zd\n", size, in occ_parse_poll_response()
1143 int occ_setup(struct occ *occ, const char *name) in occ_setup() argument
1148 occ->seq_no = 1; in occ_setup()
1149 mutex_init(&occ->lock); in occ_setup()
1150 occ->groups[0] = &occ->group; in occ_setup()
1153 rc = occ_poll(occ); in occ_setup()
1155 dev_info(occ->bus_dev, "host is not ready\n"); in occ_setup()
1158 dev_err(occ->bus_dev, in occ_setup()
1160 occ->resp.return_status, rc); in occ_setup()
1164 occ->next_update = jiffies + OCC_UPDATE_FREQUENCY; in occ_setup()
1165 occ_parse_poll_response(occ); in occ_setup()
1167 rc = occ_setup_sensor_attrs(occ); in occ_setup()
1169 dev_err(occ->bus_dev, "failed to setup sensor attrs: %d\n", in occ_setup()
1174 occ->hwmon = devm_hwmon_device_register_with_groups(occ->bus_dev, name, in occ_setup()
1175 occ, occ->groups); in occ_setup()
1176 if (IS_ERR(occ->hwmon)) { in occ_setup()
1177 rc = PTR_ERR(occ->hwmon); in occ_setup()
1178 dev_err(occ->bus_dev, "failed to register hwmon device: %d\n", in occ_setup()
1183 rc = occ_setup_sysfs(occ); in occ_setup()
1185 dev_err(occ->bus_dev, "failed to setup sysfs: %d\n", rc); in occ_setup()