Lines Matching refs:occ

132 static int occ_poll(struct occ *occ)  in occ_poll()  argument
143 cmd[4] = occ->poll_cmd_data; /* data */ in occ_poll()
148 rc = occ->send_cmd(occ, cmd, sizeof(cmd)); in occ_poll()
150 occ->last_error = rc; in occ_poll()
151 if (occ->error_count++ > OCC_ERROR_COUNT_THRESHOLD) in occ_poll()
152 occ->error = rc; in occ_poll()
158 occ->error_count = 0; in occ_poll()
159 occ->last_error = 0; in occ_poll()
160 occ->error = 0; in occ_poll()
163 header = (struct occ_poll_response_header *)occ->resp.data; in occ_poll()
165 if (occ->last_safe) { in occ_poll()
167 occ->last_safe + OCC_SAFE_TIMEOUT)) in occ_poll()
168 occ->error = -EHOSTDOWN; in occ_poll()
170 occ->last_safe = jiffies; in occ_poll()
173 occ->last_safe = 0; in occ_poll()
177 occ_sysfs_poll_done(occ); in occ_poll()
181 static int occ_set_user_power_cap(struct occ *occ, u16 user_power_cap) in occ_set_user_power_cap() argument
197 rc = mutex_lock_interruptible(&occ->lock); in occ_set_user_power_cap()
201 rc = occ->send_cmd(occ, cmd, sizeof(cmd)); in occ_set_user_power_cap()
203 mutex_unlock(&occ->lock); in occ_set_user_power_cap()
208 int occ_update_response(struct occ *occ) in occ_update_response() argument
210 int rc = mutex_lock_interruptible(&occ->lock); in occ_update_response()
216 if (time_after(jiffies, occ->next_update)) { in occ_update_response()
217 rc = occ_poll(occ); in occ_update_response()
218 occ->next_update = jiffies + OCC_UPDATE_FREQUENCY; in occ_update_response()
220 rc = occ->last_error; in occ_update_response()
223 mutex_unlock(&occ->lock); in occ_update_response()
233 struct occ *occ = dev_get_drvdata(dev); in occ_show_temp_1() local
234 struct occ_sensors *sensors = &occ->sensors; in occ_show_temp_1()
237 rc = occ_update_response(occ); in occ_show_temp_1()
269 struct occ *occ = dev_get_drvdata(dev); in occ_show_temp_2() local
270 struct occ_sensors *sensors = &occ->sensors; in occ_show_temp_2()
273 rc = occ_update_response(occ); in occ_show_temp_2()
320 struct occ *occ = dev_get_drvdata(dev); in occ_show_temp_10() local
321 struct occ_sensors *sensors = &occ->sensors; in occ_show_temp_10()
324 rc = occ_update_response(occ); in occ_show_temp_10()
367 struct occ *occ = dev_get_drvdata(dev); in occ_show_freq_1() local
368 struct occ_sensors *sensors = &occ->sensors; in occ_show_freq_1()
371 rc = occ_update_response(occ); in occ_show_freq_1()
397 struct occ *occ = dev_get_drvdata(dev); in occ_show_freq_2() local
398 struct occ_sensors *sensors = &occ->sensors; in occ_show_freq_2()
401 rc = occ_update_response(occ); in occ_show_freq_2()
427 struct occ *occ = dev_get_drvdata(dev); in occ_show_power_1() local
428 struct occ_sensors *sensors = &occ->sensors; in occ_show_power_1()
431 rc = occ_update_response(occ); in occ_show_power_1()
448 occ->powr_sample_time_us; in occ_show_power_1()
474 struct occ *occ = dev_get_drvdata(dev); in occ_show_power_2() local
475 struct occ_sensors *sensors = &occ->sensors; in occ_show_power_2()
478 rc = occ_update_response(occ); in occ_show_power_2()
495 occ->powr_sample_time_us; in occ_show_power_2()
513 struct occ *occ = dev_get_drvdata(dev); in occ_show_power_a0() local
514 struct occ_sensors *sensors = &occ->sensors; in occ_show_power_a0()
517 rc = occ_update_response(occ); in occ_show_power_a0()
533 occ->powr_sample_time_us; in occ_show_power_a0()
547 occ->powr_sample_time_us; in occ_show_power_a0()
561 occ->powr_sample_time_us; in occ_show_power_a0()
575 occ->powr_sample_time_us; in occ_show_power_a0()
593 struct occ *occ = dev_get_drvdata(dev); in occ_show_caps_1_2() local
594 struct occ_sensors *sensors = &occ->sensors; in occ_show_caps_1_2()
597 rc = occ_update_response(occ); in occ_show_caps_1_2()
625 if (occ->sensors.caps.version == 1) in occ_show_caps_1_2()
643 struct occ *occ = dev_get_drvdata(dev); in occ_show_caps_3() local
644 struct occ_sensors *sensors = &occ->sensors; in occ_show_caps_3()
647 rc = occ_update_response(occ); in occ_show_caps_3()
691 struct occ *occ = dev_get_drvdata(dev); in occ_store_caps_user() local
699 rc = occ_set_user_power_cap(occ, user_power_cap); in occ_store_caps_user()
711 struct occ *occ = dev_get_drvdata(dev); in occ_show_extended() local
712 struct occ_sensors *sensors = &occ->sensors; in occ_show_extended()
715 rc = occ_update_response(occ); in occ_show_extended()
776 static int occ_setup_sensor_attrs(struct occ *occ) in occ_setup_sensor_attrs() argument
779 struct device *dev = occ->bus_dev; in occ_setup_sensor_attrs()
780 struct occ_sensors *sensors = &occ->sensors; in occ_setup_sensor_attrs()
856 occ->attrs = devm_kzalloc(dev, sizeof(*occ->attrs) * num_attrs, in occ_setup_sensor_attrs()
858 if (!occ->attrs) in occ_setup_sensor_attrs()
862 occ->group.attrs = devm_kzalloc(dev, sizeof(*occ->group.attrs) * in occ_setup_sensor_attrs()
864 if (!occ->group.attrs) in occ_setup_sensor_attrs()
867 attr = occ->attrs; in occ_setup_sensor_attrs()
1074 sysfs_attr_init(&occ->attrs[i].sensor.dev_attr.attr); in occ_setup_sensor_attrs()
1075 occ->group.attrs[i] = &occ->attrs[i].sensor.dev_attr.attr; in occ_setup_sensor_attrs()
1082 static void occ_parse_poll_response(struct occ *occ) in occ_parse_poll_response() argument
1086 struct occ_sensors *sensors = &occ->sensors; in occ_parse_poll_response()
1087 struct occ_response *resp = &occ->resp; in occ_parse_poll_response()
1093 dev_info(occ->bus_dev, "OCC found, code level: %.16s\n", in occ_parse_poll_response()
1105 dev_warn(occ->bus_dev, "exceeded response buffer\n"); in occ_parse_poll_response()
1109 dev_dbg(occ->bus_dev, " %04x..%04x: %.4s (%d sensors)\n", in occ_parse_poll_response()
1125 dev_warn(occ->bus_dev, "sensor not supported %.4s\n", in occ_parse_poll_response()
1135 dev_dbg(occ->bus_dev, "Max resp size: %u+%zd=%zd\n", size, in occ_parse_poll_response()
1139 int occ_setup(struct occ *occ, const char *name) in occ_setup() argument
1143 mutex_init(&occ->lock); in occ_setup()
1144 occ->groups[0] = &occ->group; in occ_setup()
1147 rc = occ_poll(occ); in occ_setup()
1149 dev_info(occ->bus_dev, "host is not ready\n"); in occ_setup()
1152 dev_err(occ->bus_dev, in occ_setup()
1154 occ->resp.return_status, rc); in occ_setup()
1158 occ->next_update = jiffies + OCC_UPDATE_FREQUENCY; in occ_setup()
1159 occ_parse_poll_response(occ); in occ_setup()
1161 rc = occ_setup_sensor_attrs(occ); in occ_setup()
1163 dev_err(occ->bus_dev, "failed to setup sensor attrs: %d\n", in occ_setup()
1168 occ->hwmon = devm_hwmon_device_register_with_groups(occ->bus_dev, name, in occ_setup()
1169 occ, occ->groups); in occ_setup()
1170 if (IS_ERR(occ->hwmon)) { in occ_setup()
1171 rc = PTR_ERR(occ->hwmon); in occ_setup()
1172 dev_err(occ->bus_dev, "failed to register hwmon device: %d\n", in occ_setup()
1177 rc = occ_setup_sysfs(occ); in occ_setup()
1179 dev_err(occ->bus_dev, "failed to setup sysfs: %d\n", rc); in occ_setup()