From 63c20c7c0b5cb7606f4c22751329776f490bec66 Mon Sep 17 00:00:00 2001 From: Taniya Das Date: Wed, 15 Jun 2016 12:15:01 +0530 Subject: [PATCH] clk: Add support to set custom flags with clk_set_flags The new API clk_set_flags could be used by hardware specific clock drivers or clients for specific hardware requirements. These flags could be custom defined as per hardware needs. Change-Id: Ia67373ee2b8934c898052c68338fa86cb16070dd Signed-off-by: Taniya Das --- drivers/clk/clk.c | 12 ++++++++++++ include/linux/clk-provider.h | 3 +++ include/linux/clk.h | 10 ++++++++++ 3 files changed, 25 insertions(+) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 820a939fb6bb..1cff20e70fba 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -1982,6 +1982,18 @@ bool clk_is_match(const struct clk *p, const struct clk *q) } EXPORT_SYMBOL_GPL(clk_is_match); +int clk_set_flags(struct clk *clk, unsigned long flags) +{ + if (!clk) + return 0; + + if (!clk->core->ops->set_flags) + return -EINVAL; + + return clk->core->ops->set_flags(clk->core->hw, flags); +} +EXPORT_SYMBOL_GPL(clk_set_flags); + /*** debugfs support ***/ #ifdef CONFIG_DEBUG_FS diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index a39c0c530778..1f8224748b7d 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -177,6 +177,8 @@ struct clk_rate_request { * directory is provided as an argument. Called with * prepare_lock held. Returns 0 on success, -EERROR otherwise. * + * @set_flags: Set custom flags which deal with hardware specifics. Returns 0 + * on success, -EERROR otherwise. * * The clk_enable/clk_disable and clk_prepare/clk_unprepare pairs allow * implementations to split any work between atomic (enable) and sleepable @@ -217,6 +219,7 @@ struct clk_ops { int (*set_phase)(struct clk_hw *hw, int degrees); void (*init)(struct clk_hw *hw); int (*debug_init)(struct clk_hw *hw, struct dentry *dentry); + int (*set_flags)(struct clk_hw *hw, unsigned int flags); }; /** diff --git a/include/linux/clk.h b/include/linux/clk.h index 123c02788807..1325b23ff3e8 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h @@ -420,6 +420,16 @@ struct clk *clk_get_parent(struct clk *clk); */ struct clk *clk_get_sys(const char *dev_id, const char *con_id); +/** + * clk_set_flags - set the custom HW specific flags for this clock + * @clk: clock source + * @flags: custom flags which would be hardware specific, defined for specific + * hardware. + * + * Returns success 0 or negative errno. + */ +int clk_set_flags(struct clk *clk, unsigned long flags); + #else /* !CONFIG_HAVE_CLK */ static inline struct clk *clk_get(struct device *dev, const char *id)