You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
886 B
41 lines
886 B
/* |
|
* Copyright 2021 Google LLC. |
|
* SPDX-License-Identifier: Apache-2.0 |
|
*/ |
|
|
|
#ifndef DRIVERS_SYSCON_SYSCON_COMMON_H_ |
|
#define DRIVERS_SYSCON_SYSCON_COMMON_H_ |
|
|
|
#include <zephyr/sys/util.h> |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
/** |
|
* @brief Align and check register address |
|
* |
|
* @param reg Pointer to the register address in question. |
|
* @param reg_size The size of the syscon register region. |
|
* @param reg_width The width of a single register (in bytes). |
|
* @return 0 if the register read is valid. |
|
* @return -EINVAL is the read is invalid. |
|
*/ |
|
static inline int syscon_sanitize_reg(uint16_t *reg, size_t reg_size, uint8_t reg_width) |
|
{ |
|
/* Avoid unaligned readings */ |
|
*reg = ROUND_DOWN(*reg, reg_width); |
|
|
|
/* Check for out-of-bounds readings */ |
|
if (*reg >= reg_size) { |
|
return -EINVAL; |
|
} |
|
|
|
return 0; |
|
} |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
|
|
#endif /* DRIVERS_SYSCON_SYSCON_COMMON_H_ */
|
|
|