tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: clk_set_parent() by name ?
On Mon, Mar 19, 2018 at 03:02:09PM +0100, Manuel Bouyer wrote:
> Hello
> right now, at last in the arm/sunxi port, for clocks with MUXes we never
> explicitely set the parent: we use whatever is there at boot.
> For the display drivers I need to set the parent, as this is not setup
> (or not completely setup) by u-boot.
>
> Looking at what we have now, I see 2 ways for doing this:
> - clk_set_parent(). But this one takes a "struct clk*" as parent,
> and I don't have this handy in the driver. There is clk_get(), but it
> need the ckock domain, which I also don't have it in the driver.
> There is no clk_get_domain()
> - clk->set_parent(), which takes a clock name. But for this I need to
> use a struct sunxi_ccu_clk * instead of struct clk *.
>
> So what should I do to solve this ? Introduce clk_get_domain() or
> clk_set_parent_byname() in sys/dev/clk/, or use struct sunxi_ccu_clk in
> the sunxi drivers ?
Attachted is an implementation of clk_set_parent_byname(), which is working
for my purpose.
--
Manuel Bouyer <bouyer%antioche.eu.org@localhost>
NetBSD: 26 ans d'experience feront toujours la difference
--
Index: clk.c
===================================================================
RCS file: /cvsroot/src/sys/dev/clk/clk.c,v
retrieving revision 1.2
diff -u -p -u -r1.2 clk.c
--- clk.c 16 Apr 2017 12:28:21 -0000 1.2
+++ clk.c 19 Mar 2018 16:05:24 -0000
@@ -93,6 +93,16 @@ clk_set_parent(struct clk *clk, struct c
return EINVAL;
}
+int
+clk_set_parent_byname(struct clk *clk, const char *name)
+{
+ struct clk *pclk;
+ pclk = clk_get(clk->domain, name);
+ if (pclk == NULL)
+ return EINVAL;
+ return clk_set_parent(clk, pclk);
+}
+
struct clk *
clk_get_parent(struct clk *clk)
{
Index: clk.h
===================================================================
RCS file: /cvsroot/src/sys/dev/clk/clk.h,v
retrieving revision 1.2
diff -u -p -u -r1.2 clk.h
--- clk.h 16 Apr 2017 12:28:21 -0000 1.2
+++ clk.h 19 Mar 2018 16:05:24 -0000
@@ -39,6 +39,7 @@ int clk_set_rate(struct clk *, u_int);
int clk_enable(struct clk *);
int clk_disable(struct clk *);
int clk_set_parent(struct clk *, struct clk *);
+int clk_set_parent_byname(struct clk *, const char *);
struct clk * clk_get_parent(struct clk *);
#endif /* _DEV_CLK_CLK_H */
Home |
Main Index |
Thread Index |
Old Index