1  #ifndef __PXAFB_H__
2  #define __PXAFB_H__
3  
4  /*
5   * linux/drivers/video/pxafb.h
6   *    -- Intel PXA250/210 LCD Controller Frame Buffer Device
7   *
8   *  Copyright (C) 1999 Eric A. Thomas.
9   *  Copyright (C) 2004 Jean-Frederic Clere.
10   *  Copyright (C) 2004 Ian Campbell.
11   *  Copyright (C) 2004 Jeff Lackey.
12   *   Based on sa1100fb.c Copyright (C) 1999 Eric A. Thomas
13   *  which in turn is
14   *   Based on acornfb.c Copyright (C) Russell King.
15   *
16   *  2001-08-03: Cliff Brake <cbrake@acclent.com>
17   *	 - ported SA1100 code to PXA
18   *
19   * This file is subject to the terms and conditions of the GNU General Public
20   * License.  See the file COPYING in the main directory of this archive
21   * for more details.
22   */
23  
24  /* PXA LCD DMA descriptor */
25  struct pxafb_dma_descriptor {
26  	unsigned int fdadr;
27  	unsigned int fsadr;
28  	unsigned int fidr;
29  	unsigned int ldcmd;
30  };
31  
32  enum {
33  	PAL_NONE	= -1,
34  	PAL_BASE	= 0,
35  	PAL_OV1		= 1,
36  	PAL_OV2		= 2,
37  	PAL_MAX,
38  };
39  
40  enum {
41  	DMA_BASE	= 0,
42  	DMA_UPPER	= 0,
43  	DMA_LOWER	= 1,
44  	DMA_OV1		= 1,
45  	DMA_OV2_Y	= 2,
46  	DMA_OV2_Cb	= 3,
47  	DMA_OV2_Cr	= 4,
48  	DMA_CURSOR	= 5,
49  	DMA_CMD		= 6,
50  	DMA_MAX,
51  };
52  
53  /* maximum palette size - 256 entries, each 4 bytes long */
54  #define PALETTE_SIZE	(256 * 4)
55  #define CMD_BUFF_SIZE	(1024 * 50)
56  
57  /* NOTE: the palette and frame dma descriptors are doubled to allow
58   * the 2nd set for branch settings (FBRx)
59   */
60  struct pxafb_dma_buff {
61  	unsigned char palette[PAL_MAX * PALETTE_SIZE];
62  	uint16_t cmd_buff[CMD_BUFF_SIZE];
63  	struct pxafb_dma_descriptor pal_desc[PAL_MAX * 2];
64  	struct pxafb_dma_descriptor dma_desc[DMA_MAX * 2];
65  };
66  
67  enum {
68  	OVERLAY1,
69  	OVERLAY2,
70  };
71  
72  enum {
73  	OVERLAY_FORMAT_RGB = 0,
74  	OVERLAY_FORMAT_YUV444_PACKED,
75  	OVERLAY_FORMAT_YUV444_PLANAR,
76  	OVERLAY_FORMAT_YUV422_PLANAR,
77  	OVERLAY_FORMAT_YUV420_PLANAR,
78  };
79  
80  #define NONSTD_TO_XPOS(x)	(((x) >> 0)  & 0x3ff)
81  #define NONSTD_TO_YPOS(x)	(((x) >> 10) & 0x3ff)
82  #define NONSTD_TO_PFOR(x)	(((x) >> 20) & 0x7)
83  
84  struct pxafb_layer;
85  
86  struct pxafb_layer_ops {
87  	void (*enable)(struct pxafb_layer *);
88  	void (*disable)(struct pxafb_layer *);
89  	void (*setup)(struct pxafb_layer *);
90  };
91  
92  struct pxafb_layer {
93  	struct fb_info		fb;
94  	int			id;
95  	int			registered;
96  	uint32_t		usage;
97  	uint32_t		control[2];
98  
99  	struct pxafb_layer_ops	*ops;
100  
101  	void __iomem		*video_mem;
102  	unsigned long		video_mem_phys;
103  	size_t			video_mem_size;
104  	struct completion	branch_done;
105  
106  	struct pxafb_info	*fbi;
107  };
108  
109  struct pxafb_info {
110  	struct fb_info		fb;
111  	struct device		*dev;
112  	struct clk		*clk;
113  
114  	void __iomem		*mmio_base;
115  
116  	struct pxafb_dma_buff	*dma_buff;
117  	size_t			dma_buff_size;
118  	dma_addr_t		dma_buff_phys;
119  	dma_addr_t		fdadr[DMA_MAX * 2];
120  
121  	void __iomem		*video_mem;	/* virtual address of frame buffer */
122  	unsigned long		video_mem_phys;	/* physical address of frame buffer */
123  	size_t			video_mem_size;	/* size of the frame buffer */
124  	u16 *			palette_cpu;	/* virtual address of palette memory */
125  	u_int			palette_size;
126  
127  	u_int			lccr0;
128  	u_int			lccr3;
129  	u_int			lccr4;
130  	u_int			cmap_inverse:1,
131  				cmap_static:1,
132  				unused:30;
133  
134  	u_int			reg_lccr0;
135  	u_int			reg_lccr1;
136  	u_int			reg_lccr2;
137  	u_int			reg_lccr3;
138  	u_int			reg_lccr4;
139  	u_int			reg_cmdcr;
140  
141  	unsigned long	hsync_time;
142  
143  	volatile u_char		state;
144  	volatile u_char		task_state;
145  	struct mutex		ctrlr_lock;
146  	wait_queue_head_t	ctrlr_wait;
147  	struct work_struct	task;
148  
149  	struct completion	disable_done;
150  
151  #ifdef CONFIG_FB_PXA_SMARTPANEL
152  	uint16_t		*smart_cmds;
153  	size_t			n_smart_cmds;
154  	struct completion	command_done;
155  	struct completion	refresh_done;
156  	struct task_struct	*smart_thread;
157  #endif
158  
159  #ifdef CONFIG_FB_PXA_OVERLAY
160  	struct pxafb_layer	overlay[2];
161  #endif
162  
163  #ifdef CONFIG_CPU_FREQ
164  	struct notifier_block	freq_transition;
165  #endif
166  
167  	struct regulator *lcd_supply;
168  	bool lcd_supply_enabled;
169  
170  	void (*lcd_power)(int, struct fb_var_screeninfo *);
171  	void (*backlight_power)(int);
172  
173  	struct pxafb_mach_info	*inf;
174  };
175  
176  #define TO_INF(ptr,member) container_of(ptr,struct pxafb_info,member)
177  
178  /*
179   * These are the actions for set_ctrlr_state
180   */
181  #define C_DISABLE		(0)
182  #define C_ENABLE		(1)
183  #define C_DISABLE_CLKCHANGE	(2)
184  #define C_ENABLE_CLKCHANGE	(3)
185  #define C_REENABLE		(4)
186  #define C_DISABLE_PM		(5)
187  #define C_ENABLE_PM		(6)
188  #define C_STARTUP		(7)
189  
190  #define PXA_NAME	"PXA"
191  
192  /*
193   * Minimum X and Y resolutions
194   */
195  #define MIN_XRES	64
196  #define MIN_YRES	64
197  
198  /* maximum X and Y resolutions - note these are limits from the register
199   * bits length instead of the real ones
200   */
201  #define MAX_XRES	1024
202  #define MAX_YRES	1024
203  
204  #endif /* __PXAFB_H__ */
205