xref: /f-stack/freebsd/mips/ingenic/jz4780_lcd.h (revision 22ce4aff)
1 /*-
2  * Copyright (c) 2016 Jared McNeill <[email protected]>
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
18  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
20  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
21  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23  * SUCH DAMAGE.
24  *
25  * $FreeBSD$
26  */
27 
28 /*
29  * Ingenic JZ4780 LCD Controller
30  */
31 
32 #ifndef __JZ4780_LCD_H__
33 #define __JZ4780_LCD_H__
34 
35 #define	LCDCFG			0x0000
36 #define	 LCDCFG_LCDPIN		(1 << 31)
37 #define	 LCDCFG_TVEPEH		(1 << 30)
38 #define	 LCDCFG_NEWDES		(1 << 28)
39 #define	 LCDCFG_PALBP		(1 << 27)
40 #define	 LCDCFG_TVEN		(1 << 26)
41 #define	 LCDCFG_RECOVER		(1 << 25)
42 #define	 LCDCFG_PSM		(1 << 23)
43 #define	 LCDCFG_CLSM		(1 << 22)
44 #define	 LCDCFG_SPLM		(1 << 21)
45 #define	 LCDCFG_REVM		(1 << 20)
46 #define	 LCDCFG_HSYNM		(1 << 19)
47 #define	 LCDCFG_VSYNM		(1 << 18)
48 #define	 LCDCFG_INVDAT		(1 << 17)
49 #define	 LCDCFG_SYNDIR		(1 << 16)
50 #define	 LCDCFG_PSP		(1 << 15)
51 #define	 LCDCFG_CLSP		(1 << 14)
52 #define	 LCDCFG_SPLP		(1 << 13)
53 #define	 LCDCFG_REVP		(1 << 12)
54 #define	 LCDCFG_HSP		(1 << 11)
55 #define	 LCDCFG_PCP		(1 << 10)
56 #define	 LCDCFG_DEP		(1 << 9)
57 #define	 LCDCFG_VSP		(1 << 8)
58 #define	 LCDCFG_18_16		(1 << 7)
59 #define	 LCDCFG_24		(1 << 6)
60 #define	 LCDCFG_MODE		(0xf << 0)
61 #define	LCDCTRL			0x0030
62 #define	 LCDCTRL_PINMD		(1 << 31)
63 #define	 LCDCTRL_BST		(0x7 << 28)
64 #define	  LCDCTRL_BST_4		(0 << 28)
65 #define	  LCDCTRL_BST_8		(1 << 28)
66 #define	  LCDCTRL_BST_16	(2 << 28)
67 #define	  LCDCTRL_BST_32	(3 << 28)
68 #define	  LCDCTRL_BST_64	(4 << 28)
69 #define	 LCDCTRL_OUTRGB		(1 << 27)
70 #define	 LCDCTRL_OFUP		(1 << 26)
71 #define	 LCDCTRL_DACTE		(1 << 14)
72 #define	 LCDCTRL_EOFM		(1 << 13)
73 #define	 LCDCTRL_SOFM		(1 << 12)
74 #define	 LCDCTRL_OFUM		(1 << 11)
75 #define	 LCDCTRL_IFUM0		(1 << 10)
76 #define	 LCDCTRL_IFUM1		(1 << 9)
77 #define	 LCDCTRL_LDDM		(1 << 8)
78 #define	 LCDCTRL_QDM		(1 << 7)
79 #define	 LCDCTRL_BEDN		(1 << 6)
80 #define	 LCDCTRL_PEDN		(1 << 5)
81 #define	 LCDCTRL_DIS		(1 << 4)
82 #define	 LCDCTRL_ENA		(1 << 3)
83 #define	 LCDCTRL_BPP0		(0x7 << 0)
84 #define	  LCDCTRL_BPP0_1	(0 << 0)
85 #define	  LCDCTRL_BPP0_2	(1 << 0)
86 #define	  LCDCTRL_BPP0_4	(2 << 0)
87 #define	  LCDCTRL_BPP0_8	(3 << 0)
88 #define	  LCDCTRL_BPP0_15_16	(4 << 0)
89 #define	  LCDCTRL_BPP0_18_24	(5 << 0)
90 #define	  LCDCTRL_BPP0_24_COMP	(6 << 0)
91 #define	  LCDCTRL_BPP0_30	(7 << 0)
92 #define	 LCDCTR
93 #define	LCDSTATE		0x0034
94 #define	 LCDSTATE_QD		(1 << 7)
95 #define	 LCDSTATE_EOF		(1 << 5)
96 #define	 LCDSTATE_SOF		(1 << 4)
97 #define	 LCDSTATE_OUT		(1 << 3)
98 #define	 LCDSTATE_IFU0		(1 << 2)
99 #define	 LCDSTATE_IFU1		(1 << 1)
100 #define	 LCDSTATE_LDD		(1 << 0)
101 #define	LCDOSDC			0x0100
102 #define	LCDOSDCTRL		0x0104
103 #define	LCDOSDS			0x0108
104 #define	LCDBGC0			0x010c
105 #define	LCDBGC1			0x02c4
106 #define	LCDKEY0			0x0110
107 #define	LCDKEY1			0x0114
108 #define	LCDALPHA		0x0118
109 #define	LCDIPUR			0x011c
110 #define	LCDRGBC			0x0090
111 #define	 LCDRGBC_RGBDM		(1 << 15)
112 #define	 LCDRGBC_DMM		(1 << 14)
113 #define	 LCDRGBC_422		(1 << 8)
114 #define	 LCDRGBC_RGBFMT		(1 << 7)
115 #define	 LCDRGBC_ODDRGB		(0x7 << 4)
116 #define	 LCDRGBC_EVENRGB	(0x7 << 0)
117 #define	LCDVAT			0x000c
118 #define	 LCDVAT_HT_SHIFT	16
119 #define	 LCDVAT_VT_SHIFT	0
120 #define	LCDDAH			0x0010
121 #define	 LCDDAH_HDS_SHIFT	16
122 #define	 LCDDAH_HDE_SHIFT	0
123 #define	LCDDAV			0x0014
124 #define	 LCDDAV_VDS_SHIFT	16
125 #define	 LCDDAV_VDE_SHIFT	0
126 #define	LCDXYP0			0x0120
127 #define	LCDXYP1			0x0124
128 #define	LCDSIZE0		0x0128
129 #define	LCDSIZE1		0x012c
130 #define	LCDVSYNC		0x0004
131 #define	LCDHSYNC		0x0008
132 #define	LCDPS			0x0018
133 #define	LCDCLS			0x001c
134 #define	LCDSPL			0x0020
135 #define	LCDREV			0x0024
136 #define	LCDIID			0x0038
137 #define	LCDDA0			0x0040
138 #define	LCDSA0			0x0044
139 #define	LCDFID0			0x0048
140 #define	LCDCMD0			0x004c
141 #define	 LCDCMD_SOFINT		(1 << 31)
142 #define	 LCDCMD_EOFINT		(1 << 30)
143 #define	 LCDCMD_CMD		(1 << 29)
144 #define	 LCDCMD_COMPE		(1 << 27)
145 #define	 LCDCMD_FRM_EN		(1 << 26)
146 #define	 LCDCMD_FIELD_SEL	(1 << 25)
147 #define	 LCDCMD_16X16BLOCK	(1 << 24)
148 #define	 LCDCMD_LEN		(0xffffff << 0)
149 #define	LCDOFFS0		0x0060
150 #define	LCDPW0			0x0064
151 #define	LCDCNUM0		0x0068
152 #define	LCDPOS0			LCDCNUM0
153 #define	 LCDPOS_ALPHAMD1	(1 << 31)
154 #define	 LCDPOS_RGB01		(1 << 30)
155 #define	 LCDPOS_BPP01		(0x7 << 27)
156 #define	  LCDPOS_BPP01_15_16	(4 << 27)
157 #define	  LCDPOS_BPP01_18_24	(5 << 27)
158 #define	  LCDPOS_BPP01_24_COMP	(6 << 27)
159 #define	  LCDPOS_BPP01_30	(7 << 27)
160 #define	  LCDPOS_PREMULTI01	(1 << 26)
161 #define	  LCDPOS_COEF_SLE01	(0x3 << 24)
162 #define	  LCDPOS_COEF_BLE01_1	(1 << 24)
163 #define	  LCDPOS_YPOS01		(0xfff << 12)
164 #define	  LCDPOS_XPOS01		(0xfff << 0)
165 #define	LCDDESSIZE0		0x006c
166 #define	 LCDDESSIZE_ALPHA	(0xff << 24)
167 #define	 LCDDESSIZE_HEIGHT	(0xfff << 12)
168 #define	 LCDDESSIZE_HEIGHT_SHIFT 12
169 #define	 LCDDESSIZE_WIDTH	(0xfff << 0)
170 #define	 LCDDESSIZE_WIDTH_SHIFT	0
171 #define	LCDDA1			0x0050
172 #define	LCDSA1			0x0054
173 #define	LCDFID1			0x0058
174 #define	LCDCMD1			0x005c
175 #define	LCDOFFS1		0x0070
176 #define	LCDPW1			0x0074
177 #define	LCDCNUM1		0x0078
178 #define	LCDPOS1			LCDCNUM1
179 #define	LCDDESSIZE1		0x007c
180 #define	LCDPCFG			0x02c0
181 #define	LCDDUALCTRL		0x02c8
182 #define	LCDENH_CFG		0x0400
183 #define	LCDENH_CSCCFG		0x0404
184 #define	LCDENH_LUMACFG		0x0408
185 #define	LCDENH_CHROCFG0		0x040c
186 #define	LCDENH_CHROCFG1		0x0410
187 #define	LCDENH_DITHERCFG	0x0414
188 #define	LCDENH_STATUS		0x0418
189 #define	LCDENH_GAMMA		0x0800	/* base */
190 #define	LCDENH_VEE		0x1000	/* base */
191 
192 struct lcd_frame_descriptor {
193 	uint32_t	next;
194 	uint32_t	physaddr;
195 	uint32_t	id;
196 	uint32_t	cmd;
197 	uint32_t	offs;
198 	uint32_t	pw;
199 	uint32_t	cnum_pos;
200 	uint32_t	dessize;
201 } __packed;
202 
203 #endif /* !__JZ4780_LCD_H__ */
204