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