hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/media/platform/rockchip/cif/dev.h
....@@ -94,6 +94,13 @@
9494 #define CROP_SRC_SENSOR_MASK (0x1 << 0)
9595 #define CROP_SRC_USR_MASK (0x1 << 1)
9696
97
+/*
98
+ * max wait time for stream stop
99
+ */
100
+#define RKCIF_STOP_MAX_WAIT_TIME_MS (500)
101
+
102
+#define RKCIF_SKIP_FRAME_MAX (16)
103
+
97104 enum rkcif_workmode {
98105 RKCIF_WORKMODE_ONEFRAME = 0x00,
99106 RKCIF_WORKMODE_PINGPONG = 0x01,
....@@ -471,6 +478,18 @@
471478 u32 group;
472479 };
473480
481
+enum rkcif_toisp_buf_update_state {
482
+ RKCIF_TOISP_BUF_ROTATE,
483
+ RKCIF_TOISP_BUF_THESAME,
484
+ RKCIF_TOISP_BUF_LOSS,
485
+};
486
+
487
+struct rkcif_toisp_buf_state {
488
+ enum rkcif_toisp_buf_update_state state;
489
+ int check_cnt;
490
+ bool is_early_update;
491
+};
492
+
474493 /*
475494 * struct rkcif_stream - Stream states TODO
476495 *
....@@ -530,6 +549,7 @@
530549 struct rkcif_rx_buffer rx_buf[RKISP_VICAP_BUF_CNT_MAX];
531550 struct list_head rx_buf_head;
532551 int total_buf_num;
552
+ int rx_buf_num;
533553 u64 line_int_cnt;
534554 int lack_buf_cnt;
535555 unsigned int buf_wake_up_cnt;
....@@ -540,6 +560,10 @@
540560 int last_frame_idx;
541561 int new_fource_idx;
542562 atomic_t buf_cnt;
563
+ struct completion stop_complete;
564
+ struct rkcif_toisp_buf_state toisp_buf_state;
565
+ u32 skip_frame;
566
+ u32 cur_skip_frame;
543567 bool stopping;
544568 bool crop_enable;
545569 bool crop_dyn_en;
....@@ -557,6 +581,8 @@
557581 bool is_change_toisp;
558582 bool is_stop_capture;
559583 bool is_wait_dma_stop;
584
+ bool is_single_cap;
585
+ bool is_wait_stop_complete;
560586 };
561587
562588 struct rkcif_lvds_subdev {
....@@ -792,6 +818,20 @@
792818 u32 intstat;
793819 u32 lastline;
794820 u32 lastpixel;
821
+ u32 size_id0;
822
+ u32 size_id1;
823
+ u32 size_id2;
824
+ u32 size_id3;
825
+};
826
+
827
+enum rkcif_resume_user {
828
+ RKCIF_RESUME_CIF,
829
+ RKCIF_RESUME_ISP,
830
+};
831
+
832
+struct rkcif_sensor_work {
833
+ struct work_struct work;
834
+ int on;
795835 };
796836
797837 /*
....@@ -822,6 +862,7 @@
822862 int chip_id;
823863 atomic_t stream_cnt;
824864 atomic_t power_cnt;
865
+ atomic_t streamoff_cnt;
825866 struct mutex stream_lock; /* lock between streams */
826867 struct mutex scale_lock; /* lock between scale dev */
827868 struct mutex tools_lock; /* lock between tools dev */
....@@ -854,6 +895,7 @@
854895 struct completion cmpl_ntf;
855896 struct csi2_dphy_hw *dphy_hw;
856897 phys_addr_t resmem_pa;
898
+ dma_addr_t resmem_addr;
857899 size_t resmem_size;
858900 struct rk_tb_client tb_client;
859901 bool is_start_hdr;
....@@ -864,6 +906,9 @@
864906 bool is_thunderboot;
865907 bool is_rdbk_to_online;
866908 bool is_support_tools;
909
+ bool is_rtt_suspend;
910
+ bool sensor_state_change;
911
+ bool is_toisp_reset;
867912 int rdbk_debug;
868913 struct rkcif_sync_cfg sync_cfg;
869914 int sditf_cnt;
....@@ -872,6 +917,14 @@
872917 int sensor_linetime;
873918 u32 err_state;
874919 struct rkcif_err_state_work err_state_work;
920
+ struct rkcif_sensor_work sensor_work;
921
+ int resume_mode;
922
+ u32 nr_buf_size;
923
+ u32 share_mem_size;
924
+ u32 thunderboot_sensor_num;
925
+ int sensor_state;
926
+ u32 intr_mask;
927
+ struct delayed_work work_deal_err;
875928 };
876929
877930 extern struct platform_driver rkcif_plat_drv;
....@@ -968,5 +1021,15 @@
9681021 void rkcif_rockit_dev_deinit(void);
9691022
9701023 void rkcif_err_print_work(struct work_struct *work);
1024
+int rkcif_stream_suspend(struct rkcif_device *cif_dev, int mode);
1025
+int rkcif_stream_resume(struct rkcif_device *cif_dev, int mode);
1026
+
1027
+static inline u64 rkcif_time_get_ns(struct rkcif_device *dev)
1028
+{
1029
+ if (dev->chip_id == CHIP_RV1106_CIF)
1030
+ return ktime_get_boottime_ns();
1031
+ else
1032
+ return ktime_get_ns();
1033
+}
9711034
9721035 #endif