xref: /rk3399_rockchip-uboot/drivers/clk/clk-uclass.c (revision f26c8a8e77629cf9de36a697ea5513f9184a2319)
1*f26c8a8eSSimon Glass /*
2*f26c8a8eSSimon Glass  * Copyright (C) 2015 Google, Inc
3*f26c8a8eSSimon Glass  * Written by Simon Glass <sjg@chromium.org>
4*f26c8a8eSSimon Glass  *
5*f26c8a8eSSimon Glass  * SPDX-License-Identifier:	GPL-2.0+
6*f26c8a8eSSimon Glass  */
7*f26c8a8eSSimon Glass 
8*f26c8a8eSSimon Glass #include <common.h>
9*f26c8a8eSSimon Glass #include <clk.h>
10*f26c8a8eSSimon Glass #include <dm.h>
11*f26c8a8eSSimon Glass #include <errno.h>
12*f26c8a8eSSimon Glass #include <dm/lists.h>
13*f26c8a8eSSimon Glass #include <dm/root.h>
14*f26c8a8eSSimon Glass 
15*f26c8a8eSSimon Glass ulong clk_get_rate(struct udevice *dev)
16*f26c8a8eSSimon Glass {
17*f26c8a8eSSimon Glass 	struct clk_ops *ops = clk_get_ops(dev);
18*f26c8a8eSSimon Glass 
19*f26c8a8eSSimon Glass 	if (!ops->get_rate)
20*f26c8a8eSSimon Glass 		return -ENOSYS;
21*f26c8a8eSSimon Glass 
22*f26c8a8eSSimon Glass 	return ops->get_rate(dev);
23*f26c8a8eSSimon Glass }
24*f26c8a8eSSimon Glass 
25*f26c8a8eSSimon Glass ulong clk_set_rate(struct udevice *dev, ulong rate)
26*f26c8a8eSSimon Glass {
27*f26c8a8eSSimon Glass 	struct clk_ops *ops = clk_get_ops(dev);
28*f26c8a8eSSimon Glass 
29*f26c8a8eSSimon Glass 	if (!ops->set_rate)
30*f26c8a8eSSimon Glass 		return -ENOSYS;
31*f26c8a8eSSimon Glass 
32*f26c8a8eSSimon Glass 	return ops->set_rate(dev, rate);
33*f26c8a8eSSimon Glass }
34*f26c8a8eSSimon Glass 
35*f26c8a8eSSimon Glass ulong clk_get_periph_rate(struct udevice *dev, int periph)
36*f26c8a8eSSimon Glass {
37*f26c8a8eSSimon Glass 	struct clk_ops *ops = clk_get_ops(dev);
38*f26c8a8eSSimon Glass 
39*f26c8a8eSSimon Glass 	if (!ops->get_periph_rate)
40*f26c8a8eSSimon Glass 		return -ENOSYS;
41*f26c8a8eSSimon Glass 
42*f26c8a8eSSimon Glass 	return ops->get_periph_rate(dev, periph);
43*f26c8a8eSSimon Glass }
44*f26c8a8eSSimon Glass 
45*f26c8a8eSSimon Glass ulong clk_set_periph_rate(struct udevice *dev, int periph, ulong rate)
46*f26c8a8eSSimon Glass {
47*f26c8a8eSSimon Glass 	struct clk_ops *ops = clk_get_ops(dev);
48*f26c8a8eSSimon Glass 
49*f26c8a8eSSimon Glass 	if (!ops->set_periph_rate)
50*f26c8a8eSSimon Glass 		return -ENOSYS;
51*f26c8a8eSSimon Glass 
52*f26c8a8eSSimon Glass 	return ops->set_periph_rate(dev, periph, rate);
53*f26c8a8eSSimon Glass }
54*f26c8a8eSSimon Glass 
55*f26c8a8eSSimon Glass UCLASS_DRIVER(clk) = {
56*f26c8a8eSSimon Glass 	.id		= UCLASS_CLK,
57*f26c8a8eSSimon Glass 	.name		= "clk",
58*f26c8a8eSSimon Glass };
59