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 __INPUT_FORMATTER_PUBLIC_H_INCLUDED__
17#define __INPUT_FORMATTER_PUBLIC_H_INCLUDED__
18
19#include <type_support.h>
20#include "system_local.h"
21
22/*! Reset INPUT_FORMATTER[ID]
23
24 \param	ID[in]				INPUT_FORMATTER identifier
25
26 \return none, reset(INPUT_FORMATTER[ID])
27 */
28void input_formatter_rst(
29    const input_formatter_ID_t		ID);
30
31/*! Set the blocking mode of INPUT_FORMATTER[ID]
32
33 \param	ID[in]				INPUT_FORMATTER identifier
34 \param	enable[in]			blocking enable flag
35
36 \use
37	- In HW, the capture unit will deliver an infinite stream of frames,
38	  the input formatter will synchronise on the first SOF. In simulation
39	  there are only a fixed number of frames, presented only once. By
40	  enabling blocking the inputformatter will wait on the first presented
41	  frame, thus avoiding race in the simulation setup.
42
43 \return none, INPUT_FORMATTER[ID].blocking_mode = enable
44 */
45void input_formatter_set_fifo_blocking_mode(
46    const input_formatter_ID_t		ID,
47    const bool						enable);
48
49/*! Return the data alignment of INPUT_FORMATTER[ID]
50
51 \param	ID[in]				INPUT_FORMATTER identifier
52
53 \return alignment(INPUT_FORMATTER[ID].data)
54 */
55unsigned int input_formatter_get_alignment(
56    const input_formatter_ID_t		ID);
57
58/*! Read the source switch state into INPUT_FORMATTER[ID]
59
60 \param	ID[in]				INPUT_FORMATTER identifier
61 \param	state[out]			input formatter switch state structure
62
63 \return none, state = INPUT_FORMATTER[ID].switch_state
64 */
65void input_formatter_get_switch_state(
66    const input_formatter_ID_t		ID,
67    input_formatter_switch_state_t	*state);
68
69/*! Read the control registers of INPUT_FORMATTER[ID]
70
71 \param	ID[in]				INPUT_FORMATTER identifier
72 \param	state[out]			input formatter state structure
73
74 \return none, state = INPUT_FORMATTER[ID].state
75 */
76void input_formatter_get_state(
77    const input_formatter_ID_t		ID,
78    input_formatter_state_t			*state);
79
80/*! Read the control registers of bin copy INPUT_FORMATTER[ID]
81
82 \param	ID[in]				INPUT_FORMATTER identifier
83 \param	state[out]			input formatter state structure
84
85 \return none, state = INPUT_FORMATTER[ID].state
86 */
87void input_formatter_bin_get_state(
88    const input_formatter_ID_t		ID,
89    input_formatter_bin_state_t		*state);
90
91/*! Write to a control register of INPUT_FORMATTER[ID]
92
93 \param	ID[in]				INPUT_FORMATTER identifier
94 \param	reg_addr[in]		register byte address
95 \param value[in]			The data to be written
96
97 \return none, INPUT_FORMATTER[ID].ctrl[reg] = value
98 */
99STORAGE_CLASS_INPUT_FORMATTER_H void input_formatter_reg_store(
100    const input_formatter_ID_t	ID,
101    const hrt_address		reg_addr,
102    const hrt_data				value);
103
104/*! Read from a control register of INPUT_FORMATTER[ID]
105
106 \param	ID[in]				INPUT_FORMATTER identifier
107 \param	reg_addr[in]		register byte address
108 \param value[in]			The data to be written
109
110 \return INPUT_FORMATTER[ID].ctrl[reg]
111 */
112STORAGE_CLASS_INPUT_FORMATTER_H hrt_data input_formatter_reg_load(
113    const input_formatter_ID_t	ID,
114    const unsigned int			reg_addr);
115
116#endif /* __INPUT_FORMATTER_PUBLIC_H_INCLUDED__ */
117