int dpm_sysfs_change_owner(struct device *dev, kuid_t kuid, kgid_t kgid)
{
	int rc;

	if (device_pm_not_required(dev))
		return 0;

	rc = sysfs_group_change_owner(&dev->kobj, &pm_attr_group, kuid, kgid);
	if (rc)
		return rc;

	if (!pm_runtime_has_no_callbacks(dev)) {
		rc = sysfs_group_change_owner(
			&dev->kobj, &pm_runtime_attr_group, kuid, kgid);
		if (rc)
			return rc;
	}

	if (device_can_wakeup(dev)) {
		rc = sysfs_group_change_owner(&dev->kobj, &pm_wakeup_attr_group,
					      kuid, kgid);
		if (rc)
			return rc;

		rc = dpm_sysfs_wakeup_change_owner(dev, kuid, kgid);
		if (rc)
			return rc;
	}

	if (dev->power.set_latency_tolerance) {
		rc = sysfs_group_change_owner(
			&dev->kobj, &pm_qos_latency_tolerance_attr_group, kuid,
			kgid);
		if (rc)
			return rc;
	}
	return 0;
}
int dpm_sysfs_change_owner(struct device *dev, kuid_t kuid, kgid_t kgid)
{
	int rc;

	if (device_pm_not_required(dev))
		return 0;

	rc = sysfs_group_change_owner(&dev->kobj, &pm_attr_group, kuid, kgid);
	if (rc)
		return rc;

	if (!pm_runtime_has_no_callbacks(dev)) {
		rc = sysfs_group_change_owner(
			&dev->kobj, &pm_runtime_attr_group, kuid, kgid);
		if (rc)
			return rc;
	}

	if (device_can_wakeup(dev)) {
		rc = sysfs_group_change_owner(&dev->kobj, &pm_wakeup_attr_group,
					      kuid, kgid);
		if (rc)
			return rc;

		rc = dpm_sysfs_wakeup_change_owner(dev, kuid, kgid);
		if (rc)
			return rc;
	}

	if (dev->power.set_latency_tolerance) {
		rc = sysfs_group_change_owner(
			&dev->kobj, &pm_qos_latency_tolerance_attr_group, kuid,
			kgid);
		if (rc)
			return rc;
	}
	return 0;
}