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