xref: /rk3399_rockchip-uboot/include/clk.h (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 
808d0d6f3SMichal Simek #ifndef _CLK_H_
908d0d6f3SMichal Simek #define _CLK_H_
1008d0d6f3SMichal Simek 
1108d0d6f3SMichal Simek int soc_clk_dump(void);
1208d0d6f3SMichal Simek 
13*f26c8a8eSSimon Glass struct clk_ops {
14*f26c8a8eSSimon Glass 	/**
15*f26c8a8eSSimon Glass 	 * get_rate() - Get current clock rate
16*f26c8a8eSSimon Glass 	 *
17*f26c8a8eSSimon Glass 	 * @dev:	Device to check (UCLASS_CLK)
18*f26c8a8eSSimon Glass 	 * @return clock rate in Hz, or -ve error code
19*f26c8a8eSSimon Glass 	 */
20*f26c8a8eSSimon Glass 	ulong (*get_rate)(struct udevice *dev);
21*f26c8a8eSSimon Glass 
22*f26c8a8eSSimon Glass 	/**
23*f26c8a8eSSimon Glass 	 * set_rate() - Set current clock rate
24*f26c8a8eSSimon Glass 	 *
25*f26c8a8eSSimon Glass 	 * @dev:	Device to adjust
26*f26c8a8eSSimon Glass 	 * @rate:	New clock rate in Hz
27*f26c8a8eSSimon Glass 	 * @return new rate, or -ve error code
28*f26c8a8eSSimon Glass 	 */
29*f26c8a8eSSimon Glass 	ulong (*set_rate)(struct udevice *dev, ulong rate);
30*f26c8a8eSSimon Glass 
31*f26c8a8eSSimon Glass 	/**
32*f26c8a8eSSimon Glass 	* clk_set_periph_rate() - Set clock rate for a peripheral
33*f26c8a8eSSimon Glass 	*
34*f26c8a8eSSimon Glass 	* @dev:	Device to adjust (UCLASS_CLK)
35*f26c8a8eSSimon Glass 	* @rate:	New clock rate in Hz
36*f26c8a8eSSimon Glass 	* @return new clock rate in Hz, or -ve error code
37*f26c8a8eSSimon Glass 	*/
38*f26c8a8eSSimon Glass 	ulong (*get_periph_rate)(struct udevice *dev, int periph);
39*f26c8a8eSSimon Glass 
40*f26c8a8eSSimon Glass 	/**
41*f26c8a8eSSimon Glass 	 * clk_set_periph_rate() - Set current clock rate for a peripheral
42*f26c8a8eSSimon Glass 	 *
43*f26c8a8eSSimon Glass 	 * @dev:	Device to update (UCLASS_CLK)
44*f26c8a8eSSimon Glass 	 * @periph:	Peripheral ID to cupdate
45*f26c8a8eSSimon Glass 	 * @return new clock rate in Hz, or -ve error code
46*f26c8a8eSSimon Glass 	 */
47*f26c8a8eSSimon Glass 	ulong (*set_periph_rate)(struct udevice *dev, int periph, ulong rate);
48*f26c8a8eSSimon Glass };
49*f26c8a8eSSimon Glass 
50*f26c8a8eSSimon Glass #define clk_get_ops(dev)	((struct clk_ops *)(dev)->driver->ops)
51*f26c8a8eSSimon Glass 
52*f26c8a8eSSimon Glass /**
53*f26c8a8eSSimon Glass  * clk_get_rate() - Get current clock rate
54*f26c8a8eSSimon Glass  *
55*f26c8a8eSSimon Glass  * @dev:	Device to check (UCLASS_CLK)
56*f26c8a8eSSimon Glass  * @return clock rate in Hz, or -ve error code
57*f26c8a8eSSimon Glass  */
58*f26c8a8eSSimon Glass ulong clk_get_rate(struct udevice *dev);
59*f26c8a8eSSimon Glass 
60*f26c8a8eSSimon Glass /**
61*f26c8a8eSSimon Glass  * set_rate() - Set current clock rate
62*f26c8a8eSSimon Glass  *
63*f26c8a8eSSimon Glass  * @dev:	Device to adjust
64*f26c8a8eSSimon Glass  * @rate:	New clock rate in Hz
65*f26c8a8eSSimon Glass  * @return new rate, or -ve error code
66*f26c8a8eSSimon Glass  */
67*f26c8a8eSSimon Glass ulong clk_set_rate(struct udevice *dev, ulong rate);
68*f26c8a8eSSimon Glass 
69*f26c8a8eSSimon Glass /**
70*f26c8a8eSSimon Glass  * clk_get_periph_rate() - Get current clock rate for a peripheral
71*f26c8a8eSSimon Glass  *
72*f26c8a8eSSimon Glass  * @dev:	Device to check (UCLASS_CLK)
73*f26c8a8eSSimon Glass  * @return clock rate in Hz, -ve error code
74*f26c8a8eSSimon Glass  */
75*f26c8a8eSSimon Glass ulong clk_get_periph_rate(struct udevice *dev, int periph);
76*f26c8a8eSSimon Glass 
77*f26c8a8eSSimon Glass /**
78*f26c8a8eSSimon Glass  * clk_set_periph_rate() - Set current clock rate for a peripheral
79*f26c8a8eSSimon Glass  *
80*f26c8a8eSSimon Glass  * @dev:	Device to update (UCLASS_CLK)
81*f26c8a8eSSimon Glass  * @periph:	Peripheral ID to cupdate
82*f26c8a8eSSimon Glass  * @return new clock rate in Hz, or -ve error code
83*f26c8a8eSSimon Glass  */
84*f26c8a8eSSimon Glass ulong clk_set_periph_rate(struct udevice *dev, int periph, ulong rate);
85*f26c8a8eSSimon Glass 
8608d0d6f3SMichal Simek #endif /* _CLK_H_ */
87