| /* |
| * Google LWIS Clock Interface |
| * |
| * Copyright (c) 2018 Google, LLC |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| */ |
| |
| #ifndef LWIS_CLOCK_H_ |
| #define LWIS_CLOCK_H_ |
| |
| #include <linux/clk.h> |
| #include <linux/device.h> |
| |
| /* |
| * LWIS Clock Structures |
| */ |
| |
| struct lwis_clock { |
| struct clk *clk; |
| char *name; |
| uint32_t rate; |
| }; |
| |
| struct lwis_clock_list { |
| struct lwis_clock *clk; |
| int count; |
| }; |
| |
| /* |
| * LWIS Clock Interface Functions |
| */ |
| |
| /* |
| * lwis_clock_list_alloc: Allocate an instance of the lwis_clock_list |
| * and initialize the data structures according to the number of clocks |
| * specified. |
| * NOTE: This does not register the clock structs. |
| */ |
| struct lwis_clock_list *lwis_clock_list_alloc(int num_clks); |
| |
| /* |
| * lwis_clock_list_free: Deallocate the lwis_clock_list structure. |
| */ |
| void lwis_clock_list_free(struct lwis_clock_list *list); |
| |
| /* |
| * lwis_clock_get: Register the clock by name and store its assigned |
| * clock rate. |
| * Returns: index number (>= 0) if success, -ve if error |
| */ |
| int lwis_clock_get(struct lwis_clock_list *list, char *name, struct device *dev, uint32_t rate); |
| |
| /* |
| * lwis_clock_put_by_idx: Unregister the clock by index. |
| * Returns: 0 if success, -ve if error |
| */ |
| int lwis_clock_put_by_idx(struct lwis_clock_list *list, int index, struct device *dev); |
| |
| /* |
| * lwis_clock_put_by_name: Unregister the clock by name. |
| * Returns: 0 if success, -ve if error |
| */ |
| int lwis_clock_put_by_name(struct lwis_clock_list *list, char *name, struct device *dev); |
| |
| /* |
| * lwis_clock_enable_by_idx: Enable clock by index. |
| * Returns: 0 if success, -ve if error |
| */ |
| int lwis_clock_enable_by_idx(struct lwis_clock_list *list, int index); |
| |
| /* |
| * lwis_clock_enable_by_name: Enable clock by name. |
| * Returns: 0 if success, -ve if error |
| */ |
| int lwis_clock_enable_by_name(struct lwis_clock_list *list, char *name); |
| |
| /* |
| * lwis_clock_enable_all: Enable all clocks. |
| * Returns: 0 if success, -ve if error |
| */ |
| int lwis_clock_enable_all(struct lwis_clock_list *list); |
| |
| /* |
| * lwis_clock_disable_by_idx: Disable clock by index. |
| */ |
| void lwis_clock_disable_by_idx(struct lwis_clock_list *list, int index); |
| |
| /* |
| * lwis_clock_disable_by_name: Disable clock by name. |
| */ |
| void lwis_clock_disable_by_name(struct lwis_clock_list *list, char *name); |
| |
| /* |
| * lwis_clock_disable_all: Disable all clocks. |
| */ |
| void lwis_clock_disable_all(struct lwis_clock_list *list); |
| |
| /* |
| * lwis_clock_print: Debug function to print all the clocks in the |
| * supplied list. |
| */ |
| void lwis_clock_print(struct lwis_clock_list *list); |
| |
| #endif /* LWIS_CLOCK_H_ */ |