1f5fbb83fSMauro Carvalho Chehab // SPDX-License-Identifier: GPL-2.0
29d4fa1a1SMauro Carvalho Chehab /*
39d4fa1a1SMauro Carvalho Chehab  * Support for Intel Camera Imaging ISP subsystem.
49d4fa1a1SMauro Carvalho Chehab  * Copyright (c) 2015, Intel Corporation.
59d4fa1a1SMauro Carvalho Chehab  *
69d4fa1a1SMauro Carvalho Chehab  * This program is free software; you can redistribute it and/or modify it
79d4fa1a1SMauro Carvalho Chehab  * under the terms and conditions of the GNU General Public License,
89d4fa1a1SMauro Carvalho Chehab  * version 2, as published by the Free Software Foundation.
99d4fa1a1SMauro Carvalho Chehab  *
109d4fa1a1SMauro Carvalho Chehab  * This program is distributed in the hope it will be useful, but WITHOUT
119d4fa1a1SMauro Carvalho Chehab  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
129d4fa1a1SMauro Carvalho Chehab  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
139d4fa1a1SMauro Carvalho Chehab  * more details.
149d4fa1a1SMauro Carvalho Chehab  */
159d4fa1a1SMauro Carvalho Chehab 
169d4fa1a1SMauro Carvalho Chehab #include "ia_css_types.h"
179d4fa1a1SMauro Carvalho Chehab #include "sh_css_defs.h"
189d4fa1a1SMauro Carvalho Chehab #ifndef IA_CSS_NO_DEBUG
199d4fa1a1SMauro Carvalho Chehab /* FIXME: See BZ 4427 */
209d4fa1a1SMauro Carvalho Chehab #include "ia_css_debug.h"
219d4fa1a1SMauro Carvalho Chehab #endif
229d4fa1a1SMauro Carvalho Chehab #include "sh_css_frac.h"
239d4fa1a1SMauro Carvalho Chehab #include "vamem.h"
249d4fa1a1SMauro Carvalho Chehab 
259d4fa1a1SMauro Carvalho Chehab #include "ia_css_gc.host.h"
269d4fa1a1SMauro Carvalho Chehab 
279d4fa1a1SMauro Carvalho Chehab const struct ia_css_gc_config default_gc_config = {
289d4fa1a1SMauro Carvalho Chehab 	0,
299d4fa1a1SMauro Carvalho Chehab 	0
309d4fa1a1SMauro Carvalho Chehab };
319d4fa1a1SMauro Carvalho Chehab 
329d4fa1a1SMauro Carvalho Chehab const struct ia_css_ce_config default_ce_config = {
339d4fa1a1SMauro Carvalho Chehab 	0,
349d4fa1a1SMauro Carvalho Chehab 	255
359d4fa1a1SMauro Carvalho Chehab };
369d4fa1a1SMauro Carvalho Chehab 
379d4fa1a1SMauro Carvalho Chehab void
ia_css_gc_encode(struct sh_css_isp_gc_params * to,const struct ia_css_gc_config * from,unsigned int size)389d4fa1a1SMauro Carvalho Chehab ia_css_gc_encode(
399d4fa1a1SMauro Carvalho Chehab     struct sh_css_isp_gc_params *to,
409d4fa1a1SMauro Carvalho Chehab     const struct ia_css_gc_config *from,
419d4fa1a1SMauro Carvalho Chehab     unsigned int size)
429d4fa1a1SMauro Carvalho Chehab {
439d4fa1a1SMauro Carvalho Chehab 	(void)size;
449d4fa1a1SMauro Carvalho Chehab 	to->gain_k1 =
459d4fa1a1SMauro Carvalho Chehab 	    uDIGIT_FITTING((int)from->gain_k1, 16,
469d4fa1a1SMauro Carvalho Chehab 			   IA_CSS_GAMMA_GAIN_K_SHIFT);
479d4fa1a1SMauro Carvalho Chehab 	to->gain_k2 =
489d4fa1a1SMauro Carvalho Chehab 	    uDIGIT_FITTING((int)from->gain_k2, 16,
499d4fa1a1SMauro Carvalho Chehab 			   IA_CSS_GAMMA_GAIN_K_SHIFT);
509d4fa1a1SMauro Carvalho Chehab }
519d4fa1a1SMauro Carvalho Chehab 
529d4fa1a1SMauro Carvalho Chehab void
ia_css_ce_encode(struct sh_css_isp_ce_params * to,const struct ia_css_ce_config * from,unsigned int size)539d4fa1a1SMauro Carvalho Chehab ia_css_ce_encode(
549d4fa1a1SMauro Carvalho Chehab     struct sh_css_isp_ce_params *to,
559d4fa1a1SMauro Carvalho Chehab     const struct ia_css_ce_config *from,
569d4fa1a1SMauro Carvalho Chehab     unsigned int size)
579d4fa1a1SMauro Carvalho Chehab {
589d4fa1a1SMauro Carvalho Chehab 	(void)size;
599d4fa1a1SMauro Carvalho Chehab 	to->uv_level_min = from->uv_level_min;
609d4fa1a1SMauro Carvalho Chehab 	to->uv_level_max = from->uv_level_max;
619d4fa1a1SMauro Carvalho Chehab }
629d4fa1a1SMauro Carvalho Chehab 
639d4fa1a1SMauro Carvalho Chehab void
ia_css_gc_vamem_encode(struct sh_css_isp_gc_vamem_params * to,const struct ia_css_gamma_table * from,unsigned int size)649d4fa1a1SMauro Carvalho Chehab ia_css_gc_vamem_encode(
659d4fa1a1SMauro Carvalho Chehab     struct sh_css_isp_gc_vamem_params *to,
669d4fa1a1SMauro Carvalho Chehab     const struct ia_css_gamma_table *from,
679d4fa1a1SMauro Carvalho Chehab     unsigned int size)
689d4fa1a1SMauro Carvalho Chehab {
699d4fa1a1SMauro Carvalho Chehab 	(void)size;
709d4fa1a1SMauro Carvalho Chehab 	memcpy(&to->gc,  &from->data, sizeof(to->gc));
719d4fa1a1SMauro Carvalho Chehab }
729d4fa1a1SMauro Carvalho Chehab 
739d4fa1a1SMauro Carvalho Chehab #ifndef IA_CSS_NO_DEBUG
749d4fa1a1SMauro Carvalho Chehab void
ia_css_gc_dump(const struct sh_css_isp_gc_params * gc,unsigned int level)759d4fa1a1SMauro Carvalho Chehab ia_css_gc_dump(
769d4fa1a1SMauro Carvalho Chehab     const struct sh_css_isp_gc_params *gc,
779d4fa1a1SMauro Carvalho Chehab     unsigned int level)
789d4fa1a1SMauro Carvalho Chehab {
799d4fa1a1SMauro Carvalho Chehab 	if (!gc) return;
809d4fa1a1SMauro Carvalho Chehab 	ia_css_debug_dtrace(level, "Gamma Correction:\n");
819d4fa1a1SMauro Carvalho Chehab 	ia_css_debug_dtrace(level, "\t%-32s = %d\n",
829d4fa1a1SMauro Carvalho Chehab 			    "gamma_gain_k1", gc->gain_k1);
839d4fa1a1SMauro Carvalho Chehab 	ia_css_debug_dtrace(level, "\t%-32s = %d\n",
849d4fa1a1SMauro Carvalho Chehab 			    "gamma_gain_k2", gc->gain_k2);
859d4fa1a1SMauro Carvalho Chehab }
869d4fa1a1SMauro Carvalho Chehab 
879d4fa1a1SMauro Carvalho Chehab void
ia_css_ce_dump(const struct sh_css_isp_ce_params * ce,unsigned int level)889d4fa1a1SMauro Carvalho Chehab ia_css_ce_dump(
899d4fa1a1SMauro Carvalho Chehab     const struct sh_css_isp_ce_params *ce,
909d4fa1a1SMauro Carvalho Chehab     unsigned int level)
919d4fa1a1SMauro Carvalho Chehab {
929d4fa1a1SMauro Carvalho Chehab 	ia_css_debug_dtrace(level, "Chroma Enhancement:\n");
939d4fa1a1SMauro Carvalho Chehab 	ia_css_debug_dtrace(level, "\t%-32s = %d\n",
949d4fa1a1SMauro Carvalho Chehab 			    "ce_uv_level_min", ce->uv_level_min);
959d4fa1a1SMauro Carvalho Chehab 	ia_css_debug_dtrace(level, "\t%-32s = %d\n",
969d4fa1a1SMauro Carvalho Chehab 			    "ce_uv_level_max", ce->uv_level_max);
979d4fa1a1SMauro Carvalho Chehab }
989d4fa1a1SMauro Carvalho Chehab 
999d4fa1a1SMauro Carvalho Chehab void
ia_css_gc_debug_dtrace(const struct ia_css_gc_config * config,unsigned int level)1009d4fa1a1SMauro Carvalho Chehab ia_css_gc_debug_dtrace(
1019d4fa1a1SMauro Carvalho Chehab     const struct ia_css_gc_config *config,
1029d4fa1a1SMauro Carvalho Chehab     unsigned int level)
1039d4fa1a1SMauro Carvalho Chehab {
1049d4fa1a1SMauro Carvalho Chehab 	ia_css_debug_dtrace(level,
1059d4fa1a1SMauro Carvalho Chehab 			    "config.gain_k1=%d, config.gain_k2=%d\n",
1069d4fa1a1SMauro Carvalho Chehab 			    config->gain_k1, config->gain_k2);
1079d4fa1a1SMauro Carvalho Chehab }
1089d4fa1a1SMauro Carvalho Chehab 
1099d4fa1a1SMauro Carvalho Chehab void
ia_css_ce_debug_dtrace(const struct ia_css_ce_config * config,unsigned int level)1109d4fa1a1SMauro Carvalho Chehab ia_css_ce_debug_dtrace(
1119d4fa1a1SMauro Carvalho Chehab     const struct ia_css_ce_config *config,
1129d4fa1a1SMauro Carvalho Chehab     unsigned int level)
1139d4fa1a1SMauro Carvalho Chehab {
1149d4fa1a1SMauro Carvalho Chehab 	ia_css_debug_dtrace(level,
1159d4fa1a1SMauro Carvalho Chehab 			    "config.uv_level_min=%d, config.uv_level_max=%d\n",
1169d4fa1a1SMauro Carvalho Chehab 			    config->uv_level_min, config->uv_level_max);
1179d4fa1a1SMauro Carvalho Chehab }
1189d4fa1a1SMauro Carvalho Chehab #endif
119