mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-30 16:53:20 -04:00
clk: Add devm_clk_bulk_get_enable()
devm_clk_bulk_get_optional_enable() gets, prepares and enables a set of clocks with device-managed cleanup, but treats every clock as optional: a missing clock is silently returned as NULL instead of failing. Consumers that need a fixed set of mandatory clocks enabled for the lifetime of the device currently have to open-code devm_clk_bulk_get() followed by clk_bulk_prepare_enable(), which loses the managed disable on unbind, or fall back to per-clock devm_clk_get_enabled() calls. Add devm_clk_bulk_get_enable() as the non-optional counterpart. The underlying __devm_clk_bulk_get_enable() helper already supports the required (optional = false) path, so only export a thin wrapper for it. Signed-off-by: Suraj Gupta <suraj.gupta2@amd.com> Reviewed-by: Brian Masney <bmasney@redhat.com> Signed-off-by: Brian Masney <bmasney@redhat.com>
This commit is contained in:
committed by
Brian Masney
parent
6712f48eb3
commit
b698927acc
@@ -248,6 +248,7 @@ CLOCK
|
||||
devm_clk_put()
|
||||
devm_clk_bulk_get()
|
||||
devm_clk_bulk_get_all()
|
||||
devm_clk_bulk_get_enable()
|
||||
devm_clk_bulk_get_optional()
|
||||
devm_get_clk_from_child()
|
||||
devm_clk_hw_register()
|
||||
|
||||
@@ -222,6 +222,13 @@ static int __devm_clk_bulk_get_enable(struct device *dev, int num_clks,
|
||||
return ret;
|
||||
}
|
||||
|
||||
int __must_check devm_clk_bulk_get_enable(struct device *dev, int num_clks,
|
||||
struct clk_bulk_data *clks)
|
||||
{
|
||||
return __devm_clk_bulk_get_enable(dev, num_clks, clks, false);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_clk_bulk_get_enable);
|
||||
|
||||
int __must_check devm_clk_bulk_get_optional_enable(struct device *dev, int num_clks,
|
||||
struct clk_bulk_data *clks)
|
||||
{
|
||||
|
||||
@@ -502,6 +502,22 @@ int __must_check devm_clk_bulk_get(struct device *dev, int num_clks,
|
||||
*/
|
||||
int __must_check devm_clk_bulk_get_optional(struct device *dev, int num_clks,
|
||||
struct clk_bulk_data *clks);
|
||||
/**
|
||||
* devm_clk_bulk_get_enable - Get and enable bulk clocks (managed)
|
||||
* @dev: device for clock "consumer"
|
||||
* @num_clks: the number of clk_bulk_data
|
||||
* @clks: pointer to the clk_bulk_data table of consumer
|
||||
*
|
||||
* Behaves the same as devm_clk_bulk_get() but also prepares and enables the
|
||||
* clocks in one operation with management. The clks will automatically be
|
||||
* disabled, unprepared and freed when the device is unbound.
|
||||
*
|
||||
* Return: 0 if all clocks specified in clk_bulk_data table are obtained and
|
||||
* enabled successfully. Otherwise returns valid IS_ERR() condition containing
|
||||
* errno.
|
||||
*/
|
||||
int __must_check devm_clk_bulk_get_enable(struct device *dev, int num_clks,
|
||||
struct clk_bulk_data *clks);
|
||||
/**
|
||||
* devm_clk_bulk_get_optional_enable - Get and enable optional bulk clocks (managed)
|
||||
* @dev: device for clock "consumer"
|
||||
@@ -1052,6 +1068,13 @@ static inline int __must_check devm_clk_bulk_get_optional(struct device *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int __must_check devm_clk_bulk_get_enable(struct device *dev,
|
||||
int num_clks,
|
||||
struct clk_bulk_data *clks)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int __must_check devm_clk_bulk_get_optional_enable(struct device *dev,
|
||||
int num_clks,
|
||||
struct clk_bulk_data *clks)
|
||||
|
||||
Reference in New Issue
Block a user