xref: /OK3568_Linux_fs/kernel/drivers/media/platform/exynos4-is/fimc-is-regs.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Samsung EXYNOS4x12 FIMC-IS (Imaging Subsystem) driver
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2013 Samsung Electronics Co., Ltd.
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Authors: Sylwester Nawrocki <s.nawrocki@samsung.com>
8*4882a593Smuzhiyun  *          Younghwan Joo <yhwan.joo@samsung.com>
9*4882a593Smuzhiyun  */
10*4882a593Smuzhiyun #ifndef FIMC_IS_REG_H_
11*4882a593Smuzhiyun #define FIMC_IS_REG_H_
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun /* WDT_ISP register */
14*4882a593Smuzhiyun #define REG_WDT_ISP			0x00170000
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /* MCUCTL registers base offset */
17*4882a593Smuzhiyun #define MCUCTL_BASE			0x00180000
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun /* MCU Controller Register */
20*4882a593Smuzhiyun #define MCUCTL_REG_MCUCTRL		(MCUCTL_BASE + 0x00)
21*4882a593Smuzhiyun #define MCUCTRL_MSWRST			(1 << 0)
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun /* Boot Base Offset Address Register */
24*4882a593Smuzhiyun #define MCUCTL_REG_BBOAR		(MCUCTL_BASE + 0x04)
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun /* Interrupt Generation Register 0 from Host CPU to VIC */
27*4882a593Smuzhiyun #define MCUCTL_REG_INTGR0		(MCUCTL_BASE + 0x08)
28*4882a593Smuzhiyun /* __n = 0...9 */
29*4882a593Smuzhiyun #define INTGR0_INTGC(__n)		(1 << ((__n) + 16))
30*4882a593Smuzhiyun /* __n = 0...5 */
31*4882a593Smuzhiyun #define INTGR0_INTGD(__n)		(1 << (__n))
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun /* Interrupt Clear Register 0 from Host CPU to VIC */
34*4882a593Smuzhiyun #define MCUCTL_REG_INTCR0		(MCUCTL_BASE + 0x0c)
35*4882a593Smuzhiyun /* __n = 0...9 */
36*4882a593Smuzhiyun #define INTCR0_INTGC(__n)		(1 << ((__n) + 16))
37*4882a593Smuzhiyun /* __n = 0...5 */
38*4882a593Smuzhiyun #define INTCR0_INTCD(__n)		(1 << ((__n) + 16))
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun /* Interrupt Mask Register 0 from Host CPU to VIC */
41*4882a593Smuzhiyun #define MCUCTL_REG_INTMR0		(MCUCTL_BASE + 0x10)
42*4882a593Smuzhiyun /* __n = 0...9 */
43*4882a593Smuzhiyun #define INTMR0_INTMC(__n)		(1 << ((__n) + 16))
44*4882a593Smuzhiyun /* __n = 0...5 */
45*4882a593Smuzhiyun #define INTMR0_INTMD(__n)		(1 << (__n))
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun /* Interrupt Status Register 0 from Host CPU to VIC */
48*4882a593Smuzhiyun #define MCUCTL_REG_INTSR0		(MCUCTL_BASE + 0x14)
49*4882a593Smuzhiyun /* __n (bit number) = 0...4 */
50*4882a593Smuzhiyun #define INTSR0_GET_INTSD(x, __n)	(((x) >> (__n)) & 0x1)
51*4882a593Smuzhiyun /* __n (bit number) = 0...9 */
52*4882a593Smuzhiyun #define INTSR0_GET_INTSC(x, __n)	(((x) >> ((__n) + 16)) & 0x1)
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun /* Interrupt Mask Status Register 0 from Host CPU to VIC */
55*4882a593Smuzhiyun #define MCUCTL_REG_INTMSR0		(MCUCTL_BASE + 0x18)
56*4882a593Smuzhiyun /* __n (bit number) = 0...4 */
57*4882a593Smuzhiyun #define INTMSR0_GET_INTMSD(x, __n)	(((x) >> (__n)) & 0x1)
58*4882a593Smuzhiyun /* __n (bit number) = 0...9 */
59*4882a593Smuzhiyun #define INTMSR0_GET_INTMSC(x, __n)	(((x) >> ((__n) + 16)) & 0x1)
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun /* Interrupt Generation Register 1 from ISP CPU to Host IC */
62*4882a593Smuzhiyun #define MCUCTL_REG_INTGR1		(MCUCTL_BASE + 0x1c)
63*4882a593Smuzhiyun /* __n = 0...9 */
64*4882a593Smuzhiyun #define INTGR1_INTGC(__n)		(1 << (__n))
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun /* Interrupt Clear Register 1 from ISP CPU to Host IC */
67*4882a593Smuzhiyun #define MCUCTL_REG_INTCR1		(MCUCTL_BASE + 0x20)
68*4882a593Smuzhiyun /* __n = 0...9 */
69*4882a593Smuzhiyun #define INTCR1_INTCC(__n)		(1 << (__n))
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun /* Interrupt Mask Register 1 from ISP CPU to Host IC */
72*4882a593Smuzhiyun #define MCUCTL_REG_INTMR1		(MCUCTL_BASE + 0x24)
73*4882a593Smuzhiyun /* __n = 0...9 */
74*4882a593Smuzhiyun #define INTMR1_INTMC(__n)		(1 << (__n))
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun /* Interrupt Status Register 1 from ISP CPU to Host IC */
77*4882a593Smuzhiyun #define MCUCTL_REG_INTSR1		(MCUCTL_BASE + 0x28)
78*4882a593Smuzhiyun /* Interrupt Mask Status Register 1 from ISP CPU to Host IC */
79*4882a593Smuzhiyun #define MCUCTL_REG_INTMSR1		(MCUCTL_BASE + 0x2c)
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun /* Interrupt Clear Register 2 from ISP BLK's interrupts to Host IC */
82*4882a593Smuzhiyun #define MCUCTL_REG_INTCR2		(MCUCTL_BASE + 0x30)
83*4882a593Smuzhiyun /* __n = 0...5 */
84*4882a593Smuzhiyun #define INTCR2_INTCC(__n)		(1 << ((__n) + 16))
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun /* Interrupt Mask Register 2 from ISP BLK's interrupts to Host IC */
87*4882a593Smuzhiyun #define MCUCTL_REG_INTMR2		(MCUCTL_BASE + 0x34)
88*4882a593Smuzhiyun /* __n = 0...25 */
89*4882a593Smuzhiyun #define INTMR2_INTMCIS(__n)		(1 << (__n))
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun /* Interrupt Status Register 2 from ISP BLK's interrupts to Host IC */
92*4882a593Smuzhiyun #define MCUCTL_REG_INTSR2		(MCUCTL_BASE + 0x38)
93*4882a593Smuzhiyun /* Interrupt Mask Status Register 2 from ISP BLK's interrupts to Host IC */
94*4882a593Smuzhiyun #define MCUCTL_REG_INTMSR2		(MCUCTL_BASE + 0x3c)
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun /* General Purpose Output Control Register (0~17) */
97*4882a593Smuzhiyun #define MCUCTL_REG_GPOCTLR		(MCUCTL_BASE + 0x40)
98*4882a593Smuzhiyun /* __n = 0...17 */
99*4882a593Smuzhiyun #define GPOCTLR_GPOG(__n)		(1 << (__n))
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun /* General Purpose Pad Output Enable Register (0~17) */
102*4882a593Smuzhiyun #define MCUCTL_REG_GPOENCTLR		(MCUCTL_BASE + 0x44)
103*4882a593Smuzhiyun /* __n = 0...17 */
104*4882a593Smuzhiyun #define GPOENCTLR_GPOEN(__n)		(1 << (__n))
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun /* General Purpose Input Control Register (0~17) */
107*4882a593Smuzhiyun #define MCUCTL_REG_GPICTLR		(MCUCTL_BASE + 0x48)
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun /* Shared registers between ISP CPU and the host CPU - ISSRxx */
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun /* ISSR(1): Command Host -> IS */
112*4882a593Smuzhiyun /* ISSR(1): Sensor ID for Command, ISSR2...5 = Parameter 1...4 */
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun /* ISSR(10): Reply IS -> Host */
115*4882a593Smuzhiyun /* ISSR(11): Sensor ID for Reply, ISSR12...15 = Parameter 1...4 */
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun /* ISSR(20): ISP_FRAME_DONE : SENSOR ID */
118*4882a593Smuzhiyun /* ISSR(21): ISP_FRAME_DONE : PARAMETER 1 */
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun /* ISSR(24): SCALERC_FRAME_DONE : SENSOR ID */
121*4882a593Smuzhiyun /* ISSR(25): SCALERC_FRAME_DONE : PARAMETER 1 */
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun /* ISSR(28): 3DNR_FRAME_DONE : SENSOR ID */
124*4882a593Smuzhiyun /* ISSR(29): 3DNR_FRAME_DONE : PARAMETER 1 */
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun /* ISSR(32): SCALERP_FRAME_DONE : SENSOR ID */
127*4882a593Smuzhiyun /* ISSR(33): SCALERP_FRAME_DONE : PARAMETER 1 */
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun /* __n = 0...63 */
130*4882a593Smuzhiyun #define MCUCTL_REG_ISSR(__n)		(MCUCTL_BASE + 0x80 + ((__n) * 4))
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun /* PMU ISP register offsets */
133*4882a593Smuzhiyun #define REG_CMU_RESET_ISP_SYS_PWR_REG	0x1174
134*4882a593Smuzhiyun #define REG_CMU_SYSCLK_ISP_SYS_PWR_REG	0x13b8
135*4882a593Smuzhiyun #define REG_PMU_ISP_ARM_SYS		0x1050
136*4882a593Smuzhiyun #define REG_PMU_ISP_ARM_CONFIGURATION	0x2280
137*4882a593Smuzhiyun #define REG_PMU_ISP_ARM_STATUS		0x2284
138*4882a593Smuzhiyun #define REG_PMU_ISP_ARM_OPTION		0x2288
139*4882a593Smuzhiyun 
140*4882a593Smuzhiyun void fimc_is_fw_clear_irq1(struct fimc_is *is, unsigned int bit);
141*4882a593Smuzhiyun void fimc_is_fw_clear_irq2(struct fimc_is *is);
142*4882a593Smuzhiyun int fimc_is_hw_get_params(struct fimc_is *is, unsigned int num);
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun void fimc_is_hw_set_intgr0_gd0(struct fimc_is *is);
145*4882a593Smuzhiyun int fimc_is_hw_wait_intmsr0_intmsd0(struct fimc_is *is);
146*4882a593Smuzhiyun void fimc_is_hw_set_sensor_num(struct fimc_is *is);
147*4882a593Smuzhiyun void fimc_is_hw_set_isp_buf_mask(struct fimc_is *is, unsigned int mask);
148*4882a593Smuzhiyun void fimc_is_hw_stream_on(struct fimc_is *is);
149*4882a593Smuzhiyun void fimc_is_hw_stream_off(struct fimc_is *is);
150*4882a593Smuzhiyun int fimc_is_hw_set_param(struct fimc_is *is);
151*4882a593Smuzhiyun int fimc_is_hw_change_mode(struct fimc_is *is);
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun void fimc_is_hw_close_sensor(struct fimc_is *is, unsigned int index);
154*4882a593Smuzhiyun void fimc_is_hw_get_setfile_addr(struct fimc_is *is);
155*4882a593Smuzhiyun void fimc_is_hw_load_setfile(struct fimc_is *is);
156*4882a593Smuzhiyun void fimc_is_hw_subip_power_off(struct fimc_is *is);
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun int fimc_is_itf_s_param(struct fimc_is *is, bool update);
159*4882a593Smuzhiyun int fimc_is_itf_mode_change(struct fimc_is *is);
160*4882a593Smuzhiyun 
161*4882a593Smuzhiyun #endif /* FIMC_IS_REG_H_ */
162