1 /* 2 * Support for Intel Camera Imaging ISP subsystem. 3 * Copyright (c) 2015, Intel Corporation. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms and conditions of the GNU General Public License, 7 * version 2, as published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 * more details. 13 */ 14 15 #include "ia_css_types.h" 16 #include "sh_css_defs.h" 17 #include "ia_css_debug.h" 18 #include "assert_support.h" 19 20 #define IA_CSS_INCLUDE_CONFIGURATIONS 21 #include "ia_css_isp_configs.h" 22 23 #include "ia_css_sc.host.h" 24 25 /* Code generated by genparam/genconfig.c:gen_configure_function() */ 26 27 /* ISP2401 */ 28 static void 29 ia_css_configure_sc( 30 const struct ia_css_binary *binary, 31 const struct ia_css_sc_configuration *config_dmem) 32 { 33 ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE, 34 "ia_css_configure_sc() enter:\n"); 35 36 { 37 unsigned int offset = 0; 38 unsigned int size = 0; 39 40 if (binary->info->mem_offsets.offsets.config) { 41 size = binary->info->mem_offsets.offsets.config->dmem.sc.size; 42 offset = binary->info->mem_offsets.offsets.config->dmem.sc.offset; 43 } 44 if (size) { 45 ia_css_sc_config((struct sh_css_isp_sc_isp_config *) 46 &binary->mem_params.params[IA_CSS_PARAM_CLASS_CONFIG][IA_CSS_ISP_DMEM].address[offset], 47 config_dmem, size); 48 } 49 } 50 ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE, 51 "ia_css_configure_sc() leave:\n"); 52 } 53 54 void 55 ia_css_sc_encode( 56 struct sh_css_isp_sc_params *to, 57 struct ia_css_shading_table **from, 58 unsigned int size) 59 { 60 (void)size; 61 to->gain_shift = (*from)->fraction_bits; 62 } 63 64 void 65 ia_css_sc_dump( 66 const struct sh_css_isp_sc_params *sc, 67 unsigned int level) 68 { 69 if (!sc) return; 70 ia_css_debug_dtrace(level, "Shading Correction:\n"); 71 ia_css_debug_dtrace(level, "\t%-32s = %d\n", 72 "sc_gain_shift", sc->gain_shift); 73 } 74 75 /* ISP2401 */ 76 void 77 ia_css_sc_config( 78 struct sh_css_isp_sc_isp_config *to, 79 const struct ia_css_sc_configuration *from, 80 unsigned int size) 81 { 82 u32 internal_org_x_bqs = from->internal_frame_origin_x_bqs_on_sctbl; 83 u32 internal_org_y_bqs = from->internal_frame_origin_y_bqs_on_sctbl; 84 u32 slice, rest, i; 85 86 (void)size; 87 88 /* The internal_frame_origin_x_bqs_on_sctbl is separated to 8 times of slice_vec. */ 89 rest = internal_org_x_bqs; 90 for (i = 0; i < SH_CSS_SC_INTERPED_GAIN_HOR_SLICE_TIMES; i++) { 91 slice = min(rest, ((uint32_t)ISP_SLICE_NELEMS)); 92 rest = rest - slice; 93 to->interped_gain_hor_slice_bqs[i] = slice; 94 } 95 96 to->internal_frame_origin_y_bqs_on_sctbl = internal_org_y_bqs; 97 } 98 99 /* ISP2401 */ 100 void 101 ia_css_sc_configure( 102 const struct ia_css_binary *binary, 103 u32 internal_frame_origin_x_bqs_on_sctbl, 104 uint32_t internal_frame_origin_y_bqs_on_sctbl) 105 { 106 const struct ia_css_sc_configuration config = { 107 internal_frame_origin_x_bqs_on_sctbl, 108 internal_frame_origin_y_bqs_on_sctbl 109 }; 110 111 ia_css_configure_sc(binary, &config); 112 } 113 114 /* ------ deprecated(bz675) : from ------ */ 115 /* It looks like @parameter{} (in *.pipe) is used to generate the process/get/set functions, 116 for parameters which should be used in the isp kernels. 117 However, the ia_css_shading_settings structure has a parameter which is used only in the css, 118 and does not have a parameter which is used in the isp kernels. 119 Then, I did not use @parameter{} to generate the get/set function 120 for the ia_css_shading_settings structure. (michie) */ 121 void 122 sh_css_get_shading_settings(const struct ia_css_isp_parameters *params, 123 struct ia_css_shading_settings *settings) 124 { 125 if (!settings) 126 return; 127 assert(params); 128 129 ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, 130 "ia_css_get_shading_settings() enter: settings=%p\n", settings); 131 132 *settings = params->shading_settings; 133 134 ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, 135 "ia_css_get_shading_settings() leave: settings.enable_shading_table_conversion=%d\n", 136 settings->enable_shading_table_conversion); 137 } 138 139 void 140 sh_css_set_shading_settings(struct ia_css_isp_parameters *params, 141 const struct ia_css_shading_settings *settings) 142 { 143 if (!settings) 144 return; 145 assert(params); 146 147 ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, 148 "ia_css_set_shading_settings() enter: settings.enable_shading_table_conversion=%d\n", 149 settings->enable_shading_table_conversion); 150 151 params->shading_settings = *settings; 152 params->shading_settings_changed = true; 153 154 ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE, 155 "ia_css_set_shading_settings() leave: return_void\n"); 156 } 157 158 /* ------ deprecated(bz675) : to ------ */ 159