Zephyr API Documentation  3.0.0
A Scalable Open Source RTOS
3.0.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
clock_control.h
Go to the documentation of this file.
1/* clock_control.h - public clock controller driver API */
2
3/*
4 * Copyright (c) 2015 Intel Corporation
5 *
6 * SPDX-License-Identifier: Apache-2.0
7 */
8
14#ifndef ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_H_
15#define ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_H_
16
24#include <zephyr/types.h>
25#include <stddef.h>
26#include <device.h>
27#include <sys/__assert.h>
28#include <sys/slist.h>
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34/* Clock control API */
35
36/* Used to select all subsystem of a clock controller */
37#define CLOCK_CONTROL_SUBSYS_ALL NULL
38
48};
49
56
64
71typedef void (*clock_control_cb_t)(const struct device *dev,
73 void *user_data);
74
75typedef int (*clock_control)(const struct device *dev,
77
78typedef int (*clock_control_get)(const struct device *dev,
80 uint32_t *rate);
81
82typedef int (*clock_control_async_on_fn)(const struct device *dev,
85 void *user_data);
86
88 const struct device *dev,
90
91typedef int (*clock_control_set)(const struct device *dev,
94
102};
103
117static inline int clock_control_on(const struct device *dev,
119{
120 if (!device_is_ready(dev)) {
121 return -ENODEV;
122 }
123
124 const struct clock_control_driver_api *api =
125 (const struct clock_control_driver_api *)dev->api;
126
127 return api->on(dev, sys);
128}
129
140static inline int clock_control_off(const struct device *dev,
142{
143 if (!device_is_ready(dev)) {
144 return -ENODEV;
145 }
146
147 const struct clock_control_driver_api *api =
148 (const struct clock_control_driver_api *)dev->api;
149
150 return api->off(dev, sys);
151}
152
170static inline int clock_control_async_on(const struct device *dev,
173 void *user_data)
174{
175 const struct clock_control_driver_api *api =
176 (const struct clock_control_driver_api *)dev->api;
177
178 if (api->async_on == NULL) {
179 return -ENOSYS;
180 }
181
182 if (!device_is_ready(dev)) {
183 return -ENODEV;
184 }
185
186 return api->async_on(dev, sys, cb, user_data);
187}
188
197static inline enum clock_control_status clock_control_get_status(const struct device *dev,
199{
200 const struct clock_control_driver_api *api =
201 (const struct clock_control_driver_api *)dev->api;
202
203 if (!api->get_status) {
205 }
206
207 if (!device_is_ready(dev)) {
209 }
210
211 return api->get_status(dev, sys);
212}
213
221static inline int clock_control_get_rate(const struct device *dev,
223 uint32_t *rate)
224{
225 if (!device_is_ready(dev)) {
226 return -ENODEV;
227 }
228
229 const struct clock_control_driver_api *api =
230 (const struct clock_control_driver_api *)dev->api;
231
232 if (api->get_rate == NULL) {
233 return -ENOSYS;
234 }
235
236 return api->get_rate(dev, sys, rate);
237}
238
255static inline int clock_control_set_rate(const struct device *dev,
258{
259 if (!device_is_ready(dev)) {
260 return -ENODEV;
261 }
262
263 const struct clock_control_driver_api *api =
264 (const struct clock_control_driver_api *)dev->api;
265
266 if (api->set_rate == NULL) {
267 return -ENOSYS;
268 }
269
270 return api->set_rate(dev, sys, rate);
271}
272
273
274#ifdef __cplusplus
275}
276#endif
277
282#endif /* ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_H_ */
static int clock_control_get_rate(const struct device *dev, clock_control_subsys_t sys, uint32_t *rate)
Obtain the clock rate of given sub-system.
Definition: clock_control.h:221
static int clock_control_async_on(const struct device *dev, clock_control_subsys_t sys, clock_control_cb_t cb, void *user_data)
Request clock to start with notification when clock has been started.
Definition: clock_control.h:170
void * clock_control_subsys_rate_t
Definition: clock_control.h:63
enum clock_control_status(* clock_control_get_status_fn)(const struct device *dev, clock_control_subsys_t sys)
Definition: clock_control.h:87
int(* clock_control_async_on_fn)(const struct device *dev, clock_control_subsys_t sys, clock_control_cb_t cb, void *user_data)
Definition: clock_control.h:82
void(* clock_control_cb_t)(const struct device *dev, clock_control_subsys_t subsys, void *user_data)
Callback called on clock started.
Definition: clock_control.h:71
static enum clock_control_status clock_control_get_status(const struct device *dev, clock_control_subsys_t sys)
Get clock status.
Definition: clock_control.h:197
static int clock_control_set_rate(const struct device *dev, clock_control_subsys_t sys, clock_control_subsys_rate_t rate)
Set the rate of the clock controlled by the device.
Definition: clock_control.h:255
int(* clock_control_get)(const struct device *dev, clock_control_subsys_t sys, uint32_t *rate)
Definition: clock_control.h:78
int(* clock_control)(const struct device *dev, clock_control_subsys_t sys)
Definition: clock_control.h:75
int(* clock_control_set)(const struct device *dev, clock_control_subsys_t sys, clock_control_subsys_rate_t rate)
Definition: clock_control.h:91
void * clock_control_subsys_t
Definition: clock_control.h:55
clock_control_status
Current clock status.
Definition: clock_control.h:42
static int clock_control_off(const struct device *dev, clock_control_subsys_t sys)
Disable a clock controlled by the device.
Definition: clock_control.h:140
static int clock_control_on(const struct device *dev, clock_control_subsys_t sys)
Enable a clock controlled by the device.
Definition: clock_control.h:117
@ CLOCK_CONTROL_STATUS_ON
Definition: clock_control.h:45
@ CLOCK_CONTROL_STATUS_OFF
Definition: clock_control.h:44
@ CLOCK_CONTROL_STATUS_UNKNOWN
Definition: clock_control.h:47
@ CLOCK_CONTROL_STATUS_UNAVAILABLE
Definition: clock_control.h:46
@ CLOCK_CONTROL_STATUS_STARTING
Definition: clock_control.h:43
bool device_is_ready(const struct device *dev)
Verify that a device is ready for use.
#define ENOSYS
Definition: errno.h:83
#define ENODEV
Definition: errno.h:58
Single-linked list implementation.
__UINT32_TYPE__ uint32_t
Definition: stdint.h:60
Definition: clock_control.h:95
clock_control_set set_rate
Definition: clock_control.h:101
clock_control on
Definition: clock_control.h:96
clock_control_get_status_fn get_status
Definition: clock_control.h:100
clock_control off
Definition: clock_control.h:97
clock_control_async_on_fn async_on
Definition: clock_control.h:98
clock_control_get get_rate
Definition: clock_control.h:99
Runtime device structure (in ROM) per driver instance.
Definition: device.h:450
const void * api
Definition: device.h:456
static const intptr_t user_data[5]
Definition: main.c:590