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