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