162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * linux/drivers/video/sa1100fb.h
362306a36Sopenharmony_ci *    -- StrongARM 1100 LCD Controller Frame Buffer Device
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci *  Copyright (C) 1999 Eric A. Thomas
662306a36Sopenharmony_ci *   Based on acornfb.c Copyright (C) Russell King.
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public
962306a36Sopenharmony_ci * License.  See the file COPYING in the main directory of this archive
1062306a36Sopenharmony_ci * for more details.
1162306a36Sopenharmony_ci */
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cistruct gpio_desc;
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#define LCCR0           0x0000          /* LCD Control Reg. 0 */
1662306a36Sopenharmony_ci#define LCSR            0x0004          /* LCD Status Reg. */
1762306a36Sopenharmony_ci#define DBAR1           0x0010          /* LCD DMA Base Address Reg. channel 1 */
1862306a36Sopenharmony_ci#define DCAR1           0x0014          /* LCD DMA Current Address Reg. channel 1 */
1962306a36Sopenharmony_ci#define DBAR2           0x0018          /* LCD DMA Base Address Reg.  channel 2 */
2062306a36Sopenharmony_ci#define DCAR2           0x001C          /* LCD DMA Current Address Reg. channel 2 */
2162306a36Sopenharmony_ci#define LCCR1           0x0020          /* LCD Control Reg. 1 */
2262306a36Sopenharmony_ci#define LCCR2           0x0024          /* LCD Control Reg. 2 */
2362306a36Sopenharmony_ci#define LCCR3           0x0028          /* LCD Control Reg. 3 */
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci/* Shadows for LCD controller registers */
2662306a36Sopenharmony_cistruct sa1100fb_lcd_reg {
2762306a36Sopenharmony_ci	unsigned long lccr0;
2862306a36Sopenharmony_ci	unsigned long lccr1;
2962306a36Sopenharmony_ci	unsigned long lccr2;
3062306a36Sopenharmony_ci	unsigned long lccr3;
3162306a36Sopenharmony_ci};
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cistruct sa1100fb_info {
3462306a36Sopenharmony_ci	struct fb_info		fb;
3562306a36Sopenharmony_ci	struct device		*dev;
3662306a36Sopenharmony_ci	const struct sa1100fb_rgb *rgb[NR_RGB];
3762306a36Sopenharmony_ci	void __iomem		*base;
3862306a36Sopenharmony_ci	struct gpio_desc	*shannon_lcden;
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci	/*
4162306a36Sopenharmony_ci	 * These are the addresses we mapped
4262306a36Sopenharmony_ci	 * the framebuffer memory region to.
4362306a36Sopenharmony_ci	 */
4462306a36Sopenharmony_ci	dma_addr_t		map_dma;
4562306a36Sopenharmony_ci	u_char *		map_cpu;
4662306a36Sopenharmony_ci	u_int			map_size;
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci	u_char *		screen_cpu;
4962306a36Sopenharmony_ci	dma_addr_t		screen_dma;
5062306a36Sopenharmony_ci	u16 *			palette_cpu;
5162306a36Sopenharmony_ci	dma_addr_t		palette_dma;
5262306a36Sopenharmony_ci	u_int			palette_size;
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci	dma_addr_t		dbar1;
5562306a36Sopenharmony_ci	dma_addr_t		dbar2;
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci	u_int			reg_lccr0;
5862306a36Sopenharmony_ci	u_int			reg_lccr1;
5962306a36Sopenharmony_ci	u_int			reg_lccr2;
6062306a36Sopenharmony_ci	u_int			reg_lccr3;
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci	volatile u_char		state;
6362306a36Sopenharmony_ci	volatile u_char		task_state;
6462306a36Sopenharmony_ci	struct mutex		ctrlr_lock;
6562306a36Sopenharmony_ci	wait_queue_head_t	ctrlr_wait;
6662306a36Sopenharmony_ci	struct work_struct	task;
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci#ifdef CONFIG_CPU_FREQ
6962306a36Sopenharmony_ci	struct notifier_block	freq_transition;
7062306a36Sopenharmony_ci#endif
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci	const struct sa1100fb_mach_info *inf;
7362306a36Sopenharmony_ci	struct clk *clk;
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci	u32 pseudo_palette[16];
7662306a36Sopenharmony_ci};
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci#define TO_INF(ptr,member)	container_of(ptr,struct sa1100fb_info,member)
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci#define SA1100_PALETTE_MODE_VAL(bpp)    (((bpp) & 0x018) << 9)
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci/*
8362306a36Sopenharmony_ci * These are the actions for set_ctrlr_state
8462306a36Sopenharmony_ci */
8562306a36Sopenharmony_ci#define C_DISABLE		(0)
8662306a36Sopenharmony_ci#define C_ENABLE		(1)
8762306a36Sopenharmony_ci#define C_DISABLE_CLKCHANGE	(2)
8862306a36Sopenharmony_ci#define C_ENABLE_CLKCHANGE	(3)
8962306a36Sopenharmony_ci#define C_REENABLE		(4)
9062306a36Sopenharmony_ci#define C_DISABLE_PM		(5)
9162306a36Sopenharmony_ci#define C_ENABLE_PM		(6)
9262306a36Sopenharmony_ci#define C_STARTUP		(7)
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci#define SA1100_NAME	"SA1100"
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_ci/*
9762306a36Sopenharmony_ci * Minimum X and Y resolutions
9862306a36Sopenharmony_ci */
9962306a36Sopenharmony_ci#define MIN_XRES	64
10062306a36Sopenharmony_ci#define MIN_YRES	64
10162306a36Sopenharmony_ci
102