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