1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Support for Intel Camera Imaging ISP subsystem.
4  * Copyright (c) 2010 - 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 #include "input_system.h"
17 
18 #ifdef HAS_INPUT_SYSTEM_VERSION_2
19 #include "ia_css_isys.h"
20 #include "platform_support.h"
21 
22 #ifdef USE_INPUT_SYSTEM_VERSION_2401
23 #include "isys_dma.h"		/* isys2401_dma_set_max_burst_size() */
24 #include "isys_irq.h"
25 #endif
26 
27 #if defined(USE_INPUT_SYSTEM_VERSION_2)
28 input_system_error_t ia_css_isys_init(void)
29 {
30 	backend_channel_cfg_t backend_ch0;
31 	backend_channel_cfg_t backend_ch1;
32 	target_cfg2400_t targetB;
33 	target_cfg2400_t targetC;
34 	u32 acq_mem_region_size = 24;
35 	u32 acq_nof_mem_regions = 2;
36 	input_system_error_t error = INPUT_SYSTEM_ERR_NO_ERROR;
37 
38 	memset(&backend_ch0, 0, sizeof(backend_channel_cfg_t));
39 	memset(&backend_ch1, 0, sizeof(backend_channel_cfg_t));
40 	memset(&targetB, 0, sizeof(targetB));
41 	memset(&targetC, 0, sizeof(targetC));
42 
43 	error = input_system_configuration_reset();
44 	if (error != INPUT_SYSTEM_ERR_NO_ERROR)
45 		return error;
46 
47 	error = input_system_csi_xmem_channel_cfg(
48 		    0,			/*ch_id                 */
49 		    INPUT_SYSTEM_PORT_A,	/*port                  */
50 		    backend_ch0,		/*backend_ch            */
51 		    32,			/*mem_region_size       */
52 		    6,			/*nof_mem_regions       */
53 		    acq_mem_region_size,	/*acq_mem_region_size   */
54 		    acq_nof_mem_regions,	/*acq_nof_mem_regions   */
55 		    targetB,		/*target                */
56 		    3);			/*nof_xmem_buffers      */
57 	if (error != INPUT_SYSTEM_ERR_NO_ERROR)
58 		return error;
59 
60 	error = input_system_csi_xmem_channel_cfg(
61 		    1,			/*ch_id                 */
62 		    INPUT_SYSTEM_PORT_B,	/*port                  */
63 		    backend_ch0,		/*backend_ch            */
64 		    16,			/*mem_region_size       */
65 		    3,			/*nof_mem_regions       */
66 		    acq_mem_region_size,	/*acq_mem_region_size   */
67 		    acq_nof_mem_regions,	/*acq_nof_mem_regions   */
68 		    targetB,		/*target                */
69 		    3);			/*nof_xmem_buffers      */
70 	if (error != INPUT_SYSTEM_ERR_NO_ERROR)
71 		return error;
72 
73 	error = input_system_csi_xmem_channel_cfg(
74 		    2,			/*ch_id                 */
75 		    INPUT_SYSTEM_PORT_C,	/*port                  */
76 		    backend_ch1,		/*backend_ch            */
77 		    32,			/*mem_region_size       */
78 		    3,			/*nof_mem_regions       */
79 		    acq_mem_region_size,	/*acq_mem_region_size   */
80 		    acq_nof_mem_regions,	/*acq_nof_mem_regions   */
81 		    targetC,		/*target                */
82 		    2);			/*nof_xmem_buffers      */
83 	if (error != INPUT_SYSTEM_ERR_NO_ERROR)
84 		return error;
85 
86 	error = input_system_configuration_commit();
87 
88 	return error;
89 }
90 #elif defined(USE_INPUT_SYSTEM_VERSION_2401)
91 input_system_error_t ia_css_isys_init(void)
92 {
93 	ia_css_isys_csi_rx_lut_rmgr_init();
94 	ia_css_isys_ibuf_rmgr_init();
95 	ia_css_isys_dma_channel_rmgr_init();
96 	ia_css_isys_stream2mmio_sid_rmgr_init();
97 
98 	isys2401_dma_set_max_burst_size(ISYS2401_DMA0_ID,
99 					1 /* Non Burst DMA transactions */);
100 
101 	/* Enable 2401 input system IRQ status for driver to retrieve */
102 	isys_irqc_status_enable(ISYS_IRQ0_ID);
103 	isys_irqc_status_enable(ISYS_IRQ1_ID);
104 	isys_irqc_status_enable(ISYS_IRQ2_ID);
105 
106 	return INPUT_SYSTEM_ERR_NO_ERROR;
107 }
108 #endif
109 
110 #if defined(USE_INPUT_SYSTEM_VERSION_2)
111 void ia_css_isys_uninit(void)
112 {
113 }
114 #elif defined(USE_INPUT_SYSTEM_VERSION_2401)
115 void ia_css_isys_uninit(void)
116 {
117 	ia_css_isys_csi_rx_lut_rmgr_uninit();
118 	ia_css_isys_ibuf_rmgr_uninit();
119 	ia_css_isys_dma_channel_rmgr_uninit();
120 	ia_css_isys_stream2mmio_sid_rmgr_uninit();
121 }
122 #endif
123 
124 #endif
125