xref: /rk3399_rockchip-uboot/include/clk.h (revision ad1cf785853eef60e48053ead4fbb47dad840d55)
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 
11*ad1cf785SMasahiro Yamada #include <linux/types.h>
12*ad1cf785SMasahiro Yamada 
13*ad1cf785SMasahiro Yamada struct udevice;
14*ad1cf785SMasahiro 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 	/**
368bdf9cfdSMasahiro Yamada 	 * get_periph_rate() - Get clock rate for a peripheral
37f26c8a8eSSimon Glass 	 *
388bdf9cfdSMasahiro Yamada 	 * @dev:	Device to check (UCLASS_CLK)
398bdf9cfdSMasahiro Yamada 	 * @periph:	Peripheral ID to check
408bdf9cfdSMasahiro Yamada 	 * @return clock rate in Hz, or -ve error code
41f26c8a8eSSimon Glass 	 */
42f26c8a8eSSimon Glass 	ulong (*get_periph_rate)(struct udevice *dev, int periph);
43f26c8a8eSSimon Glass 
44f26c8a8eSSimon Glass 	/**
458bdf9cfdSMasahiro Yamada 	 * set_periph_rate() - Set current clock rate for a peripheral
46f26c8a8eSSimon Glass 	 *
47f26c8a8eSSimon Glass 	 * @dev:	Device to update (UCLASS_CLK)
488bdf9cfdSMasahiro Yamada 	 * @periph:	Peripheral ID to update
49f26c8a8eSSimon Glass 	 * @return new clock rate in Hz, or -ve error code
50f26c8a8eSSimon Glass 	 */
51f26c8a8eSSimon Glass 	ulong (*set_periph_rate)(struct udevice *dev, int periph, ulong rate);
52f26c8a8eSSimon Glass };
53f26c8a8eSSimon Glass 
54f26c8a8eSSimon Glass #define clk_get_ops(dev)	((struct clk_ops *)(dev)->driver->ops)
55f26c8a8eSSimon Glass 
56f26c8a8eSSimon Glass /**
57f26c8a8eSSimon Glass  * clk_get_rate() - Get current clock rate
58f26c8a8eSSimon Glass  *
59f26c8a8eSSimon Glass  * @dev:	Device to check (UCLASS_CLK)
60f26c8a8eSSimon Glass  * @return clock rate in Hz, or -ve error code
61f26c8a8eSSimon Glass  */
62f26c8a8eSSimon Glass ulong clk_get_rate(struct udevice *dev);
63f26c8a8eSSimon Glass 
64f26c8a8eSSimon Glass /**
658bdf9cfdSMasahiro Yamada  * clk_set_rate() - Set current clock rate
66f26c8a8eSSimon Glass  *
67f26c8a8eSSimon Glass  * @dev:	Device to adjust
68f26c8a8eSSimon Glass  * @rate:	New clock rate in Hz
69f26c8a8eSSimon Glass  * @return new rate, or -ve error code
70f26c8a8eSSimon Glass  */
71f26c8a8eSSimon Glass ulong clk_set_rate(struct udevice *dev, ulong rate);
72f26c8a8eSSimon Glass 
73f26c8a8eSSimon Glass /**
74f26c8a8eSSimon Glass  * clk_get_periph_rate() - Get current clock rate for a peripheral
75f26c8a8eSSimon Glass  *
76f26c8a8eSSimon Glass  * @dev:	Device to check (UCLASS_CLK)
77f26c8a8eSSimon Glass  * @return clock rate in Hz, -ve error code
78f26c8a8eSSimon Glass  */
79f26c8a8eSSimon Glass ulong clk_get_periph_rate(struct udevice *dev, int periph);
80f26c8a8eSSimon Glass 
81f26c8a8eSSimon Glass /**
82f26c8a8eSSimon Glass  * clk_set_periph_rate() - Set current clock rate for a peripheral
83f26c8a8eSSimon Glass  *
84f26c8a8eSSimon Glass  * @dev:	Device to update (UCLASS_CLK)
858bdf9cfdSMasahiro Yamada  * @periph:	Peripheral ID to update
86f26c8a8eSSimon Glass  * @return new clock rate in Hz, or -ve error code
87f26c8a8eSSimon Glass  */
88f26c8a8eSSimon Glass ulong clk_set_periph_rate(struct udevice *dev, int periph, ulong rate);
89f26c8a8eSSimon Glass 
9008d0d6f3SMichal Simek #endif /* _CLK_H_ */
91