|
@@ -30,23 +30,6 @@ LIST_HEAD(dpm_off_irq);
|
|
|
DECLARE_MUTEX(dpm_sem);
|
|
|
DECLARE_MUTEX(dpm_list_sem);
|
|
|
|
|
|
-/*
|
|
|
- * PM Reference Counting.
|
|
|
- */
|
|
|
-
|
|
|
-static inline void device_pm_hold(struct device * dev)
|
|
|
-{
|
|
|
- if (dev)
|
|
|
- atomic_inc(&dev->power.pm_users);
|
|
|
-}
|
|
|
-
|
|
|
-static inline void device_pm_release(struct device * dev)
|
|
|
-{
|
|
|
- if (dev)
|
|
|
- atomic_dec(&dev->power.pm_users);
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
/**
|
|
|
* device_pm_set_parent - Specify power dependency.
|
|
|
* @dev: Device who needs power.
|
|
@@ -62,10 +45,8 @@ static inline void device_pm_release(struct device * dev)
|
|
|
|
|
|
void device_pm_set_parent(struct device * dev, struct device * parent)
|
|
|
{
|
|
|
- struct device * old_parent = dev->power.pm_parent;
|
|
|
- device_pm_release(old_parent);
|
|
|
- dev->power.pm_parent = parent;
|
|
|
- device_pm_hold(parent);
|
|
|
+ put_device(dev->power.pm_parent);
|
|
|
+ dev->power.pm_parent = get_device(parent);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(device_pm_set_parent);
|
|
|
|
|
@@ -75,7 +56,6 @@ int device_pm_add(struct device * dev)
|
|
|
|
|
|
pr_debug("PM: Adding info for %s:%s\n",
|
|
|
dev->bus ? dev->bus->name : "No Bus", dev->kobj.name);
|
|
|
- atomic_set(&dev->power.pm_users, 0);
|
|
|
down(&dpm_list_sem);
|
|
|
list_add_tail(&dev->power.entry, &dpm_active);
|
|
|
device_pm_set_parent(dev, dev->parent);
|
|
@@ -91,7 +71,7 @@ void device_pm_remove(struct device * dev)
|
|
|
dev->bus ? dev->bus->name : "No Bus", dev->kobj.name);
|
|
|
down(&dpm_list_sem);
|
|
|
dpm_sysfs_remove(dev);
|
|
|
- device_pm_release(dev->power.pm_parent);
|
|
|
+ put_device(dev->power.pm_parent);
|
|
|
list_del_init(&dev->power.entry);
|
|
|
up(&dpm_list_sem);
|
|
|
}
|