Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8d7f4c9d authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "regulator: core: put debugfs consumer handle when unregistering a regulator"

parents 158728a3 de1cb946
Loading
Loading
Loading
Loading
+20 −8
Original line number Diff line number Diff line
@@ -3944,6 +3944,14 @@ static const struct file_operations reg_consumers_fops = {
	.release	= single_release,
};

static void rdev_deinit_debugfs(struct regulator_dev *rdev)
{
	if (!IS_ERR_OR_NULL(rdev)) {
		debugfs_remove_recursive(rdev->debugfs);
		regulator_put(rdev->debug_consumer);
	}
}

static void rdev_init_debugfs(struct regulator_dev *rdev)
{
	struct dentry *err_ptr = NULL;
@@ -3978,6 +3986,7 @@ static void rdev_init_debugfs(struct regulator_dev *rdev)
		pr_err("Error-Bad Function Input\n");
		goto error;
	}
	rdev->debug_consumer = reg;

	rdev->open_offset = 1;
	reg_ops = rdev->desc->ops;
@@ -3988,7 +3997,6 @@ static void rdev_init_debugfs(struct regulator_dev *rdev)
						reg, &reg_enable_fops);
	if (IS_ERR(err_ptr)) {
		pr_err("Error-Could not create enable file\n");
		debugfs_remove_recursive(rdev->debugfs);
		goto error;
	}

@@ -4003,7 +4011,6 @@ static void rdev_init_debugfs(struct regulator_dev *rdev)
					      &reg_bypass_enable_fops);
	if (IS_ERR(err_ptr)) {
		pr_err("Error-Could not create bypass enable file\n");
		debugfs_remove_recursive(rdev->debugfs);
		goto error;
	}

@@ -4018,7 +4025,6 @@ static void rdev_init_debugfs(struct regulator_dev *rdev)
					rdev->debugfs, reg, &reg_fdisable_fops);
	if (IS_ERR(err_ptr)) {
		pr_err("Error-Could not create force_disable file\n");
		debugfs_remove_recursive(rdev->debugfs);
		goto error;
	}

@@ -4033,7 +4039,6 @@ static void rdev_init_debugfs(struct regulator_dev *rdev)
						reg, &reg_volt_fops);
	if (IS_ERR(err_ptr)) {
		pr_err("Error-Could not create voltage file\n");
		debugfs_remove_recursive(rdev->debugfs);
		goto error;
	}

@@ -4048,7 +4053,6 @@ static void rdev_init_debugfs(struct regulator_dev *rdev)
						reg, &reg_mode_fops);
	if (IS_ERR(err_ptr)) {
		pr_err("Error-Could not create mode file\n");
		debugfs_remove_recursive(rdev->debugfs);
		goto error;
	}

@@ -4063,18 +4067,26 @@ static void rdev_init_debugfs(struct regulator_dev *rdev)
				rdev->debugfs, reg, &reg_optimum_mode_fops);
	if (IS_ERR(err_ptr)) {
		pr_err("Error-Could not create optimum_mode file\n");
		debugfs_remove_recursive(rdev->debugfs);
		goto error;
	}

	return;

error:
	rdev_deinit_debugfs(rdev);
	return;
}

#else

static inline void rdev_deinit_debugfs(struct regulator_dev *rdev)
{
}

static inline void rdev_init_debugfs(struct regulator_dev *rdev)
{
	return;
}

#endif

/**
@@ -4290,8 +4302,8 @@ void regulator_unregister(struct regulator_dev *rdev)
		regulator_put(rdev->supply);
	}
	regulator_proxy_consumer_unregister(rdev->proxy_consumer);
	rdev_deinit_debugfs(rdev);
	mutex_lock(&regulator_list_mutex);
	debugfs_remove_recursive(rdev->debugfs);
	flush_work(&rdev->disable_work.work);
	WARN_ON(rdev->open_count);
	unset_regulator_supplies(rdev);
+1 −0
Original line number Diff line number Diff line
@@ -368,6 +368,7 @@ struct regulator_dev {
	/* time when this regulator was disabled last time */
	unsigned long last_off_jiffy;
	struct proxy_consumer *proxy_consumer;
	struct regulator *debug_consumer;
};

struct regulator_dev *