1135aa950SStephen Warren /* 2135aa950SStephen Warren * Copyright (c) 2015 Google, Inc 3135aa950SStephen Warren * Written by Simon Glass <sjg@chromium.org> 4135aa950SStephen Warren * Copyright (c) 2016, NVIDIA CORPORATION. 5135aa950SStephen Warren * 6135aa950SStephen Warren * SPDX-License-Identifier: GPL-2.0+ 7135aa950SStephen Warren */ 8135aa950SStephen Warren 9135aa950SStephen Warren #ifndef _CLK_UCLASS_H 10135aa950SStephen Warren #define _CLK_UCLASS_H 11135aa950SStephen Warren 12135aa950SStephen Warren /* See clk.h for background documentation. */ 13135aa950SStephen Warren 14135aa950SStephen Warren #include <clk.h> 15a4e0ef50SSimon Glass 16a4e0ef50SSimon Glass struct ofnode_phandle_args; 17135aa950SStephen Warren 18135aa950SStephen Warren /** 19135aa950SStephen Warren * struct clk_ops - The functions that a clock driver must implement. 20135aa950SStephen Warren */ 21135aa950SStephen Warren struct clk_ops { 22135aa950SStephen Warren /** 23135aa950SStephen Warren * of_xlate - Translate a client's device-tree (OF) clock specifier. 24135aa950SStephen Warren * 25135aa950SStephen Warren * The clock core calls this function as the first step in implementing 26135aa950SStephen Warren * a client's clk_get_by_*() call. 27135aa950SStephen Warren * 28135aa950SStephen Warren * If this function pointer is set to NULL, the clock core will use a 29135aa950SStephen Warren * default implementation, which assumes #clock-cells = <1>, and that 30135aa950SStephen Warren * the DT cell contains a simple integer clock ID. 31135aa950SStephen Warren * 32135aa950SStephen Warren * At present, the clock API solely supports device-tree. If this 33135aa950SStephen Warren * changes, other xxx_xlate() functions may be added to support those 34135aa950SStephen Warren * other mechanisms. 35135aa950SStephen Warren * 36135aa950SStephen Warren * @clock: The clock struct to hold the translation result. 37135aa950SStephen Warren * @args: The clock specifier values from device tree. 38135aa950SStephen Warren * @return 0 if OK, or a negative error code. 39135aa950SStephen Warren */ 40135aa950SStephen Warren int (*of_xlate)(struct clk *clock, 41a4e0ef50SSimon Glass struct ofnode_phandle_args *args); 42135aa950SStephen Warren /** 43135aa950SStephen Warren * request - Request a translated clock. 44135aa950SStephen Warren * 45135aa950SStephen Warren * The clock core calls this function as the second step in 46135aa950SStephen Warren * implementing a client's clk_get_by_*() call, following a successful 47135aa950SStephen Warren * xxx_xlate() call, or as the only step in implementing a client's 48135aa950SStephen Warren * clk_request() call. 49135aa950SStephen Warren * 50135aa950SStephen Warren * @clock: The clock struct to request; this has been fille in by 51135aa950SStephen Warren * a previoux xxx_xlate() function call, or by the caller 52135aa950SStephen Warren * of clk_request(). 53135aa950SStephen Warren * @return 0 if OK, or a negative error code. 54135aa950SStephen Warren */ 55135aa950SStephen Warren int (*request)(struct clk *clock); 56135aa950SStephen Warren /** 57135aa950SStephen Warren * free - Free a previously requested clock. 58135aa950SStephen Warren * 59135aa950SStephen Warren * This is the implementation of the client clk_free() API. 60135aa950SStephen Warren * 61135aa950SStephen Warren * @clock: The clock to free. 62135aa950SStephen Warren * @return 0 if OK, or a negative error code. 63135aa950SStephen Warren */ 64135aa950SStephen Warren int (*free)(struct clk *clock); 65135aa950SStephen Warren /** 66135aa950SStephen Warren * get_rate() - Get current clock rate. 67135aa950SStephen Warren * 68135aa950SStephen Warren * @clk: The clock to query. 69135aa950SStephen Warren * @return clock rate in Hz, or -ve error code 70135aa950SStephen Warren */ 71135aa950SStephen Warren ulong (*get_rate)(struct clk *clk); 72135aa950SStephen Warren /** 73135aa950SStephen Warren * set_rate() - Set current clock rate. 74135aa950SStephen Warren * 75135aa950SStephen Warren * @clk: The clock to manipulate. 76135aa950SStephen Warren * @rate: New clock rate in Hz. 77135aa950SStephen Warren * @return new rate, or -ve error code. 78135aa950SStephen Warren */ 79135aa950SStephen Warren ulong (*set_rate)(struct clk *clk, ulong rate); 80135aa950SStephen Warren /** 81724f9587SZiyuan Xu * clk_get_phase() - Get the phase shift of a clock signal. 82724f9587SZiyuan Xu * 83724f9587SZiyuan Xu * @clk: The clock to manipulate. 84724f9587SZiyuan Xu * @return the phase shift of a clock node in degrees, 85724f9587SZiyuan Xu * otherwise returns -ve error code. 86724f9587SZiyuan Xu */ 87724f9587SZiyuan Xu int (*get_phase)(struct clk *clk); 88724f9587SZiyuan Xu 89724f9587SZiyuan Xu /** 90724f9587SZiyuan Xu * clk_set_rate() - Adjust the phase shift of a clock signal. 91724f9587SZiyuan Xu * 92724f9587SZiyuan Xu * @clk: The clock to manipulate. 93724f9587SZiyuan Xu * @degrees: Numberof degrees the signal is shifted. 94724f9587SZiyuan Xu * @return 0 on success, or -ve error code. 95724f9587SZiyuan Xu */ 96724f9587SZiyuan Xu int (*set_phase)(struct clk *clk, int degrees); 97724f9587SZiyuan Xu /** 98*4686bbffSPhilipp Tomsich * set_parent() - Set current clock parent 99*4686bbffSPhilipp Tomsich * 100*4686bbffSPhilipp Tomsich * @clk: The clock to manipulate. 101*4686bbffSPhilipp Tomsich * @parent: New clock parent. 102*4686bbffSPhilipp Tomsich * @return zero on success, or -ve error code. 103*4686bbffSPhilipp Tomsich */ 104*4686bbffSPhilipp Tomsich int (*set_parent)(struct clk *clk, struct clk *parent); 105*4686bbffSPhilipp Tomsich /** 106135aa950SStephen Warren * enable() - Enable a clock. 107135aa950SStephen Warren * 108135aa950SStephen Warren * @clk: The clock to manipulate. 109135aa950SStephen Warren * @return zero on success, or -ve error code. 110135aa950SStephen Warren */ 111135aa950SStephen Warren int (*enable)(struct clk *clk); 112135aa950SStephen Warren /** 113135aa950SStephen Warren * disable() - Disable a clock. 114135aa950SStephen Warren * 115135aa950SStephen Warren * @clk: The clock to manipulate. 116135aa950SStephen Warren * @return zero on success, or -ve error code. 117135aa950SStephen Warren */ 118135aa950SStephen Warren int (*disable)(struct clk *clk); 119135aa950SStephen Warren }; 120135aa950SStephen Warren 121135aa950SStephen Warren #endif 122