1 /******************************************************************************
2  *
3  * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by
4  * Analog Devices, Inc.),
5  * Copyright (C) 2023-2024 Analog Devices, Inc.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  ******************************************************************************/
20 
21 /* **** Includes **** */
22 #include <string.h>
23 #include "cameraif_reva.h"
24 #include "mxc_device.h"
25 #include "mxc_assert.h"
26 #include "mxc_pins.h"
27 #include "mxc_sys.h"
28 
29 /* **** Definitions **** */
30 #define PCIF_REVA_IE_MASK                                                         \
31     (MXC_F_CAMERAIF_REVA_INT_EN_IMG_DONE | MXC_F_CAMERAIF_REVA_INT_EN_FIFO_FULL | \
32      MXC_F_CAMERAIF_REVA_INT_EN_FIFO_THRESH | MXC_F_CAMERAIF_REVA_INT_EN_FIFO_NOT_EMPTY)
33 
34 /* **** Globals **** */
35 
36 /* **** Functions **** */
37 
MXC_PCIF_RevA_Init(void)38 int MXC_PCIF_RevA_Init(void)
39 {
40     return 0;
41 }
42 
MXC_PCIF_RevA_SetDatawidth(mxc_cameraif_reva_regs_t * cameraif,mxc_pcif_reva_datawith_t datawith)43 void MXC_PCIF_RevA_SetDatawidth(mxc_cameraif_reva_regs_t *cameraif,
44                                 mxc_pcif_reva_datawith_t datawith)
45 {
46     cameraif->ctrl &= ~(MXC_F_CAMERAIF_REVA_CTRL_DATA_WIDTH);
47     cameraif->ctrl |= (datawith << MXC_F_CAMERAIF_REVA_CTRL_DATA_WIDTH_POS);
48 }
49 
MXC_PCIF_RevA_SetTimingSel(mxc_cameraif_reva_regs_t * cameraif,mxc_pcif_reva_timingsel_t timingsel)50 void MXC_PCIF_RevA_SetTimingSel(mxc_cameraif_reva_regs_t *cameraif,
51                                 mxc_pcif_reva_timingsel_t timingsel)
52 {
53     cameraif->ctrl &= ~(MXC_F_CAMERAIF_REVA_CTRL_DS_TIMING_EN);
54     cameraif->ctrl |= (timingsel << MXC_F_CAMERAIF_REVA_CTRL_DS_TIMING_EN_POS);
55 }
56 
MXC_PCIF_RevA_SetThreshold(mxc_cameraif_reva_regs_t * cameraif,int fifo_thrsh)57 void MXC_PCIF_RevA_SetThreshold(mxc_cameraif_reva_regs_t *cameraif, int fifo_thrsh)
58 {
59     cameraif->ctrl &= ~(MXC_F_CAMERAIF_REVA_CTRL_FIFO_THRSH);
60     cameraif->ctrl |= ((fifo_thrsh << MXC_F_CAMERAIF_REVA_CTRL_FIFO_THRSH_POS) &
61                        MXC_F_CAMERAIF_REVA_CTRL_FIFO_THRSH);
62 }
63 
MXC_PCIF_RevA_EnableInt(mxc_cameraif_reva_regs_t * cameraif,uint32_t flags)64 void MXC_PCIF_RevA_EnableInt(mxc_cameraif_reva_regs_t *cameraif, uint32_t flags)
65 {
66     cameraif->int_en |= (flags & PCIF_REVA_IE_MASK);
67 }
68 
MXC_PCIF_RevA_DisableInt(mxc_cameraif_reva_regs_t * cameraif,uint32_t flags)69 void MXC_PCIF_RevA_DisableInt(mxc_cameraif_reva_regs_t *cameraif, uint32_t flags)
70 {
71     cameraif->int_en &= ~(flags & PCIF_REVA_IE_MASK);
72 }
73 
MXC_PCIF_RevA_Start(mxc_cameraif_reva_regs_t * cameraif,mxc_pcif_reva_readmode_t readmode)74 void MXC_PCIF_RevA_Start(mxc_cameraif_reva_regs_t *cameraif, mxc_pcif_reva_readmode_t readmode)
75 {
76     cameraif->ctrl &= ~(MXC_F_CAMERAIF_REVA_CTRL_READ_MODE);
77     cameraif->ctrl |= (readmode & MXC_F_CAMERAIF_REVA_CTRL_READ_MODE);
78 }
79 
MXC_PCIF_RevA_Stop(mxc_cameraif_reva_regs_t * cameraif)80 void MXC_PCIF_RevA_Stop(mxc_cameraif_reva_regs_t *cameraif)
81 {
82     cameraif->ctrl &= ~(MXC_F_CAMERAIF_REVA_CTRL_READ_MODE);
83 }
84 
MXC_PCIF_RevA_GetData(mxc_cameraif_reva_regs_t * cameraif)85 unsigned int MXC_PCIF_RevA_GetData(mxc_cameraif_reva_regs_t *cameraif)
86 {
87     return (unsigned int)(cameraif->fifo_data);
88 }
89 
90 /**@} end of group cameraif */
91