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