blob: 85cb61e341920f982717abbf16c775bc332588f8 [file] [log] [blame]
/* 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__ */