From 04dd17822334871b23ea2862f7798fb0e0007777 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Sat, 11 May 2024 08:53:19 +0000 Subject: [PATCH] change otg to host mode --- kernel/drivers/media/platform/rockchip/cif/regs.h | 475 +++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 429 insertions(+), 46 deletions(-) diff --git a/kernel/drivers/media/platform/rockchip/cif/regs.h b/kernel/drivers/media/platform/rockchip/cif/regs.h index 44a8f39..68bc6ef 100644 --- a/kernel/drivers/media/platform/rockchip/cif/regs.h +++ b/kernel/drivers/media/platform/rockchip/cif/regs.h @@ -61,6 +61,9 @@ CIF_REG_DVP_FRM0_ADDR_UV_ID3, CIF_REG_DVP_FRM1_ADDR_Y_ID3, CIF_REG_DVP_FRM1_ADDR_UV_ID3, + CIF_REG_DVP_SAV_EAV, + CIF_REG_DVP_LINE_CNT1, + CIF_REG_DVP_LINE_INT_NUM1, /* mipi & lvds registers index */ CIF_REG_MIPI_LVDS_ID0_CTRL0, CIF_REG_MIPI_LVDS_ID0_CTRL1, @@ -134,6 +137,20 @@ CIF_REG_LVDS_SAV_EAV_BLK0_ID3, CIF_REG_LVDS_SAV_EAV_ACT1_ID3, CIF_REG_LVDS_SAV_EAV_BLK1_ID3, + CIF_REG_MIPI_EFFECT_CODE_ID0, + CIF_REG_MIPI_EFFECT_CODE_ID1, + CIF_REG_MIPI_EFFECT_CODE_ID2, + CIF_REG_MIPI_EFFECT_CODE_ID3, + CIF_REG_LVDS_ID0_CTRL0, + CIF_REG_LVDS_ID1_CTRL0, + CIF_REG_LVDS_ID2_CTRL0, + CIF_REG_LVDS_ID3_CTRL0, + CIF_REG_MIPI_FRAME_SIZE_ID0, + CIF_REG_MIPI_FRAME_SIZE_ID1, + CIF_REG_MIPI_FRAME_SIZE_ID2, + CIF_REG_MIPI_FRAME_SIZE_ID3, + CIF_REG_MIPI_ON_PAD, + CIF_REG_Y_STAT_CONTROL, CIF_REG_Y_STAT_VALUE, CIF_REG_MMU_DTE_ADDR, @@ -149,6 +166,35 @@ /* reg belowed is in grf */ CIF_REG_GRF_CIFIO_CON, CIF_REG_GRF_CIFIO_CON1, + CIF_REG_GRF_CIFIO_VENC, + /* reg global control */ + CIF_REG_GLB_CTRL, + CIF_REG_GLB_INTEN, + CIF_REG_GLB_INTST, + CIF_REG_SCL_CH_CTRL, + CIF_REG_SCL_CTRL, + CIF_REG_SCL_FRM0_ADDR_CH0, + CIF_REG_SCL_FRM1_ADDR_CH0, + CIF_REG_SCL_VLW_CH0, + CIF_REG_SCL_FRM0_ADDR_CH1, + CIF_REG_SCL_FRM1_ADDR_CH1, + CIF_REG_SCL_VLW_CH1, + CIF_REG_SCL_FRM0_ADDR_CH2, + CIF_REG_SCL_FRM1_ADDR_CH2, + CIF_REG_SCL_VLW_CH2, + CIF_REG_SCL_FRM0_ADDR_CH3, + CIF_REG_SCL_FRM1_ADDR_CH3, + CIF_REG_SCL_VLW_CH3, + CIF_REG_SCL_BLC_CH0, + CIF_REG_SCL_BLC_CH1, + CIF_REG_SCL_BLC_CH2, + CIF_REG_SCL_BLC_CH3, + CIF_REG_TOISP0_CTRL, + CIF_REG_TOISP0_SIZE, + CIF_REG_TOISP0_CROP, + CIF_REG_TOISP1_CTRL, + CIF_REG_TOISP1_SIZE, + CIF_REG_TOISP1_CROP, CIF_REG_INDEX_MAX }; @@ -298,6 +344,143 @@ #define CIF_MMU_INT_STATUS 0x820 #define CIF_MMU_AUTO_GATING 0x824 +/* RK3588 DVP Registers Offset */ +#define DVP_CTRL 0x10 +#define DVP_INTEN 0x14 +#define DVP_INTSTAT 0x18 +#define DVP_FOR 0x1C +#define DVP_MULTI_ID 0x20 +#define DVP_SAV_EAV 0x24 +#define DVP_CROP_SIZE 0x28 +#define DVP_CROP 0x2C +#define DVP_FRM0_ADDR_Y_ID0 0x30 +#define DVP_FRM0_ADDR_UV_ID0 0x34 +#define DVP_FRM1_ADDR_Y_ID0 0x38 +#define DVP_FRM1_ADDR_UV_ID0 0x3C +#define DVP_FRM0_ADDR_Y_ID1 0x40 +#define DVP_FRM0_ADDR_UV_ID1 0x44 +#define DVP_FRM1_ADDR_Y_ID1 0x48 +#define DVP_FRM1_ADDR_UV_ID1 0x4C +#define DVP_FRM0_ADDR_Y_ID2 0x50 +#define DVP_FRM0_ADDR_UV_ID2 0x54 +#define DVP_FRM1_ADDR_Y_ID2 0x58 +#define DVP_FRM1_ADDR_UV_ID2 0x5C +#define DVP_FRM0_ADDR_Y_ID3 0x60 +#define DVP_FRM0_ADDR_UV_ID3 0x64 +#define DVP_FRM1_ADDR_Y_ID3 0x68 +#define DVP_FRM1_ADDR_UV_ID3 0x6C +#define DVP_VIR_LINE_WIDTH 0x70 +#define DVP_LINE_INT_NUM_01 0x74 +#define DVP_LINE_INT_NUM_23 0x78 +#define DVP_LINE_CNT_01 0x7C +#define DVP_LINE_CNT_23 0x80 + +/* RK3588 CSI Registers Offset */ +#define CSI_MIPI0_ID0_CTRL0 0x100 +#define CSI_MIPI0_ID0_CTRL1 0x104 +#define CSI_MIPI0_ID1_CTRL0 0x108 +#define CSI_MIPI0_ID1_CTRL1 0x10C +#define CSI_MIPI0_ID2_CTRL0 0x110 +#define CSI_MIPI0_ID2_CTRL1 0x114 +#define CSI_MIPI0_ID3_CTRL0 0x118 +#define CSI_MIPI0_ID3_CTRL1 0x11C +#define CSI_MIPI0_CTRL 0x120 +#define CSI_MIPI0_FRM0_ADDR_Y_ID0 0x124 +#define CSI_MIPI0_FRM1_ADDR_Y_ID0 0x128 +#define CSI_MIPI0_FRM0_ADDR_UV_ID0 0x12C +#define CSI_MIPI0_FRM1_ADDR_UV_ID0 0x130 +#define CSI_MIPI0_VLW_ID0 0x134 +#define CSI_MIPI0_FRM0_ADDR_Y_ID1 0x138 +#define CSI_MIPI0_FRM1_ADDR_Y_ID1 0x13C +#define CSI_MIPI0_FRM0_ADDR_UV_ID1 0x140 +#define CSI_MIPI0_FRM1_ADDR_UV_ID1 0x144 +#define CSI_MIPI0_VLW_ID1 0x148 +#define CSI_MIPI0_FRM0_ADDR_Y_ID2 0x14C +#define CSI_MIPI0_FRM1_ADDR_Y_ID2 0x150 +#define CSI_MIPI0_FRM0_ADDR_UV_ID2 0x154 +#define CSI_MIPI0_FRM1_ADDR_UV_ID2 0x158 +#define CSI_MIPI0_VLW_ID2 0x15C +#define CSI_MIPI0_FRM0_ADDR_Y_ID3 0x160 +#define CSI_MIPI0_FRM1_ADDR_Y_ID3 0x164 +#define CSI_MIPI0_FRM0_ADDR_UV_ID3 0x168 +#define CSI_MIPI0_FRM1_ADDR_UV_ID3 0x16C +#define CSI_MIPI0_VLW_ID3 0x170 +#define CSI_MIPI0_INTEN 0x174 +#define CSI_MIPI0_INTSTAT 0x178 +#define CSI_MIPI0_LINE_INT_NUM_ID0_1 0x17C +#define CSI_MIPI0_LINE_INT_NUM_ID2_3 0x180 +#define CSI_MIPI0_LINE_CNT_ID0_1 0x184 +#define CSI_MIPI0_LINE_CNT_ID2_3 0x188 +#define CSI_MIPI0_ID0_CROP_START 0x18C +#define CSI_MIPI0_ID1_CROP_START 0x190 +#define CSI_MIPI0_ID2_CROP_START 0x194 +#define CSI_MIPI0_ID3_CROP_START 0x198 +#define CSI_MIPI0_FRAME_NUM_VC0 0x19C +#define CSI_MIPI0_FRAME_NUM_VC1 0x1A0 +#define CSI_MIPI0_FRAME_NUM_VC2 0x1A4 +#define CSI_MIPI0_FRAME_NUM_VC3 0x1A8 +#define CSI_MIPI0_EFFECT_CODE_ID0 0x1AC +#define CSI_MIPI0_EFFECT_CODE_ID1 0x1B0 +#define CSI_MIPI0_EFFECT_CODE_ID2 0x1B4 +#define CSI_MIPI0_EFFECT_CODE_ID3 0x1B8 +#define CSI_MIPI0_ON_PAD 0x1BC + +#define CSI_MIPI0_FRAME_SIZE_ID0 0x1C0 +#define CSI_MIPI0_FRAME_SIZE_ID1 0x1C4 +#define CSI_MIPI0_FRAME_SIZE_ID2 0x1C8 +#define CSI_MIPI0_FRAME_SIZE_ID3 0x1CC + +/* RV1106 CONTROL Registers Offset */ +#define CIF_LVDS0_ID0_CTRL0 0x1D0 +#define CIF_LVDS0_ID1_CTRL0 0x1D4 +#define CIF_LVDS0_ID2_CTRL0 0x1D8 +#define CIF_LVDS0_ID3_CTRL0 0x1DC +#define CIF_LVDS_SAV_EAV_ACT0_ID0_RV1106 0x1E0 +#define CIF_LVDS_SAV_EAV_BLK0_ID0_RV1106 0x1E4 +#define CIF_LVDS_SAV_EAV_ACT1_ID0_RV1106 0x1E8 +#define CIF_LVDS_SAV_EAV_BLK1_ID0_RV1106 0x1EC +#define CIF_LVDS_SAV_EAV_ACT0_ID1_RV1106 0x1F0 +#define CIF_LVDS_SAV_EAV_BLK0_ID1_RV1106 0x1F4 +#define CIF_LVDS_SAV_EAV_ACT1_ID1_RV1106 0x1F8 +#define CIF_LVDS_SAV_EAV_BLK1_ID1_RV1106 0x1FC +#define CIF_LVDS_SAV_EAV_ACT0_ID2_RV1106 0x200 +#define CIF_LVDS_SAV_EAV_BLK0_ID2_RV1106 0x204 +#define CIF_LVDS_SAV_EAV_ACT1_ID2_RV1106 0x208 +#define CIF_LVDS_SAV_EAV_BLK1_ID2_RV1106 0x20C +#define CIF_LVDS_SAV_EAV_ACT0_ID3_RV1106 0x210 +#define CIF_LVDS_SAV_EAV_BLK0_ID3_RV1106 0x214 +#define CIF_LVDS_SAV_EAV_ACT1_ID3_RV1106 0x218 +#define CIF_LVDS_SAV_EAV_BLK1_ID3_RV1106 0x21C + +/* RK3588 CONTROL Registers Offset */ +#define GLB_CTRL 0X000 +#define GLB_INTEN 0X004 +#define GLB_INTST 0X008 +#define SCL_CH_CTRL 0x700 +#define SCL_CTRL 0x704 +#define SCL_FRM0_ADDR_CH0 0x708 +#define SCL_FRM1_ADDR_CH0 0x70C +#define SCL_VLW_CH0 0x710 +#define SCL_FRM0_ADDR_CH1 0x714 +#define SCL_FRM1_ADDR_CH1 0x718 +#define SCL_VLW_CH1 0x71C +#define SCL_FRM0_ADDR_CH2 0x720 +#define SCL_FRM1_ADDR_CH2 0x724 +#define SCL_VLW_CH2 0x728 +#define SCL_FRM0_ADDR_CH3 0x72C +#define SCL_FRM1_ADDR_CH3 0x730 +#define SCL_VLW_CH3 0x734 +#define SCL_BLC_CH0 0x738 +#define SCL_BLC_CH1 0x73C +#define SCL_BLC_CH2 0x740 +#define SCL_BLC_CH3 0x744 +#define TOISP0_CH_CTRL 0x780 +#define TOISP0_CROP_SIZE 0x784 +#define TOISP0_CROP 0x788 +#define TOISP1_CH_CTRL 0x78C +#define TOISP1_CROP_SIZE 0x790 +#define TOISP1_CROP 0x794 + /* The key register bit description */ /* CIF_CTRL Reg */ @@ -307,6 +490,13 @@ #define MODE_PINGPONG (0x1 << 1) #define MODE_LINELOOP (0x2 << 1) #define AXI_BURST_16 (0xF << 12) +#define DVP_PRESS_EN (0x1 << 12) +#define DVP_HURRY_EN (0x1 << 8) +#define DVP_DMA_EN (0x1 << 1) +#define DVP_SW_WATER_LINE_75 (0x0 << 5) +#define DVP_SW_WATER_LINE_50 (0x1 << 5) +#define DVP_SW_WATER_LINE_25 (0x2 << 5) +#define DVP_SW_WATER_LINE_00 (0x3 << 5) /* CIF_INTEN */ #define INTEN_DISABLE (0x0 << 0) @@ -335,7 +525,30 @@ #define PRE_INF_FRAME_END_CLR (0x01 << 8) #define PST_INF_FRAME_END_CLR (0x01 << 9) #define INTSTAT_ERR (0xFC) +#define INTSTAT_ERR_RK3588 (DVP_SIZE_ERR |\ + DVP_FIFO_OVERFLOW |\ + DVP_BANDWIDTH_LACK) + #define DVP_ALL_OVERFLOW (IFIFO_OVERFLOW | DFIFO_OVERFLOW) + +#define DVP_FIFO_OVERFLOW (0x01 << 16) +#define DVP_BANDWIDTH_LACK (0x01 << 17) + +#define DVP_SIZE_ERR_ID0 (0x1 << 22) +#define DVP_SIZE_ERR_ID1 (0x1 << 23) +#define DVP_SIZE_ERR_ID2 (0x1 << 24) +#define DVP_SIZE_ERR_ID3 (0x1 << 25) + +#define DVP_SIZE_ERR (DVP_SIZE_ERR_ID0 |\ + DVP_SIZE_ERR_ID1 |\ + DVP_SIZE_ERR_ID2 |\ + DVP_SIZE_ERR_ID3) + +#define DVP_SW_PRESS_VALUE(val) (((val) & 0x7) << 13) +#define DVP_SW_HURRY_VALUE(val) (((val) & 0x7) << 9) +#define DVP_SW_CAP_EN(ID) (2 << ID) +#define DVP_SW_DMA_EN(ID) (0x100000 << ID) +#define DVP_START_INTSTAT(ID) (0x3 << ((ID) * 2)) #define DVP_DMA_END_INTEN(id) \ ({ \ @@ -351,7 +564,7 @@ mask; \ }) -#define DVP_LINE_INTEN (0x01 << 10) +#define DVP_LINE_INTEN (0x01 << 10) #define DVP_DMA_END_INTSTAT(id) \ ({ \ @@ -367,8 +580,8 @@ mask; \ }) -#define DVP_PST_INTSTAT PST_INF_FRAME_END -#define DVP_LINE_INTSTAT (0x01 << 10) +#define DVP_PST_INTSTAT PST_INF_FRAME_END +#define DVP_LINE_INTSTAT (0x01 << 10) /* FRAME STATUS */ #define FRAME_STAT_CLS 0x00 @@ -433,6 +646,20 @@ #define BT656_1120_MULTI_ID_2_MASK ~(0x03 << 20) #define BT656_1120_MULTI_ID_3_MASK ~(0x03 << 28) #define CIF_HIGH_ALIGN (0x01 << 18) +#define CIF_HIGH_ALIGN_RK3588 (0x01 << 21) +#define BT656_DETECT_SAV (0X01 << 13) +#define BT656_DETECT_SAV_EAV (0X00 << 13) + +#define BT1120_CLOCK_SINGLE_EDGES_RK3588 (0x00 << 11) +#define BT1120_CLOCK_DOUBLE_EDGES_RK3588 (0x01 << 11) +#define TRANSMIT_INTERFACE_RK3588 (0x01 << 9) +#define TRANSMIT_PROGRESS_RK3588 (0x00 << 9) +#define BT1120_YC_SWAP_RK3588 (0x01 << 12) +#define INPUT_BT601_YUV422 (0x00 << 2) +#define INPUT_BT601_RAW (0x01 << 2) +#define INPUT_BT656_YUV422 (0x02 << 2) +#define INPUT_BT1120_YUV422 (0x03 << 2) +#define INPUT_SONY_RAW (0x04 << 2) /* CIF_SCL_CTRL */ #define ENABLE_SCL_DOWN (0x01 << 0) @@ -460,10 +687,32 @@ #define DVP_CHANNEL3_F1_READY (0x01 << 13) #define DVP_CHANNEL3_FRM_READ (DVP_CHANNEL3_F0_READY | DVP_CHANNEL3_F1_READY) +#define DVP_FRAME0_START_ID0 (0x1 << 0) +#define DVP_FRAME1_START_ID0 (0x1 << 1) + #define DVP_FRAME_END_ID0 (0x1 << 0) #define DVP_FRAME_END_ID1 (0x1 << 11) #define DVP_FRAME_END_ID2 (0x1 << 12) #define DVP_FRAME_END_ID3 (0x1 << 13) + +#define DVP_FRAME0_END_ID0 (0x1 << 8) +#define DVP_FRAME1_END_ID0 (0x1 << 9) +#define DVP_ALL_END_ID0 (DVP_FRAME0_END_ID0 | DVP_FRAME1_END_ID0) + +#define DVP_FRAME0_END_ID1 (0x1 << 10) +#define DVP_FRAME1_END_ID1 (0x1 << 11) +#define DVP_ALL_END_ID1 (DVP_FRAME0_END_ID1 | DVP_FRAME1_END_ID1) + +#define DVP_FRAME0_END_ID2 (0x1 << 12) +#define DVP_FRAME1_END_ID2 (0x1 << 13) +#define DVP_ALL_END_ID2 (DVP_FRAME0_END_ID2 | DVP_FRAME1_END_ID2) + +#define DVP_FRAME0_END_ID3 (0x1 << 14) +#define DVP_FRAME1_END_ID3 (0x1 << 15) +#define DVP_ALL_END_ID3 (DVP_FRAME0_END_ID3 | DVP_FRAME1_END_ID3) + +#define DVP_ALIGN_MSB (0x01 << 21) +#define DVP_ALIGN_LSB (0x00 << 21) #define DVP_FRM_STS_ID0(x) (((x) & (0x3 << 0)) >> 0) #define DVP_FRM_STS_ID1(x) (((x) & (0x3 << 4)) >> 4) @@ -497,6 +746,28 @@ #define CIF_CROP_Y_SHIFT 16 #define CIF_CROP_X_SHIFT 0 +/* CIF SCALE*/ +#define SCALE_END_INTSTAT(ch) (0x3 << ((ch + 1) * 2)) +#define SCALE_FIFO_OVERFLOW(ch) (1 << (10 + ch)) +#define SCALE_TOISP_AXI0_ERR (1 << 0) +#define SCALE_TOISP_AXI1_ERR (1 << 1) +#define CIF_SCALE_SW_PRESS_VALUE(val) (((val) & 0x7) << 13) +#define CIF_SCALE_SW_PRESS_ENABLE (0x1 << 12) +#define CIF_SCALE_SW_HURRY_VALUE(val) (((val) & 0x7) << 5) +#define CIF_SCALE_SW_HURRY_ENABLE (0x1 << 4) +#define CIF_SCALE_SW_WATER_LINE(val) (val << 1) +#define CIF_SCALE_SW_SRC_CH(val, ch) ((val & 0x1f) << (3 + ch * 8)) +#define CIF_SCALE_SW_MODE(val, ch) ((val & 0x3) << (1 + ch * 8)) +#define CIF_SCALE_EN(ch) (1 << (ch * 8)) +#define SW_SCALE_END(intstat, ch) ((intstat >> ((ch + 1) * 2)) & 0x3) +#define SCALE_SOFT_RESET(ch) (0x1 << (ch + 16)) + +/* CIF TOISP*/ +#define CIF_TOISP0_FS(ch) (BIT(14) << ch) +#define CIF_TOISP1_FS(ch) (BIT(17) << ch) +#define CIF_TOISP0_FE(ch) (BIT(20) << ch) +#define CIF_TOISP1_FE(ch) (BIT(23) << ch) + /* CIF_CSI_ID_CTRL0 */ #define CSI_DISABLE_CAPTURE (0x0 << 0) #define CSI_ENABLE_CAPTURE (0x1 << 0) @@ -507,16 +778,43 @@ #define CSI_WRDDR_TYPE_YUV422 (0x4 << 1) #define CSI_WRDDR_TYPE_YUV420SP (0x5 << 1) #define CSI_WRDDR_TYPE_YUV400 (0x6 << 1) +#define CSI_WRDDR_TYPE_RGB565 (0x7 << 1) #define CSI_DISABLE_COMMAND_MODE (0x0 << 4) #define CSI_ENABLE_COMMAND_MODE (0x1 << 4) #define CSI_DISABLE_CROP (0x0 << 5) #define CSI_ENABLE_CROP (0x1 << 5) +#define CSI_DISABLE_CROP_V1 (0x0 << 4) +#define CSI_ENABLE_CROP_V1 (0x1 << 4) #define CSI_ENABLE_MIPI_COMPACT (0x1 << 6) #define CSI_YUV_INPUT_ORDER_UYVY (0x0 << 16) #define CSI_YUV_INPUT_ORDER_VYUY (0x1 << 16) #define CSI_YUV_INPUT_ORDER_YUYV (0x2 << 16) #define CSI_YUV_INPUT_ORDER_YVYU (0x3 << 16) -#define CSI_ENABLE_MIPI_HIGH_ALIGN (0x1 << 31) +#define CSI_HIGH_ALIGN (0x1 << 31) +#define CSI_HIGH_ALIGN_RK3588 (0x1 << 27) + +#define CSI_YUV_OUTPUT_ORDER_UYVY (0x0 << 18) +#define CSI_YUV_OUTPUT_ORDER_VYUY (0x1 << 18) +#define CSI_YUV_OUTPUT_ORDER_YUYV (0x2 << 18) +#define CSI_YUV_OUTPUT_ORDER_YVYU (0x3 << 18) +#define CSI_WRDDR_TYPE_RAW_COMPACT (0x0 << 5) +#define CSI_WRDDR_TYPE_RAW_UNCOMPACT (0x1 << 5) +#define CSI_WRDDR_TYPE_YUV_PACKET (0x2 << 5) +#define CSI_WRDDR_TYPE_YUV400_RK3588 (0x3 << 5) +#define CSI_WRDDR_TYPE_YUV422SP_RK3588 (0x4 << 5) +#define CSI_WRDDR_TYPE_YUV420SP_RK3588 (0x5 << 5) +#define CSI_ALIGN_MSB (0x01 << 27) +#define CSI_ALIGN_LSB (0x0 << 27) +#define CSI_DMA_ENABLE (0x1 << 28) + +#define CSI_NO_HDR (0X0 << 22) +#define CSI_HDR2 (0X1 << 22) +#define CSI_HDR3 (0X2 << 22) + +#define CSI_HDR_MODE_VC (0x0 << 20) +#define CSI_HDR_MODE_LINE_CNT (0x1 << 20) +#define CSI_HDR_MODE_LINE_INFO (0x2 << 20) +#define CSI_HDR_VC_MODE_PROTECT (0x1 << 29) #define LVDS_ENABLE_CAPTURE (0x1 << 16) #define LVDS_MODE(mode) (((mode) & 0x7) << 17) @@ -549,6 +847,37 @@ #define LVDS_HDR_FRAME_X3 (0x1 << 28) #define LVDS_COMPACT (0x1 << 29) +#define LVDS_ENABLE_CAPTURE_RV1106 (0x1 << 0) +#define LVDS_MODE_RV1106(mode) (((mode) & 0x7) << 1) +#define LVDS_LANES_ENABLED_RV1106(lanes) \ + ({ \ + unsigned int mask; \ + switch (lanes) { \ + case 1: \ + mask = 0x1 << 4; \ + break; \ + case 2: \ + mask = 0x3 << 4; \ + break; \ + case 3: \ + mask = 0x7 << 4; \ + break; \ + case 4: \ + mask = 0xf << 4; \ + break; \ + default: \ + mask = 0x1 << 4; \ + break; \ + } \ + mask; \ + }) + +#define LVDS_MAIN_LANE_RV1106(index) (((index) & 0x3) << 8) +#define LVDS_FID_RV1106(id) (((id) & 0x3) << 10) +#define LVDS_HDR_FRAME_X2_RV1106 (0x0 << 12) +#define LVDS_HDR_FRAME_X3_RV1106 (0x1 << 12) +#define LVDS_DMAEN_RV1106 (0x1 << 15) + /* CIF_CSI_INTEN */ #define CSI_FRAME1_START_INTEN(id) (0x1 << ((id) * 2 + 1)) #define CSI_FRAME0_END_INTEN(id) (0x1 << ((id) * 2 + 8)) @@ -561,14 +890,17 @@ #define CSI_ALL_FRAME_START_INTEN (0xff << 0) #define CSI_ALL_FRAME_END_INTEN (0xff << 8) #define CSI_ALL_ERROR_INTEN (0x1f << 16) +#define CSI_ALL_ERROR_INTEN_V1 (0xf0f << 16) #define CSI_START_INTEN(id) (0x3 << ((id) * 2)) #define CSI_DMA_END_INTEN(id) (0x3 << ((id) * 2 + 8)) #define CSI_LINE_INTEN(id) (0x1 << ((id) + 21)) +#define CSI_LINE_INTEN_RK3588(id) (0x1 << ((id) + 20)) #define CSI_START_INTSTAT(id) (0x3 << ((id) * 2)) #define CSI_DMA_END_INTSTAT(id) (0x3 << ((id) * 2 + 8)) #define CSI_LINE_INTSTAT(id) (0x1 << ((id) + 21)) +#define CSI_LINE_INTSTAT_V1(id) (0x1 << ((id) + 20)) /* CIF_CSI_INTSTAT */ #define CSI_FRAME0_START_ID0 (0x1 << 0) @@ -598,51 +930,73 @@ #define CSI_LINE_ID3_INTST (0x1 << 24) #define CSI_DMA_LVDS_ID2_FIFO_OVERFLOW (0x1 << 25) #define CSI_DMA_LVDS_ID3_FIFO_OVERFLOW (0x1 << 26) +#define CSI_SIZE_ERR_ID0 (0x1 << 24) +#define CSI_SIZE_ERR_ID1 (0x1 << 25) +#define CSI_SIZE_ERR_ID2 (0x1 << 26) +#define CSI_SIZE_ERR_ID3 (0x1 << 27) -#define CSI_FRAME_START_ID0 (CSI_FRAME0_START_ID0 |\ - CSI_FRAME1_START_ID0) -#define CSI_FRAME_START_ID1 (CSI_FRAME0_START_ID1 |\ - CSI_FRAME1_START_ID1) -#define CSI_FRAME_START_ID2 (CSI_FRAME0_START_ID2 |\ - CSI_FRAME1_START_ID2) -#define CSI_FRAME_START_ID3 (CSI_FRAME0_START_ID3 |\ - CSI_FRAME1_START_ID3) -#define CSI_FRAME_END_ID0 (CSI_FRAME0_END_ID0 |\ - CSI_FRAME1_END_ID0) -#define CSI_FRAME_END_ID1 (CSI_FRAME0_END_ID1 |\ - CSI_FRAME1_END_ID1) -#define CSI_FRAME_END_ID2 (CSI_FRAME0_END_ID2 |\ - CSI_FRAME1_END_ID2) -#define CSI_FRAME_END_ID3 (CSI_FRAME0_END_ID3 |\ - CSI_FRAME1_END_ID3) -#define CSI_FIFO_OVERFLOW (CSI_DMA_Y_FIFO_OVERFLOW | \ - CSI_DMA_UV_FIFO_OVERFLOW | \ - CSI_CONFIG_FIFO_OVERFLOW | \ - CSI_RX_FIFO_OVERFLOW | \ - CSI_DMA_LVDS_ID2_FIFO_OVERFLOW | \ - CSI_DMA_LVDS_ID3_FIFO_OVERFLOW) +#define CSI_FRAME_START_ID0 (CSI_FRAME0_START_ID0 |\ + CSI_FRAME1_START_ID0) +#define CSI_FRAME_START_ID1 (CSI_FRAME0_START_ID1 |\ + CSI_FRAME1_START_ID1) +#define CSI_FRAME_START_ID2 (CSI_FRAME0_START_ID2 |\ + CSI_FRAME1_START_ID2) +#define CSI_FRAME_START_ID3 (CSI_FRAME0_START_ID3 |\ + CSI_FRAME1_START_ID3) +#define CSI_FRAME_END_ID0 (CSI_FRAME0_END_ID0 |\ + CSI_FRAME1_END_ID0) +#define CSI_FRAME_END_ID1 (CSI_FRAME0_END_ID1 |\ + CSI_FRAME1_END_ID1) +#define CSI_FRAME_END_ID2 (CSI_FRAME0_END_ID2 |\ + CSI_FRAME1_END_ID2) +#define CSI_FRAME_END_ID3 (CSI_FRAME0_END_ID3 |\ + CSI_FRAME1_END_ID3) +#define CSI_FIFO_OVERFLOW (CSI_DMA_Y_FIFO_OVERFLOW |\ + CSI_DMA_UV_FIFO_OVERFLOW |\ + CSI_CONFIG_FIFO_OVERFLOW |\ + CSI_RX_FIFO_OVERFLOW |\ + CSI_DMA_LVDS_ID2_FIFO_OVERFLOW |\ + CSI_DMA_LVDS_ID3_FIFO_OVERFLOW) + +/*mask for rk3588*/ +#define CSI_RX_FIFO_OVERFLOW_V1 (0x1 << 19) +#define CSI_BANDWIDTH_LACK_V1 (0x1 << 18) +#define CSI_ALL_ERROR_INTEN_V1 (0xf0f << 16) + + +#define CSI_FIFO_OVERFLOW_V1 (CSI_DMA_Y_FIFO_OVERFLOW |\ + CSI_DMA_UV_FIFO_OVERFLOW |\ + CSI_RX_FIFO_OVERFLOW_V1) +#define CSI_SIZE_ERR (CSI_SIZE_ERR_ID0 |\ + CSI_SIZE_ERR_ID1 |\ + CSI_SIZE_ERR_ID2 |\ + CSI_SIZE_ERR_ID3) + /* CIF_MIPI_LVDS_CTRL */ -#define CIF_MIPI_LVDS_SW_DMA_IDLE (0x1 << 16) -#define CIF_MIPI_LVDS_SW_PRESS_VALUE(val) (((val) & 0x3) << 13) -#define CIF_MIPI_LVDS_SW_PRESS_ENABLE (0x1 << 12) -#define CIF_MIPI_LVDS_SW_LVDS_WIDTH_8BITS (0x0 << 9) -#define CIF_MIPI_LVDS_SW_LVDS_WIDTH_10BITS (0x1 << 9) -#define CIF_MIPI_LVDS_SW_LVDS_WIDTH_12BITS (0x2 << 9) -#define CIF_MIPI_LVDS_SW_SEL_LVDS (0x1 << 8) -#define CIF_MIPI_LVDS_SW_HURRY_VALUE(val) (((val) & 0x3) << 5) -#define CIF_MIPI_LVDS_SW_HURRY_ENABLE (0x1 << 4) -#define CIF_MIPI_LVDS_SW_WATER_LINE_75 (0x0 << 1) -#define CIF_MIPI_LVDS_SW_WATER_LINE_50 (0x1 << 1) -#define CIF_MIPI_LVDS_SW_WATER_LINE_25 (0x2 << 1) -#define CIF_MIPI_LVDS_SW_WATER_LINE_00 (0x3 << 1) -#define CIF_MIPI_LVDS_SW_WATER_LINE_ENABLE (0x1 << 0) -#define CIF_MIPI_LVDS_SW_DMA_IDLE_RK1808 (0x1 << 24) +#define CIF_MIPI_LVDS_SW_DMA_IDLE (0x1 << 16) +#define CIF_MIPI_LVDS_SW_PRESS_VALUE(val) (((val) & 0x3) << 13) +#define CIF_MIPI_LVDS_SW_PRESS_VALUE_RK3588(val) (((val) & 0x7) << 13) +#define CIF_MIPI_LVDS_SW_PRESS_ENABLE (0x1 << 12) +#define CIF_MIPI_LVDS_SW_LVDS_WIDTH_8BITS (0x0 << 9) +#define CIF_MIPI_LVDS_SW_LVDS_WIDTH_10BITS (0x1 << 9) +#define CIF_MIPI_LVDS_SW_LVDS_WIDTH_12BITS (0x2 << 9) +#define CIF_MIPI_LVDS_SW_SEL_LVDS (0x1 << 8) +#define CIF_MIPI_LVDS_SW_SEL_LVDS_RV1106 (0x1 << 3) +#define CIF_MIPI_LVDS_SW_HURRY_VALUE(val) (((val) & 0x3) << 5) +#define CIF_MIPI_LVDS_SW_HURRY_VALUE_RK3588(val) (((val) & 0x7) << 5) +#define CIF_MIPI_LVDS_SW_HURRY_ENABLE (0x1 << 4) +#define CIF_MIPI_LVDS_SW_WATER_LINE_75 (0x0 << 1) +#define CIF_MIPI_LVDS_SW_WATER_LINE_50 (0x1 << 1) +#define CIF_MIPI_LVDS_SW_WATER_LINE_25 (0x2 << 1) +#define CIF_MIPI_LVDS_SW_WATER_LINE_00 (0x3 << 1) +#define CIF_MIPI_LVDS_SW_WATER_LINE_ENABLE (0x1 << 0) +#define CIF_MIPI_LVDS_SW_DMA_IDLE_RK1808 (0x1 << 24) #define CIF_MIPI_LVDS_SW_HURRY_VALUE_RK1808(val) (((val) & 0x3) << 17) -#define CIF_MIPI_LVDS_SW_HURRY_ENABLE_RK1808 (0x1 << 16) -#define CIF_MIPI_LVDS_SW_WATER_LINE_75_RK1808 (0x0 << 0) -#define CIF_MIPI_LVDS_SW_WATER_LINE_50_RK1808 (0x1 << 0) -#define CIF_MIPI_LVDS_SW_WATER_LINE_25_RK1808 (0x2 << 0) -#define CIF_MIPI_LVDS_SW_WATER_LINE_00_RK1808 (0x3 << 0) +#define CIF_MIPI_LVDS_SW_HURRY_ENABLE_RK1808 (0x1 << 16) +#define CIF_MIPI_LVDS_SW_WATER_LINE_75_RK1808 (0x0 << 0) +#define CIF_MIPI_LVDS_SW_WATER_LINE_50_RK1808 (0x1 << 0) +#define CIF_MIPI_LVDS_SW_WATER_LINE_25_RK1808 (0x2 << 0) +#define CIF_MIPI_LVDS_SW_WATER_LINE_00_RK1808 (0x3 << 0) #define CIF_MIPI_LVDS_SW_WATER_LINE_ENABLE_RK1808 (0x1 << 4) /* CSI Host Registers Define */ @@ -667,6 +1021,11 @@ #define SW_FRM_END_ID2(x) (((x) & CSI_FRAME_END_ID2) >> 12) #define SW_FRM_END_ID3(x) (((x) & CSI_FRAME_END_ID3) >> 14) +/*RV1106 SKIP FUNC*/ +#define RKCIF_CAP_SHIFT 0x18 +#define RKCIF_SKIP_SHIFT 0X15 +#define RKCIF_SKIP_EN(x) (0x1 << (8 + x)) + /* CIF LVDS SAV EAV Define */ #define SW_LVDS_EAV_ACT(code) (((code) & 0xfff) << 16) #define SW_LVDS_SAV_ACT(code) (((code) & 0xfff) << 0) @@ -688,5 +1047,29 @@ #define RK3568_CIF_PCLK_SAMPLING_EDGE_FALLING (0x10001000) #define RK3568_CIF_PCLK_SINGLE_EDGE (0x02000000) #define RK3568_CIF_PCLK_DUAL_EDGE (0x02000200) +#define CIF_GRF_SOC_CON2 (0x308) +#define RK3588_CIF_PCLK_SAMPLING_EDGE_RISING (0x00100000) +#define RK3588_CIF_PCLK_SAMPLING_EDGE_FALLING (0x00100010) +#define RK3588_CIF_PCLK_SINGLE_EDGE (0x00200000) +#define RK3588_CIF_PCLK_DUAL_EDGE (0x00200020) +#define RV1106_CIF_GRF_VI_CON (0x50038) +#define RV1106_CIF_GRF_VENC_WRAPPER (0x10008) +#define RV1106_CIF_PCLK_SINGLE_EDGE (0x00040000) +#define RV1106_CIF_PCLK_DUAL_EDGE (0x00040004) +#define RV1106_CIF_PCLK_EDGE_RISING_M0 (0x00020002) +#define RV1106_CIF_PCLK_EDGE_FALLING_M0 (0x00020000) +#define RV1106_CIF_PCLK_EDGE_RISING_M1 (0x00010001) +#define RV1106_CIF_PCLK_EDGE_FALLING_M1 (0x00010000) +#define RV1106_CIF_GRF_SEL_M0 (0x00010000) +#define RV1106_CIF_GRF_SEL_M1 (0x00010001) + +/*toisp*/ +#define TOISP_FS_CH0(index) (0x1 << (14 + index * 3)) +#define TOISP_FS_CH1(index) (0x1 << (15 + index * 3)) +#define TOISP_FS_CH2(index) (0x1 << (16 + index * 3)) + +#define TOISP_END_CH0(index) (0x1 << (20 + index * 3)) +#define TOISP_END_CH1(index) (0x1 << (21 + index * 3)) +#define TOISP_END_CH2(index) (0x1 << (22 + index * 3)) #endif -- Gitblit v1.6.2