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 "mxc_device.h"
24 #include "mxc_assert.h"
25 #include "mxc_pins.h"
26 #include "mxc_sys.h"
27 #include "cameraif.h"
28 #include "cameraif_reva.h"
29
30 /* **** Definitions **** */
31
32 /* **** Globals **** */
33
34 /* **** Functions **** */
35
MXC_PCIF_Init(mxc_pcif_gpio_datawidth_t gpioDataWidth)36 int MXC_PCIF_Init(mxc_pcif_gpio_datawidth_t gpioDataWidth)
37 {
38 if ((gpioDataWidth != MXC_PCIF_GPIO_DATAWIDTH_8_BIT) &&
39 (gpioDataWidth != MXC_PCIF_GPIO_DATAWIDTH_10_BIT) &&
40 (gpioDataWidth != MXC_PCIF_GPIO_DATAWIDTH_12_BIT)) {
41 return E_BAD_PARAM;
42 }
43
44 MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_PCIF);
45
46 switch (gpioDataWidth) {
47 case MXC_PCIF_DATAWIDTH_8_BIT:
48 MXC_GPIO_Config(&gpio_cfg_pcif_P0_BITS_0_7);
49 break;
50
51 case MXC_PCIF_DATAWIDTH_10_BIT:
52 MXC_GPIO_Config(&gpio_cfg_pcif_P0_BITS_0_7);
53 MXC_GPIO_Config(&gpio_cfg_pcif_P0_BITS_8_9);
54 break;
55
56 case MXC_PCIF_DATAWIDTH_12_BIT:
57 MXC_GPIO_Config(&gpio_cfg_pcif_P0_BITS_0_7);
58 MXC_GPIO_Config(&gpio_cfg_pcif_P0_BITS_8_9);
59 MXC_GPIO_Config(&gpio_cfg_pcif_P1_BITS_10_11);
60 break;
61 }
62
63 MXC_GPIO_Config(&gpio_cfg_pcif_vsync);
64 MXC_GPIO_Config(&gpio_cfg_pcif_hsync);
65 MXC_GPIO_Config(&gpio_cfg_pcif_xclk);
66 return E_NO_ERROR;
67 }
68
MXC_PCIF_SetDataWidth(mxc_pcif_datawidth_t gpioDatawidth)69 void MXC_PCIF_SetDataWidth(mxc_pcif_datawidth_t gpioDatawidth)
70 {
71 MXC_PCIF_RevA_SetDatawidth((mxc_cameraif_reva_regs_t *)MXC_PCIF, gpioDatawidth);
72 }
73
MXC_PCIF_SetTimingSel(mxc_pcif_timingsel_t timingsel)74 void MXC_PCIF_SetTimingSel(mxc_pcif_timingsel_t timingsel)
75 {
76 MXC_PCIF_RevA_SetTimingSel((mxc_cameraif_reva_regs_t *)MXC_PCIF, timingsel);
77 }
78
MXC_PCIF_SetThreshold(int fifo_thrsh)79 void MXC_PCIF_SetThreshold(int fifo_thrsh)
80 {
81 MXC_PCIF_RevA_SetThreshold((mxc_cameraif_reva_regs_t *)MXC_PCIF, fifo_thrsh);
82 }
83
MXC_PCIF_EnableInt(uint32_t flags)84 void MXC_PCIF_EnableInt(uint32_t flags)
85 {
86 MXC_PCIF_RevA_EnableInt((mxc_cameraif_reva_regs_t *)MXC_PCIF, flags);
87 }
88
MXC_PCIF_DisableInt(uint32_t flags)89 void MXC_PCIF_DisableInt(uint32_t flags)
90 {
91 MXC_PCIF_RevA_DisableInt((mxc_cameraif_reva_regs_t *)MXC_PCIF, flags);
92 }
93
MXC_PCIF_Start(mxc_pcif_readmode_t readmode)94 void MXC_PCIF_Start(mxc_pcif_readmode_t readmode)
95 {
96 MXC_PCIF_RevA_Start((mxc_cameraif_reva_regs_t *)MXC_PCIF, readmode);
97 }
98
MXC_PCIF_Stop(void)99 void MXC_PCIF_Stop(void)
100 {
101 MXC_PCIF_RevA_Stop((mxc_cameraif_reva_regs_t *)MXC_PCIF);
102 }
103
MXC_PCIF_GetData(void)104 unsigned int MXC_PCIF_GetData(void)
105 {
106 return MXC_PCIF_RevA_GetData((mxc_cameraif_reva_regs_t *)MXC_PCIF);
107 }
108
109 /**@} end of group cameraif */
110