Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 350939
b: refs/heads/master
c: b1c0f99
h: refs/heads/master
i:
  350937: c48fcf2
  350935: 298c04c
v: v3
  • Loading branch information
Rafael J. Wysocki committed Jan 24, 2013
1 parent 46086a8 commit 80119ce
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 836aedb1414d4724b2ec68dd19810960c593720c
refs/heads/master: b1c0f99bfb89cd9b42e3119ab822a8102fa87909
12 changes: 12 additions & 0 deletions trunk/Documentation/ABI/testing/sysfs-devices-resource_in_use
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
What: /sys/devices/.../resource_in_use
Date: January 2013
Contact: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Description:
The /sys/devices/.../resource_in_use attribute is only present
for device objects representing ACPI power resources.

If present, it contains a number (0 or 1) representing the
current status of the given power resource (0 means that the
resource is not in use and therefore it has been turned off).

This attribute is read-only.
26 changes: 25 additions & 1 deletion trunk/drivers/acpi/power.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,20 @@ static DEFINE_MUTEX(power_resource_list_lock);
Power Resource Management
-------------------------------------------------------------------------- */

static inline
struct acpi_power_resource *to_power_resource(struct acpi_device *device)
{
return container_of(device, struct acpi_power_resource, device);
}

static struct acpi_power_resource *acpi_power_get_context(acpi_handle handle)
{
struct acpi_device *device;

if (acpi_bus_get_device(handle, &device))
return NULL;

return container_of(device, struct acpi_power_resource, device);
return to_power_resource(device);
}

static int acpi_power_resources_list_add(acpi_handle handle,
Expand Down Expand Up @@ -678,6 +684,21 @@ static void acpi_release_power_resource(struct device *dev)
kfree(resource);
}

static ssize_t acpi_power_in_use_show(struct device *dev,
struct device_attribute *attr,
char *buf) {
struct acpi_power_resource *resource;

resource = to_power_resource(to_acpi_device(dev));
return sprintf(buf, "%u\n", !!resource->ref_count);
}
static DEVICE_ATTR(resource_in_use, 0444, acpi_power_in_use_show, NULL);

static void acpi_power_sysfs_remove(struct acpi_device *device)
{
device_remove_file(&device->dev, &dev_attr_resource_in_use);
}

int acpi_add_power_resource(acpi_handle handle)
{
struct acpi_power_resource *resource;
Expand Down Expand Up @@ -725,6 +746,9 @@ int acpi_add_power_resource(acpi_handle handle)
if (result)
goto err;

if (!device_create_file(&device->dev, &dev_attr_resource_in_use))
device->remove = acpi_power_sysfs_remove;

mutex_lock(&power_resource_list_lock);
list_add(&resource->list_node, &acpi_power_resource_list);
mutex_unlock(&power_resource_list_lock);
Expand Down
3 changes: 3 additions & 0 deletions trunk/drivers/acpi/scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -791,6 +791,9 @@ static void acpi_device_unregister(struct acpi_device *device)

acpi_power_add_remove_device(device, false);
acpi_device_remove_files(device);
if (device->remove)
device->remove(device);

device_del(&device->dev);
/*
* Drop the reference counts of all power resources the device depends
Expand Down
1 change: 1 addition & 0 deletions trunk/include/acpi/acpi_bus.h
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,7 @@ struct acpi_device {
struct mutex physical_node_lock;
DECLARE_BITMAP(physical_node_id_bitmap, ACPI_MAX_PHYSICAL_NODE);
struct list_head power_dependent;
void (*remove)(struct acpi_device *);
};

static inline void *acpi_driver_data(struct acpi_device *d)
Expand Down

0 comments on commit 80119ce

Please sign in to comment.