Lines Matching full:resource

99 static int update_avg_interval(struct acpi_power_meter_resource *resource)  in update_avg_interval()  argument
104 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_GAI", in update_avg_interval()
107 acpi_evaluation_failure_warn(resource->acpi_dev->handle, "_GAI", in update_avg_interval()
112 resource->avg_interval = data; in update_avg_interval()
117 static int update_cap(struct acpi_power_meter_resource *resource) in update_cap() argument
122 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_GHL", in update_cap()
125 acpi_evaluation_failure_warn(resource->acpi_dev->handle, "_GHL", in update_cap()
130 resource->cap = data; in update_cap()
135 static int set_acpi_trip(struct acpi_power_meter_resource *resource) in set_acpi_trip() argument
146 if (resource->trip[0] < 0 || resource->trip[1] < 0) in set_acpi_trip()
150 arg_objs[0].integer.value = resource->trip[1]; in set_acpi_trip()
151 arg_objs[1].integer.value = resource->trip[0]; in set_acpi_trip()
153 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_PTP", in set_acpi_trip()
156 acpi_evaluation_failure_warn(resource->acpi_dev->handle, "_PTP", in set_acpi_trip()
169 static int update_meter(struct acpi_power_meter_resource *resource) in update_meter() argument
175 if (time_before(local_jiffies, resource->sensors_last_updated + in update_meter()
176 msecs_to_jiffies(resource->caps.sampling_time)) && in update_meter()
177 resource->sensors_valid) in update_meter()
180 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_PMM", in update_meter()
183 acpi_evaluation_failure_warn(resource->acpi_dev->handle, "_PMM", in update_meter()
188 resource->power = data; in update_meter()
189 resource->sensors_valid = 1; in update_meter()
190 resource->sensors_last_updated = jiffies; in update_meter()
195 static void remove_domain_devices(struct acpi_power_meter_resource *resource) in remove_domain_devices() argument
199 if (!resource->num_domain_devices) in remove_domain_devices()
202 for (i = 0; i < resource->num_domain_devices; i++) { in remove_domain_devices()
203 struct acpi_device *obj = resource->domain_devices[i]; in remove_domain_devices()
208 sysfs_remove_link(resource->holders_dir, in remove_domain_devices()
213 kfree(resource->domain_devices); in remove_domain_devices()
214 kobject_put(resource->holders_dir); in remove_domain_devices()
215 resource->num_domain_devices = 0; in remove_domain_devices()
218 static int read_domain_devices(struct acpi_power_meter_resource *resource) in read_domain_devices() argument
226 status = acpi_evaluate_object(resource->acpi_dev->handle, "_PMD", NULL, in read_domain_devices()
229 acpi_evaluation_failure_warn(resource->acpi_dev->handle, "_PMD", in read_domain_devices()
237 dev_err(&resource->acpi_dev->dev, ACPI_POWER_METER_NAME in read_domain_devices()
246 resource->domain_devices = kcalloc(pss->package.count, in read_domain_devices()
249 if (!resource->domain_devices) { in read_domain_devices()
254 resource->holders_dir = kobject_create_and_add("measures", in read_domain_devices()
255 &resource->acpi_dev->dev.kobj); in read_domain_devices()
256 if (!resource->holders_dir) { in read_domain_devices()
261 resource->num_domain_devices = pss->package.count; in read_domain_devices()
273 resource->domain_devices[i] = obj; in read_domain_devices()
277 res = sysfs_create_link(resource->holders_dir, &obj->dev.kobj, in read_domain_devices()
281 resource->domain_devices[i] = NULL; in read_domain_devices()
289 kfree(resource->domain_devices); in read_domain_devices()
295 static int set_trip(struct acpi_power_meter_resource *resource, u16 trip_idx, in set_trip() argument
302 trip_bk = resource->trip[trip_idx]; in set_trip()
304 resource->trip[trip_idx] = trip; in set_trip()
305 ret = set_acpi_trip(resource); in set_trip()
307 dev_err(&resource->acpi_dev->dev, "set %s failed.\n", in set_trip()
310 resource->trip[trip_idx] = trip_bk; in set_trip()
316 static int set_cap(struct acpi_power_meter_resource *resource, in set_cap() argument
325 if (cap > resource->caps.max_cap || cap < resource->caps.min_cap) in set_cap()
329 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_SHL", in set_cap()
332 acpi_evaluation_failure_warn(resource->acpi_dev->handle, "_SHL", in set_cap()
336 resource->cap = cap; in set_cap()
345 static int set_avg_interval(struct acpi_power_meter_resource *resource, in set_avg_interval() argument
353 if (val > resource->caps.max_avg_interval || in set_avg_interval()
354 val < resource->caps.min_avg_interval) in set_avg_interval()
358 status = acpi_evaluate_integer(resource->acpi_dev->handle, "_PAI", in set_avg_interval()
361 acpi_evaluation_failure_warn(resource->acpi_dev->handle, "_PAI", in set_avg_interval()
365 resource->avg_interval = val; in set_avg_interval()
374 static int get_power_alarm_state(struct acpi_power_meter_resource *resource, in get_power_alarm_state() argument
379 ret = update_meter(resource); in get_power_alarm_state()
384 if (!(resource->caps.flags & POWER_METER_CAN_NOTIFY)) { in get_power_alarm_state()
385 ret = update_cap(resource); in get_power_alarm_state()
388 resource->power_alarm = resource->power > resource->cap; in get_power_alarm_state()
389 *val = resource->power_alarm; in get_power_alarm_state()
391 *val = resource->power_alarm || resource->power > resource->cap; in get_power_alarm_state()
392 resource->power_alarm = resource->power > resource->cap; in get_power_alarm_state()
723 static void free_capabilities(struct acpi_power_meter_resource *resource) in free_capabilities() argument
728 str = &resource->model_number; in free_capabilities()
735 static int read_capabilities(struct acpi_power_meter_resource *resource) in read_capabilities() argument
746 status = acpi_evaluate_object(resource->acpi_dev->handle, "_PMC", NULL, in read_capabilities()
749 acpi_evaluation_failure_warn(resource->acpi_dev->handle, "_PMC", in read_capabilities()
758 dev_err(&resource->acpi_dev->dev, ACPI_POWER_METER_NAME in read_capabilities()
766 state.pointer = &resource->caps; in read_capabilities()
770 dev_err(&resource->acpi_dev->dev, ACPI_POWER_METER_NAME in read_capabilities()
777 if (resource->caps.units) { in read_capabilities()
778 dev_err(&resource->acpi_dev->dev, ACPI_POWER_METER_NAME in read_capabilities()
780 resource->caps.units); in read_capabilities()
786 str = &resource->model_number; in read_capabilities()
806 dev_info(&resource->acpi_dev->dev, "Found ACPI power meter.\n"); in read_capabilities()
809 free_capabilities(resource); in read_capabilities()
818 struct acpi_power_meter_resource *resource; in acpi_power_meter_notify() local
824 resource = acpi_driver_data(device); in acpi_power_meter_notify()
828 mutex_lock(&resource->lock); in acpi_power_meter_notify()
829 free_capabilities(resource); in acpi_power_meter_notify()
830 remove_domain_devices(resource); in acpi_power_meter_notify()
831 hwmon_device_unregister(resource->hwmon_dev); in acpi_power_meter_notify()
832 res = read_capabilities(resource); in acpi_power_meter_notify()
835 res = read_domain_devices(resource); in acpi_power_meter_notify()
838 resource->hwmon_dev = in acpi_power_meter_notify()
841 resource, in acpi_power_meter_notify()
844 if (IS_ERR(resource->hwmon_dev)) in acpi_power_meter_notify()
846 mutex_unlock(&resource->lock); in acpi_power_meter_notify()
852 mutex_lock(&resource->lock); in acpi_power_meter_notify()
853 res = update_cap(resource); in acpi_power_meter_notify()
856 mutex_unlock(&resource->lock); in acpi_power_meter_notify()
863 mutex_lock(&resource->lock); in acpi_power_meter_notify()
864 resource->power_alarm = true; in acpi_power_meter_notify()
865 mutex_unlock(&resource->lock); in acpi_power_meter_notify()
881 struct acpi_power_meter_resource *resource; in acpi_power_meter_add() local
886 resource = kzalloc(sizeof(*resource), GFP_KERNEL); in acpi_power_meter_add()
887 if (!resource) in acpi_power_meter_add()
890 resource->sensors_valid = 0; in acpi_power_meter_add()
891 resource->acpi_dev = device; in acpi_power_meter_add()
892 mutex_init(&resource->lock); in acpi_power_meter_add()
895 device->driver_data = resource; in acpi_power_meter_add()
913 res = read_capabilities(resource); in acpi_power_meter_add()
917 resource->trip[0] = -1; in acpi_power_meter_add()
918 resource->trip[1] = -1; in acpi_power_meter_add()
921 res = read_domain_devices(resource); in acpi_power_meter_add()
925 resource->hwmon_dev = in acpi_power_meter_add()
927 ACPI_POWER_METER_NAME, resource, in acpi_power_meter_add()
930 if (IS_ERR(resource->hwmon_dev)) { in acpi_power_meter_add()
931 res = PTR_ERR(resource->hwmon_dev); in acpi_power_meter_add()
939 remove_domain_devices(resource); in acpi_power_meter_add()
941 free_capabilities(resource); in acpi_power_meter_add()
943 kfree(resource); in acpi_power_meter_add()
950 struct acpi_power_meter_resource *resource; in acpi_power_meter_remove() local
955 resource = acpi_driver_data(device); in acpi_power_meter_remove()
956 hwmon_device_unregister(resource->hwmon_dev); in acpi_power_meter_remove()
958 remove_domain_devices(resource); in acpi_power_meter_remove()
959 free_capabilities(resource); in acpi_power_meter_remove()
961 kfree(resource); in acpi_power_meter_remove()
966 struct acpi_power_meter_resource *resource; in acpi_power_meter_resume() local
971 resource = acpi_driver_data(to_acpi_device(dev)); in acpi_power_meter_resume()
972 if (!resource) in acpi_power_meter_resume()
975 free_capabilities(resource); in acpi_power_meter_resume()
976 read_capabilities(resource); in acpi_power_meter_resume()