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