1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun #ifndef __RK1608_DPHY_H__ 4*4882a593Smuzhiyun #define __RK1608_DPHY_H__ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #define RK1608_MAX_FMTINF 4 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun struct rk1608_chinf { 9*4882a593Smuzhiyun u32 width; 10*4882a593Smuzhiyun u32 height; 11*4882a593Smuzhiyun u32 data_id; 12*4882a593Smuzhiyun u32 decode_format; 13*4882a593Smuzhiyun u32 flag; 14*4882a593Smuzhiyun }; 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun struct rk1608_fmt_inf { 17*4882a593Smuzhiyun u32 data_type; 18*4882a593Smuzhiyun u32 mipi_lane; 19*4882a593Smuzhiyun u32 mipi_lane_out; 20*4882a593Smuzhiyun u32 hactive; 21*4882a593Smuzhiyun u32 vactive; 22*4882a593Smuzhiyun u32 htotal; 23*4882a593Smuzhiyun u32 vtotal; 24*4882a593Smuzhiyun struct v4l2_mbus_framefmt mf; 25*4882a593Smuzhiyun struct rk1608_chinf in_ch[4]; 26*4882a593Smuzhiyun struct rk1608_chinf out_ch[4]; 27*4882a593Smuzhiyun u32 hcrop; 28*4882a593Smuzhiyun u32 vcrop; 29*4882a593Smuzhiyun }; 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun struct rk1608_sub_sensor_cfg { 32*4882a593Smuzhiyun u32 id; 33*4882a593Smuzhiyun u32 in_mipi; 34*4882a593Smuzhiyun u32 out_mipi; 35*4882a593Smuzhiyun u32 reserved; 36*4882a593Smuzhiyun }; 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun struct rk1608_dphy { 39*4882a593Smuzhiyun struct v4l2_subdev sd; 40*4882a593Smuzhiyun struct v4l2_subdev *rk1608_sd; 41*4882a593Smuzhiyun struct platform_device *pdev; 42*4882a593Smuzhiyun struct device *dev; 43*4882a593Smuzhiyun struct media_pad pad; 44*4882a593Smuzhiyun struct v4l2_ctrl *link_freq; 45*4882a593Smuzhiyun struct v4l2_ctrl *pixel_rate; 46*4882a593Smuzhiyun struct v4l2_ctrl *hblank; 47*4882a593Smuzhiyun struct v4l2_ctrl *vblank; 48*4882a593Smuzhiyun struct v4l2_ctrl *exposure; 49*4882a593Smuzhiyun struct v4l2_ctrl *gain; 50*4882a593Smuzhiyun struct v4l2_ctrl *h_flip; 51*4882a593Smuzhiyun struct v4l2_ctrl *v_flip; 52*4882a593Smuzhiyun struct v4l2_ctrl_handler ctrl_handler; 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun u32 cam_nums; 55*4882a593Smuzhiyun u32 in_mipi; 56*4882a593Smuzhiyun u32 out_mipi; 57*4882a593Smuzhiyun s64 link_freqs; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun u32 i2c_bus; 60*4882a593Smuzhiyun u32 i2c_addr; 61*4882a593Smuzhiyun const char *sensor_name; 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun u32 module_index; 64*4882a593Smuzhiyun const char *module_facing; 65*4882a593Smuzhiyun const char *module_name; 66*4882a593Smuzhiyun const char *len_name; 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun u32 fmt_inf_num; 69*4882a593Smuzhiyun u32 fmt_inf_idx; 70*4882a593Smuzhiyun struct rk1608_fmt_inf fmt_inf[RK1608_MAX_FMTINF]; 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun bool first_stream; 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun /* for virtual sub sensor */ 75*4882a593Smuzhiyun u32 sub_sensor_num; 76*4882a593Smuzhiyun struct rk1608_sub_sensor_cfg sub_sensor[4]; 77*4882a593Smuzhiyun struct i2c_client *link_sensor_client; 78*4882a593Smuzhiyun }; 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun #endif 81