1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd. */ 3 4 #ifndef _RKISP_CSI_H 5 #define _RKISP_CSI_H 6 7 #include <linux/kfifo.h> 8 9 #define CSI_DEV_NAME DRIVER_NAME "-csi-subdev" 10 11 #define HDR_MAX_DUMMY_BUF 3 12 /* define max dmatx to use for hdr */ 13 #define HDR_DMA_MAX 3 14 #define HDR_DMA0 0 15 #define HDR_DMA1 1 16 #define HDR_DMA2 2 17 18 #define IS_HDR_RDBK(x) ({ \ 19 typeof(x) __x = (x); \ 20 (__x == HDR_RDBK_FRAME1 || \ 21 __x == HDR_RDBK_FRAME2 || \ 22 __x == HDR_RDBK_FRAME3); \ 23 }) 24 25 enum { 26 T_CMD_QUEUE, 27 T_CMD_DEQUEUE, 28 T_CMD_LEN, 29 T_CMD_END, 30 }; 31 32 enum hdr_op_mode { 33 HDR_NORMAL = 0, 34 HDR_RDBK_FRAME1 = 4, 35 HDR_RDBK_FRAME2 = 5, 36 HDR_RDBK_FRAME3 = 6, 37 HDR_FRAMEX2_DDR = 8, 38 HDR_LINEX2_DDR = 9, 39 HDR_LINEX2_NO_DDR = 10, 40 HDR_FRAMEX3_DDR = 12, 41 HDR_LINEX3_DDR = 13, 42 }; 43 44 enum rkisp_csi_pad { 45 CSI_SINK = 0, 46 CSI_SRC_CH0, 47 CSI_SRC_CH1, 48 CSI_SRC_CH2, 49 CSI_SRC_CH3, 50 CSI_SRC_CH4, 51 CSI_PAD_MAX 52 }; 53 54 struct sink_info { 55 u8 index; 56 u8 linked; 57 }; 58 59 /* 60 * struct rkisp_csi_device 61 * sink: csi link enable flags 62 * mipi_di: Data Identifier (vc[7:6],dt[5:0]) 63 * tx_first: flags for dmatx first Y_STATE irq 64 */ 65 struct rkisp_csi_device { 66 struct rkisp_device *ispdev; 67 struct v4l2_subdev sd; 68 struct media_pad pads[CSI_PAD_MAX]; 69 struct sink_info sink[CSI_PAD_MAX - 1]; 70 int max_pad; 71 u32 err_cnt; 72 u32 irq_cnt; 73 u8 mipi_di[CSI_PAD_MAX - 1]; 74 u8 tx_first[HDR_DMA_MAX]; 75 }; 76 77 int rkisp_register_csi_subdev(struct rkisp_device *dev, 78 struct v4l2_device *v4l2_dev); 79 void rkisp_unregister_csi_subdev(struct rkisp_device *dev); 80 81 int rkisp_csi_config_patch(struct rkisp_device *dev); 82 void rkisp_csi_sof(struct rkisp_device *dev, u8 id); 83 #endif 84