| /* 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__ */ |