1/*-
2 * Copyright (c) 2016 Jared McNeill <jmcneill@invisible.ca>
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
192struct 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