PM / clk: Add support for adding a specific clock from device-tree
Some drivers using the PM clocks framework need to add specific clocks from device-tree using a name by calling the functions of_clk_get_by_name() and then pm_clk_add_clk(). Rather than having drivers call both functions, add a helper function of_pm_clk_add_clk() that will call these functions so drivers can call a single function to add a specific clock from device-tree. Signed-off-by: Jon Hunter <jonathanh@nvidia.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
Родитель
29b968b2af
Коммит
498b5fdd40
|
@ -140,6 +140,38 @@ int pm_clk_add_clk(struct device *dev, struct clk *clk)
|
|||
EXPORT_SYMBOL_GPL(pm_clk_add_clk);
|
||||
|
||||
|
||||
/**
|
||||
* of_pm_clk_add_clk - Start using a device clock for power management.
|
||||
* @dev: Device whose clock is going to be used for power management.
|
||||
* @name: Name of clock that is going to be used for power management.
|
||||
*
|
||||
* Add the clock described in the 'clocks' device-tree node that matches
|
||||
* with the 'name' provided, to the list of clocks used for the power
|
||||
* management of @dev. On success, returns 0. Returns a negative error
|
||||
* code if the clock is not found or cannot be added.
|
||||
*/
|
||||
int of_pm_clk_add_clk(struct device *dev, const char *name)
|
||||
{
|
||||
struct clk *clk;
|
||||
int ret;
|
||||
|
||||
if (!dev || !dev->of_node || !name)
|
||||
return -EINVAL;
|
||||
|
||||
clk = of_clk_get_by_name(dev->of_node, name);
|
||||
if (IS_ERR(clk))
|
||||
return PTR_ERR(clk);
|
||||
|
||||
ret = pm_clk_add_clk(dev, clk);
|
||||
if (ret) {
|
||||
clk_put(clk);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(of_pm_clk_add_clk);
|
||||
|
||||
/**
|
||||
* of_pm_clk_add_clks - Start using device clock(s) for power management.
|
||||
* @dev: Device whose clock(s) is going to be used for power management.
|
||||
|
|
|
@ -42,6 +42,7 @@ extern int pm_clk_create(struct device *dev);
|
|||
extern void pm_clk_destroy(struct device *dev);
|
||||
extern int pm_clk_add(struct device *dev, const char *con_id);
|
||||
extern int pm_clk_add_clk(struct device *dev, struct clk *clk);
|
||||
extern int of_pm_clk_add_clk(struct device *dev, const char *name);
|
||||
extern int of_pm_clk_add_clks(struct device *dev);
|
||||
extern void pm_clk_remove(struct device *dev, const char *con_id);
|
||||
extern void pm_clk_remove_clk(struct device *dev, struct clk *clk);
|
||||
|
|
Загрузка…
Ссылка в новой задаче