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