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
cnd_isp_irq_enable(const isp_ID_t ID,const bool cnd)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 */
isp_is_ready(isp_ID_t 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 */
isp_is_sleeping(isp_ID_t 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. */
isp_start(isp_ID_t ID)59 void isp_start(isp_ID_t ID)
60 {
61 assert(ID < N_ISP_ID);
62 }
63
64 /* Wake up ISP ID. */
isp_wake(isp_ID_t 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