1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (c) 2020 Rockchip Electronics Co. Ltd. 4 * 5 * Author: Chen Shunqing <csq@rock-chips.com> 6 */ 7 8 #ifndef RK628_CSI_H 9 #define RK628_CSI_H 10 11 #include "rk628.h" 12 13 #define CSI_REG(x) ((x) + 0x40000) 14 15 #define CSITX_CONFIG_DONE CSI_REG(0x0000) 16 #define CONFIG_DONE_IMD BIT(4) 17 #define CONFIG_DONE BIT(0) 18 #define CSITX_CSITX_EN CSI_REG(0x0004) 19 #define VOP_YU_SWAP_MASK BIT(14) 20 #define VOP_YU_SWAP(x) UPDATE(x, 14, 14) 21 #define VOP_UV_SWAP_MASK BIT(13) 22 #define VOP_UV_SWAP(x) UPDATE(x, 13, 13) 23 #define VOP_YUV422_EN_MASK BIT(12) 24 #define VOP_YUV422_EN(x) UPDATE(x, 12, 12) 25 #define VOP_P2_EN_MASK BIT(8) 26 #define VOP_P2_EN(x) UPDATE(x, 8, 8) 27 #define LANE_NUM_MASK GENMASK(5, 4) 28 #define LANE_NUM(x) UPDATE(x, 5, 4) 29 #define DPHY_EN_MASK BIT(2) 30 #define DPHY_EN(x) UPDATE(x, 2, 2) 31 #define CSITX_EN_MASK BIT(0) 32 #define CSITX_EN(x) UPDATE(x, 0, 0) 33 #define CSITX_CSITX_VERSION CSI_REG(0x0008) 34 #define CSITX_SYS_CTRL0_IMD CSI_REG(0x0010) 35 #define CSITX_SYS_CTRL1 CSI_REG(0x0014) 36 #define BYPASS_SELECT_MASK BIT(0) 37 #define BYPASS_SELECT(x) UPDATE(x, 0, 0) 38 #define CSITX_SYS_CTRL2 CSI_REG(0x0018) 39 #define VOP_WHOLE_FRM_EN BIT(5) 40 #define VSYNC_ENABLE BIT(0) 41 #define CSITX_SYS_CTRL3_IMD CSI_REG(0x001c) 42 #define CONT_MODE_CLK_CLR_MASK BIT(8) 43 #define CONT_MODE_CLK_CLR(x) UPDATE(x, 8, 8) 44 #define CONT_MODE_CLK_SET_MASK BIT(4) 45 #define CONT_MODE_CLK_SET(x) UPDATE(x, 4, 4) 46 #define NON_CONTINOUS_MODE_MASK BIT(0) 47 #define NON_CONTINOUS_MODE(x) UPDATE(x, 0, 0) 48 #define CSITX_TIMING_HPW_PADDING_NUM CSI_REG(0x0030) 49 #define CSITX_VOP_PATH_CTRL CSI_REG(0x0040) 50 #define VOP_WC_USERDEFINE_MASK GENMASK(31, 16) 51 #define VOP_WC_USERDEFINE(x) UPDATE(x, 31, 16) 52 #define VOP_DT_USERDEFINE_MASK GENMASK(13, 8) 53 #define VOP_DT_USERDEFINE(x) UPDATE(x, 13, 8) 54 #define VOP_PIXEL_FORMAT_MASK GENMASK(7, 4) 55 #define VOP_PIXEL_FORMAT(x) UPDATE(x, 7, 4) 56 #define VOP_WC_USERDEFINE_EN_MASK BIT(3) 57 #define VOP_WC_USERDEFINE_EN(x) UPDATE(x, 3, 3) 58 #define VOP_DT_USERDEFINE_EN_MASK BIT(1) 59 #define VOP_DT_USERDEFINE_EN(x) UPDATE(x, 1, 1) 60 #define VOP_PATH_EN_MASK BIT(0) 61 #define VOP_PATH_EN(x) UPDATE(x, 0, 0) 62 #define CSITX_VOP_PATH_PKT_CTRL CSI_REG(0x0050) 63 #define CSITX_CSITX_STATUS0 CSI_REG(0x0070) 64 #define CSITX_CSITX_STATUS1 CSI_REG(0x0074) 65 #define STOPSTATE_LANE3 BIT(7) 66 #define STOPSTATE_LANE2 BIT(6) 67 #define STOPSTATE_LANE1 BIT(5) 68 #define STOPSTATE_LANE0 BIT(4) 69 #define STOPSTATE_CLK BIT(1) 70 #define DPHY_PLL_LOCK BIT(0) 71 #define CSITX_ERR_INTR_EN_IMD CSI_REG(0x0090) 72 #define CSITX_ERR_INTR_CLR_IMD CSI_REG(0x0094) 73 #define CSITX_ERR_INTR_STATUS_IMD CSI_REG(0x0098) 74 #define CSITX_ERR_INTR_RAW_STATUS_IMD CSI_REG(0x009c) 75 #define CSITX_LPDT_DATA_IMD CSI_REG(0x00a8) 76 #define CSITX_DPHY_CTRL CSI_REG(0x00b0) 77 #define CSI_DPHY_EN_MASK GENMASK(7, 3) 78 #define CSI_DPHY_EN(x) UPDATE(x, 7, 3) 79 #define DPHY_ENABLECLK BIT(3) 80 #define CSI_MAX_REGISTER CSITX_DPHY_CTRL 81 82 void rk628_csi_init(struct rk628 *rk628); 83 void rk628_csi_enable(struct rk628 *rk628); 84 void rk628_csi_disable(struct rk628 *rk628); 85 86 #endif 87