18c2ecf20Sopenharmony_ci#ifndef __PXAFB_H__ 28c2ecf20Sopenharmony_ci#define __PXAFB_H__ 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci/* 58c2ecf20Sopenharmony_ci * linux/drivers/video/pxafb.h 68c2ecf20Sopenharmony_ci * -- Intel PXA250/210 LCD Controller Frame Buffer Device 78c2ecf20Sopenharmony_ci * 88c2ecf20Sopenharmony_ci * Copyright (C) 1999 Eric A. Thomas. 98c2ecf20Sopenharmony_ci * Copyright (C) 2004 Jean-Frederic Clere. 108c2ecf20Sopenharmony_ci * Copyright (C) 2004 Ian Campbell. 118c2ecf20Sopenharmony_ci * Copyright (C) 2004 Jeff Lackey. 128c2ecf20Sopenharmony_ci * Based on sa1100fb.c Copyright (C) 1999 Eric A. Thomas 138c2ecf20Sopenharmony_ci * which in turn is 148c2ecf20Sopenharmony_ci * Based on acornfb.c Copyright (C) Russell King. 158c2ecf20Sopenharmony_ci * 168c2ecf20Sopenharmony_ci * 2001-08-03: Cliff Brake <cbrake@acclent.com> 178c2ecf20Sopenharmony_ci * - ported SA1100 code to PXA 188c2ecf20Sopenharmony_ci * 198c2ecf20Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public 208c2ecf20Sopenharmony_ci * License. See the file COPYING in the main directory of this archive 218c2ecf20Sopenharmony_ci * for more details. 228c2ecf20Sopenharmony_ci */ 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci/* PXA LCD DMA descriptor */ 258c2ecf20Sopenharmony_cistruct pxafb_dma_descriptor { 268c2ecf20Sopenharmony_ci unsigned int fdadr; 278c2ecf20Sopenharmony_ci unsigned int fsadr; 288c2ecf20Sopenharmony_ci unsigned int fidr; 298c2ecf20Sopenharmony_ci unsigned int ldcmd; 308c2ecf20Sopenharmony_ci}; 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_cienum { 338c2ecf20Sopenharmony_ci PAL_NONE = -1, 348c2ecf20Sopenharmony_ci PAL_BASE = 0, 358c2ecf20Sopenharmony_ci PAL_OV1 = 1, 368c2ecf20Sopenharmony_ci PAL_OV2 = 2, 378c2ecf20Sopenharmony_ci PAL_MAX, 388c2ecf20Sopenharmony_ci}; 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_cienum { 418c2ecf20Sopenharmony_ci DMA_BASE = 0, 428c2ecf20Sopenharmony_ci DMA_UPPER = 0, 438c2ecf20Sopenharmony_ci DMA_LOWER = 1, 448c2ecf20Sopenharmony_ci DMA_OV1 = 1, 458c2ecf20Sopenharmony_ci DMA_OV2_Y = 2, 468c2ecf20Sopenharmony_ci DMA_OV2_Cb = 3, 478c2ecf20Sopenharmony_ci DMA_OV2_Cr = 4, 488c2ecf20Sopenharmony_ci DMA_CURSOR = 5, 498c2ecf20Sopenharmony_ci DMA_CMD = 6, 508c2ecf20Sopenharmony_ci DMA_MAX, 518c2ecf20Sopenharmony_ci}; 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci/* maximum palette size - 256 entries, each 4 bytes long */ 548c2ecf20Sopenharmony_ci#define PALETTE_SIZE (256 * 4) 558c2ecf20Sopenharmony_ci#define CMD_BUFF_SIZE (1024 * 50) 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ci/* NOTE: the palette and frame dma descriptors are doubled to allow 588c2ecf20Sopenharmony_ci * the 2nd set for branch settings (FBRx) 598c2ecf20Sopenharmony_ci */ 608c2ecf20Sopenharmony_cistruct pxafb_dma_buff { 618c2ecf20Sopenharmony_ci unsigned char palette[PAL_MAX * PALETTE_SIZE]; 628c2ecf20Sopenharmony_ci uint16_t cmd_buff[CMD_BUFF_SIZE]; 638c2ecf20Sopenharmony_ci struct pxafb_dma_descriptor pal_desc[PAL_MAX * 2]; 648c2ecf20Sopenharmony_ci struct pxafb_dma_descriptor dma_desc[DMA_MAX * 2]; 658c2ecf20Sopenharmony_ci}; 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_cienum { 688c2ecf20Sopenharmony_ci OVERLAY1, 698c2ecf20Sopenharmony_ci OVERLAY2, 708c2ecf20Sopenharmony_ci}; 718c2ecf20Sopenharmony_ci 728c2ecf20Sopenharmony_cienum { 738c2ecf20Sopenharmony_ci OVERLAY_FORMAT_RGB = 0, 748c2ecf20Sopenharmony_ci OVERLAY_FORMAT_YUV444_PACKED, 758c2ecf20Sopenharmony_ci OVERLAY_FORMAT_YUV444_PLANAR, 768c2ecf20Sopenharmony_ci OVERLAY_FORMAT_YUV422_PLANAR, 778c2ecf20Sopenharmony_ci OVERLAY_FORMAT_YUV420_PLANAR, 788c2ecf20Sopenharmony_ci}; 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_ci#define NONSTD_TO_XPOS(x) (((x) >> 0) & 0x3ff) 818c2ecf20Sopenharmony_ci#define NONSTD_TO_YPOS(x) (((x) >> 10) & 0x3ff) 828c2ecf20Sopenharmony_ci#define NONSTD_TO_PFOR(x) (((x) >> 20) & 0x7) 838c2ecf20Sopenharmony_ci 848c2ecf20Sopenharmony_cistruct pxafb_layer; 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_cistruct pxafb_layer_ops { 878c2ecf20Sopenharmony_ci void (*enable)(struct pxafb_layer *); 888c2ecf20Sopenharmony_ci void (*disable)(struct pxafb_layer *); 898c2ecf20Sopenharmony_ci void (*setup)(struct pxafb_layer *); 908c2ecf20Sopenharmony_ci}; 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_cistruct pxafb_layer { 938c2ecf20Sopenharmony_ci struct fb_info fb; 948c2ecf20Sopenharmony_ci int id; 958c2ecf20Sopenharmony_ci int registered; 968c2ecf20Sopenharmony_ci uint32_t usage; 978c2ecf20Sopenharmony_ci uint32_t control[2]; 988c2ecf20Sopenharmony_ci 998c2ecf20Sopenharmony_ci struct pxafb_layer_ops *ops; 1008c2ecf20Sopenharmony_ci 1018c2ecf20Sopenharmony_ci void __iomem *video_mem; 1028c2ecf20Sopenharmony_ci unsigned long video_mem_phys; 1038c2ecf20Sopenharmony_ci size_t video_mem_size; 1048c2ecf20Sopenharmony_ci struct completion branch_done; 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_ci struct pxafb_info *fbi; 1078c2ecf20Sopenharmony_ci}; 1088c2ecf20Sopenharmony_ci 1098c2ecf20Sopenharmony_cistruct pxafb_info { 1108c2ecf20Sopenharmony_ci struct fb_info fb; 1118c2ecf20Sopenharmony_ci struct device *dev; 1128c2ecf20Sopenharmony_ci struct clk *clk; 1138c2ecf20Sopenharmony_ci 1148c2ecf20Sopenharmony_ci void __iomem *mmio_base; 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_ci struct pxafb_dma_buff *dma_buff; 1178c2ecf20Sopenharmony_ci size_t dma_buff_size; 1188c2ecf20Sopenharmony_ci dma_addr_t dma_buff_phys; 1198c2ecf20Sopenharmony_ci dma_addr_t fdadr[DMA_MAX * 2]; 1208c2ecf20Sopenharmony_ci 1218c2ecf20Sopenharmony_ci void __iomem *video_mem; /* virtual address of frame buffer */ 1228c2ecf20Sopenharmony_ci unsigned long video_mem_phys; /* physical address of frame buffer */ 1238c2ecf20Sopenharmony_ci size_t video_mem_size; /* size of the frame buffer */ 1248c2ecf20Sopenharmony_ci u16 * palette_cpu; /* virtual address of palette memory */ 1258c2ecf20Sopenharmony_ci u_int palette_size; 1268c2ecf20Sopenharmony_ci 1278c2ecf20Sopenharmony_ci u_int lccr0; 1288c2ecf20Sopenharmony_ci u_int lccr3; 1298c2ecf20Sopenharmony_ci u_int lccr4; 1308c2ecf20Sopenharmony_ci u_int cmap_inverse:1, 1318c2ecf20Sopenharmony_ci cmap_static:1, 1328c2ecf20Sopenharmony_ci unused:30; 1338c2ecf20Sopenharmony_ci 1348c2ecf20Sopenharmony_ci u_int reg_lccr0; 1358c2ecf20Sopenharmony_ci u_int reg_lccr1; 1368c2ecf20Sopenharmony_ci u_int reg_lccr2; 1378c2ecf20Sopenharmony_ci u_int reg_lccr3; 1388c2ecf20Sopenharmony_ci u_int reg_lccr4; 1398c2ecf20Sopenharmony_ci u_int reg_cmdcr; 1408c2ecf20Sopenharmony_ci 1418c2ecf20Sopenharmony_ci unsigned long hsync_time; 1428c2ecf20Sopenharmony_ci 1438c2ecf20Sopenharmony_ci volatile u_char state; 1448c2ecf20Sopenharmony_ci volatile u_char task_state; 1458c2ecf20Sopenharmony_ci struct mutex ctrlr_lock; 1468c2ecf20Sopenharmony_ci wait_queue_head_t ctrlr_wait; 1478c2ecf20Sopenharmony_ci struct work_struct task; 1488c2ecf20Sopenharmony_ci 1498c2ecf20Sopenharmony_ci struct completion disable_done; 1508c2ecf20Sopenharmony_ci 1518c2ecf20Sopenharmony_ci#ifdef CONFIG_FB_PXA_SMARTPANEL 1528c2ecf20Sopenharmony_ci uint16_t *smart_cmds; 1538c2ecf20Sopenharmony_ci size_t n_smart_cmds; 1548c2ecf20Sopenharmony_ci struct completion command_done; 1558c2ecf20Sopenharmony_ci struct completion refresh_done; 1568c2ecf20Sopenharmony_ci struct task_struct *smart_thread; 1578c2ecf20Sopenharmony_ci#endif 1588c2ecf20Sopenharmony_ci 1598c2ecf20Sopenharmony_ci#ifdef CONFIG_FB_PXA_OVERLAY 1608c2ecf20Sopenharmony_ci struct pxafb_layer overlay[2]; 1618c2ecf20Sopenharmony_ci#endif 1628c2ecf20Sopenharmony_ci 1638c2ecf20Sopenharmony_ci#ifdef CONFIG_CPU_FREQ 1648c2ecf20Sopenharmony_ci struct notifier_block freq_transition; 1658c2ecf20Sopenharmony_ci#endif 1668c2ecf20Sopenharmony_ci 1678c2ecf20Sopenharmony_ci struct regulator *lcd_supply; 1688c2ecf20Sopenharmony_ci bool lcd_supply_enabled; 1698c2ecf20Sopenharmony_ci 1708c2ecf20Sopenharmony_ci void (*lcd_power)(int, struct fb_var_screeninfo *); 1718c2ecf20Sopenharmony_ci void (*backlight_power)(int); 1728c2ecf20Sopenharmony_ci 1738c2ecf20Sopenharmony_ci struct pxafb_mach_info *inf; 1748c2ecf20Sopenharmony_ci}; 1758c2ecf20Sopenharmony_ci 1768c2ecf20Sopenharmony_ci#define TO_INF(ptr,member) container_of(ptr,struct pxafb_info,member) 1778c2ecf20Sopenharmony_ci 1788c2ecf20Sopenharmony_ci/* 1798c2ecf20Sopenharmony_ci * These are the actions for set_ctrlr_state 1808c2ecf20Sopenharmony_ci */ 1818c2ecf20Sopenharmony_ci#define C_DISABLE (0) 1828c2ecf20Sopenharmony_ci#define C_ENABLE (1) 1838c2ecf20Sopenharmony_ci#define C_DISABLE_CLKCHANGE (2) 1848c2ecf20Sopenharmony_ci#define C_ENABLE_CLKCHANGE (3) 1858c2ecf20Sopenharmony_ci#define C_REENABLE (4) 1868c2ecf20Sopenharmony_ci#define C_DISABLE_PM (5) 1878c2ecf20Sopenharmony_ci#define C_ENABLE_PM (6) 1888c2ecf20Sopenharmony_ci#define C_STARTUP (7) 1898c2ecf20Sopenharmony_ci 1908c2ecf20Sopenharmony_ci#define PXA_NAME "PXA" 1918c2ecf20Sopenharmony_ci 1928c2ecf20Sopenharmony_ci/* 1938c2ecf20Sopenharmony_ci * Minimum X and Y resolutions 1948c2ecf20Sopenharmony_ci */ 1958c2ecf20Sopenharmony_ci#define MIN_XRES 64 1968c2ecf20Sopenharmony_ci#define MIN_YRES 64 1978c2ecf20Sopenharmony_ci 1988c2ecf20Sopenharmony_ci/* maximum X and Y resolutions - note these are limits from the register 1998c2ecf20Sopenharmony_ci * bits length instead of the real ones 2008c2ecf20Sopenharmony_ci */ 2018c2ecf20Sopenharmony_ci#define MAX_XRES 1024 2028c2ecf20Sopenharmony_ci#define MAX_YRES 1024 2038c2ecf20Sopenharmony_ci 2048c2ecf20Sopenharmony_ci#endif /* __PXAFB_H__ */ 205