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 #ifndef __PIXELGEN_PRIVATE_H_INCLUDED__
16 #define __PIXELGEN_PRIVATE_H_INCLUDED__
17 #include "pixelgen_public.h"
18 #include "PixelGen_SysBlock_defs.h"
19 #include "device_access.h"	/* ia_css_device_load_uint32 */
20 #include "assert_support.h" /* assert */
21 
22 /*****************************************************
23  *
24  * Native command interface (NCI).
25  *
26  *****************************************************/
27 /**
28  * @brief Get the pixelgen state.
29  * Refer to "pixelgen_public.h" for details.
30  */
31 STORAGE_CLASS_PIXELGEN_C void pixelgen_ctrl_get_state(
32     const pixelgen_ID_t ID,
33     pixelgen_ctrl_state_t *state)
34 {
35 	state->com_enable =
36 	    pixelgen_ctrl_reg_load(ID, _PXG_COM_ENABLE_REG_IDX);
37 	state->prbs_rstval0 =
38 	    pixelgen_ctrl_reg_load(ID, _PXG_PRBS_RSTVAL_REG0_IDX);
39 	state->prbs_rstval1 =
40 	    pixelgen_ctrl_reg_load(ID, _PXG_PRBS_RSTVAL_REG1_IDX);
41 	state->syng_sid =
42 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_SID_REG_IDX);
43 	state->syng_free_run =
44 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_FREE_RUN_REG_IDX);
45 	state->syng_pause =
46 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_PAUSE_REG_IDX);
47 	state->syng_nof_frames =
48 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_NOF_FRAME_REG_IDX);
49 	state->syng_nof_pixels =
50 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_NOF_PIXEL_REG_IDX);
51 	state->syng_nof_line =
52 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_NOF_LINE_REG_IDX);
53 	state->syng_hblank_cyc =
54 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_HBLANK_CYC_REG_IDX);
55 	state->syng_vblank_cyc =
56 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_VBLANK_CYC_REG_IDX);
57 	state->syng_stat_hcnt =
58 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_STAT_HCNT_REG_IDX);
59 	state->syng_stat_vcnt =
60 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_STAT_VCNT_REG_IDX);
61 	state->syng_stat_fcnt =
62 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_STAT_FCNT_REG_IDX);
63 	state->syng_stat_done =
64 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_STAT_DONE_REG_IDX);
65 	state->tpg_mode =
66 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_MODE_REG_IDX);
67 	state->tpg_hcnt_mask =
68 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_HCNT_MASK_REG_IDX);
69 	state->tpg_vcnt_mask =
70 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_VCNT_MASK_REG_IDX);
71 	state->tpg_xycnt_mask =
72 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_XYCNT_MASK_REG_IDX);
73 	state->tpg_hcnt_delta =
74 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_HCNT_DELTA_REG_IDX);
75 	state->tpg_vcnt_delta =
76 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_VCNT_DELTA_REG_IDX);
77 	state->tpg_r1 =
78 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_R1_REG_IDX);
79 	state->tpg_g1 =
80 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_G1_REG_IDX);
81 	state->tpg_b1 =
82 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_B1_REG_IDX);
83 	state->tpg_r2 =
84 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_R2_REG_IDX);
85 	state->tpg_g2 =
86 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_G2_REG_IDX);
87 	state->tpg_b2 =
88 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_B2_REG_IDX);
89 }
90 
91 /**
92  * @brief Dump the pixelgen state.
93  * Refer to "pixelgen_public.h" for details.
94  */
95 STORAGE_CLASS_PIXELGEN_C void pixelgen_ctrl_dump_state(
96     const pixelgen_ID_t ID,
97     pixelgen_ctrl_state_t *state)
98 {
99 	ia_css_print("Pixel Generator ID %d Enable  0x%x\n", ID, state->com_enable);
100 	ia_css_print("Pixel Generator ID %d PRBS reset value 0 0x%x\n", ID,
101 		     state->prbs_rstval0);
102 	ia_css_print("Pixel Generator ID %d PRBS reset value 1 0x%x\n", ID,
103 		     state->prbs_rstval1);
104 	ia_css_print("Pixel Generator ID %d SYNC SID 0x%x\n", ID, state->syng_sid);
105 	ia_css_print("Pixel Generator ID %d syng free run 0x%x\n", ID,
106 		     state->syng_free_run);
107 	ia_css_print("Pixel Generator ID %d syng pause 0x%x\n", ID, state->syng_pause);
108 	ia_css_print("Pixel Generator ID %d syng no of frames 0x%x\n", ID,
109 		     state->syng_nof_frames);
110 	ia_css_print("Pixel Generator ID %d syng no of pixels 0x%x\n", ID,
111 		     state->syng_nof_pixels);
112 	ia_css_print("Pixel Generator ID %d syng no of line 0x%x\n", ID,
113 		     state->syng_nof_line);
114 	ia_css_print("Pixel Generator ID %d syng hblank cyc  0x%x\n", ID,
115 		     state->syng_hblank_cyc);
116 	ia_css_print("Pixel Generator ID %d syng vblank cyc  0x%x\n", ID,
117 		     state->syng_vblank_cyc);
118 	ia_css_print("Pixel Generator ID %d syng stat hcnt  0x%x\n", ID,
119 		     state->syng_stat_hcnt);
120 	ia_css_print("Pixel Generator ID %d syng stat vcnt  0x%x\n", ID,
121 		     state->syng_stat_vcnt);
122 	ia_css_print("Pixel Generator ID %d syng stat fcnt  0x%x\n", ID,
123 		     state->syng_stat_fcnt);
124 	ia_css_print("Pixel Generator ID %d syng stat done  0x%x\n", ID,
125 		     state->syng_stat_done);
126 	ia_css_print("Pixel Generator ID %d tpg modee  0x%x\n", ID, state->tpg_mode);
127 	ia_css_print("Pixel Generator ID %d tpg hcnt mask  0x%x\n", ID,
128 		     state->tpg_hcnt_mask);
129 	ia_css_print("Pixel Generator ID %d tpg hcnt mask  0x%x\n", ID,
130 		     state->tpg_hcnt_mask);
131 	ia_css_print("Pixel Generator ID %d tpg xycnt mask  0x%x\n", ID,
132 		     state->tpg_xycnt_mask);
133 	ia_css_print("Pixel Generator ID %d tpg hcnt delta  0x%x\n", ID,
134 		     state->tpg_hcnt_delta);
135 	ia_css_print("Pixel Generator ID %d tpg vcnt delta  0x%x\n", ID,
136 		     state->tpg_vcnt_delta);
137 	ia_css_print("Pixel Generator ID %d tpg r1 0x%x\n", ID, state->tpg_r1);
138 	ia_css_print("Pixel Generator ID %d tpg g1 0x%x\n", ID, state->tpg_g1);
139 	ia_css_print("Pixel Generator ID %d tpg b1 0x%x\n", ID, state->tpg_b1);
140 	ia_css_print("Pixel Generator ID %d tpg r2 0x%x\n", ID, state->tpg_r2);
141 	ia_css_print("Pixel Generator ID %d tpg g2 0x%x\n", ID, state->tpg_g2);
142 	ia_css_print("Pixel Generator ID %d tpg b2 0x%x\n", ID, state->tpg_b2);
143 }
144 
145 /* end of NCI */
146 /*****************************************************
147  *
148  * Device level interface (DLI).
149  *
150  *****************************************************/
151 /**
152  * @brief Load the register value.
153  * Refer to "pixelgen_public.h" for details.
154  */
155 STORAGE_CLASS_PIXELGEN_C hrt_data pixelgen_ctrl_reg_load(
156     const pixelgen_ID_t ID,
157     const hrt_address reg)
158 {
159 	assert(ID < N_PIXELGEN_ID);
160 	assert(PIXELGEN_CTRL_BASE[ID] != (hrt_address) - 1);
161 	return ia_css_device_load_uint32(PIXELGEN_CTRL_BASE[ID] + reg * sizeof(
162 					     hrt_data));
163 }
164 
165 /**
166  * @brief Store a value to the register.
167  * Refer to "pixelgen_ctrl_public.h" for details.
168  */
169 STORAGE_CLASS_PIXELGEN_C void pixelgen_ctrl_reg_store(
170     const pixelgen_ID_t ID,
171     const hrt_address reg,
172     const hrt_data value)
173 {
174 	assert(ID < N_PIXELGEN_ID);
175 	assert(PIXELGEN_CTRL_BASE[ID] != (hrt_address)-1);
176 
177 	ia_css_device_store_uint32(PIXELGEN_CTRL_BASE[ID] + reg * sizeof(hrt_data),
178 				   value);
179 }
180 
181 /* end of DLI */
182 #endif /* __PIXELGEN_PRIVATE_H_INCLUDED__ */
183