Lines Matching refs:drvdata

173 struct drvdata {  struct
221 static void handle_fan_config_report(struct drvdata *drvdata, void *data, int size) in handle_fan_config_report() argument
232 spin_lock(&drvdata->wq.lock); in handle_fan_config_report()
235 drvdata->fan_type[i] = report->fan_type[i]; in handle_fan_config_report()
237 drvdata->fan_config_received = true; in handle_fan_config_report()
238 wake_up_all_locked(&drvdata->wq); in handle_fan_config_report()
239 spin_unlock(&drvdata->wq.lock); in handle_fan_config_report()
242 static void handle_fan_status_report(struct drvdata *drvdata, void *data, int size) in handle_fan_status_report() argument
250 spin_lock(&drvdata->wq.lock); in handle_fan_status_report()
258 if (!drvdata->fan_config_received) { in handle_fan_status_report()
259 spin_unlock(&drvdata->wq.lock); in handle_fan_status_report()
264 if (drvdata->fan_type[i] == report->fan_type[i]) in handle_fan_status_report()
274 hid_warn_once(drvdata->hid, in handle_fan_status_report()
276 i, drvdata->fan_type[i], report->fan_type[i]); in handle_fan_status_report()
277 drvdata->fan_type[i] = report->fan_type[i]; in handle_fan_status_report()
283 drvdata->fan_rpm[i] = in handle_fan_status_report()
285 drvdata->fan_duty_percent[i] = in handle_fan_status_report()
289 drvdata->pwm_status_received = true; in handle_fan_status_report()
290 wake_up_all_locked(&drvdata->wq); in handle_fan_status_report()
295 drvdata->fan_in[i] = in handle_fan_status_report()
297 drvdata->fan_curr[i] = in handle_fan_status_report()
301 drvdata->voltage_status_received = true; in handle_fan_status_report()
302 wake_up_all_locked(&drvdata->wq); in handle_fan_status_report()
306 spin_unlock(&drvdata->wq.lock); in handle_fan_status_report()
341 struct drvdata *drvdata = dev_get_drvdata(dev); in nzxt_smart2_hwmon_read() local
347 *val = drvdata->update_interval; in nzxt_smart2_hwmon_read()
355 spin_lock_irq(&drvdata->wq.lock); in nzxt_smart2_hwmon_read()
369 res = wait_event_interruptible_locked_irq(drvdata->wq, in nzxt_smart2_hwmon_read()
370 drvdata->fan_config_received); in nzxt_smart2_hwmon_read()
374 *val = drvdata->fan_type[channel] != FAN_TYPE_NONE; in nzxt_smart2_hwmon_read()
378 res = wait_event_interruptible_locked_irq(drvdata->wq, in nzxt_smart2_hwmon_read()
379 drvdata->fan_config_received); in nzxt_smart2_hwmon_read()
383 *val = drvdata->fan_type[channel] == FAN_TYPE_PWM; in nzxt_smart2_hwmon_read()
387 res = wait_event_interruptible_locked_irq(drvdata->wq, in nzxt_smart2_hwmon_read()
388 drvdata->pwm_status_received); in nzxt_smart2_hwmon_read()
392 *val = scale_pwm_value(drvdata->fan_duty_percent[channel], in nzxt_smart2_hwmon_read()
405 res = wait_event_interruptible_locked_irq(drvdata->wq, in nzxt_smart2_hwmon_read()
406 drvdata->pwm_status_received); in nzxt_smart2_hwmon_read()
410 *val = drvdata->fan_rpm[channel]; in nzxt_smart2_hwmon_read()
416 res = wait_event_interruptible_locked_irq(drvdata->wq, in nzxt_smart2_hwmon_read()
417 drvdata->voltage_status_received); in nzxt_smart2_hwmon_read()
421 *val = drvdata->fan_in[channel]; in nzxt_smart2_hwmon_read()
427 res = wait_event_interruptible_locked_irq(drvdata->wq, in nzxt_smart2_hwmon_read()
428 drvdata->voltage_status_received); in nzxt_smart2_hwmon_read()
432 *val = drvdata->fan_curr[channel]; in nzxt_smart2_hwmon_read()
441 spin_unlock_irq(&drvdata->wq.lock); in nzxt_smart2_hwmon_read()
445 static int send_output_report(struct drvdata *drvdata, const void *data, in send_output_report() argument
450 if (data_size > sizeof(drvdata->output_buffer)) in send_output_report()
453 memcpy(drvdata->output_buffer, data, data_size); in send_output_report()
455 if (data_size < sizeof(drvdata->output_buffer)) in send_output_report()
456 memset(drvdata->output_buffer + data_size, 0, in send_output_report()
457 sizeof(drvdata->output_buffer) - data_size); in send_output_report()
459 ret = hid_hw_output_report(drvdata->hid, drvdata->output_buffer, in send_output_report()
460 sizeof(drvdata->output_buffer)); in send_output_report()
464 static int set_pwm(struct drvdata *drvdata, int channel, long val) in set_pwm() argument
475 ret = mutex_lock_interruptible(&drvdata->mutex); in set_pwm()
480 ret = send_output_report(drvdata, &report, sizeof(report)); in set_pwm()
495 spin_lock_bh(&drvdata->wq.lock); in set_pwm()
496 drvdata->fan_duty_percent[channel] = duty_percent; in set_pwm()
497 spin_unlock_bh(&drvdata->wq.lock); in set_pwm()
500 mutex_unlock(&drvdata->mutex); in set_pwm()
509 static int set_pwm_enable(struct drvdata *drvdata, int channel, long val) in set_pwm_enable() argument
514 spin_lock_irq(&drvdata->wq.lock); in set_pwm_enable()
516 res = wait_event_interruptible_locked_irq(drvdata->wq, in set_pwm_enable()
517 drvdata->fan_config_received); in set_pwm_enable()
519 spin_unlock_irq(&drvdata->wq.lock); in set_pwm_enable()
523 expected_val = drvdata->fan_type[channel] != FAN_TYPE_NONE; in set_pwm_enable()
525 spin_unlock_irq(&drvdata->wq.lock); in set_pwm_enable()
560 static int set_update_interval(struct drvdata *drvdata, long val) in set_update_interval() argument
575 ret = send_output_report(drvdata, report, sizeof(report)); in set_update_interval()
579 drvdata->update_interval = control_byte_to_update_interval(control); in set_update_interval()
583 static int init_device(struct drvdata *drvdata, long update_interval) in init_device() argument
591 ret = send_output_report(drvdata, detect_fans_report, in init_device()
596 return set_update_interval(drvdata, update_interval); in init_device()
603 struct drvdata *drvdata = dev_get_drvdata(dev); in nzxt_smart2_hwmon_write() local
610 return set_pwm_enable(drvdata, channel, val); in nzxt_smart2_hwmon_write()
613 return set_pwm(drvdata, channel, val); in nzxt_smart2_hwmon_write()
622 ret = mutex_lock_interruptible(&drvdata->mutex); in nzxt_smart2_hwmon_write()
626 ret = set_update_interval(drvdata, val); in nzxt_smart2_hwmon_write()
628 mutex_unlock(&drvdata->mutex); in nzxt_smart2_hwmon_write()
691 struct drvdata *drvdata = hid_get_drvdata(hdev); in nzxt_smart2_hid_raw_event() local
696 handle_fan_config_report(drvdata, data, size); in nzxt_smart2_hid_raw_event()
700 handle_fan_status_report(drvdata, data, size); in nzxt_smart2_hid_raw_event()
709 struct drvdata *drvdata = hid_get_drvdata(hdev); in nzxt_smart2_hid_reset_resume() local
715 spin_lock_bh(&drvdata->wq.lock); in nzxt_smart2_hid_reset_resume()
716 drvdata->fan_config_received = false; in nzxt_smart2_hid_reset_resume()
717 drvdata->pwm_status_received = false; in nzxt_smart2_hid_reset_resume()
718 drvdata->voltage_status_received = false; in nzxt_smart2_hid_reset_resume()
719 spin_unlock_bh(&drvdata->wq.lock); in nzxt_smart2_hid_reset_resume()
721 return init_device(drvdata, drvdata->update_interval); in nzxt_smart2_hid_reset_resume()
727 struct drvdata *drvdata; in nzxt_smart2_hid_probe() local
730 drvdata = devm_kzalloc(&hdev->dev, sizeof(struct drvdata), GFP_KERNEL); in nzxt_smart2_hid_probe()
731 if (!drvdata) in nzxt_smart2_hid_probe()
734 drvdata->hid = hdev; in nzxt_smart2_hid_probe()
735 hid_set_drvdata(hdev, drvdata); in nzxt_smart2_hid_probe()
737 init_waitqueue_head(&drvdata->wq); in nzxt_smart2_hid_probe()
739 mutex_init(&drvdata->mutex); in nzxt_smart2_hid_probe()
741 &drvdata->mutex); in nzxt_smart2_hid_probe()
757 init_device(drvdata, UPDATE_INTERVAL_DEFAULT_MS); in nzxt_smart2_hid_probe()
759 drvdata->hwmon = in nzxt_smart2_hid_probe()
760 hwmon_device_register_with_info(&hdev->dev, "nzxtsmart2", drvdata, in nzxt_smart2_hid_probe()
762 if (IS_ERR(drvdata->hwmon)) { in nzxt_smart2_hid_probe()
763 ret = PTR_ERR(drvdata->hwmon); in nzxt_smart2_hid_probe()
779 struct drvdata *drvdata = hid_get_drvdata(hdev); in nzxt_smart2_hid_remove() local
781 hwmon_device_unregister(drvdata->hwmon); in nzxt_smart2_hid_remove()