This contains accessor macros for getting the maximum bitrate supported by a CAN controller/transceiver combination. Signed-off-by: Henrik Brix Andersen <hebad@vestas.com>
87 lines
2.3 KiB
C
87 lines
2.3 KiB
C
/**
|
|
* @file
|
|
* @brief CAN devicetree macro public API header file.
|
|
*/
|
|
|
|
/*
|
|
* Copyright (c) 2022 Vestas Wind Systems A/S
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef ZEPHYR_INCLUDE_DEVICETREE_CAN_H_
|
|
#define ZEPHYR_INCLUDE_DEVICETREE_CAN_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @defgroup devicetree-can Devicetree CAN API
|
|
* @ingroup devicetree
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief Get the maximum transceiver bitrate for a CAN controller
|
|
*
|
|
* The bitrate will be limited to the maximum bitrate supported by the CAN
|
|
* controller. If no CAN transceiver is present in the devicetree, the maximum
|
|
* bitrate will be that of the CAN controller.
|
|
*
|
|
* Example devicetree fragment:
|
|
*
|
|
* transceiver0: can-phy0 {
|
|
* compatible = "vnd,can-transceiver";
|
|
* max-bitrate = <1000000>;
|
|
* #phy-cells = <0>;
|
|
* };
|
|
*
|
|
* can0: can@... {
|
|
* compatible = "vnd,can-controller";
|
|
* phys = <&transceiver0>;
|
|
* };
|
|
*
|
|
* can1: can@... {
|
|
* compatible = "vnd,can-controller";
|
|
*
|
|
* can-transceiver {
|
|
* max-bitrate = <2000000>;
|
|
* };
|
|
* };
|
|
*
|
|
* Example usage:
|
|
*
|
|
* DT_CAN_TRANSCEIVER_MAX_BITRATE(DT_NODELABEL(can0), 5000000) // 1000000
|
|
* DT_CAN_TRANSCEIVER_MAX_BITRATE(DT_NODELABEL(can1), 5000000) // 2000000
|
|
* DT_CAN_TRANSCEIVER_MAX_BITRATE(DT_NODELABEL(can1), 1000000) // 1000000
|
|
*
|
|
* @param node_id node identifier
|
|
* @param max maximum bitrate supported by the CAN controller
|
|
* @return the maximum bitrate supported by the CAN controller/transceiver combination
|
|
*/
|
|
#define DT_CAN_TRANSCEIVER_MAX_BITRATE(node_id, max) \
|
|
COND_CODE_1(DT_NODE_HAS_PROP(node_id, phys), \
|
|
MIN(DT_PROP(DT_PHANDLE(node_id, phys), max_bitrate), max), \
|
|
MIN(DT_PROP_OR(DT_CHILD(node_id, can_transceiver), max_bitrate, max), max))
|
|
|
|
/**
|
|
* @brief Get the maximum transceiver bitrate for a DT_DRV_COMPAT CAN controller
|
|
* @param inst DT_DRV_COMPAT instance number
|
|
* @param max maximum bitrate supported by the CAN controller
|
|
* @return the maximum bitrate supported by the CAN controller/transceiver combination
|
|
* @see DT_CAN_TRANSCEIVER_MAX_BITRATE()
|
|
*/
|
|
#define DT_INST_CAN_TRANSCEIVER_MAX_BITRATE(inst, max) \
|
|
DT_CAN_TRANSCEIVER_MAX_BITRATE(DT_DRV_INST(inst), max)
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* ZEPHYR_INCLUDE_DEVICETREE_CAN_H_ */
|