On Mon, Aug 11, 2025 at 02:28:19PM +0200, Ahmad Fatoum wrote: > This function will be called from the upcoming bfetch command to > determine whether the running barebox has a CCF clock tree that goes > beyond fixed regulators for board-level oscillators.
s/regulators/clocks/ Sascha > > Signed-off-by: Ahmad Fatoum <a.fat...@barebox.org> > --- > drivers/clk/clk-fixed.c | 7 +++++++ > drivers/clk/clk-fixed.h | 11 +++++++++++ > drivers/clk/clk.c | 14 ++++++++++++++ > include/linux/clk.h | 9 +++++++++ > 4 files changed, 41 insertions(+) > create mode 100644 drivers/clk/clk-fixed.h > > diff --git a/drivers/clk/clk-fixed.c b/drivers/clk/clk-fixed.c > index 6ec2feb84f9e..ea081d0f22de 100644 > --- a/drivers/clk/clk-fixed.c > +++ b/drivers/clk/clk-fixed.c > @@ -9,6 +9,8 @@ > #include <linux/clk.h> > #include <linux/err.h> > > +#include "clk-fixed.h" > + > struct clk_fixed { > struct clk_hw hw; > unsigned long rate; > @@ -27,6 +29,11 @@ static struct clk_ops clk_fixed_ops = { > .is_enabled = clk_is_enabled_always, > }; > > +bool clk_is_fixed(struct clk *clk) > +{ > + return clk->ops == &clk_fixed_ops; > +} > + > struct clk *clk_register_fixed_rate(const char *name, > const char *parent_name, unsigned long > flags, > unsigned long rate) > diff --git a/drivers/clk/clk-fixed.h b/drivers/clk/clk-fixed.h > new file mode 100644 > index 000000000000..d7f7a12cb60d > --- /dev/null > +++ b/drivers/clk/clk-fixed.h > @@ -0,0 +1,11 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifndef _CLK_FIXED_H > +#define _CLK_FIXED_H > + > +#include <linux/types.h> > + > +struct clk; > + > +bool clk_is_fixed(struct clk *clk); > + > +#endif > diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c > index 1fa9027bc6cd..89a007a12c5b 100644 > --- a/drivers/clk/clk.c > +++ b/drivers/clk/clk.c > @@ -14,8 +14,22 @@ > #include <linux/clk/clk-conf.h> > #include <pinctrl.h> > > +#include "clk-fixed.h" > + > static LIST_HEAD(clks); > > +bool clk_have_nonfixed_providers(void) > +{ > + struct clk *c; > + > + list_for_each_entry(c, &clks, list) { > + if (!clk_is_fixed(c)) > + return true; > + } > + > + return false; > +} > + > static int clk_parent_enable(struct clk *clk) > { > struct clk *parent = clk_get_parent(clk); > diff --git a/include/linux/clk.h b/include/linux/clk.h > index f893d9071371..526641927754 100644 > --- a/include/linux/clk.h > +++ b/include/linux/clk.h > @@ -11,6 +11,7 @@ > #define __LINUX_CLK_H > > #include <linux/err.h> > +#include <linux/types.h> > #include <linux/spinlock.h> > #include <linux/stringify.h> > #include <linux/string.h> > @@ -971,6 +972,9 @@ static inline void clk_hw_unregister(struct clk_hw *hw) > > #ifdef CONFIG_COMMON_CLK > > +bool clk_have_nonfixed_providers(void); > + > + > /** > * clk_bulk_get - lookup and obtain a number of references to clock producer. > * @dev: device for clock "consumer" > @@ -1085,6 +1089,11 @@ int __must_check clk_bulk_enable(int num_clks, > void clk_bulk_disable(int num_clks, const struct clk_bulk_data *clks); > > #else > +static inline bool clk_have_nonfixed_providers(void) > +{ > + return false; > +} > + > static inline int __must_check clk_bulk_get(struct device *dev, int num_clks, > struct clk_bulk_data *clks) > { > -- > 2.39.5 > > > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |