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