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