no-OS
no_os_clk.h
Go to the documentation of this file.
1 /***************************************************************************/
39 #ifndef _NO_OS_CLK_H_
40 #define _NO_OS_CLK_H_
41 
42 /******************************************************************************/
43 /***************************** Include Files **********************************/
44 /******************************************************************************/
45 #include <stdint.h>
46 
47 /******************************************************************************/
48 /************************* Structure Declarations *****************************/
49 /******************************************************************************/
52  const char *name;
54  uint8_t hw_ch_num;
58  void *dev_desc;
59 };
60 
61 struct no_os_clk_hw {
62  void *dev;
63  int32_t (*dev_clk_enable)();
64  int32_t (*dev_clk_disable)();
65  int32_t (*dev_clk_recalc_rate)();
66  int32_t (*dev_clk_set_rate)();
67  int32_t (*dev_clk_round_rate)();
68 };
69 
70 struct no_os_clk {
71  struct no_os_clk_hw *hw;
72  uint32_t hw_ch_num;
73  const char *name;
74  const struct no_os_clk_desc *clk_desc;
75 };
76 
81 typedef struct no_os_clk_desc {
83  const char *name;
85  uint8_t hw_ch_num;
89  void *dev_desc;
91 
99  int (*init)(struct no_os_clk_desc **, const struct no_os_clk_init_param *);
101  int (*clk_enable)(struct no_os_clk_desc *);
103  int (*clk_disable)(struct no_os_clk_desc *);
105  int (*clk_recalc_rate)(struct no_os_clk_desc *, uint64_t *);
106  /* Round the desired frequency to a rate that CLK can actually output. */
107  int (*clk_round_rate)(struct no_os_clk_desc *, uint64_t, uint64_t *);
108  /* Change CLK frequency function pointer. */
109  int (*clk_set_rate)(struct no_os_clk_desc *, uint64_t);
111  int (*remove)(struct no_os_clk_desc *);
112 };
113 
114 /******************************************************************************/
115 /************************ Functions Declarations ******************************/
116 /******************************************************************************/
117 
118 /* Initialize CLK ops. */
119 int32_t no_os_clk_init(struct no_os_clk_desc **desc,
120  const struct no_os_clk_init_param *param);
121 
122 /* Free the resources allocated by no_os_clk_init(). */
123 int32_t no_os_clk_remove(struct no_os_clk_desc *desc);
124 
125 /* Start the clock. */
126 int32_t no_os_clk_enable(struct no_os_clk_desc *desc);
127 
128 /* Stop the clock. */
129 int32_t no_os_clk_disable(struct no_os_clk_desc *desc);
130 
131 /* Get the current frequency of the clock. */
132 int32_t no_os_clk_recalc_rate(struct no_os_clk_desc *desc,
133  uint64_t *rate);
134 
135 /* Round the desired frequency to a rate that the clock can actually output. */
136 int32_t no_os_clk_round_rate(struct no_os_clk_desc *desc,
137  uint64_t rate,
138  uint64_t *rounded_rate);
139 
140 /* Change the frequency of the clock. */
141 int32_t no_os_clk_set_rate(struct no_os_clk_desc *desc,
142  uint64_t rate);
143 
144 #endif // _NO_OS_CLK_H_
no_os_clk_hw::dev_clk_round_rate
int32_t(* dev_clk_round_rate)()
Definition: no_os_clk.h:67
no_os_clk::hw
struct no_os_clk_hw * hw
Definition: no_os_clk.h:71
no_os_clk_platform_ops::remove
int(* remove)(struct no_os_clk_desc *)
Definition: no_os_clk.h:111
no_os_clk_init_param::platform_ops
const struct no_os_clk_platform_ops * platform_ops
Definition: no_os_clk.h:56
no_os_clk_hw
Definition: no_os_clk.h:61
no_os_clk_hw::dev_clk_recalc_rate
int32_t(* dev_clk_recalc_rate)()
Definition: no_os_clk.h:65
no_os_clk_init_param::name
const char * name
Definition: no_os_clk.h:52
no_os_clk_enable
int32_t no_os_clk_enable(struct no_os_clk_desc *desc)
no_os_clk
Definition: no_os_clk.h:70
no_os_clk_init
int32_t no_os_clk_init(struct no_os_clk_desc **desc, const struct no_os_clk_init_param *param)
no_os_clk_platform_ops::clk_recalc_rate
int(* clk_recalc_rate)(struct no_os_clk_desc *, uint64_t *)
Definition: no_os_clk.h:105
no_os_clk::name
const char * name
Definition: no_os_clk.h:73
no_os_clk::clk_desc
const struct no_os_clk_desc * clk_desc
Definition: no_os_clk.h:74
no_os_clk_disable
int32_t no_os_clk_disable(struct no_os_clk_desc *desc)
no_os_clk_platform_ops::clk_set_rate
int(* clk_set_rate)(struct no_os_clk_desc *, uint64_t)
Definition: no_os_clk.h:109
no_os_clk_desc::name
const char * name
Definition: no_os_clk.h:83
no_os_clk_set_rate
int32_t no_os_clk_set_rate(struct no_os_clk_desc *desc, uint64_t rate)
no_os_clk_desc
struct no_os_clk_desc no_os_clk_desc
no_os_clk_desc::hw_ch_num
uint8_t hw_ch_num
Definition: no_os_clk.h:85
no_os_clk_desc
Structure holding CLK descriptor.
Definition: no_os_clk.h:81
no_os_clk_hw::dev
void * dev
Definition: no_os_clk.h:62
no_os_clk::hw_ch_num
uint32_t hw_ch_num
Definition: no_os_clk.h:72
no_os_clk_init_param::dev_desc
void * dev_desc
Definition: no_os_clk.h:58
no_os_clk_hw::dev_clk_enable
int32_t(* dev_clk_enable)()
Definition: no_os_clk.h:63
no_os_clk_init_param
Definition: no_os_clk.h:50
no_os_clk_remove
int32_t no_os_clk_remove(struct no_os_clk_desc *desc)
no_os_clk_hw::dev_clk_disable
int32_t(* dev_clk_disable)()
Definition: no_os_clk.h:64
no_os_clk_platform_ops::clk_round_rate
int(* clk_round_rate)(struct no_os_clk_desc *, uint64_t, uint64_t *)
Definition: no_os_clk.h:107
no_os_clk_desc::platform_ops
const struct no_os_clk_platform_ops * platform_ops
Definition: no_os_clk.h:87
no_os_clk_platform_ops
Structure holding CLK function pointers that point to the platform specific function.
Definition: no_os_clk.h:97
no_os_clk_platform_ops::init
int(* init)(struct no_os_clk_desc **, const struct no_os_clk_init_param *)
Definition: no_os_clk.h:99
no_os_clk_desc::dev_desc
void * dev_desc
Definition: no_os_clk.h:89
no_os_clk_init_param::hw_ch_num
uint8_t hw_ch_num
Definition: no_os_clk.h:54
no_os_clk_hw::dev_clk_set_rate
int32_t(* dev_clk_set_rate)()
Definition: no_os_clk.h:66
no_os_clk_platform_ops::clk_enable
int(* clk_enable)(struct no_os_clk_desc *)
Definition: no_os_clk.h:101
no_os_clk_platform_ops::clk_disable
int(* clk_disable)(struct no_os_clk_desc *)
Definition: no_os_clk.h:103
no_os_clk_recalc_rate
int32_t no_os_clk_recalc_rate(struct no_os_clk_desc *desc, uint64_t *rate)
no_os_clk_round_rate
int32_t no_os_clk_round_rate(struct no_os_clk_desc *desc, uint64_t rate, uint64_t *rounded_rate)