1*135aa950SStephen Warren /* 2*135aa950SStephen Warren * Copyright (c) 2015 Google, Inc 3*135aa950SStephen Warren * Written by Simon Glass <sjg@chromium.org> 4*135aa950SStephen Warren * Copyright (c) 2016, NVIDIA CORPORATION. 5*135aa950SStephen Warren * 6*135aa950SStephen Warren * SPDX-License-Identifier: GPL-2.0+ 7*135aa950SStephen Warren */ 8*135aa950SStephen Warren 9*135aa950SStephen Warren #ifndef _CLK_UCLASS_H 10*135aa950SStephen Warren #define _CLK_UCLASS_H 11*135aa950SStephen Warren 12*135aa950SStephen Warren /* See clk.h for background documentation. */ 13*135aa950SStephen Warren 14*135aa950SStephen Warren #include <clk.h> 15*135aa950SStephen Warren #include <fdtdec.h> 16*135aa950SStephen Warren 17*135aa950SStephen Warren /** 18*135aa950SStephen Warren * struct clk_ops - The functions that a clock driver must implement. 19*135aa950SStephen Warren */ 20*135aa950SStephen Warren struct clk_ops { 21*135aa950SStephen Warren /** 22*135aa950SStephen Warren * of_xlate - Translate a client's device-tree (OF) clock specifier. 23*135aa950SStephen Warren * 24*135aa950SStephen Warren * The clock core calls this function as the first step in implementing 25*135aa950SStephen Warren * a client's clk_get_by_*() call. 26*135aa950SStephen Warren * 27*135aa950SStephen Warren * If this function pointer is set to NULL, the clock core will use a 28*135aa950SStephen Warren * default implementation, which assumes #clock-cells = <1>, and that 29*135aa950SStephen Warren * the DT cell contains a simple integer clock ID. 30*135aa950SStephen Warren * 31*135aa950SStephen Warren * At present, the clock API solely supports device-tree. If this 32*135aa950SStephen Warren * changes, other xxx_xlate() functions may be added to support those 33*135aa950SStephen Warren * other mechanisms. 34*135aa950SStephen Warren * 35*135aa950SStephen Warren * @clock: The clock struct to hold the translation result. 36*135aa950SStephen Warren * @args: The clock specifier values from device tree. 37*135aa950SStephen Warren * @return 0 if OK, or a negative error code. 38*135aa950SStephen Warren */ 39*135aa950SStephen Warren int (*of_xlate)(struct clk *clock, 40*135aa950SStephen Warren struct fdtdec_phandle_args *args); 41*135aa950SStephen Warren /** 42*135aa950SStephen Warren * request - Request a translated clock. 43*135aa950SStephen Warren * 44*135aa950SStephen Warren * The clock core calls this function as the second step in 45*135aa950SStephen Warren * implementing a client's clk_get_by_*() call, following a successful 46*135aa950SStephen Warren * xxx_xlate() call, or as the only step in implementing a client's 47*135aa950SStephen Warren * clk_request() call. 48*135aa950SStephen Warren * 49*135aa950SStephen Warren * @clock: The clock struct to request; this has been fille in by 50*135aa950SStephen Warren * a previoux xxx_xlate() function call, or by the caller 51*135aa950SStephen Warren * of clk_request(). 52*135aa950SStephen Warren * @return 0 if OK, or a negative error code. 53*135aa950SStephen Warren */ 54*135aa950SStephen Warren int (*request)(struct clk *clock); 55*135aa950SStephen Warren /** 56*135aa950SStephen Warren * free - Free a previously requested clock. 57*135aa950SStephen Warren * 58*135aa950SStephen Warren * This is the implementation of the client clk_free() API. 59*135aa950SStephen Warren * 60*135aa950SStephen Warren * @clock: The clock to free. 61*135aa950SStephen Warren * @return 0 if OK, or a negative error code. 62*135aa950SStephen Warren */ 63*135aa950SStephen Warren int (*free)(struct clk *clock); 64*135aa950SStephen Warren /** 65*135aa950SStephen Warren * get_rate() - Get current clock rate. 66*135aa950SStephen Warren * 67*135aa950SStephen Warren * @clk: The clock to query. 68*135aa950SStephen Warren * @return clock rate in Hz, or -ve error code 69*135aa950SStephen Warren */ 70*135aa950SStephen Warren ulong (*get_rate)(struct clk *clk); 71*135aa950SStephen Warren /** 72*135aa950SStephen Warren * set_rate() - Set current clock rate. 73*135aa950SStephen Warren * 74*135aa950SStephen Warren * @clk: The clock to manipulate. 75*135aa950SStephen Warren * @rate: New clock rate in Hz. 76*135aa950SStephen Warren * @return new rate, or -ve error code. 77*135aa950SStephen Warren */ 78*135aa950SStephen Warren ulong (*set_rate)(struct clk *clk, ulong rate); 79*135aa950SStephen Warren /** 80*135aa950SStephen Warren * enable() - Enable a clock. 81*135aa950SStephen Warren * 82*135aa950SStephen Warren * @clk: The clock to manipulate. 83*135aa950SStephen Warren * @return zero on success, or -ve error code. 84*135aa950SStephen Warren */ 85*135aa950SStephen Warren int (*enable)(struct clk *clk); 86*135aa950SStephen Warren /** 87*135aa950SStephen Warren * disable() - Disable a clock. 88*135aa950SStephen Warren * 89*135aa950SStephen Warren * @clk: The clock to manipulate. 90*135aa950SStephen Warren * @return zero on success, or -ve error code. 91*135aa950SStephen Warren */ 92*135aa950SStephen Warren int (*disable)(struct clk *clk); 93*135aa950SStephen Warren }; 94*135aa950SStephen Warren 95*135aa950SStephen Warren #endif 96