Line data Source code
1 0 : /* 2 : * Copyright (c) 2024, STRIM, ALC 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : #ifndef ZEPHYR_DRIVERS_MISC_NXP_FLEXIO_NXP_FLEXIO_H_ 8 : #define ZEPHYR_DRIVERS_MISC_NXP_FLEXIO_NXP_FLEXIO_H_ 9 : 10 : #include <zephyr/device.h> 11 : 12 : /** 13 : * @struct nxp_flexio_child_res 14 : * @brief Structure containing information about the required 15 : * resources for a FlexIO child. 16 : */ 17 1 : struct nxp_flexio_child_res { 18 0 : uint8_t *shifter_index; 19 0 : uint8_t shifter_count; 20 0 : uint8_t *timer_index; 21 0 : uint8_t timer_count; 22 : }; 23 : 24 : /** 25 : * @typedef nxp_flexio_child_isr_t 26 : * @brief Callback API to inform API user that FlexIO triggered interrupt 27 : * 28 : * This callback is called from IRQ context. 29 : */ 30 1 : typedef int (*nxp_flexio_child_isr_t)(void *user_data); 31 : 32 : /** 33 : * @struct nxp_flexio_child 34 : * @brief Structure containing the required child data for FlexIO 35 : */ 36 1 : struct nxp_flexio_child { 37 0 : nxp_flexio_child_isr_t isr; 38 0 : void *user_data; 39 0 : struct nxp_flexio_child_res res; 40 : }; 41 : 42 : /** 43 : * @brief Enable FlexIO IRQ 44 : * @param dev Pointer to the device structure for the FlexIO driver instance 45 : */ 46 1 : void nxp_flexio_irq_enable(const struct device *dev); 47 : 48 : /** 49 : * @brief Disable FlexIO IRQ 50 : * @param dev Pointer to the device structure for the FlexIO driver instance 51 : */ 52 1 : void nxp_flexio_irq_disable(const struct device *dev); 53 : 54 : /** 55 : * @brief Lock FlexIO mutex. 56 : * @param dev Pointer to the device structure for the FlexIO driver instance 57 : */ 58 1 : void nxp_flexio_lock(const struct device *dev); 59 : 60 : /** 61 : * @brief Unlock FlexIO mutex. 62 : * @param dev Pointer to the device structure for the FlexIO driver instance 63 : */ 64 1 : void nxp_flexio_unlock(const struct device *dev); 65 : 66 : /** 67 : * @brief Obtain the clock rate of sub-system used by the FlexIO 68 : * @param dev Pointer to the device structure for the FlexIO driver instance 69 : * @param[out] rate Subsystem clock rate 70 : * @retval 0 on successful rate reading. 71 : * @retval -EAGAIN if rate cannot be read. Some drivers do not support returning the rate when the 72 : * clock is off. 73 : * @retval -ENOTSUP if reading the clock rate is not supported for the given sub-system. 74 : * @retval -ENOSYS if the interface is not implemented. 75 : */ 76 1 : int nxp_flexio_get_rate(const struct device *dev, uint32_t *rate); 77 : 78 : /** 79 : * @brief Attach flexio child to flexio controller 80 : * @param dev Pointer to the device structure for the FlexIO driver instance 81 : * @param child Pointer to flexio child 82 : * @retval 0 if successful 83 : * @retval -ENOBUFS if there are not enough available resources 84 : */ 85 1 : int nxp_flexio_child_attach(const struct device *dev, 86 : const struct nxp_flexio_child *child); 87 : 88 : #endif /* ZEPHYR_DRIVERS_MISC_NXP_FLEXIO_NXP_FLEXIO_H_ */