1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Rockchip CIF Driver 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2020 Rockchip Electronics Co., Ltd. 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef _RKCIF_SDITF_H 9*4882a593Smuzhiyun #define _RKCIF_SDITF_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <linux/mutex.h> 12*4882a593Smuzhiyun #include <media/media-device.h> 13*4882a593Smuzhiyun #include <media/media-entity.h> 14*4882a593Smuzhiyun #include <media/v4l2-ctrls.h> 15*4882a593Smuzhiyun #include <media/v4l2-device.h> 16*4882a593Smuzhiyun #include <media/videobuf2-v4l2.h> 17*4882a593Smuzhiyun #include <media/v4l2-mc.h> 18*4882a593Smuzhiyun #include <linux/rk-camera-module.h> 19*4882a593Smuzhiyun #include "hw.h" 20*4882a593Smuzhiyun #include "../isp/isp_external.h" 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define RKISP0_DEVNAME "rkisp0" 23*4882a593Smuzhiyun #define RKISP1_DEVNAME "rkisp1" 24*4882a593Smuzhiyun #define RKISP_UNITE_DEVNAME "rkisp-unite" 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #define RKCIF_TOISP_CH0 0 27*4882a593Smuzhiyun #define RKCIF_TOISP_CH1 1 28*4882a593Smuzhiyun #define RKCIF_TOISP_CH2 2 29*4882a593Smuzhiyun #define TOISP_CH_MAX 3 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #define SDITF_PIXEL_RATE_MAX (1000000000) 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun struct capture_info { 34*4882a593Smuzhiyun unsigned int offset_x; 35*4882a593Smuzhiyun unsigned int offset_y; 36*4882a593Smuzhiyun unsigned int width; 37*4882a593Smuzhiyun unsigned int height; 38*4882a593Smuzhiyun }; 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun enum toisp_link_mode { 41*4882a593Smuzhiyun TOISP_NONE, 42*4882a593Smuzhiyun TOISP0, 43*4882a593Smuzhiyun TOISP1, 44*4882a593Smuzhiyun TOISP_UNITE, 45*4882a593Smuzhiyun }; 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun struct toisp_ch_info { 48*4882a593Smuzhiyun bool is_valid; 49*4882a593Smuzhiyun int id; 50*4882a593Smuzhiyun }; 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun struct toisp_info { 53*4882a593Smuzhiyun struct toisp_ch_info ch_info[TOISP_CH_MAX]; 54*4882a593Smuzhiyun enum toisp_link_mode link_mode; 55*4882a593Smuzhiyun }; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun struct sditf_work_struct { 58*4882a593Smuzhiyun struct work_struct work; 59*4882a593Smuzhiyun struct rkisp_rx_buffer *buf; 60*4882a593Smuzhiyun }; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun struct sditf_priv { 63*4882a593Smuzhiyun struct device *dev; 64*4882a593Smuzhiyun struct v4l2_async_notifier notifier; 65*4882a593Smuzhiyun struct v4l2_subdev sd; 66*4882a593Smuzhiyun struct media_pad pads[2]; 67*4882a593Smuzhiyun struct rkcif_device *cif_dev; 68*4882a593Smuzhiyun struct rkmodule_hdr_cfg hdr_cfg; 69*4882a593Smuzhiyun struct capture_info cap_info; 70*4882a593Smuzhiyun struct rkisp_vicap_mode mode; 71*4882a593Smuzhiyun struct toisp_info toisp_inf; 72*4882a593Smuzhiyun struct v4l2_ctrl *pixel_rate; 73*4882a593Smuzhiyun struct v4l2_ctrl_handler ctrl_handler; 74*4882a593Smuzhiyun struct v4l2_subdev *sensor_sd; 75*4882a593Smuzhiyun struct sditf_work_struct buffree_work; 76*4882a593Smuzhiyun struct list_head buf_free_list; 77*4882a593Smuzhiyun int buf_num; 78*4882a593Smuzhiyun int num_sensors; 79*4882a593Smuzhiyun int combine_index; 80*4882a593Smuzhiyun bool is_combine_mode; 81*4882a593Smuzhiyun atomic_t power_cnt; 82*4882a593Smuzhiyun atomic_t stream_cnt; 83*4882a593Smuzhiyun }; 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun extern struct platform_driver rkcif_subdev_driver; 86*4882a593Smuzhiyun void sditf_change_to_online(struct sditf_priv *priv); 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun #endif 89