Zephyr Project API  3.2.0
A Scalable Open Source RTOS
reset.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2022 Andrei-Edward Popa <andrei.popa105@yahoo.com>
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12#ifndef ZEPHYR_INCLUDE_DRIVERS_RESET_H_
13#define ZEPHYR_INCLUDE_DRIVERS_RESET_H_
14
22#include <zephyr/types.h>
23#include <zephyr/device.h>
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
32 const struct device *dev;
35};
36
67#define RESET_DT_SPEC_GET_BY_IDX(node_id, idx) \
68 { \
69 .dev = DEVICE_DT_GET(DT_RESET_CTLR_BY_IDX(node_id, idx)), \
70 .id = DT_RESET_ID_BY_IDX(node_id, idx) \
71 }
72
80#define RESET_DT_SPEC_GET(node_id) \
81 RESET_DT_SPEC_GET_BY_IDX(node_id, 0)
82
92#define RESET_DT_SPEC_INST_GET_BY_IDX(inst, idx) \
93 RESET_DT_SPEC_GET_BY_IDX(DT_DRV_INST(inst), idx)
94
102#define RESET_DT_SPEC_INST_GET(inst) \
103 RESET_DT_SPEC_INST_GET_BY_IDX(inst, 0)
104
112typedef int (*reset_api_status)(const struct device *dev, uint32_t id, uint8_t *status);
113
119typedef int (*reset_api_line_assert)(const struct device *dev, uint32_t id);
120
126typedef int (*reset_api_line_deassert)(const struct device *dev, uint32_t id);
127
133typedef int (*reset_api_line_toggle)(const struct device *dev, uint32_t id);
134
138__subsystem struct reset_driver_api {
139 reset_api_status status;
140 reset_api_line_assert line_assert;
141 reset_api_line_deassert line_deassert;
142 reset_api_line_toggle line_toggle;
143};
144
160__syscall int reset_status(const struct device *dev, uint32_t id, uint8_t *status);
161
162static inline int z_impl_reset_status(const struct device *dev, uint32_t id, uint8_t *status)
163{
164 const struct reset_driver_api *api = (const struct reset_driver_api *)dev->api;
165
166 if (api->status == NULL) {
167 return -ENOSYS;
168 }
169
170 return api->status(dev, id, status);
171}
172
185static inline int reset_status_dt(const struct reset_dt_spec *spec, uint8_t *status)
186{
187 return reset_status(spec->dev, spec->id, status);
188}
189
203__syscall int reset_line_assert(const struct device *dev, uint32_t id);
204
205static inline int z_impl_reset_line_assert(const struct device *dev, uint32_t id)
206{
207 const struct reset_driver_api *api = (const struct reset_driver_api *)dev->api;
208
209 if (api->line_assert == NULL) {
210 return -ENOSYS;
211 }
212
213 return api->line_assert(dev, id);
214}
215
227static inline int reset_line_assert_dt(const struct reset_dt_spec *spec)
228{
229 return reset_line_assert(spec->dev, spec->id);
230}
231
245__syscall int reset_line_deassert(const struct device *dev, uint32_t id);
246
247static inline int z_impl_reset_line_deassert(const struct device *dev, uint32_t id)
248{
249 const struct reset_driver_api *api = (const struct reset_driver_api *)dev->api;
250
251 if (api->line_deassert == NULL) {
252 return -ENOSYS;
253 }
254
255 return api->line_deassert(dev, id);
256}
257
269static inline int reset_line_deassert_dt(const struct reset_dt_spec *spec)
270{
271 return reset_line_deassert(spec->dev, spec->id);
272}
273
286__syscall int reset_line_toggle(const struct device *dev, uint32_t id);
287
288static inline int z_impl_reset_line_toggle(const struct device *dev, uint32_t id)
289{
290 const struct reset_driver_api *api = (const struct reset_driver_api *)dev->api;
291
292 if (api->line_toggle == NULL) {
293 return -ENOSYS;
294 }
295
296 return api->line_toggle(dev, id);
297}
298
310static inline int reset_line_toggle_dt(const struct reset_dt_spec *spec)
311{
312 return reset_line_toggle(spec->dev, spec->id);
313}
314
319#ifdef __cplusplus
320}
321#endif
322
323#include <syscalls/reset.h>
324
325#endif /* ZEPHYR_INCLUDE_DRIVERS_RESET_H_ */
int reset_line_toggle(const struct device *dev, uint32_t id)
Reset the device.
static int reset_line_deassert_dt(const struct reset_dt_spec *spec)
Deassert the reset state from a reset_dt_spec.
Definition: reset.h:269
static int reset_status_dt(const struct reset_dt_spec *spec, uint8_t *status)
Get the reset status from a reset_dt_spec.
Definition: reset.h:185
int reset_line_deassert(const struct device *dev, uint32_t id)
Take out the device from reset state.
int reset_line_assert(const struct device *dev, uint32_t id)
Put the device in reset state.
static int reset_line_assert_dt(const struct reset_dt_spec *spec)
Assert the reset state from a reset_dt_spec.
Definition: reset.h:227
int reset_status(const struct device *dev, uint32_t id, uint8_t *status)
Get the reset status.
static int reset_line_toggle_dt(const struct reset_dt_spec *spec)
Reset the device from a reset_dt_spec.
Definition: reset.h:310
#define ENOSYS
Definition: errno.h:83
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
Runtime device structure (in ROM) per driver instance.
Definition: device.h:435
const void * api
Definition: device.h:441
Definition: reset.h:30
const struct device * dev
Definition: reset.h:32
uint32_t id
Definition: reset.h:34