Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
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
15#ifndef ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_H_
16#define ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_H_
17
31
32#include <errno.h>
33#include <stddef.h>
34
35#include <zephyr/types.h>
36#include <zephyr/device.h>
37#include <zephyr/sys/__assert.h>
38#include <zephyr/sys/slist.h>
39
40#ifdef __cplusplus
41extern "C" {
42#endif
43
44/* Clock control API */
45
47#define CLOCK_CONTROL_SUBSYS_ALL NULL
48
58
66
74
81typedef void (*clock_control_cb_t)(const struct device *dev,
83 void *user_data);
84
90
96typedef int (*clock_control)(const struct device *dev, clock_control_subsys_t sys);
97
103typedef int (*clock_control_get)(const struct device *dev,
105 uint32_t *rate);
106
112typedef int (*clock_control_async_on_fn)(const struct device *dev,
115 void *user_data);
116
123 const struct device *dev,
125
131typedef int (*clock_control_set)(const struct device *dev,
134
140typedef int (*clock_control_configure_fn)(const struct device *dev,
142 void *data);
143
163
165
179static inline int clock_control_on(const struct device *dev,
181{
182 const struct clock_control_driver_api *api = DEVICE_API_GET(clock_control, dev);
183
184 if (api->on == NULL) {
185 return -ENOSYS;
186 }
187
188 return api->on(dev, sys);
189}
190
201static inline int clock_control_off(const struct device *dev,
203{
204 const struct clock_control_driver_api *api = DEVICE_API_GET(clock_control, dev);
205
206 if (api->off == NULL) {
207 return -ENOSYS;
208 }
209
210 return api->off(dev, sys);
211}
212
230static inline int clock_control_async_on(const struct device *dev,
233 void *user_data)
234{
235 const struct clock_control_driver_api *api = DEVICE_API_GET(clock_control, dev);
236
237 if (api->async_on == NULL) {
238 return -ENOSYS;
239 }
240
241 return api->async_on(dev, sys, cb, user_data);
242}
243
252static inline enum clock_control_status clock_control_get_status(const struct device *dev,
254{
255 const struct clock_control_driver_api *api = DEVICE_API_GET(clock_control, dev);
256
257 if (!api->get_status) {
259 }
260
261 return api->get_status(dev, sys);
262}
263
276static inline int clock_control_get_rate(const struct device *dev,
278 uint32_t *rate)
279{
280 const struct clock_control_driver_api *api = DEVICE_API_GET(clock_control, dev);
281
282 if (api->get_rate == NULL) {
283 return -ENOSYS;
284 }
285
286 return api->get_rate(dev, sys, rate);
287}
288
305static inline int clock_control_set_rate(const struct device *dev,
308{
309 const struct clock_control_driver_api *api = DEVICE_API_GET(clock_control, dev);
310
311 if (api->set_rate == NULL) {
312 return -ENOSYS;
313 }
314
315 return api->set_rate(dev, sys, rate);
316}
317
340static inline int clock_control_configure(const struct device *dev,
342 void *data)
343{
344 const struct clock_control_driver_api *api = DEVICE_API_GET(clock_control, dev);
345
346 if (api->configure == NULL) {
347 return -ENOSYS;
348 }
349
350 return api->configure(dev, sys, data);
351}
352
353#ifdef __cplusplus
354}
355#endif
356
360
361#endif /* ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_H_ */
#define DEVICE_API_GET(_class, _dev)
Expands to the pointer of a device's API for a given class.
Definition device.h:1425
System error numbers.
enum clock_control_status(* clock_control_get_status_fn)(const struct device *dev, clock_control_subsys_t sys)
Callback API to get a clock status.
Definition clock_control.h:122
int(* clock_control_async_on_fn)(const struct device *dev, clock_control_subsys_t sys, clock_control_cb_t cb, void *user_data)
Callback API to start a clock asynchronously.
Definition clock_control.h:112
int(* clock_control_configure_fn)(const struct device *dev, clock_control_subsys_t sys, void *data)
Callback API to configure a clock.
Definition clock_control.h:140
int(* clock_control_get)(const struct device *dev, clock_control_subsys_t sys, uint32_t *rate)
Callback API to get a clock rate.
Definition clock_control.h:103
int(* clock_control)(const struct device *dev, clock_control_subsys_t sys)
Callback API to enable or disable a clock.
Definition clock_control.h:96
int(* clock_control_set)(const struct device *dev, clock_control_subsys_t sys, clock_control_subsys_rate_t rate)
Callback API to set a clock rate.
Definition clock_control.h:131
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:276
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:230
void * clock_control_subsys_rate_t
Opaque handle identifying the rate of a clock controller subsystem.
Definition clock_control.h:73
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:81
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:252
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:305
void * clock_control_subsys_t
Opaque handle identifying a clock controller subsystem.
Definition clock_control.h:65
clock_control_status
Current clock status.
Definition clock_control.h:52
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:201
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:179
static int clock_control_configure(const struct device *dev, clock_control_subsys_t sys, void *data)
Configure a source clock.
Definition clock_control.h:340
@ CLOCK_CONTROL_STATUS_ON
Clock is on.
Definition clock_control.h:55
@ CLOCK_CONTROL_STATUS_OFF
Clock is off.
Definition clock_control.h:54
@ CLOCK_CONTROL_STATUS_UNKNOWN
Clock status is unknown.
Definition clock_control.h:56
@ CLOCK_CONTROL_STATUS_STARTING
Clock is starting.
Definition clock_control.h:53
#define ENOSYS
Function not implemented.
Definition errno.h:82
Header file for the single-linked list API.
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
<span class="mlabel">Driver Operations</span> Clock Control driver operations
Definition clock_control.h:147
clock_control_set set_rate
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition clock_control.h:159
clock_control on
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition clock_control.h:149
clock_control_get_status_fn get_status
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition clock_control.h:157
clock_control off
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition clock_control.h:151
clock_control_async_on_fn async_on
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition clock_control.h:153
clock_control_get get_rate
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition clock_control.h:155
clock_control_configure_fn configure
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition clock_control.h:161
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
void * data
Address of the device instance private data.
Definition device.h:523