1 /****************************************************************************** 2 * 3 * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by 4 * Analog Devices, Inc.), 5 * Copyright (C) 2023-2024 Analog Devices, Inc. 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * 19 ******************************************************************************/ 20 21 #ifndef LIBRARIES_PERIPHDRIVERS_SOURCE_CSI2_CSI2_REVA_H_ 22 #define LIBRARIES_PERIPHDRIVERS_SOURCE_CSI2_CSI2_REVA_H_ 23 24 /****** Includes *******/ 25 #include <stdint.h> 26 #include "csi2.h" 27 #include "dma.h" 28 #include "dma_reva.h" 29 #include "csi2_reva_regs.h" 30 31 /***** Definitions *****/ 32 33 /** 34 * @brief Enumeration type for the CSI-2 FIFO Triggers. 35 */ 36 typedef enum { 37 MXC_CSI2_REVA_FF_TRIG_NO_TRIGGER = 0, ///< No FIFO Trigger 38 MXC_CSI2_REVA_FF_TRIG_NOT_EMPTY = MXC_F_CSI2_REVA_RX_EINT_VFF_IF_FNEMPTY, ///< FIFO Not Empty 39 MXC_CSI2_REVA_FF_TRIG_ABV_THD = MXC_F_CSI2_REVA_RX_EINT_VFF_IF_FTHD, ///< FIFO Above Threshold 40 MXC_CSI2_REVA_FF_TRIG_FULL = MXC_F_CSI2_REVA_RX_EINT_VFF_IF_FFULL, ///< FIFO Full 41 } mxc_csi2_reva_fifo_trig_t; 42 43 typedef struct { 44 bool success; 45 uint32_t ctrl_err; 46 uint32_t ppi_err; 47 uint32_t vfifo_err; 48 size_t frame_size; 49 size_t bytes_captured; 50 } mxc_csi2_reva_capture_stats_t; 51 52 /******* Globals *******/ 53 54 /****** Functions ******/ 55 56 /******************************************/ 57 /* Global Control/Configuration Functions */ 58 /******************************************/ 59 60 int MXC_CSI2_RevA_Init(mxc_csi2_reva_regs_t *csi2, mxc_csi2_req_t *req, 61 mxc_csi2_ctrl_cfg_t *ctrl_cfg, mxc_csi2_vfifo_cfg_t *vfifo_cfg); 62 63 int MXC_CSI2_RevA_Shutdown(mxc_csi2_reva_regs_t *csi2); 64 65 int MXC_CSI2_RevA_Start(mxc_csi2_reva_regs_t *csi2, int num_data_lanes); 66 67 int MXC_CSI2_RevA_Stop(mxc_csi2_reva_regs_t *csi2); 68 69 int MXC_CSI2_RevA_CaptureFrameDMA(); 70 71 int MXC_CSI2_RevA_SetLaneCtrlSource(mxc_csi2_reva_regs_t *csi2, mxc_csi2_lane_src_t *src); 72 73 int MXC_CSI2_RevA_GetLaneCtrlSource(mxc_csi2_reva_regs_t *csi2, mxc_csi2_lane_src_t *src); 74 75 void MXC_CSI2_RevA_GetImageDetails(uint32_t *imgLen, uint32_t *w, uint32_t *h); 76 77 int MXC_CSI2_RevA_Callback(mxc_csi2_req_t *req, int retVal); 78 79 void MXC_CSI2_RevA_Handler(); 80 81 /********************************/ 82 /* CSI2 RX Controller Functions */ 83 /********************************/ 84 85 int MXC_CSI2_RevA_CTRL_Config(mxc_csi2_reva_regs_t *csi2, mxc_csi2_ctrl_cfg_t *cfg); 86 87 void MXC_CSI2_RevA_CTRL_EnableInt(mxc_csi2_reva_regs_t *csi2, uint32_t mask); 88 89 void MXC_CSI2_RevA_CTRL_DisableInt(mxc_csi2_reva_regs_t *csi2, uint32_t mask); 90 91 int MXC_CSI2_RevA_CTRL_GetFlags(mxc_csi2_reva_regs_t *csi2); 92 93 void MXC_CSI2_RevA_CTRL_ClearFlags(mxc_csi2_reva_regs_t *csi2, uint32_t flags); 94 95 /************************/ 96 /* CSI2 VFIFO Functions */ 97 /************************/ 98 99 int MXC_CSI2_RevA_VFIFO_Config(mxc_csi2_reva_regs_t *csi2, mxc_csi2_vfifo_cfg_t *cfg); 100 101 int MXC_CSI2_RevA_VFIFO_ProcessRAWtoRGB(mxc_csi2_reva_regs_t *csi2, mxc_csi2_req_t *req); 102 103 int MXC_CSI2_RevA_VFIFO_NextFIFOTrigMode(mxc_csi2_reva_regs_t *csi2, uint8_t ff_not_empty, 104 uint8_t ff_abv_thd, uint8_t ff_full); 105 106 void MXC_CSI2_RevA_VFIFO_EnableInt(mxc_csi2_reva_regs_t *csi2, uint32_t mask, uint32_t edge); 107 108 void MXC_CSI2_RevA_VFIFO_ChangeIntMode(mxc_csi2_reva_regs_t *csi2, uint32_t mask, uint32_t edge); 109 110 void MXC_CSI2_RevA_VFIFO_DisableInt(mxc_csi2_reva_regs_t *csi2, uint32_t mask); 111 112 int MXC_CSI2_RevA_VFIFO_GetFlags(mxc_csi2_reva_regs_t *csi2); 113 114 void MXC_CSI2_RevA_VFIFO_ClearFlags(mxc_csi2_reva_regs_t *csi2, uint32_t flags); 115 116 int MXC_CSI2_RevA_VFIFO_Enable(mxc_csi2_reva_regs_t *csi2); 117 118 int MXC_CSI2_RevA_VFIFO_Disable(mxc_csi2_reva_regs_t *csi2); 119 120 int MXC_CSI2_RevA_VFIFO_SetPayloadType(mxc_csi2_reva_regs_t *csi2, mxc_csi2_payload0_t payload0, 121 mxc_csi2_payload1_t payload1); 122 123 int MXC_CSI2_RevA_VFIFO_GetPayloadType(mxc_csi2_reva_regs_t *csi2, uint32_t *payload0, 124 uint32_t *payload1); 125 126 int MXC_CSI2_RevA_VFIFO_SetDMAMode(mxc_csi2_reva_regs_t *csi2, mxc_csi2_dma_mode_t dma_mode); 127 128 mxc_csi2_dma_mode_t MXC_CSI2_RevA_VFIFO_GetDMAMode(mxc_csi2_reva_regs_t *csi2); 129 130 int MXC_CSI2_RevA_VFIFO_SetRGBType(mxc_csi2_reva_regs_t *csi2, mxc_csi2_rgb_type_t rgb_type); 131 132 mxc_csi2_rgb_type_t MXC_CSI2_RevA_VFIFO_GetRGBType(mxc_csi2_reva_regs_t *csi2); 133 134 int MXC_CSI2_RevA_VFIFO_SetRAWFormat(mxc_csi2_reva_regs_t *csi2, mxc_csi2_raw_format_t raw_format); 135 136 mxc_csi2_raw_format_t MXC_CSI2_RevA_VFIFO_GetRAWFormat(mxc_csi2_reva_regs_t *csi2); 137 138 int MXC_CSI2_RevA_VFIFO_GetFIFOEntityCount(mxc_csi2_reva_regs_t *csi2); 139 140 void MXC_CSI2_RevA_VFIFO_SetAHBWait(mxc_csi2_reva_regs_t *csi2, mxc_csi2_ahbwait_t wait_en); 141 142 mxc_csi2_ahbwait_t MXC_CSI2_RevA_VFIFO_GetAHBWait(mxc_csi2_reva_regs_t *csi2); 143 144 /***********************************************/ 145 /* CSI2 PHY Protocol Interface (PPI) Functions */ 146 /***********************************************/ 147 148 void MXC_CSI2_RevA_PPI_EnableInt(mxc_csi2_reva_regs_t *csi2, uint32_t mask); 149 150 void MXC_CSI2_RevA_PPI_DisableInt(mxc_csi2_reva_regs_t *csi2, uint32_t mask); 151 152 int MXC_CSI2_RevA_PPI_GetFlags(mxc_csi2_reva_regs_t *csi2); 153 154 void MXC_CSI2_RevA_PPI_ClearFlags(mxc_csi2_reva_regs_t *csi2, uint32_t flags); 155 156 int MXC_CSI2_RevA_PPI_Stop(void); 157 158 /************************************/ 159 /* CSI2 DMA - Used for all features */ 160 /************************************/ 161 162 mxc_csi2_reva_capture_stats_t MXC_CSI2_RevA_DMA_GetCaptureStats(); 163 164 bool MXC_CSI2_RevA_DMA_Frame_Complete(void); 165 166 int MXC_CSI2_RevA_DMA_Config(uint8_t *dst_addr, uint32_t byte_cnt, uint32_t burst_size); 167 168 int MXC_CSI2_RevA_DMA_GetChannel(void); 169 170 int MXC_CSI2_RevA_DMA_GetCurrentLineCnt(void); 171 172 int MXC_CSI2_RevA_DMA_GetCurrentFrameEndCnt(void); 173 174 void MXC_CSI2_RevA_DMA_Callback(); 175 176 #endif // LIBRARIES_PERIPHDRIVERS_SOURCE_CSI2_CSI2_REVA_H_ 177