diff options
-rw-r--r-- | doc/api/clk.rst | 6 | ||||
-rw-r--r-- | include/clk-uclass.h | 187 |
2 files changed, 115 insertions, 78 deletions
diff --git a/doc/api/clk.rst b/doc/api/clk.rst index 7eb3b5645a..7c27066928 100644 --- a/doc/api/clk.rst +++ b/doc/api/clk.rst @@ -11,3 +11,9 @@ Client API .. kernel-doc:: include/clk.h :internal: + +Driver API +---------- + +.. kernel-doc:: include/clk-uclass.h + :internal: diff --git a/include/clk-uclass.h b/include/clk-uclass.h index 50e8681b55..e44f1caf51 100644 --- a/include/clk-uclass.h +++ b/include/clk-uclass.h @@ -16,96 +16,127 @@ struct ofnode_phandle_args; /** * struct clk_ops - The functions that a clock driver must implement. + * @of_xlate: Translate a client's device-tree (OF) clock specifier. + * @request: Request a translated clock. + * @rfree: Free a previously requested clock. + * @round_rate: Adjust a rate to the exact rate a clock can provide. + * @get_rate: Get current clock rate. + * @set_rate: Set current clock rate. + * @set_parent: Set current clock parent + * @enable: Enable a clock. + * @disable: Disable a clock. + * + * The individual methods are described more fully below. */ struct clk_ops { - /** - * of_xlate - Translate a client's device-tree (OF) clock specifier. - * - * The clock core calls this function as the first step in implementing - * a client's clk_get_by_*() call. - * - * If this function pointer is set to NULL, the clock core will use a - * default implementation, which assumes #clock-cells = <1>, and that - * the DT cell contains a simple integer clock ID. - * - * At present, the clock API solely supports device-tree. If this - * changes, other xxx_xlate() functions may be added to support those - * other mechanisms. - * - * @clock: The clock struct to hold the translation result. - * @args: The clock specifier values from device tree. - * @return 0 if OK, or a negative error code. - */ int (*of_xlate)(struct clk *clock, struct ofnode_phandle_args *args); - /** - * request - Request a translated clock. - * - * The clock core calls this function as the second step in - * implementing a client's clk_get_by_*() call, following a successful - * xxx_xlate() call, or as the only step in implementing a client's - * clk_request() call. - * - * @clock: The clock struct to request; this has been fille in by - * a previoux xxx_xlate() function call, or by the caller - * of clk_request(). - * @return 0 if OK, or a negative error code. - */ int (*request)(struct clk *clock); - /** - * rfree - Free a previously requested clock. - * - * This is the implementation of the client clk_free() API. - * - * @clock: The clock to free. - * @return 0 if OK, or a negative error code. - */ int (*rfree)(struct clk *clock); - /** - * round_rate() - Adjust a rate to the exact rate a clock can provide. - * - * @clk: The clock to manipulate. - * @rate: Desidered clock rate in Hz. - * @return rounded rate in Hz, or -ve error code. - */ ulong (*round_rate)(struct clk *clk, ulong rate); - /** - * get_rate() - Get current clock rate. - * - * @clk: The clock to query. - * @return clock rate in Hz, or -ve error code - */ ulong (*get_rate)(struct clk *clk); - /** - * set_rate() - Set current clock rate. - * - * @clk: The clock to manipulate. - * @rate: New clock rate in Hz. - * @return new rate, or -ve error code. - */ ulong (*set_rate)(struct clk *clk, ulong rate); - /** - * set_parent() - Set current clock parent - * - * @clk: The clock to manipulate. - * @parent: New clock parent. - * @return zero on success, or -ve error code. - */ int (*set_parent)(struct clk *clk, struct clk *parent); - /** - * enable() - Enable a clock. - * - * @clk: The clock to manipulate. - * @return zero on success, or -ve error code. - */ int (*enable)(struct clk *clk); - /** - * disable() - Disable a clock. - * - * @clk: The clock to manipulate. - * @return zero on success, or -ve error code. - */ int (*disable)(struct clk *clk); }; +#if 0 /* For documentation only */ +/** + * of_xlate() - Translate a client's device-tree (OF) clock specifier. + * @clock: The clock struct to hold the translation result. + * @args: The clock specifier values from device tree. + * + * The clock core calls this function as the first step in implementing + * a client's clk_get_by_*() call. + * + * If this function pointer is set to NULL, the clock core will use a + * default implementation, which assumes #clock-cells = <1>, and that + * the DT cell contains a simple integer clock ID. + * + * At present, the clock API solely supports device-tree. If this + * changes, other xxx_xlate() functions may be added to support those + * other mechanisms. + * + * Return: 0 if OK, or a negative error code. + */ +int of_xlate(struct clk *clock, struct ofnode_phandle_args *args); + +/** + * request() - Request a translated clock. + * @clock: The clock struct to request; this has been fille in by + * a previoux xxx_xlate() function call, or by the caller + * of clk_request(). + * + * The clock core calls this function as the second step in + * implementing a client's clk_get_by_*() call, following a successful + * xxx_xlate() call, or as the only step in implementing a client's + * clk_request() call. + * + * Return: 0 if OK, or a negative error code. + */ +int request(struct clk *clock); + +/** + * rfree() - Free a previously requested clock. + * @clock: The clock to free. + * + * This is the implementation of the client clk_free() API. + * + * Return: 0 if OK, or a negative error code. + */ +int rfree(struct clk *clock); + +/** + * round_rate() - Adjust a rate to the exact rate a clock can provide. + * @clk: The clock to manipulate. + * @rate: Desidered clock rate in Hz. + * + * Return: rounded rate in Hz, or -ve error code. + */ +ulong round_rate(struct clk *clk, ulong rate); + +/** + * get_rate() - Get current clock rate. + * @clk: The clock to query. + * + * Return: clock rate in Hz, or -ve error code + */ +ulong get_rate(struct clk *clk); + +/** + * set_rate() - Set current clock rate. + * @clk: The clock to manipulate. + * @rate: New clock rate in Hz. + * + * Return: new rate, or -ve error code. + */ +ulong set_rate(struct clk *clk, ulong rate); + +/** + * set_parent() - Set current clock parent + * @clk: The clock to manipulate. + * @parent: New clock parent. + * + * Return: zero on success, or -ve error code. + */ +int set_parent(struct clk *clk, struct clk *parent); + +/** + * enable() - Enable a clock. + * @clk: The clock to manipulate. + * + * Return: zero on success, or -ve error code. + */ +int enable(struct clk *clk); + +/** + * disable() - Disable a clock. + * @clk: The clock to manipulate. + * + * Return: zero on success, or -ve error code. + */ +int disable(struct clk *clk); +#endif + #endif |