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 <linux/delay.h> 17 18 #include <system_global.h> 19 #include "isp.h" 20 21 #ifndef __INLINE_ISP__ 22 #include "isp_private.h" 23 #endif /* __INLINE_ISP__ */ 24 25 #include "assert_support.h" 26 27 void cnd_isp_irq_enable( 28 const isp_ID_t ID, 29 const bool cnd) 30 { 31 if (cnd) { 32 isp_ctrl_setbit(ID, ISP_IRQ_READY_REG, ISP_IRQ_READY_BIT); 33 /* Enabling the IRQ immediately triggers an interrupt, clear it */ 34 isp_ctrl_setbit(ID, ISP_IRQ_CLEAR_REG, ISP_IRQ_CLEAR_BIT); 35 } else { 36 isp_ctrl_clearbit(ID, ISP_IRQ_READY_REG, 37 ISP_IRQ_READY_BIT); 38 } 39 return; 40 } 41 42 /* ISP functions to control the ISP state from the host, even in crun. */ 43 44 /* Inspect readiness of an ISP indexed by ID */ 45 unsigned int isp_is_ready(isp_ID_t ID) 46 { 47 assert(ID < N_ISP_ID); 48 return isp_ctrl_getbit(ID, ISP_SC_REG, ISP_IDLE_BIT); 49 } 50 51 /* Inspect sleeping of an ISP indexed by ID */ 52 unsigned int isp_is_sleeping(isp_ID_t ID) 53 { 54 assert(ID < N_ISP_ID); 55 return isp_ctrl_getbit(ID, ISP_SC_REG, ISP_SLEEPING_BIT); 56 } 57 58 /* To be called by the host immediately before starting ISP ID. */ 59 void isp_start(isp_ID_t ID) 60 { 61 assert(ID < N_ISP_ID); 62 } 63 64 /* Wake up ISP ID. */ 65 void isp_wake(isp_ID_t ID) 66 { 67 assert(ID < N_ISP_ID); 68 isp_ctrl_setbit(ID, ISP_SC_REG, ISP_START_BIT); 69 udelay(1); 70 } 71