.. | .. |
---|
94 | 94 | #define CROP_SRC_SENSOR_MASK (0x1 << 0) |
---|
95 | 95 | #define CROP_SRC_USR_MASK (0x1 << 1) |
---|
96 | 96 | |
---|
| 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 | + |
---|
97 | 104 | enum rkcif_workmode { |
---|
98 | 105 | RKCIF_WORKMODE_ONEFRAME = 0x00, |
---|
99 | 106 | RKCIF_WORKMODE_PINGPONG = 0x01, |
---|
.. | .. |
---|
471 | 478 | u32 group; |
---|
472 | 479 | }; |
---|
473 | 480 | |
---|
| 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 | + |
---|
474 | 493 | /* |
---|
475 | 494 | * struct rkcif_stream - Stream states TODO |
---|
476 | 495 | * |
---|
.. | .. |
---|
530 | 549 | struct rkcif_rx_buffer rx_buf[RKISP_VICAP_BUF_CNT_MAX]; |
---|
531 | 550 | struct list_head rx_buf_head; |
---|
532 | 551 | int total_buf_num; |
---|
| 552 | + int rx_buf_num; |
---|
533 | 553 | u64 line_int_cnt; |
---|
534 | 554 | int lack_buf_cnt; |
---|
535 | 555 | unsigned int buf_wake_up_cnt; |
---|
.. | .. |
---|
540 | 560 | int last_frame_idx; |
---|
541 | 561 | int new_fource_idx; |
---|
542 | 562 | 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; |
---|
543 | 567 | bool stopping; |
---|
544 | 568 | bool crop_enable; |
---|
545 | 569 | bool crop_dyn_en; |
---|
.. | .. |
---|
557 | 581 | bool is_change_toisp; |
---|
558 | 582 | bool is_stop_capture; |
---|
559 | 583 | bool is_wait_dma_stop; |
---|
| 584 | + bool is_single_cap; |
---|
| 585 | + bool is_wait_stop_complete; |
---|
560 | 586 | }; |
---|
561 | 587 | |
---|
562 | 588 | struct rkcif_lvds_subdev { |
---|
.. | .. |
---|
792 | 818 | u32 intstat; |
---|
793 | 819 | u32 lastline; |
---|
794 | 820 | 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; |
---|
795 | 835 | }; |
---|
796 | 836 | |
---|
797 | 837 | /* |
---|
.. | .. |
---|
822 | 862 | int chip_id; |
---|
823 | 863 | atomic_t stream_cnt; |
---|
824 | 864 | atomic_t power_cnt; |
---|
| 865 | + atomic_t streamoff_cnt; |
---|
825 | 866 | struct mutex stream_lock; /* lock between streams */ |
---|
826 | 867 | struct mutex scale_lock; /* lock between scale dev */ |
---|
827 | 868 | struct mutex tools_lock; /* lock between tools dev */ |
---|
.. | .. |
---|
854 | 895 | struct completion cmpl_ntf; |
---|
855 | 896 | struct csi2_dphy_hw *dphy_hw; |
---|
856 | 897 | phys_addr_t resmem_pa; |
---|
| 898 | + dma_addr_t resmem_addr; |
---|
857 | 899 | size_t resmem_size; |
---|
858 | 900 | struct rk_tb_client tb_client; |
---|
859 | 901 | bool is_start_hdr; |
---|
.. | .. |
---|
864 | 906 | bool is_thunderboot; |
---|
865 | 907 | bool is_rdbk_to_online; |
---|
866 | 908 | bool is_support_tools; |
---|
| 909 | + bool is_rtt_suspend; |
---|
| 910 | + bool sensor_state_change; |
---|
| 911 | + bool is_toisp_reset; |
---|
867 | 912 | int rdbk_debug; |
---|
868 | 913 | struct rkcif_sync_cfg sync_cfg; |
---|
869 | 914 | int sditf_cnt; |
---|
.. | .. |
---|
872 | 917 | int sensor_linetime; |
---|
873 | 918 | u32 err_state; |
---|
874 | 919 | 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; |
---|
875 | 928 | }; |
---|
876 | 929 | |
---|
877 | 930 | extern struct platform_driver rkcif_plat_drv; |
---|
.. | .. |
---|
968 | 1021 | void rkcif_rockit_dev_deinit(void); |
---|
969 | 1022 | |
---|
970 | 1023 | 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 | +} |
---|
971 | 1034 | |
---|
972 | 1035 | #endif |
---|