/* 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. */ #ifndef __INPUT_SYSTEM_PUBLIC_H_INCLUDED__ #define __INPUT_SYSTEM_PUBLIC_H_INCLUDED__ #include <type_support.h> #ifdef ISP2401 #include "isys_public.h" #else typedef struct input_system_state_s input_system_state_t; typedef struct receiver_state_s receiver_state_t; /*! Read the state of INPUT_SYSTEM[ID] \param ID[in] INPUT_SYSTEM identifier \param state[out] input system state structure \return none, state = INPUT_SYSTEM[ID].state */ void input_system_get_state( const input_system_ID_t ID, input_system_state_t *state); /*! Read the state of RECEIVER[ID] \param ID[in] RECEIVER identifier \param state[out] receiver state structure \return none, state = RECEIVER[ID].state */ void receiver_get_state( const rx_ID_t ID, receiver_state_t *state); /*! Flag whether a MIPI format is YUV420 \param mipi_format[in] MIPI format \return mipi_format == YUV420 */ bool is_mipi_format_yuv420( const mipi_format_t mipi_format); /*! Set compression parameters for cfg[cfg_ID] of RECEIVER[ID] \param ID[in] RECEIVER identifier \param cfg_ID[in] Configuration identifier \param comp[in] Compression method \param pred[in] Predictor method \NOTE: the storage of compression configuration is implementation specific. The config can be carried either on MIPI ports or on MIPI channels \return none, RECEIVER[ID].cfg[cfg_ID] = {comp, pred} */ void receiver_set_compression( const rx_ID_t ID, const unsigned int cfg_ID, const mipi_compressor_t comp, const mipi_predictor_t pred); /*! Enable PORT[port_ID] of RECEIVER[ID] \param ID[in] RECEIVER identifier \param port_ID[in] mipi PORT identifier \param cnd[in] irq predicate \return None, enable(RECEIVER[ID].PORT[port_ID]) */ void receiver_port_enable( const rx_ID_t ID, const enum mipi_port_id port_ID, const bool cnd); /*! Flag if PORT[port_ID] of RECEIVER[ID] is enabled \param ID[in] RECEIVER identifier \param port_ID[in] mipi PORT identifier \return enable(RECEIVER[ID].PORT[port_ID]) == true */ bool is_receiver_port_enabled( const rx_ID_t ID, const enum mipi_port_id port_ID); /*! Enable the IRQ channels of PORT[port_ID] of RECEIVER[ID] \param ID[in] RECEIVER identifier \param port_ID[in] mipi PORT identifier \param irq_info[in] irq channels \return None, enable(RECEIVER[ID].PORT[port_ID].irq_info) */ void receiver_irq_enable( const rx_ID_t ID, const enum mipi_port_id port_ID, const rx_irq_info_t irq_info); /*! Return the IRQ status of PORT[port_ID] of RECEIVER[ID] \param ID[in] RECEIVER identifier \param port_ID[in] mipi PORT identifier \return RECEIVER[ID].PORT[port_ID].irq_info */ rx_irq_info_t receiver_get_irq_info( const rx_ID_t ID, const enum mipi_port_id port_ID); /*! Clear the IRQ status of PORT[port_ID] of RECEIVER[ID] \param ID[in] RECEIVER identifier \param port_ID[in] mipi PORT identifier \param irq_info[in] irq status \return None, clear(RECEIVER[ID].PORT[port_ID].irq_info) */ void receiver_irq_clear( const rx_ID_t ID, const enum mipi_port_id port_ID, const rx_irq_info_t irq_info); /*! Write to a control register of INPUT_SYSTEM[ID] \param ID[in] INPUT_SYSTEM identifier \param reg[in] register index \param value[in] The data to be written \return none, INPUT_SYSTEM[ID].ctrl[reg] = value */ STORAGE_CLASS_INPUT_SYSTEM_H void input_system_reg_store( const input_system_ID_t ID, const hrt_address reg, const hrt_data value); /*! Read from a control register of INPUT_SYSTEM[ID] \param ID[in] INPUT_SYSTEM identifier \param reg[in] register index \param value[in] The data to be written \return INPUT_SYSTEM[ID].ctrl[reg] */ STORAGE_CLASS_INPUT_SYSTEM_H hrt_data input_system_reg_load( const input_system_ID_t ID, const hrt_address reg); /*! Write to a control register of RECEIVER[ID] \param ID[in] RECEIVER identifier \param reg[in] register index \param value[in] The data to be written \return none, RECEIVER[ID].ctrl[reg] = value */ STORAGE_CLASS_INPUT_SYSTEM_H void receiver_reg_store( const rx_ID_t ID, const hrt_address reg, const hrt_data value); /*! Read from a control register of RECEIVER[ID] \param ID[in] RECEIVER identifier \param reg[in] register index \param value[in] The data to be written \return RECEIVER[ID].ctrl[reg] */ STORAGE_CLASS_INPUT_SYSTEM_H hrt_data receiver_reg_load( const rx_ID_t ID, const hrt_address reg); /*! Write to a control register of PORT[port_ID] of RECEIVER[ID] \param ID[in] RECEIVER identifier \param port_ID[in] mipi PORT identifier \param reg[in] register index \param value[in] The data to be written \return none, RECEIVER[ID].PORT[port_ID].ctrl[reg] = value */ STORAGE_CLASS_INPUT_SYSTEM_H void receiver_port_reg_store( const rx_ID_t ID, const enum mipi_port_id port_ID, const hrt_address reg, const hrt_data value); /*! Read from a control register PORT[port_ID] of of RECEIVER[ID] \param ID[in] RECEIVER identifier \param port_ID[in] mipi PORT identifier \param reg[in] register index \param value[in] The data to be written \return RECEIVER[ID].PORT[port_ID].ctrl[reg] */ STORAGE_CLASS_INPUT_SYSTEM_H hrt_data receiver_port_reg_load( const rx_ID_t ID, const enum mipi_port_id port_ID, const hrt_address reg); /*! Write to a control register of SUB_SYSTEM[sub_ID] of INPUT_SYSTEM[ID] \param ID[in] INPUT_SYSTEM identifier \param port_ID[in] sub system identifier \param reg[in] register index \param value[in] The data to be written \return none, INPUT_SYSTEM[ID].SUB_SYSTEM[sub_ID].ctrl[reg] = value */ STORAGE_CLASS_INPUT_SYSTEM_H void input_system_sub_system_reg_store( const input_system_ID_t ID, const sub_system_ID_t sub_ID, const hrt_address reg, const hrt_data value); /*! Read from a control register SUB_SYSTEM[sub_ID] of INPUT_SYSTEM[ID] \param ID[in] INPUT_SYSTEM identifier \param port_ID[in] sub system identifier \param reg[in] register index \param value[in] The data to be written \return INPUT_SYSTEM[ID].SUB_SYSTEM[sub_ID].ctrl[reg] */ STORAGE_CLASS_INPUT_SYSTEM_H hrt_data input_system_sub_system_reg_load( const input_system_ID_t ID, const sub_system_ID_t sub_ID, const hrt_address reg); /////////////////////////////////////////////////////////////////////////// // // Functions for configuration phase on input system. // /////////////////////////////////////////////////////////////////////////// // Function that resets current configuration. // remove the argument since it should be private. input_system_err_t input_system_configuration_reset(void); // Function that commits current configuration. // remove the argument since it should be private. input_system_err_t input_system_configuration_commit(void); /////////////////////////////////////////////////////////////////////////// // // User functions: // (encoded generic function) // - no checking // - decoding name and agruments into the generic (channel) configuration // function. // /////////////////////////////////////////////////////////////////////////// // FIFO channel config function user input_system_err_t input_system_csi_fifo_channel_cfg( u32 ch_id, input_system_csi_port_t port, backend_channel_cfg_t backend_ch, target_cfg2400_t target ); input_system_err_t input_system_csi_fifo_channel_with_counting_cfg( u32 ch_id, u32 nof_frame, input_system_csi_port_t port, backend_channel_cfg_t backend_ch, u32 mem_region_size, u32 nof_mem_regions, target_cfg2400_t target ); // SRAM channel config function user input_system_err_t input_system_csi_sram_channel_cfg( u32 ch_id, input_system_csi_port_t port, backend_channel_cfg_t backend_ch, u32 csi_mem_region_size, u32 csi_nof_mem_regions, target_cfg2400_t target ); //XMEM channel config function user input_system_err_t input_system_csi_xmem_channel_cfg( u32 ch_id, input_system_csi_port_t port, backend_channel_cfg_t backend_ch, u32 mem_region_size, u32 nof_mem_regions, u32 acq_mem_region_size, u32 acq_nof_mem_regions, target_cfg2400_t target, uint32_t nof_xmem_buffers ); input_system_err_t input_system_csi_xmem_capture_only_channel_cfg( u32 ch_id, u32 nof_frames, input_system_csi_port_t port, u32 csi_mem_region_size, u32 csi_nof_mem_regions, u32 acq_mem_region_size, u32 acq_nof_mem_regions, target_cfg2400_t target ); input_system_err_t input_system_csi_xmem_acquire_only_channel_cfg( u32 ch_id, u32 nof_frames, input_system_csi_port_t port, backend_channel_cfg_t backend_ch, u32 acq_mem_region_size, u32 acq_nof_mem_regions, target_cfg2400_t target ); // Non - CSI channel config function user input_system_err_t input_system_prbs_channel_cfg( u32 ch_id, u32 nof_frames, u32 seed, u32 sync_gen_width, u32 sync_gen_height, u32 sync_gen_hblank_cycles, u32 sync_gen_vblank_cycles, target_cfg2400_t target ); input_system_err_t input_system_tpg_channel_cfg( u32 ch_id, u32 nof_frames,//not used yet u32 x_mask, u32 y_mask, u32 x_delta, u32 y_delta, u32 xy_mask, u32 sync_gen_width, u32 sync_gen_height, u32 sync_gen_hblank_cycles, u32 sync_gen_vblank_cycles, target_cfg2400_t target ); input_system_err_t input_system_gpfifo_channel_cfg( u32 ch_id, u32 nof_frames, target_cfg2400_t target ); #endif /* #ifdef ISP2401 */ #endif /* __INPUT_SYSTEM_PUBLIC_H_INCLUDED__ */