diff options
| author | Viresh Kumar <viresh.kumar@linaro.org> | 2022-05-26 09:36:27 +0530 | 
|---|---|---|
| committer | Viresh Kumar <viresh.kumar@linaro.org> | 2022-07-08 11:27:48 +0530 | 
| commit | 89f03984fa2abface1ffb1fe050b7c175651ffc7 (patch) | |
| tree | 7cdfe0e39ccf7c5b9a944c050d36dc0e8d1fa13e /drivers/opp | |
| parent | b0ec09428621daee5101130c307634a390b0213b (diff) | |
OPP: Migrate set-supported-hw API to use set-config helpers
Now that we have a central API to handle all OPP table configurations,
migrate the set-supported-hw family of helpers to use the new
infrastructure.
The return type and parameter to the APIs change a bit due to this,
update the current users as well in the same commit in order to avoid
breaking builds.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Diffstat (limited to 'drivers/opp')
| -rw-r--r-- | drivers/opp/core.c | 87 | 
1 files changed, 20 insertions, 67 deletions
| diff --git a/drivers/opp/core.c b/drivers/opp/core.c index 6ff9b5b69d07..8dbdfff38973 100644 --- a/drivers/opp/core.c +++ b/drivers/opp/core.c @@ -1952,7 +1952,7 @@ free_opp:  }  /** - * dev_pm_opp_set_supported_hw() - Set supported platforms + * _opp_set_supported_hw() - Set supported platforms   * @dev: Device for which supported-hw has to be set.   * @versions: Array of hierarchy of versions to match.   * @count: Number of elements in the array. @@ -1962,84 +1962,39 @@ free_opp:   * OPPs, which are available for those versions, based on its 'opp-supported-hw'   * property.   */ -struct opp_table *dev_pm_opp_set_supported_hw(struct device *dev, -			const u32 *versions, unsigned int count) +static int _opp_set_supported_hw(struct opp_table *opp_table, +				 const u32 *versions, unsigned int count)  { -	struct opp_table *opp_table; - -	opp_table = _add_opp_table(dev, false); -	if (IS_ERR(opp_table)) -		return opp_table; - -	/* Make sure there are no concurrent readers while updating opp_table */ -	WARN_ON(!list_empty(&opp_table->opp_list)); -  	/* Another CPU that shares the OPP table has set the property ? */  	if (opp_table->supported_hw) -		return opp_table; +		return 0;  	opp_table->supported_hw = kmemdup(versions, count * sizeof(*versions),  					GFP_KERNEL); -	if (!opp_table->supported_hw) { -		dev_pm_opp_put_opp_table(opp_table); -		return ERR_PTR(-ENOMEM); -	} +	if (!opp_table->supported_hw) +		return -ENOMEM;  	opp_table->supported_hw_count = count; -	return opp_table; +	return 0;  } -EXPORT_SYMBOL_GPL(dev_pm_opp_set_supported_hw);  /** - * dev_pm_opp_put_supported_hw() - Releases resources blocked for supported hw - * @opp_table: OPP table returned by dev_pm_opp_set_supported_hw(). + * _opp_put_supported_hw() - Releases resources blocked for supported hw + * @opp_table: OPP table returned by _opp_set_supported_hw().   *   * This is required only for the V2 bindings, and is called for a matching - * dev_pm_opp_set_supported_hw(). Until this is called, the opp_table structure + * _opp_set_supported_hw(). Until this is called, the opp_table structure   * will not be freed.   */ -void dev_pm_opp_put_supported_hw(struct opp_table *opp_table) +static void _opp_put_supported_hw(struct opp_table *opp_table)  { -	if (unlikely(!opp_table)) -		return; - -	kfree(opp_table->supported_hw); -	opp_table->supported_hw = NULL; -	opp_table->supported_hw_count = 0; - -	dev_pm_opp_put_opp_table(opp_table); -} -EXPORT_SYMBOL_GPL(dev_pm_opp_put_supported_hw); - -static void devm_pm_opp_supported_hw_release(void *data) -{ -	dev_pm_opp_put_supported_hw(data); -} - -/** - * devm_pm_opp_set_supported_hw() - Set supported platforms - * @dev: Device for which supported-hw has to be set. - * @versions: Array of hierarchy of versions to match. - * @count: Number of elements in the array. - * - * This is a resource-managed variant of dev_pm_opp_set_supported_hw(). - * - * Return: 0 on success and errorno otherwise. - */ -int devm_pm_opp_set_supported_hw(struct device *dev, const u32 *versions, -				 unsigned int count) -{ -	struct opp_table *opp_table; - -	opp_table = dev_pm_opp_set_supported_hw(dev, versions, count); -	if (IS_ERR(opp_table)) -		return PTR_ERR(opp_table); - -	return devm_add_action_or_reset(dev, devm_pm_opp_supported_hw_release, -					opp_table); +	if (opp_table->supported_hw) { +		kfree(opp_table->supported_hw); +		opp_table->supported_hw = NULL; +		opp_table->supported_hw_count = 0; +	}  } -EXPORT_SYMBOL_GPL(devm_pm_opp_set_supported_hw);  /**   * dev_pm_opp_set_prop_name() - Set prop-extn name @@ -2583,7 +2538,7 @@ static void _opp_clear_config(struct opp_config_data *data)  	if (data->flags & OPP_CONFIG_REGULATOR)  		_opp_put_regulators(data->opp_table);  	if (data->flags & OPP_CONFIG_SUPPORTED_HW) -		dev_pm_opp_put_supported_hw(data->opp_table); +		_opp_put_supported_hw(data->opp_table);  	if (data->flags & OPP_CONFIG_REGULATOR_HELPER)  		dev_pm_opp_unregister_set_opp_helper(data->opp_table);  	if (data->flags & OPP_CONFIG_PROP_NAME) @@ -2694,12 +2649,10 @@ int dev_pm_opp_set_config(struct device *dev, struct dev_pm_opp_config *config)  	/* Configure supported hardware */  	if (config->supported_hw) { -		err = dev_pm_opp_set_supported_hw(dev, config->supported_hw, -						  config->supported_hw_count); -		if (IS_ERR(err)) { -			ret = PTR_ERR(err); +		ret = _opp_set_supported_hw(opp_table, config->supported_hw, +					    config->supported_hw_count); +		if (ret)  			goto err; -		}  		data->flags |= OPP_CONFIG_SUPPORTED_HW;  	} | 
