// SPDX-License-Identifier: GPL-2.0 /* * Support for Intel Camera Imaging ISP subsystem. * Copyright (c) 2015, Intel Corporation. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. */ #include "ia_css_types.h" #include "sh_css_defs.h" #include "ia_css_debug.h" #include "sh_css_frac.h" #include "ia_css_dp.host.h" /* We use a different set of DPC configuration parameters when * DPC is used before OBC and NORM. Currently these parameters * are used in usecases which selects both BDS and DPC. **/ const struct ia_css_dp_config default_dp_10bpp_config = { 1024, 2048, 32768, 32768, 32768, 32768 }; const struct ia_css_dp_config default_dp_config = { 8192, 2048, 32768, 32768, 32768, 32768 }; void ia_css_dp_encode( struct sh_css_isp_dp_params *to, const struct ia_css_dp_config *from, unsigned int size) { int gain = from->gain; int gr = from->gr; int r = from->r; int b = from->b; int gb = from->gb; (void)size; to->threshold_single = SH_CSS_BAYER_MAXVAL; to->threshold_2adjacent = uDIGIT_FITTING(from->threshold, 16, SH_CSS_BAYER_BITS); to->gain = uDIGIT_FITTING(from->gain, 8, SH_CSS_DP_GAIN_SHIFT); to->coef_rr_gr = uDIGIT_FITTING(gain * gr / r, 8, SH_CSS_DP_GAIN_SHIFT); to->coef_rr_gb = uDIGIT_FITTING(gain * gb / r, 8, SH_CSS_DP_GAIN_SHIFT); to->coef_bb_gb = uDIGIT_FITTING(gain * gb / b, 8, SH_CSS_DP_GAIN_SHIFT); to->coef_bb_gr = uDIGIT_FITTING(gain * gr / b, 8, SH_CSS_DP_GAIN_SHIFT); to->coef_gr_rr = uDIGIT_FITTING(gain * r / gr, 8, SH_CSS_DP_GAIN_SHIFT); to->coef_gr_bb = uDIGIT_FITTING(gain * b / gr, 8, SH_CSS_DP_GAIN_SHIFT); to->coef_gb_bb = uDIGIT_FITTING(gain * b / gb, 8, SH_CSS_DP_GAIN_SHIFT); to->coef_gb_rr = uDIGIT_FITTING(gain * r / gb, 8, SH_CSS_DP_GAIN_SHIFT); } void ia_css_dp_dump( const struct sh_css_isp_dp_params *dp, unsigned int level) { if (!dp) return; ia_css_debug_dtrace(level, "Defect Pixel Correction:\n"); ia_css_debug_dtrace(level, "\t%-32s = %d\n", "dp_threshold_single_w_2adj_on", dp->threshold_single); ia_css_debug_dtrace(level, "\t%-32s = %d\n", "dp_threshold_2adj_w_2adj_on", dp->threshold_2adjacent); ia_css_debug_dtrace(level, "\t%-32s = %d\n", "dp_gain", dp->gain); ia_css_debug_dtrace(level, "\t%-32s = %d\n", "dpc_coef_rr_gr", dp->coef_rr_gr); ia_css_debug_dtrace(level, "\t%-32s = %d\n", "dpc_coef_rr_gb", dp->coef_rr_gb); ia_css_debug_dtrace(level, "\t%-32s = %d\n", "dpc_coef_bb_gb", dp->coef_bb_gb); ia_css_debug_dtrace(level, "\t%-32s = %d\n", "dpc_coef_bb_gr", dp->coef_bb_gr); ia_css_debug_dtrace(level, "\t%-32s = %d\n", "dpc_coef_gr_rr", dp->coef_gr_rr); ia_css_debug_dtrace(level, "\t%-32s = %d\n", "dpc_coef_gr_bb", dp->coef_gr_bb); ia_css_debug_dtrace(level, "\t%-32s = %d\n", "dpc_coef_gb_bb", dp->coef_gb_bb); ia_css_debug_dtrace(level, "\t%-32s = %d\n", "dpc_coef_gb_rr", dp->coef_gb_rr); } void ia_css_dp_debug_dtrace( const struct ia_css_dp_config *config, unsigned int level) { ia_css_debug_dtrace(level, "config.threshold=%d, config.gain=%d\n", config->threshold, config->gain); } void ia_css_init_dp_state( void/*struct sh_css_isp_dp_vmem_state*/ * state, size_t size) { memset(state, 0, size); }