1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Support for Clovertrail PNW Camera Imaging ISP subsystem. 4 * 5 * Copyright (c) 2013 Intel Corporation. All Rights Reserved. 6 */ 7 8 #ifndef __ATOMISP_COMPAT_CSS20_H__ 9 #define __ATOMISP_COMPAT_CSS20_H__ 10 11 #include <media/v4l2-mediabus.h> 12 13 #include "ia_css.h" 14 #include "ia_css_types.h" 15 #include "ia_css_acc_types.h" 16 #include "sh_css_legacy.h" 17 18 #define ATOMISP_CSS2_PIPE_MAX 2 19 #define ATOMISP_CSS2_NUM_OFFLINE_INIT_CONTINUOUS_FRAMES 3 20 #define ATOMISP_CSS2_NUM_OFFLINE_INIT_CONTINUOUS_FRAMES_LOCK_EN 4 21 #define ATOMISP_CSS2_NUM_DVS_FRAME_DELAY 2 22 23 #define CSS_MIPI_FRAME_BUFFER_SIZE_1 0x60000 24 #define CSS_MIPI_FRAME_BUFFER_SIZE_2 0x80000 25 26 struct atomisp_device; 27 struct atomisp_sub_device; 28 29 #define MAX_STREAMS_PER_CHANNEL 2 30 31 /* 32 * These are used to indicate the css stream state, corresponding 33 * stream handling can be done via judging the different state. 34 */ 35 enum atomisp_css_stream_state { 36 CSS_STREAM_UNINIT, 37 CSS_STREAM_CREATED, 38 CSS_STREAM_STARTED, 39 CSS_STREAM_STOPPED, 40 }; 41 42 /* 43 * Sensor of external ISP can send multiple steams with different mipi data 44 * type in the same virtual channel. This information needs to come from the 45 * sensor or external ISP 46 */ 47 struct atomisp_css_isys_config_info { 48 unsigned int input_format; 49 unsigned int width; 50 unsigned int height; 51 }; 52 53 struct atomisp_stream_env { 54 struct ia_css_stream *stream; 55 struct ia_css_stream_config stream_config; 56 struct ia_css_stream_info stream_info; 57 struct ia_css_pipe *pipes[IA_CSS_PIPE_ID_NUM]; 58 struct ia_css_pipe *multi_pipes[IA_CSS_PIPE_ID_NUM]; 59 struct ia_css_pipe_config pipe_configs[IA_CSS_PIPE_ID_NUM]; 60 struct ia_css_pipe_extra_config pipe_extra_configs[IA_CSS_PIPE_ID_NUM]; 61 bool update_pipe[IA_CSS_PIPE_ID_NUM]; 62 enum atomisp_css_stream_state stream_state; 63 struct ia_css_stream *acc_stream; 64 enum atomisp_css_stream_state acc_stream_state; 65 struct ia_css_stream_config acc_stream_config; 66 unsigned int ch_id; /* virtual channel ID */ 67 unsigned int isys_configs; 68 struct atomisp_css_isys_config_info isys_info[MAX_STREAMS_PER_CHANNEL]; 69 }; 70 71 struct atomisp_css_env { 72 struct ia_css_env isp_css_env; 73 struct ia_css_fw isp_css_fw; 74 }; 75 76 struct atomisp_s3a_buf { 77 struct ia_css_isp_3a_statistics *s3a_data; 78 struct ia_css_isp_3a_statistics_map *s3a_map; 79 struct list_head list; 80 }; 81 82 struct atomisp_dis_buf { 83 struct ia_css_isp_dvs_statistics *dis_data; 84 struct ia_css_isp_dvs_statistics_map *dvs_map; 85 struct list_head list; 86 }; 87 88 struct atomisp_css_buffer { 89 struct ia_css_buffer css_buffer; 90 }; 91 92 struct atomisp_css_event { 93 enum ia_css_pipe_id pipe; 94 struct ia_css_event event; 95 }; 96 97 void atomisp_css_set_macc_config(struct atomisp_sub_device *asd, 98 struct ia_css_macc_config *macc_config); 99 100 void atomisp_css_set_ecd_config(struct atomisp_sub_device *asd, 101 struct ia_css_ecd_config *ecd_config); 102 103 void atomisp_css_set_ynr_config(struct atomisp_sub_device *asd, 104 struct ia_css_ynr_config *ynr_config); 105 106 void atomisp_css_set_fc_config(struct atomisp_sub_device *asd, 107 struct ia_css_fc_config *fc_config); 108 109 void atomisp_css_set_aa_config(struct atomisp_sub_device *asd, 110 struct ia_css_aa_config *aa_config); 111 112 void atomisp_css_set_baa_config(struct atomisp_sub_device *asd, 113 struct ia_css_aa_config *baa_config); 114 115 void atomisp_css_set_anr_config(struct atomisp_sub_device *asd, 116 struct ia_css_anr_config *anr_config); 117 118 void atomisp_css_set_xnr_config(struct atomisp_sub_device *asd, 119 struct ia_css_xnr_config *xnr_config); 120 121 void atomisp_css_set_cnr_config(struct atomisp_sub_device *asd, 122 struct ia_css_cnr_config *cnr_config); 123 124 void atomisp_css_set_ctc_config(struct atomisp_sub_device *asd, 125 struct ia_css_ctc_config *ctc_config); 126 127 void atomisp_css_set_yuv2rgb_cc_config(struct atomisp_sub_device *asd, 128 struct ia_css_cc_config *yuv2rgb_cc_config); 129 130 void atomisp_css_set_rgb2yuv_cc_config(struct atomisp_sub_device *asd, 131 struct ia_css_cc_config *rgb2yuv_cc_config); 132 133 void atomisp_css_set_anr_thres(struct atomisp_sub_device *asd, 134 struct ia_css_anr_thres *anr_thres); 135 136 int atomisp_css_load_firmware(struct atomisp_device *isp); 137 138 void atomisp_css_set_dvs_6axis(struct atomisp_sub_device *asd, 139 struct ia_css_dvs_6axis_config *dvs_6axis); 140 141 int atomisp_css_debug_dump_isp_binary(void); 142 143 int atomisp_css_dump_sp_raw_copy_linecount(bool reduced); 144 145 int atomisp_css_dump_blob_infor(struct atomisp_device *isp); 146 147 void atomisp_css_set_isp_config_id(struct atomisp_sub_device *asd, 148 uint32_t isp_config_id); 149 150 void atomisp_css_set_isp_config_applied_frame(struct atomisp_sub_device *asd, 151 struct ia_css_frame *output_frame); 152 153 int atomisp_get_css_dbgfunc(void); 154 155 int atomisp_set_css_dbgfunc(struct atomisp_device *isp, int opt); 156 struct ia_css_dvs_grid_info *atomisp_css_get_dvs_grid_info( 157 struct ia_css_grid_info *grid_info); 158 #endif 159