| .. | .. |
|---|
| 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 |
|---|