Lines Matching refs:resource

110 static int update_avg_interval(struct acpi_power_meter_resource *resource)
115 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_GAI",
122 resource->avg_interval = data;
131 struct acpi_power_meter_resource *resource = acpi_dev->driver_data;
133 mutex_lock(&resource->lock);
134 update_avg_interval(resource);
135 mutex_unlock(&resource->lock);
137 return sprintf(buf, "%llu\n", resource->avg_interval);
145 struct acpi_power_meter_resource *resource = acpi_dev->driver_data;
157 if (temp > resource->caps.max_avg_interval ||
158 temp < resource->caps.min_avg_interval)
162 mutex_lock(&resource->lock);
163 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_PAI",
166 resource->avg_interval = temp;
167 mutex_unlock(&resource->lock);
182 static int update_cap(struct acpi_power_meter_resource *resource)
187 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_GHL",
194 resource->cap = data;
203 struct acpi_power_meter_resource *resource = acpi_dev->driver_data;
205 mutex_lock(&resource->lock);
206 update_cap(resource);
207 mutex_unlock(&resource->lock);
209 return sprintf(buf, "%llu\n", resource->cap * 1000);
216 struct acpi_power_meter_resource *resource = acpi_dev->driver_data;
229 if (temp > resource->caps.max_cap || temp < resource->caps.min_cap)
233 mutex_lock(&resource->lock);
234 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_SHL",
237 resource->cap = temp;
238 mutex_unlock(&resource->lock);
253 static int set_acpi_trip(struct acpi_power_meter_resource *resource)
264 if (resource->trip[0] < 0 || resource->trip[1] < 0)
268 arg_objs[0].integer.value = resource->trip[1];
269 arg_objs[1].integer.value = resource->trip[0];
271 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_PTP",
290 struct acpi_power_meter_resource *resource = acpi_dev->driver_data;
300 mutex_lock(&resource->lock);
301 resource->trip[attr->index - 7] = temp;
302 res = set_acpi_trip(resource);
303 mutex_unlock(&resource->lock);
312 static int update_meter(struct acpi_power_meter_resource *resource)
318 if (time_before(local_jiffies, resource->sensors_last_updated +
319 msecs_to_jiffies(resource->caps.sampling_time)) &&
320 resource->sensors_valid)
323 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_PMM",
330 resource->power = data;
331 resource->sensors_valid = 1;
332 resource->sensors_last_updated = jiffies;
341 struct acpi_power_meter_resource *resource = acpi_dev->driver_data;
343 mutex_lock(&resource->lock);
344 update_meter(resource);
345 mutex_unlock(&resource->lock);
347 if (resource->power == UNKNOWN_POWER)
350 return sprintf(buf, "%llu\n", resource->power * 1000);
360 struct acpi_power_meter_resource *resource = acpi_dev->driver_data;
364 mutex_lock(&resource->lock);
367 val = resource->model_number;
370 val = resource->serial_number;
373 val = resource->oem_info;
382 mutex_unlock(&resource->lock);
392 struct acpi_power_meter_resource *resource = acpi_dev->driver_data;
397 val = resource->caps.min_avg_interval;
400 val = resource->caps.max_avg_interval;
403 val = resource->caps.min_cap * 1000;
406 val = resource->caps.max_cap * 1000;
409 if (resource->caps.hysteresis == UNKNOWN_HYSTERESIS)
412 val = resource->caps.hysteresis * 1000;
415 if (resource->caps.flags & POWER_METER_IS_BATTERY)
421 if (resource->power > resource->cap)
428 if (resource->trip[attr->index - 7] < 0)
431 val = resource->trip[attr->index - 7] * 1000;
447 struct acpi_power_meter_resource *resource = acpi_dev->driver_data;
448 unsigned int acc = resource->caps.accuracy;
523 static void remove_domain_devices(struct acpi_power_meter_resource *resource)
527 if (!resource->num_domain_devices)
530 for (i = 0; i < resource->num_domain_devices; i++) {
531 struct acpi_device *obj = resource->domain_devices[i];
535 sysfs_remove_link(resource->holders_dir,
540 kfree(resource->domain_devices);
541 kobject_put(resource->holders_dir);
542 resource->num_domain_devices = 0;
545 static int read_domain_devices(struct acpi_power_meter_resource *resource)
553 status = acpi_evaluate_object(resource->acpi_dev->handle, "_PMD", NULL,
563 dev_err(&resource->acpi_dev->dev, ACPI_POWER_METER_NAME
572 resource->domain_devices = kcalloc(pss->package.count,
575 if (!resource->domain_devices) {
580 resource->holders_dir = kobject_create_and_add("measures",
581 &resource->acpi_dev->dev.kobj);
582 if (!resource->holders_dir) {
587 resource->num_domain_devices = pss->package.count;
598 resource->domain_devices[i] = NULL;
600 &resource->domain_devices[i]))
603 obj = resource->domain_devices[i];
606 res = sysfs_create_link(resource->holders_dir, &obj->dev.kobj,
610 resource->domain_devices[i] = NULL;
618 kfree(resource->domain_devices);
625 static int register_attrs(struct acpi_power_meter_resource *resource,
628 struct device *dev = &resource->acpi_dev->dev;
630 &resource->sensors[resource->num_sensors];
651 resource->num_sensors++;
659 static void remove_attrs(struct acpi_power_meter_resource *resource)
663 for (i = 0; i < resource->num_sensors; i++) {
664 if (!resource->sensors[i].dev_attr.attr.name)
666 device_remove_file(&resource->acpi_dev->dev,
667 &resource->sensors[i].dev_attr);
670 remove_domain_devices(resource);
672 resource->num_sensors = 0;
675 static int setup_attrs(struct acpi_power_meter_resource *resource)
679 res = read_domain_devices(resource);
683 if (resource->caps.flags & POWER_METER_CAN_MEASURE) {
684 res = register_attrs(resource, meter_attrs);
689 if (resource->caps.flags & POWER_METER_CAN_CAP) {
691 dev_warn(&resource->acpi_dev->dev,
696 if (resource->caps.configurable_cap)
697 res = register_attrs(resource, rw_cap_attrs);
699 res = register_attrs(resource, ro_cap_attrs);
704 res = register_attrs(resource, misc_cap_attrs);
710 if (resource->caps.flags & POWER_METER_CAN_TRIP) {
711 res = register_attrs(resource, trip_attrs);
716 res = register_attrs(resource, misc_attrs);
722 remove_attrs(resource);
726 static void free_capabilities(struct acpi_power_meter_resource *resource)
731 str = &resource->model_number;
736 static int read_capabilities(struct acpi_power_meter_resource *resource)
747 status = acpi_evaluate_object(resource->acpi_dev->handle, "_PMC", NULL,
758 dev_err(&resource->acpi_dev->dev, ACPI_POWER_METER_NAME
766 state.pointer = &resource->caps;
775 if (resource->caps.units) {
776 dev_err(&resource->acpi_dev->dev, ACPI_POWER_METER_NAME
778 resource->caps.units);
784 str = &resource->model_number;
805 dev_info(&resource->acpi_dev->dev, "Found ACPI power meter.\n");
808 str = &resource->model_number;
819 struct acpi_power_meter_resource *resource;
825 resource = acpi_driver_data(device);
829 mutex_lock(&resource->lock);
830 free_capabilities(resource);
831 res = read_capabilities(resource);
832 mutex_unlock(&resource->lock);
836 remove_attrs(resource);
837 setup_attrs(resource);
864 struct acpi_power_meter_resource *resource;
869 resource = kzalloc(sizeof(struct acpi_power_meter_resource),
871 if (!resource)
874 resource->sensors_valid = 0;
875 resource->acpi_dev = device;
876 mutex_init(&resource->lock);
879 device->driver_data = resource;
881 free_capabilities(resource);
882 res = read_capabilities(resource);
886 resource->trip[0] = resource->trip[1] = -1;
888 res = setup_attrs(resource);
892 resource->hwmon_dev = hwmon_device_register(&device->dev);
893 if (IS_ERR(resource->hwmon_dev)) {
894 res = PTR_ERR(resource->hwmon_dev);
902 remove_attrs(resource);
904 free_capabilities(resource);
906 kfree(resource);
913 struct acpi_power_meter_resource *resource;
918 resource = acpi_driver_data(device);
919 hwmon_device_unregister(resource->hwmon_dev);
921 remove_attrs(resource);
922 free_capabilities(resource);
924 kfree(resource);
932 struct acpi_power_meter_resource *resource;
937 resource = acpi_driver_data(to_acpi_device(dev));
938 if (!resource)
941 free_capabilities(resource);
942 read_capabilities(resource);