xref: /rk3399_rockchip-uboot/include/clk.h (revision f0e075162f815f9cb769c7bb9003e0ad3b829811)
1f26c8a8eSSimon Glass /*
2f26c8a8eSSimon Glass  * Copyright (c) 2015 Google, Inc
3f26c8a8eSSimon Glass  * Written by Simon Glass <sjg@chromium.org>
4f26c8a8eSSimon Glass  *
5f26c8a8eSSimon Glass  * SPDX-License-Identifier:	GPL-2.0+
6f26c8a8eSSimon Glass  */
7f26c8a8eSSimon Glass 
808d0d6f3SMichal Simek #ifndef _CLK_H_
908d0d6f3SMichal Simek #define _CLK_H_
1008d0d6f3SMichal Simek 
11ad1cf785SMasahiro Yamada #include <linux/types.h>
12ad1cf785SMasahiro Yamada 
13ad1cf785SMasahiro Yamada struct udevice;
14ad1cf785SMasahiro Yamada 
1508d0d6f3SMichal Simek int soc_clk_dump(void);
1608d0d6f3SMichal Simek 
17f26c8a8eSSimon Glass struct clk_ops {
18f26c8a8eSSimon Glass 	/**
19f26c8a8eSSimon Glass 	 * get_rate() - Get current clock rate
20f26c8a8eSSimon Glass 	 *
21f26c8a8eSSimon Glass 	 * @dev:	Device to check (UCLASS_CLK)
22f26c8a8eSSimon Glass 	 * @return clock rate in Hz, or -ve error code
23f26c8a8eSSimon Glass 	 */
24f26c8a8eSSimon Glass 	ulong (*get_rate)(struct udevice *dev);
25f26c8a8eSSimon Glass 
26f26c8a8eSSimon Glass 	/**
27f26c8a8eSSimon Glass 	 * set_rate() - Set current clock rate
28f26c8a8eSSimon Glass 	 *
29f26c8a8eSSimon Glass 	 * @dev:	Device to adjust
30f26c8a8eSSimon Glass 	 * @rate:	New clock rate in Hz
31f26c8a8eSSimon Glass 	 * @return new rate, or -ve error code
32f26c8a8eSSimon Glass 	 */
33f26c8a8eSSimon Glass 	ulong (*set_rate)(struct udevice *dev, ulong rate);
34f26c8a8eSSimon Glass 
35f26c8a8eSSimon Glass 	/**
36*f0e07516SMasahiro Yamada 	 * enable() - Enable the clock for a peripheral
37*f0e07516SMasahiro Yamada 	 *
38*f0e07516SMasahiro Yamada 	 * @dev:	clock provider
39*f0e07516SMasahiro Yamada 	 * @periph:	Peripheral ID to enable
40*f0e07516SMasahiro Yamada 	 * @return zero on success, or -ve error code
41*f0e07516SMasahiro Yamada 	 */
42*f0e07516SMasahiro Yamada 	int (*enable)(struct udevice *dev, int periph);
43*f0e07516SMasahiro Yamada 
44*f0e07516SMasahiro Yamada 	/**
458bdf9cfdSMasahiro Yamada 	 * get_periph_rate() - Get clock rate for a peripheral
46f26c8a8eSSimon Glass 	 *
478bdf9cfdSMasahiro Yamada 	 * @dev:	Device to check (UCLASS_CLK)
488bdf9cfdSMasahiro Yamada 	 * @periph:	Peripheral ID to check
498bdf9cfdSMasahiro Yamada 	 * @return clock rate in Hz, or -ve error code
50f26c8a8eSSimon Glass 	 */
51f26c8a8eSSimon Glass 	ulong (*get_periph_rate)(struct udevice *dev, int periph);
52f26c8a8eSSimon Glass 
53f26c8a8eSSimon Glass 	/**
548bdf9cfdSMasahiro Yamada 	 * set_periph_rate() - Set current clock rate for a peripheral
55f26c8a8eSSimon Glass 	 *
56f26c8a8eSSimon Glass 	 * @dev:	Device to update (UCLASS_CLK)
578bdf9cfdSMasahiro Yamada 	 * @periph:	Peripheral ID to update
58f26c8a8eSSimon Glass 	 * @return new clock rate in Hz, or -ve error code
59f26c8a8eSSimon Glass 	 */
60f26c8a8eSSimon Glass 	ulong (*set_periph_rate)(struct udevice *dev, int periph, ulong rate);
61f26c8a8eSSimon Glass };
62f26c8a8eSSimon Glass 
63f26c8a8eSSimon Glass #define clk_get_ops(dev)	((struct clk_ops *)(dev)->driver->ops)
64f26c8a8eSSimon Glass 
65f26c8a8eSSimon Glass /**
66f26c8a8eSSimon Glass  * clk_get_rate() - Get current clock rate
67f26c8a8eSSimon Glass  *
68f26c8a8eSSimon Glass  * @dev:	Device to check (UCLASS_CLK)
69f26c8a8eSSimon Glass  * @return clock rate in Hz, or -ve error code
70f26c8a8eSSimon Glass  */
71f26c8a8eSSimon Glass ulong clk_get_rate(struct udevice *dev);
72f26c8a8eSSimon Glass 
73f26c8a8eSSimon Glass /**
748bdf9cfdSMasahiro Yamada  * clk_set_rate() - Set current clock rate
75f26c8a8eSSimon Glass  *
76f26c8a8eSSimon Glass  * @dev:	Device to adjust
77f26c8a8eSSimon Glass  * @rate:	New clock rate in Hz
78f26c8a8eSSimon Glass  * @return new rate, or -ve error code
79f26c8a8eSSimon Glass  */
80f26c8a8eSSimon Glass ulong clk_set_rate(struct udevice *dev, ulong rate);
81f26c8a8eSSimon Glass 
82f26c8a8eSSimon Glass /**
83*f0e07516SMasahiro Yamada  * clk_enable() - Enable the clock for a peripheral
84*f0e07516SMasahiro Yamada  *
85*f0e07516SMasahiro Yamada  * @dev:	clock provider
86*f0e07516SMasahiro Yamada  * @periph:	Peripheral ID to enable
87*f0e07516SMasahiro Yamada  * @return zero on success, or -ve error code
88*f0e07516SMasahiro Yamada  */
89*f0e07516SMasahiro Yamada int clk_enable(struct udevice *dev, int periph);
90*f0e07516SMasahiro Yamada 
91*f0e07516SMasahiro Yamada /**
92f26c8a8eSSimon Glass  * clk_get_periph_rate() - Get current clock rate for a peripheral
93f26c8a8eSSimon Glass  *
94f26c8a8eSSimon Glass  * @dev:	Device to check (UCLASS_CLK)
95f26c8a8eSSimon Glass  * @return clock rate in Hz, -ve error code
96f26c8a8eSSimon Glass  */
97f26c8a8eSSimon Glass ulong clk_get_periph_rate(struct udevice *dev, int periph);
98f26c8a8eSSimon Glass 
99f26c8a8eSSimon Glass /**
100f26c8a8eSSimon Glass  * clk_set_periph_rate() - Set current clock rate for a peripheral
101f26c8a8eSSimon Glass  *
102f26c8a8eSSimon Glass  * @dev:	Device to update (UCLASS_CLK)
1038bdf9cfdSMasahiro Yamada  * @periph:	Peripheral ID to update
104f26c8a8eSSimon Glass  * @return new clock rate in Hz, or -ve error code
105f26c8a8eSSimon Glass  */
106f26c8a8eSSimon Glass ulong clk_set_periph_rate(struct udevice *dev, int periph, ulong rate);
107f26c8a8eSSimon Glass 
10808d0d6f3SMichal Simek #endif /* _CLK_H_ */
109