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