162306a36Sopenharmony_ci#ifndef __PXAFB_H__ 262306a36Sopenharmony_ci#define __PXAFB_H__ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci/* 562306a36Sopenharmony_ci * linux/drivers/video/pxafb.h 662306a36Sopenharmony_ci * -- Intel PXA250/210 LCD Controller Frame Buffer Device 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Copyright (C) 1999 Eric A. Thomas. 962306a36Sopenharmony_ci * Copyright (C) 2004 Jean-Frederic Clere. 1062306a36Sopenharmony_ci * Copyright (C) 2004 Ian Campbell. 1162306a36Sopenharmony_ci * Copyright (C) 2004 Jeff Lackey. 1262306a36Sopenharmony_ci * Based on sa1100fb.c Copyright (C) 1999 Eric A. Thomas 1362306a36Sopenharmony_ci * which in turn is 1462306a36Sopenharmony_ci * Based on acornfb.c Copyright (C) Russell King. 1562306a36Sopenharmony_ci * 1662306a36Sopenharmony_ci * 2001-08-03: Cliff Brake <cbrake@acclent.com> 1762306a36Sopenharmony_ci * - ported SA1100 code to PXA 1862306a36Sopenharmony_ci * 1962306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public 2062306a36Sopenharmony_ci * License. See the file COPYING in the main directory of this archive 2162306a36Sopenharmony_ci * for more details. 2262306a36Sopenharmony_ci */ 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci/* PXA LCD DMA descriptor */ 2562306a36Sopenharmony_cistruct pxafb_dma_descriptor { 2662306a36Sopenharmony_ci unsigned int fdadr; 2762306a36Sopenharmony_ci unsigned int fsadr; 2862306a36Sopenharmony_ci unsigned int fidr; 2962306a36Sopenharmony_ci unsigned int ldcmd; 3062306a36Sopenharmony_ci}; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_cienum { 3362306a36Sopenharmony_ci PAL_NONE = -1, 3462306a36Sopenharmony_ci PAL_BASE = 0, 3562306a36Sopenharmony_ci PAL_OV1 = 1, 3662306a36Sopenharmony_ci PAL_OV2 = 2, 3762306a36Sopenharmony_ci PAL_MAX, 3862306a36Sopenharmony_ci}; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cienum { 4162306a36Sopenharmony_ci DMA_BASE = 0, 4262306a36Sopenharmony_ci DMA_UPPER = 0, 4362306a36Sopenharmony_ci DMA_LOWER = 1, 4462306a36Sopenharmony_ci DMA_OV1 = 1, 4562306a36Sopenharmony_ci DMA_OV2_Y = 2, 4662306a36Sopenharmony_ci DMA_OV2_Cb = 3, 4762306a36Sopenharmony_ci DMA_OV2_Cr = 4, 4862306a36Sopenharmony_ci DMA_CURSOR = 5, 4962306a36Sopenharmony_ci DMA_CMD = 6, 5062306a36Sopenharmony_ci DMA_MAX, 5162306a36Sopenharmony_ci}; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci/* maximum palette size - 256 entries, each 4 bytes long */ 5462306a36Sopenharmony_ci#define PALETTE_SIZE (256 * 4) 5562306a36Sopenharmony_ci#define CMD_BUFF_SIZE (1024 * 50) 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci/* NOTE: the palette and frame dma descriptors are doubled to allow 5862306a36Sopenharmony_ci * the 2nd set for branch settings (FBRx) 5962306a36Sopenharmony_ci */ 6062306a36Sopenharmony_cistruct pxafb_dma_buff { 6162306a36Sopenharmony_ci unsigned char palette[PAL_MAX * PALETTE_SIZE]; 6262306a36Sopenharmony_ci uint16_t cmd_buff[CMD_BUFF_SIZE]; 6362306a36Sopenharmony_ci struct pxafb_dma_descriptor pal_desc[PAL_MAX * 2]; 6462306a36Sopenharmony_ci struct pxafb_dma_descriptor dma_desc[DMA_MAX * 2]; 6562306a36Sopenharmony_ci}; 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_cienum { 6862306a36Sopenharmony_ci OVERLAY1, 6962306a36Sopenharmony_ci OVERLAY2, 7062306a36Sopenharmony_ci}; 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_cienum { 7362306a36Sopenharmony_ci OVERLAY_FORMAT_RGB = 0, 7462306a36Sopenharmony_ci OVERLAY_FORMAT_YUV444_PACKED, 7562306a36Sopenharmony_ci OVERLAY_FORMAT_YUV444_PLANAR, 7662306a36Sopenharmony_ci OVERLAY_FORMAT_YUV422_PLANAR, 7762306a36Sopenharmony_ci OVERLAY_FORMAT_YUV420_PLANAR, 7862306a36Sopenharmony_ci}; 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ci#define NONSTD_TO_XPOS(x) (((x) >> 0) & 0x3ff) 8162306a36Sopenharmony_ci#define NONSTD_TO_YPOS(x) (((x) >> 10) & 0x3ff) 8262306a36Sopenharmony_ci#define NONSTD_TO_PFOR(x) (((x) >> 20) & 0x7) 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_cistruct pxafb_layer; 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_cistruct pxafb_layer_ops { 8762306a36Sopenharmony_ci void (*enable)(struct pxafb_layer *); 8862306a36Sopenharmony_ci void (*disable)(struct pxafb_layer *); 8962306a36Sopenharmony_ci void (*setup)(struct pxafb_layer *); 9062306a36Sopenharmony_ci}; 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_cistruct pxafb_layer { 9362306a36Sopenharmony_ci struct fb_info fb; 9462306a36Sopenharmony_ci int id; 9562306a36Sopenharmony_ci int registered; 9662306a36Sopenharmony_ci uint32_t usage; 9762306a36Sopenharmony_ci uint32_t control[2]; 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci struct pxafb_layer_ops *ops; 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci void __iomem *video_mem; 10262306a36Sopenharmony_ci unsigned long video_mem_phys; 10362306a36Sopenharmony_ci size_t video_mem_size; 10462306a36Sopenharmony_ci struct completion branch_done; 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci struct pxafb_info *fbi; 10762306a36Sopenharmony_ci}; 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_cistruct pxafb_info { 11062306a36Sopenharmony_ci struct fb_info fb; 11162306a36Sopenharmony_ci struct device *dev; 11262306a36Sopenharmony_ci struct clk *clk; 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci void __iomem *mmio_base; 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci struct pxafb_dma_buff *dma_buff; 11762306a36Sopenharmony_ci size_t dma_buff_size; 11862306a36Sopenharmony_ci dma_addr_t dma_buff_phys; 11962306a36Sopenharmony_ci dma_addr_t fdadr[DMA_MAX * 2]; 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci void __iomem *video_mem; /* virtual address of frame buffer */ 12262306a36Sopenharmony_ci unsigned long video_mem_phys; /* physical address of frame buffer */ 12362306a36Sopenharmony_ci size_t video_mem_size; /* size of the frame buffer */ 12462306a36Sopenharmony_ci u16 * palette_cpu; /* virtual address of palette memory */ 12562306a36Sopenharmony_ci u_int palette_size; 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci u_int lccr0; 12862306a36Sopenharmony_ci u_int lccr3; 12962306a36Sopenharmony_ci u_int lccr4; 13062306a36Sopenharmony_ci u_int cmap_inverse:1, 13162306a36Sopenharmony_ci cmap_static:1, 13262306a36Sopenharmony_ci unused:30; 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_ci u_int reg_lccr0; 13562306a36Sopenharmony_ci u_int reg_lccr1; 13662306a36Sopenharmony_ci u_int reg_lccr2; 13762306a36Sopenharmony_ci u_int reg_lccr3; 13862306a36Sopenharmony_ci u_int reg_lccr4; 13962306a36Sopenharmony_ci u_int reg_cmdcr; 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci unsigned long hsync_time; 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci volatile u_char state; 14462306a36Sopenharmony_ci volatile u_char task_state; 14562306a36Sopenharmony_ci struct mutex ctrlr_lock; 14662306a36Sopenharmony_ci wait_queue_head_t ctrlr_wait; 14762306a36Sopenharmony_ci struct work_struct task; 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci struct completion disable_done; 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci#ifdef CONFIG_FB_PXA_SMARTPANEL 15262306a36Sopenharmony_ci uint16_t *smart_cmds; 15362306a36Sopenharmony_ci size_t n_smart_cmds; 15462306a36Sopenharmony_ci struct completion command_done; 15562306a36Sopenharmony_ci struct completion refresh_done; 15662306a36Sopenharmony_ci struct task_struct *smart_thread; 15762306a36Sopenharmony_ci#endif 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ci#ifdef CONFIG_FB_PXA_OVERLAY 16062306a36Sopenharmony_ci struct pxafb_layer overlay[2]; 16162306a36Sopenharmony_ci#endif 16262306a36Sopenharmony_ci 16362306a36Sopenharmony_ci#ifdef CONFIG_CPU_FREQ 16462306a36Sopenharmony_ci struct notifier_block freq_transition; 16562306a36Sopenharmony_ci#endif 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_ci struct regulator *lcd_supply; 16862306a36Sopenharmony_ci bool lcd_supply_enabled; 16962306a36Sopenharmony_ci 17062306a36Sopenharmony_ci void (*lcd_power)(int, struct fb_var_screeninfo *); 17162306a36Sopenharmony_ci void (*backlight_power)(int); 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci struct pxafb_mach_info *inf; 17462306a36Sopenharmony_ci}; 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci#define TO_INF(ptr,member) container_of(ptr,struct pxafb_info,member) 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ci/* 17962306a36Sopenharmony_ci * These are the actions for set_ctrlr_state 18062306a36Sopenharmony_ci */ 18162306a36Sopenharmony_ci#define C_DISABLE (0) 18262306a36Sopenharmony_ci#define C_ENABLE (1) 18362306a36Sopenharmony_ci#define C_DISABLE_CLKCHANGE (2) 18462306a36Sopenharmony_ci#define C_ENABLE_CLKCHANGE (3) 18562306a36Sopenharmony_ci#define C_REENABLE (4) 18662306a36Sopenharmony_ci#define C_DISABLE_PM (5) 18762306a36Sopenharmony_ci#define C_ENABLE_PM (6) 18862306a36Sopenharmony_ci#define C_STARTUP (7) 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_ci#define PXA_NAME "PXA" 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_ci/* 19362306a36Sopenharmony_ci * Minimum X and Y resolutions 19462306a36Sopenharmony_ci */ 19562306a36Sopenharmony_ci#define MIN_XRES 64 19662306a36Sopenharmony_ci#define MIN_YRES 64 19762306a36Sopenharmony_ci 19862306a36Sopenharmony_ci/* maximum X and Y resolutions - note these are limits from the register 19962306a36Sopenharmony_ci * bits length instead of the real ones 20062306a36Sopenharmony_ci */ 20162306a36Sopenharmony_ci#define MAX_XRES 1024 20262306a36Sopenharmony_ci#define MAX_YRES 1024 20362306a36Sopenharmony_ci 20462306a36Sopenharmony_ci#endif /* __PXAFB_H__ */ 205