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

Commit b6160e26 authored by Viresh Kumar's avatar Viresh Kumar Committed by Rafael J. Wysocki
Browse files

PM / OPP: Split out part of _add_opp_table() and _remove_opp_table()



Split out parts of _add_opp_table() and _remove_opp_table() into
separate routines. This improves readability as well.

Should result in no functional changes.

Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: default avatarStephen Boyd <sboyd@codeaurora.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent dc2c9ad5
Loading
Loading
Loading
Loading
+44 −32
Original line number Diff line number Diff line
@@ -819,26 +819,12 @@ struct opp_device *_add_opp_dev(const struct device *dev,
	return opp_dev;
}

/**
 * _add_opp_table() - Find OPP table or allocate a new one
 * @dev:	device for which we do this operation
 *
 * It tries to find an existing table first, if it couldn't find one, it
 * allocates a new OPP table and returns that.
 *
 * Return: valid opp_table pointer if success, else NULL.
 */
struct opp_table *_add_opp_table(struct device *dev)
static struct opp_table *_allocate_opp_table(struct device *dev)
{
	struct opp_table *opp_table;
	struct opp_device *opp_dev;
	int ret;

	/* Check for existing table for 'dev' first */
	opp_table = _find_opp_table(dev);
	if (!IS_ERR(opp_table))
		return opp_table;

	/*
	 * Allocate a new OPP table. In the infrequent case where a new
	 * device is needed to be added, we pay this penalty.
@@ -874,6 +860,27 @@ struct opp_table *_add_opp_table(struct device *dev)
	return opp_table;
}

/**
 * _add_opp_table() - Find OPP table or allocate a new one
 * @dev:	device for which we do this operation
 *
 * It tries to find an existing table first, if it couldn't find one, it
 * allocates a new OPP table and returns that.
 *
 * Return: valid opp_table pointer if success, else NULL.
 */
struct opp_table *_add_opp_table(struct device *dev)
{
	struct opp_table *opp_table;

	/* Check for existing table for 'dev' first */
	opp_table = _find_opp_table(dev);
	if (!IS_ERR(opp_table))
		return opp_table;

	return _allocate_opp_table(dev);
}

/**
 * _kfree_device_rcu() - Free opp_table RCU handler
 * @head:	RCU head
@@ -886,6 +893,27 @@ static void _kfree_device_rcu(struct rcu_head *head)
	kfree_rcu(opp_table, rcu_head);
}

static void _free_opp_table(struct opp_table *opp_table)
{
	struct opp_device *opp_dev;

	/* Release clk */
	if (!IS_ERR(opp_table->clk))
		clk_put(opp_table->clk);

	opp_dev = list_first_entry(&opp_table->dev_list, struct opp_device,
				   node);

	_remove_opp_dev(opp_dev, opp_table);

	/* dev_list must be empty now */
	WARN_ON(!list_empty(&opp_table->dev_list));

	list_del_rcu(&opp_table->node);
	call_srcu(&opp_table->srcu_head.srcu, &opp_table->rcu_head,
		  _kfree_device_rcu);
}

/**
 * _remove_opp_table() - Removes a OPP table
 * @opp_table: OPP table to be removed.
@@ -894,8 +922,6 @@ static void _kfree_device_rcu(struct rcu_head *head)
 */
static void _remove_opp_table(struct opp_table *opp_table)
{
	struct opp_device *opp_dev;

	if (!list_empty(&opp_table->opp_list))
		return;

@@ -911,21 +937,7 @@ static void _remove_opp_table(struct opp_table *opp_table)
	if (opp_table->set_opp)
		return;

	/* Release clk */
	if (!IS_ERR(opp_table->clk))
		clk_put(opp_table->clk);

	opp_dev = list_first_entry(&opp_table->dev_list, struct opp_device,
				   node);

	_remove_opp_dev(opp_dev, opp_table);

	/* dev_list must be empty now */
	WARN_ON(!list_empty(&opp_table->dev_list));

	list_del_rcu(&opp_table->node);
	call_srcu(&opp_table->srcu_head.srcu, &opp_table->rcu_head,
		  _kfree_device_rcu);
	_free_opp_table(opp_table);
}

void _opp_free(struct dev_pm_opp *opp)