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