Lines Matching full:resource
110 static int update_avg_interval(struct acpi_power_meter_resource *resource) in update_avg_interval() argument
115 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_GAI", in update_avg_interval()
118 acpi_evaluation_failure_warn(resource->acpi_dev->handle, "_GAI", in update_avg_interval()
123 resource->avg_interval = data; in update_avg_interval()
132 struct acpi_power_meter_resource *resource = acpi_dev->driver_data; in show_avg_interval() local
134 mutex_lock(&resource->lock); in show_avg_interval()
135 update_avg_interval(resource); in show_avg_interval()
136 mutex_unlock(&resource->lock); in show_avg_interval()
138 return sprintf(buf, "%llu\n", resource->avg_interval); in show_avg_interval()
146 struct acpi_power_meter_resource *resource = acpi_dev->driver_data; in set_avg_interval() local
158 if (temp > resource->caps.max_avg_interval || in set_avg_interval()
159 temp < resource->caps.min_avg_interval) in set_avg_interval()
163 mutex_lock(&resource->lock); in set_avg_interval()
164 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_PAI", in set_avg_interval()
167 resource->avg_interval = temp; in set_avg_interval()
168 mutex_unlock(&resource->lock); in set_avg_interval()
171 acpi_evaluation_failure_warn(resource->acpi_dev->handle, "_PAI", in set_avg_interval()
184 static int update_cap(struct acpi_power_meter_resource *resource) in update_cap() argument
189 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_GHL", in update_cap()
192 acpi_evaluation_failure_warn(resource->acpi_dev->handle, "_GHL", in update_cap()
197 resource->cap = data; in update_cap()
206 struct acpi_power_meter_resource *resource = acpi_dev->driver_data; in show_cap() local
208 mutex_lock(&resource->lock); in show_cap()
209 update_cap(resource); in show_cap()
210 mutex_unlock(&resource->lock); in show_cap()
212 return sprintf(buf, "%llu\n", resource->cap * 1000); in show_cap()
219 struct acpi_power_meter_resource *resource = acpi_dev->driver_data; in set_cap() local
232 if (temp > resource->caps.max_cap || temp < resource->caps.min_cap) in set_cap()
236 mutex_lock(&resource->lock); in set_cap()
237 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_SHL", in set_cap()
240 resource->cap = temp; in set_cap()
241 mutex_unlock(&resource->lock); in set_cap()
244 acpi_evaluation_failure_warn(resource->acpi_dev->handle, "_SHL", in set_cap()
257 static int set_acpi_trip(struct acpi_power_meter_resource *resource) in set_acpi_trip() argument
268 if (resource->trip[0] < 0 || resource->trip[1] < 0) in set_acpi_trip()
272 arg_objs[0].integer.value = resource->trip[1]; in set_acpi_trip()
273 arg_objs[1].integer.value = resource->trip[0]; in set_acpi_trip()
275 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_PTP", in set_acpi_trip()
278 acpi_evaluation_failure_warn(resource->acpi_dev->handle, "_PTP", in set_acpi_trip()
295 struct acpi_power_meter_resource *resource = acpi_dev->driver_data; in set_trip() local
305 guard(mutex)(&resource->lock); in set_trip()
307 trip_bk = resource->trip[attr->index - 7]; in set_trip()
308 resource->trip[attr->index - 7] = temp; in set_trip()
309 res = set_acpi_trip(resource); in set_trip()
311 resource->trip[attr->index - 7] = trip_bk; in set_trip()
319 static int update_meter(struct acpi_power_meter_resource *resource) in update_meter() argument
325 if (time_before(local_jiffies, resource->sensors_last_updated + in update_meter()
326 msecs_to_jiffies(resource->caps.sampling_time)) && in update_meter()
327 resource->sensors_valid) in update_meter()
330 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_PMM", in update_meter()
333 acpi_evaluation_failure_warn(resource->acpi_dev->handle, "_PMM", in update_meter()
338 resource->power = data; in update_meter()
339 resource->sensors_valid = 1; in update_meter()
340 resource->sensors_last_updated = jiffies; in update_meter()
349 struct acpi_power_meter_resource *resource = acpi_dev->driver_data; in show_power() local
351 mutex_lock(&resource->lock); in show_power()
352 update_meter(resource); in show_power()
353 mutex_unlock(&resource->lock); in show_power()
355 if (resource->power == UNKNOWN_POWER) in show_power()
358 return sprintf(buf, "%llu\n", resource->power * 1000); in show_power()
368 struct acpi_power_meter_resource *resource = acpi_dev->driver_data; in show_str() local
372 mutex_lock(&resource->lock); in show_str()
375 val = resource->model_number; in show_str()
378 val = resource->serial_number; in show_str()
381 val = resource->oem_info; in show_str()
390 mutex_unlock(&resource->lock); in show_str()
400 struct acpi_power_meter_resource *resource = acpi_dev->driver_data; in show_val() local
404 guard(mutex)(&resource->lock); in show_val()
408 val = resource->caps.min_avg_interval; in show_val()
411 val = resource->caps.max_avg_interval; in show_val()
414 val = resource->caps.min_cap * 1000; in show_val()
417 val = resource->caps.max_cap * 1000; in show_val()
420 if (resource->caps.hysteresis == UNKNOWN_HYSTERESIS) in show_val()
423 val = resource->caps.hysteresis * 1000; in show_val()
426 if (resource->caps.flags & POWER_METER_IS_BATTERY) in show_val()
432 ret = update_meter(resource); in show_val()
436 if (!(resource->caps.flags & POWER_METER_CAN_NOTIFY)) { in show_val()
437 ret = update_cap(resource); in show_val()
441 val = resource->power_alarm || resource->power > resource->cap; in show_val()
442 resource->power_alarm = resource->power > resource->cap; in show_val()
446 if (resource->trip[attr->index - 7] < 0) in show_val()
449 val = resource->trip[attr->index - 7] * 1000; in show_val()
465 struct acpi_power_meter_resource *resource = acpi_dev->driver_data; in show_accuracy() local
466 unsigned int acc = resource->caps.accuracy; in show_accuracy()
541 static void remove_domain_devices(struct acpi_power_meter_resource *resource) in remove_domain_devices() argument
545 if (!resource->num_domain_devices) in remove_domain_devices()
548 for (i = 0; i < resource->num_domain_devices; i++) { in remove_domain_devices()
549 struct acpi_device *obj = resource->domain_devices[i]; in remove_domain_devices()
554 sysfs_remove_link(resource->holders_dir, in remove_domain_devices()
559 kfree(resource->domain_devices); in remove_domain_devices()
560 kobject_put(resource->holders_dir); in remove_domain_devices()
561 resource->num_domain_devices = 0; in remove_domain_devices()
564 static int read_domain_devices(struct acpi_power_meter_resource *resource) in read_domain_devices() argument
572 status = acpi_evaluate_object(resource->acpi_dev->handle, "_PMD", NULL, in read_domain_devices()
575 acpi_evaluation_failure_warn(resource->acpi_dev->handle, "_PMD", in read_domain_devices()
583 dev_err(&resource->acpi_dev->dev, ACPI_POWER_METER_NAME in read_domain_devices()
592 resource->domain_devices = kcalloc(pss->package.count, in read_domain_devices()
595 if (!resource->domain_devices) { in read_domain_devices()
600 resource->holders_dir = kobject_create_and_add("measures", in read_domain_devices()
601 &resource->acpi_dev->dev.kobj); in read_domain_devices()
602 if (!resource->holders_dir) { in read_domain_devices()
607 resource->num_domain_devices = pss->package.count; in read_domain_devices()
619 resource->domain_devices[i] = obj; in read_domain_devices()
623 res = sysfs_create_link(resource->holders_dir, &obj->dev.kobj, in read_domain_devices()
627 resource->domain_devices[i] = NULL; in read_domain_devices()
635 kfree(resource->domain_devices); in read_domain_devices()
642 static int register_attrs(struct acpi_power_meter_resource *resource, in register_attrs() argument
645 struct device *dev = &resource->acpi_dev->dev; in register_attrs()
647 &resource->sensors[resource->num_sensors]; in register_attrs()
668 resource->num_sensors++; in register_attrs()
676 static void remove_attrs(struct acpi_power_meter_resource *resource) in remove_attrs() argument
680 for (i = 0; i < resource->num_sensors; i++) { in remove_attrs()
681 if (!resource->sensors[i].dev_attr.attr.name) in remove_attrs()
683 device_remove_file(&resource->acpi_dev->dev, in remove_attrs()
684 &resource->sensors[i].dev_attr); in remove_attrs()
687 remove_domain_devices(resource); in remove_attrs()
689 resource->num_sensors = 0; in remove_attrs()
692 static int setup_attrs(struct acpi_power_meter_resource *resource) in setup_attrs() argument
697 res = read_domain_devices(resource); in setup_attrs()
701 if (resource->caps.flags & POWER_METER_CAN_MEASURE) { in setup_attrs()
702 res = register_attrs(resource, meter_attrs); in setup_attrs()
707 if (resource->caps.flags & POWER_METER_CAN_CAP) { in setup_attrs()
709 dev_warn(&resource->acpi_dev->dev, in setup_attrs()
714 if (resource->caps.configurable_cap) in setup_attrs()
715 res = register_attrs(resource, rw_cap_attrs); in setup_attrs()
717 res = register_attrs(resource, ro_cap_attrs); in setup_attrs()
722 res = register_attrs(resource, misc_cap_attrs); in setup_attrs()
728 if (resource->caps.flags & POWER_METER_CAN_TRIP) { in setup_attrs()
729 res = register_attrs(resource, trip_attrs); in setup_attrs()
734 res = register_attrs(resource, misc_attrs); in setup_attrs()
740 remove_attrs(resource); in setup_attrs()
744 static void free_capabilities(struct acpi_power_meter_resource *resource) in free_capabilities() argument
749 str = &resource->model_number; in free_capabilities()
756 static int read_capabilities(struct acpi_power_meter_resource *resource) in read_capabilities() argument
767 status = acpi_evaluate_object(resource->acpi_dev->handle, "_PMC", NULL, in read_capabilities()
770 acpi_evaluation_failure_warn(resource->acpi_dev->handle, "_PMC", in read_capabilities()
779 dev_err(&resource->acpi_dev->dev, ACPI_POWER_METER_NAME in read_capabilities()
787 state.pointer = &resource->caps; in read_capabilities()
791 dev_err(&resource->acpi_dev->dev, ACPI_POWER_METER_NAME in read_capabilities()
798 if (resource->caps.units) { in read_capabilities()
799 dev_err(&resource->acpi_dev->dev, ACPI_POWER_METER_NAME in read_capabilities()
801 resource->caps.units); in read_capabilities()
807 str = &resource->model_number; in read_capabilities()
827 dev_info(&resource->acpi_dev->dev, "Found ACPI power meter.\n"); in read_capabilities()
830 free_capabilities(resource); in read_capabilities()
839 struct acpi_power_meter_resource *resource; in acpi_power_meter_notify() local
845 resource = acpi_driver_data(device); in acpi_power_meter_notify()
849 mutex_lock(&resource->lock); in acpi_power_meter_notify()
850 free_capabilities(resource); in acpi_power_meter_notify()
851 res = read_capabilities(resource); in acpi_power_meter_notify()
852 mutex_unlock(&resource->lock); in acpi_power_meter_notify()
856 remove_attrs(resource); in acpi_power_meter_notify()
857 setup_attrs(resource); in acpi_power_meter_notify()
863 mutex_lock(&resource->lock); in acpi_power_meter_notify()
864 res = update_cap(resource); in acpi_power_meter_notify()
867 mutex_unlock(&resource->lock); in acpi_power_meter_notify()
874 mutex_lock(&resource->lock); in acpi_power_meter_notify()
875 resource->power_alarm = true; in acpi_power_meter_notify()
876 mutex_unlock(&resource->lock); in acpi_power_meter_notify()
892 struct acpi_power_meter_resource *resource; in acpi_power_meter_add() local
897 resource = kzalloc(sizeof(*resource), GFP_KERNEL); in acpi_power_meter_add()
898 if (!resource) in acpi_power_meter_add()
901 resource->sensors_valid = 0; in acpi_power_meter_add()
902 resource->acpi_dev = device; in acpi_power_meter_add()
903 mutex_init(&resource->lock); in acpi_power_meter_add()
906 device->driver_data = resource; in acpi_power_meter_add()
924 res = read_capabilities(resource); in acpi_power_meter_add()
928 resource->trip[0] = -1; in acpi_power_meter_add()
929 resource->trip[1] = -1; in acpi_power_meter_add()
931 res = setup_attrs(resource); in acpi_power_meter_add()
935 resource->hwmon_dev = hwmon_device_register(&device->dev); in acpi_power_meter_add()
936 if (IS_ERR(resource->hwmon_dev)) { in acpi_power_meter_add()
937 res = PTR_ERR(resource->hwmon_dev); in acpi_power_meter_add()
945 remove_attrs(resource); in acpi_power_meter_add()
947 free_capabilities(resource); in acpi_power_meter_add()
949 kfree(resource); in acpi_power_meter_add()
956 struct acpi_power_meter_resource *resource; in acpi_power_meter_remove() local
961 resource = acpi_driver_data(device); in acpi_power_meter_remove()
962 hwmon_device_unregister(resource->hwmon_dev); in acpi_power_meter_remove()
964 remove_attrs(resource); in acpi_power_meter_remove()
965 free_capabilities(resource); in acpi_power_meter_remove()
967 kfree(resource); in acpi_power_meter_remove()
972 struct acpi_power_meter_resource *resource; in acpi_power_meter_resume() local
977 resource = acpi_driver_data(to_acpi_device(dev)); in acpi_power_meter_resume()
978 if (!resource) in acpi_power_meter_resume()
981 free_capabilities(resource); in acpi_power_meter_resume()
982 read_capabilities(resource); in acpi_power_meter_resume()