1 /* 2 * Copyright (c) 2021 HiSilicon (Shanghai) Technologies CO., LIMITED. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef MIPI_RX_HI2121_H 17 #define MIPI_RX_HI2121_H 18 19 #include "mipi_csi_core.h" 20 21 #define MIPI_RX_MAX_PHY_NUM 1 22 #define MIPI_RX_MAX_EXT_DATA_TYPE_BIT_WIDTH 16 23 #define MIPI_RX_MIN_EXT_DATA_TYPE_BIT_WIDTH 8 24 25 #define MIPI_CIL_INT_MASK 0x00003f3f 26 #define MIPI_CTRL_INT_MASK 0x00030003 27 #define LVDS_CTRL_INT_MASK 0x0f110000 /* lvds_vsync_msk and lane0~3_sync_err_msk ignore, not err int */ 28 #define MIPI_FRAME_INT_MASK 0x000f0000 29 #define MIPI_PKT_INT1_MASK 0x0001000f 30 #define MIPI_PKT_INT2_MASK 0x000f000f 31 #define ALIGN0_INT_MASK 0x0000001f 32 33 PhyErrIntCnt *MipiRxHalGetPhyErrIntCnt(unsigned int phyId); 34 MipiErrIntCnt *MipiRxHalGetMipiErrInt(unsigned int phyId); 35 LvdsErrIntCnt *MipiRxHalGetLvdsErrIntCnt(unsigned int phyId); 36 AlignErrIntCnt *MipiRxHalGetAlignErrIntCnt(unsigned int phyId); 37 38 /* sensor function */ 39 void SensorDrvEnableClock(uint8_t snsClkSource); 40 void SensorDrvDisableClock(uint8_t snsClkSource); 41 42 void SensorDrvReset(uint8_t snsResetSource); 43 void SensorDrvUnreset(uint8_t snsResetSource); 44 45 /* MipiRx function */ 46 void MipiRxDrvSetWorkMode(uint8_t devno, InputMode inputMode); 47 void MipiRxDrvSetMipiImageRect(uint8_t devno, const ImgRect *pImgRect); 48 void MipiRxDrvSetMipiCropEn(uint8_t devno, int enable); 49 void MipiRxDrvSetDiDt(uint8_t devno, DataType inputDataType); 50 void MipiRxDrvSetMipiYuvDt(uint8_t devno, DataType inputDataType); 51 void MipiRxDrvSetMipiWdrUserDt(uint8_t devno, DataType inputDataType, 52 const short dataType[WDR_VC_NUM]); 53 void MipiRxDrvSetMipiDolId(uint8_t devno, DataType inputDataType, const short dolId[]); 54 void MipiRxDrvSetMipiWdrMode(uint8_t devno, MipiWdrMode wdrMode); 55 unsigned int MipiRxDrvGetPhyData(int phyId, int laneId); 56 unsigned int MipiRxDrvGetPhyMipiLinkData(int phyId, int laneId); 57 unsigned int MipiRxDrvGetPhyLvdsLinkData(int phyId, int laneId); 58 59 void MipiRxDrvSetDataRate(uint8_t devno, MipiDataRate dataRate); 60 void MipiRxDrvSetLinkLaneId(uint8_t devno, InputMode inputMode, const short *pLaneId, 61 unsigned int laneBitmap, LaneDivideMode mode); 62 void MipiRxDrvSetMemCken(uint8_t devno, int enable); 63 void MipiRxDrvSetClrCken(uint8_t devno, int enable); 64 void MipiRxDrvSetLaneNum(uint8_t devno, unsigned int laneNum); 65 void MipiRxDrvSetPhyConfig(InputMode inputMode, unsigned int laneBitmap); 66 void MipiRxDrvSetPhyCmvmode(InputMode inputMode, PhyCmvMode cmvMode, unsigned int laneBitmap); 67 68 void MipiRxDrvSetPhyEn(unsigned int laneBitmap); 69 void MipiRxDrvSetCmosEn(unsigned int phyId, int enable); 70 void MipiRxDrvSetLaneEn(unsigned int laneBitmap); 71 void MipiRxDrvSetPhyCilEn(unsigned int laneBitmap, int enable); 72 void MipiRxDrvSetPhyCfgMode(InputMode inputMode, unsigned int laneBitmap); 73 void MipiRxDrvSetPhyCfgEn(unsigned int laneBitmap, int enable); 74 void MipiRxSetPhyRgLp0ModeEn(unsigned int phyId, int enable); 75 void MipiRxSetPhyRgLp1ModeEn(unsigned int phyId, int enable); 76 void MipiRxDrvSetExtDataType(const ExtDataType* dataType, DataType inputDataType); 77 78 void MipiRxDrvSetLvdsImageRect(uint8_t devno, const ImgRect *pImgRect, short totalLaneNum); 79 void MipiRxDrvSetLvdsCropEn(uint8_t devno, int enable); 80 81 int MipiRxDrvSetLvdsWdrMode(uint8_t devno, WdrMode wdrMode, 82 const LvdsVsyncAttr *vsyncAttr, const LvdsFidAttr *fidAttr); 83 void MipiRxDrvSetLvdsCtrlMode(uint8_t devno, LvdsSyncMode syncMode, 84 DataType inputDataType, LvdsBitEndian dataEndian, LvdsBitEndian syncCodeEndian); 85 86 void MipiRxDrvSetLvdsDataRate(uint8_t devno, MipiDataRate dataRate); 87 88 void MipiRxDrvSetDolLineInformation(uint8_t devno, WdrMode wdrMode); 89 void MipiRxDrvSetLvdsSyncCode(uint8_t devno, unsigned int laneCnt, 90 const short laneId[LVDS_LANE_NUM], const unsigned short syncCode[][WDR_VC_NUM][SYNC_CODE_NUM]); 91 92 void MipiRxDrvSetLvdsNxtSyncCode(uint8_t devno, unsigned int laneCnt, 93 const short laneId[LVDS_LANE_NUM], const unsigned short syncCode[][WDR_VC_NUM][SYNC_CODE_NUM]); 94 95 void MipiRxDrvSetPhySyncConfig(const LvdsDevAttr *pAttr, unsigned int laneBitmap, 96 const unsigned short nxtSyncCode[][WDR_VC_NUM][SYNC_CODE_NUM]); 97 98 int MipiRxDrvIsLaneValid(uint8_t devno, short laneId, LaneDivideMode mode); 99 void MipiRxDrvSetHsMode(LaneDivideMode laneDivideMode); 100 101 void MipiRxDrvGetMipiImgsizeStatis(uint8_t devno, short vc, ImgSize *pSize); 102 void MipiRxDrvGetLvdsImgsizeStatis(uint8_t devno, short vc, ImgSize *pSize); 103 void MipiRxDrvGetLvdsLaneImgsizeStatis(uint8_t devno, short lane, ImgSize *pSize); 104 105 void MipiRxDrvSetMipiIntMask(uint8_t devno); 106 void MipiRxDrvSetLvdsCtrlIntMask(uint8_t devno, unsigned int mask); 107 void MipiRxDrvSetMipiCtrlIntMask(uint8_t devno, unsigned int mask); 108 void MipiRxDrvSetMipiPkt1IntMask(uint8_t devno, unsigned int mask); 109 void MipiRxDrvSetMipiPkt2IntMask(uint8_t devno, unsigned int mask); 110 void MipiRxDrvSetMipiFrameIntMask(uint8_t devno, unsigned int mask); 111 void MipiRxDrvSetAlignIntMask(uint8_t devno, unsigned int mask); 112 113 void MipiRxDrvEnableClock(uint8_t comboDev); 114 void MipiRxDrvDisableClock(uint8_t comboDev); 115 116 void MipiRxDrvCoreReset(uint8_t comboDev); 117 void MipiRxDrvCoreUnreset(uint8_t comboDev); 118 119 int MipiRxDrvInit(void); 120 void MipiRxDrvExit(void); 121 122 #endif 123