int dpm_sysfs_add(struct device *dev) { int rc; rc = sysfs_create_group(&dev->kobj, &pm_attr_group); if (rc) return rc; if (pm_runtime_callbacks_present(dev)) { rc = sysfs_merge_group(&dev->kobj, &pm_runtime_attr_group); if (rc) goto err_out; } if (device_can_wakeup(dev)) { rc = sysfs_merge_group(&dev->kobj, &pm_wakeup_attr_group); if (rc) { if (pm_runtime_callbacks_present(dev)) sysfs_unmerge_group(&dev->kobj, &pm_runtime_attr_group); goto err_out; } } return 0; err_out: sysfs_remove_group(&dev->kobj, &pm_attr_group); return rc; }
int dpm_sysfs_add(struct device *dev) { int rc; rc = sysfs_create_group(&dev->kobj, &pm_attr_group); if (rc) return rc; if (pm_runtime_callbacks_present(dev)) { rc = sysfs_merge_group(&dev->kobj, &pm_runtime_attr_group); if (rc) goto err_out; } if (device_can_wakeup(dev)) { rc = sysfs_merge_group(&dev->kobj, &pm_wakeup_attr_group); if (rc) goto err_runtime; } if (dev->power.set_latency_tolerance) { rc = sysfs_merge_group(&dev->kobj, &pm_qos_latency_tolerance_attr_group); if (rc) goto err_wakeup; } return 0; err_wakeup: sysfs_unmerge_group(&dev->kobj, &pm_wakeup_attr_group); err_runtime: sysfs_unmerge_group(&dev->kobj, &pm_runtime_attr_group); err_out: sysfs_remove_group(&dev->kobj, &pm_attr_group); return rc; }