1de701d11SSyed Mohammed Khasim /* 2de701d11SSyed Mohammed Khasim * (C) Copyright 2010 3de701d11SSyed Mohammed Khasim * Texas Instruments, <www.ti.com> 4de701d11SSyed Mohammed Khasim * Syed Mohammed Khasim <khasim@ti.com> 5de701d11SSyed Mohammed Khasim * 6de701d11SSyed Mohammed Khasim * Referred to Linux Kernel DSS driver files for OMAP3 by 7de701d11SSyed Mohammed Khasim * Tomi Valkeinen from drivers/video/omap2/dss/ 8de701d11SSyed Mohammed Khasim * 9de701d11SSyed Mohammed Khasim * See file CREDITS for list of people who contributed to this 10de701d11SSyed Mohammed Khasim * project. 11de701d11SSyed Mohammed Khasim * 12de701d11SSyed Mohammed Khasim * This program is free software; you can redistribute it and/or 13de701d11SSyed Mohammed Khasim * modify it under the terms of the GNU General Public License as 14de701d11SSyed Mohammed Khasim * published by the Free Software Foundation's version 2 and any 15de701d11SSyed Mohammed Khasim * later version the License. 16de701d11SSyed Mohammed Khasim * 17de701d11SSyed Mohammed Khasim * This program is distributed in the hope that it will be useful, 18de701d11SSyed Mohammed Khasim * but WITHOUT ANY WARRANTY; without even the implied warranty of 19de701d11SSyed Mohammed Khasim * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20de701d11SSyed Mohammed Khasim * GNU General Public License for more details. 21de701d11SSyed Mohammed Khasim * 22de701d11SSyed Mohammed Khasim * You should have received a copy of the GNU General Public License 23de701d11SSyed Mohammed Khasim * along with this program; if not, write to the Free Software 24de701d11SSyed Mohammed Khasim * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 25de701d11SSyed Mohammed Khasim * MA 02111-1307 USA 26de701d11SSyed Mohammed Khasim */ 27de701d11SSyed Mohammed Khasim 28de701d11SSyed Mohammed Khasim #ifndef DSS_H 29de701d11SSyed Mohammed Khasim #define DSS_H 30de701d11SSyed Mohammed Khasim 318da2efb6SJeroen Hofstee /* DSS Base Registers */ 32d9c13aacSJeroen Hofstee #define OMAP3_DSS_BASE 0x48050000 33d9c13aacSJeroen Hofstee #define OMAP3_DISPC_BASE 0x48050400 34de701d11SSyed Mohammed Khasim #define OMAP3_VENC_BASE 0x48050C00 35de701d11SSyed Mohammed Khasim 36de701d11SSyed Mohammed Khasim /* DSS Registers */ 37de701d11SSyed Mohammed Khasim struct dss_regs { 38d9c13aacSJeroen Hofstee u32 revision; /* 0x00 */ 39d9c13aacSJeroen Hofstee u8 res1[12]; /* 0x04 */ 40d9c13aacSJeroen Hofstee u32 sysconfig; /* 0x10 */ 41d9c13aacSJeroen Hofstee u32 sysstatus; /* 0x14 */ 42d9c13aacSJeroen Hofstee u32 irqstatus; /* 0x18 */ 43d9c13aacSJeroen Hofstee u8 res2[36]; /* 0x1C */ 44de701d11SSyed Mohammed Khasim u32 control; /* 0x40 */ 45de701d11SSyed Mohammed Khasim u32 sdi_control; /* 0x44 */ 46de701d11SSyed Mohammed Khasim u32 pll_control; /* 0x48 */ 47de701d11SSyed Mohammed Khasim }; 48de701d11SSyed Mohammed Khasim 49de701d11SSyed Mohammed Khasim /* DISPC Registers */ 50de701d11SSyed Mohammed Khasim struct dispc_regs { 51d9c13aacSJeroen Hofstee u32 revision; /* 0x00 */ 52d9c13aacSJeroen Hofstee u8 res1[12]; /* 0x04 */ 53d9c13aacSJeroen Hofstee u32 sysconfig; /* 0x10 */ 54d9c13aacSJeroen Hofstee u32 sysstatus; /* 0x14 */ 55d9c13aacSJeroen Hofstee u32 irqstatus; /* 0x18 */ 56d9c13aacSJeroen Hofstee u32 irqenable; /* 0x1C */ 57d9c13aacSJeroen Hofstee u8 res2[32]; /* 0x20 */ 58de701d11SSyed Mohammed Khasim u32 control; /* 0x40 */ 59de701d11SSyed Mohammed Khasim u32 config; /* 0x44 */ 60de701d11SSyed Mohammed Khasim u32 reserve_2; /* 0x48 */ 61de701d11SSyed Mohammed Khasim u32 default_color0; /* 0x4C */ 62de701d11SSyed Mohammed Khasim u32 default_color1; /* 0x50 */ 63de701d11SSyed Mohammed Khasim u32 trans_color0; /* 0x54 */ 64de701d11SSyed Mohammed Khasim u32 trans_color1; /* 0x58 */ 65de701d11SSyed Mohammed Khasim u32 line_status; /* 0x5C */ 66de701d11SSyed Mohammed Khasim u32 line_number; /* 0x60 */ 67de701d11SSyed Mohammed Khasim u32 timing_h; /* 0x64 */ 68de701d11SSyed Mohammed Khasim u32 timing_v; /* 0x68 */ 69de701d11SSyed Mohammed Khasim u32 pol_freq; /* 0x6C */ 70de701d11SSyed Mohammed Khasim u32 divisor; /* 0x70 */ 71de701d11SSyed Mohammed Khasim u32 global_alpha; /* 0x74 */ 72de701d11SSyed Mohammed Khasim u32 size_dig; /* 0x78 */ 73de701d11SSyed Mohammed Khasim u32 size_lcd; /* 0x7C */ 74d9c13aacSJeroen Hofstee u32 gfx_ba0; /* 0x80 */ 75d9c13aacSJeroen Hofstee u32 gfx_ba1; /* 0x84 */ 76d9c13aacSJeroen Hofstee u32 gfx_position; /* 0x88 */ 77d9c13aacSJeroen Hofstee u32 gfx_size; /* 0x8C */ 78d9c13aacSJeroen Hofstee u8 unused[16]; /* 0x90 */ 79d9c13aacSJeroen Hofstee u32 gfx_attributes; /* 0xA0 */ 80d9c13aacSJeroen Hofstee u32 gfx_fifo_threshold; /* 0xA4 */ 81d9c13aacSJeroen Hofstee u32 gfx_fifo_size_status; /* 0xA8 */ 82d9c13aacSJeroen Hofstee u32 gfx_row_inc; /* 0xAC */ 83d9c13aacSJeroen Hofstee u32 gfx_pixel_inc; /* 0xB0 */ 84d9c13aacSJeroen Hofstee u32 gfx_window_skip; /* 0xB4 */ 85d9c13aacSJeroen Hofstee u32 gfx_table_ba; /* 0xB8 */ 86de701d11SSyed Mohammed Khasim }; 87de701d11SSyed Mohammed Khasim 88de701d11SSyed Mohammed Khasim /* VENC Registers */ 89de701d11SSyed Mohammed Khasim struct venc_regs { 90de701d11SSyed Mohammed Khasim u32 rev_id; /* 0x00 */ 91de701d11SSyed Mohammed Khasim u32 status; /* 0x04 */ 92de701d11SSyed Mohammed Khasim u32 f_control; /* 0x08 */ 93de701d11SSyed Mohammed Khasim u32 reserve_1; /* 0x0C */ 94de701d11SSyed Mohammed Khasim u32 vidout_ctrl; /* 0x10 */ 95de701d11SSyed Mohammed Khasim u32 sync_ctrl; /* 0x14 */ 96de701d11SSyed Mohammed Khasim u32 reserve_2; /* 0x18 */ 97de701d11SSyed Mohammed Khasim u32 llen; /* 0x1C */ 98de701d11SSyed Mohammed Khasim u32 flens; /* 0x20 */ 99de701d11SSyed Mohammed Khasim u32 hfltr_ctrl; /* 0x24 */ 100de701d11SSyed Mohammed Khasim u32 cc_carr_wss_carr; /* 0x28 */ 101de701d11SSyed Mohammed Khasim u32 c_phase; /* 0x2C */ 102de701d11SSyed Mohammed Khasim u32 gain_u; /* 0x30 */ 103de701d11SSyed Mohammed Khasim u32 gain_v; /* 0x34 */ 104de701d11SSyed Mohammed Khasim u32 gain_y; /* 0x38 */ 105de701d11SSyed Mohammed Khasim u32 black_level; /* 0x3C */ 106de701d11SSyed Mohammed Khasim u32 blank_level; /* 0x40 */ 107de701d11SSyed Mohammed Khasim u32 x_color; /* 0x44 */ 108de701d11SSyed Mohammed Khasim u32 m_control; /* 0x48 */ 109de701d11SSyed Mohammed Khasim u32 bstamp_wss_data; /* 0x4C */ 110de701d11SSyed Mohammed Khasim u32 s_carr; /* 0x50 */ 111de701d11SSyed Mohammed Khasim u32 line21; /* 0x54 */ 112de701d11SSyed Mohammed Khasim u32 ln_sel; /* 0x58 */ 113de701d11SSyed Mohammed Khasim u32 l21__wc_ctl; /* 0x5C */ 114de701d11SSyed Mohammed Khasim u32 htrigger_vtrigger; /* 0x60 */ 115de701d11SSyed Mohammed Khasim u32 savid__eavid; /* 0x64 */ 116de701d11SSyed Mohammed Khasim u32 flen__fal; /* 0x68 */ 117de701d11SSyed Mohammed Khasim u32 lal__phase_reset; /* 0x6C */ 118de701d11SSyed Mohammed Khasim u32 hs_int_start_stop_x; /* 0x70 */ 119de701d11SSyed Mohammed Khasim u32 hs_ext_start_stop_x; /* 0x74 */ 120de701d11SSyed Mohammed Khasim u32 vs_int_start_x; /* 0x78 */ 121de701d11SSyed Mohammed Khasim u32 vs_int_stop_x__vs_int_start_y; /* 0x7C */ 122de701d11SSyed Mohammed Khasim u32 vs_int_stop_y__vs_ext_start_x; /* 0x80 */ 123de701d11SSyed Mohammed Khasim u32 vs_ext_stop_x__vs_ext_start_y; /* 0x84 */ 124de701d11SSyed Mohammed Khasim u32 vs_ext_stop_y; /* 0x88 */ 125de701d11SSyed Mohammed Khasim u32 reserve_3; /* 0x8C */ 126de701d11SSyed Mohammed Khasim u32 avid_start_stop_x; /* 0x90 */ 127de701d11SSyed Mohammed Khasim u32 avid_start_stop_y; /* 0x94 */ 128de701d11SSyed Mohammed Khasim u32 reserve_4; /* 0x98 */ 129de701d11SSyed Mohammed Khasim u32 reserve_5; /* 0x9C */ 130de701d11SSyed Mohammed Khasim u32 fid_int_start_x__fid_int_start_y; /* 0xA0 */ 131de701d11SSyed Mohammed Khasim u32 fid_int_offset_y__fid_ext_start_x; /* 0xA4 */ 132de701d11SSyed Mohammed Khasim u32 fid_ext_start_y__fid_ext_offset_y; /* 0xA8 */ 133de701d11SSyed Mohammed Khasim u32 reserve_6; /* 0xAC */ 134de701d11SSyed Mohammed Khasim u32 tvdetgp_int_start_stop_x; /* 0xB0 */ 135de701d11SSyed Mohammed Khasim u32 tvdetgp_int_start_stop_y; /* 0xB4 */ 136de701d11SSyed Mohammed Khasim u32 gen_ctrl; /* 0xB8 */ 137de701d11SSyed Mohammed Khasim u32 reserve_7; /* 0xBC */ 138de701d11SSyed Mohammed Khasim u32 reserve_8; /* 0xC0 */ 139de701d11SSyed Mohammed Khasim u32 output_control; /* 0xC4 */ 140de701d11SSyed Mohammed Khasim u32 dac_b__dac_c; /* 0xC8 */ 141de701d11SSyed Mohammed Khasim u32 height_width; /* 0xCC */ 142de701d11SSyed Mohammed Khasim }; 143de701d11SSyed Mohammed Khasim 144de701d11SSyed Mohammed Khasim /* Few Register Offsets */ 145de701d11SSyed Mohammed Khasim #define TFTSTN_SHIFT 3 146de701d11SSyed Mohammed Khasim #define DATALINES_SHIFT 8 147de701d11SSyed Mohammed Khasim 148d9c13aacSJeroen Hofstee #define GFX_ENABLE 1 149d9c13aacSJeroen Hofstee #define GFX_FORMAT_SHIFT 1 150d9c13aacSJeroen Hofstee #define LOADMODE_SHIFT 1 151d9c13aacSJeroen Hofstee 152d9c13aacSJeroen Hofstee #define DSS_SOFTRESET (1 << 1) 153d9c13aacSJeroen Hofstee #define DSS_RESETDONE 1 154d9c13aacSJeroen Hofstee 155de701d11SSyed Mohammed Khasim /* Enabling Display controller */ 156de701d11SSyed Mohammed Khasim #define LCD_ENABLE 1 157de701d11SSyed Mohammed Khasim #define DIG_ENABLE (1 << 1) 158de701d11SSyed Mohammed Khasim #define GO_LCD (1 << 5) 159de701d11SSyed Mohammed Khasim #define GO_DIG (1 << 6) 160de701d11SSyed Mohammed Khasim #define GP_OUT0 (1 << 15) 161de701d11SSyed Mohammed Khasim #define GP_OUT1 (1 << 16) 162de701d11SSyed Mohammed Khasim 163de701d11SSyed Mohammed Khasim /* Configure VENC DSS Params */ 164de701d11SSyed Mohammed Khasim #define VENC_CLK_ENABLE (1 << 3) 165de701d11SSyed Mohammed Khasim #define DAC_DEMEN (1 << 4) 166de701d11SSyed Mohammed Khasim #define DAC_POWERDN (1 << 5) 167de701d11SSyed Mohammed Khasim #define VENC_OUT_SEL (1 << 6) 168de701d11SSyed Mohammed Khasim #define DIG_LPP_SHIFT 16 1698da2efb6SJeroen Hofstee 170bc84b18fSNikita Kiryanov /* LCD display type */ 171bc84b18fSNikita Kiryanov #define PASSIVE_DISPLAY 0 172bc84b18fSNikita Kiryanov #define ACTIVE_DISPLAY 1 173bc84b18fSNikita Kiryanov 174bc84b18fSNikita Kiryanov /* TFTDATALINES */ 175bc84b18fSNikita Kiryanov #define LCD_INTERFACE_12_BIT 0 176bc84b18fSNikita Kiryanov #define LCD_INTERFACE_16_BIT 1 177bc84b18fSNikita Kiryanov #define LCD_INTERFACE_18_BIT 2 178bc84b18fSNikita Kiryanov #define LCD_INTERFACE_24_BIT 3 179bc84b18fSNikita Kiryanov 180bc84b18fSNikita Kiryanov /* Polarity */ 181bc84b18fSNikita Kiryanov #define DSS_IVS (1 << 12) 182bc84b18fSNikita Kiryanov #define DSS_IHS (1 << 13) 183bc84b18fSNikita Kiryanov #define DSS_IPC (1 << 14) 184bc84b18fSNikita Kiryanov #define DSS_IEO (1 << 15) 185*f109a6e7SNikita Kiryanov #define DSS_ONOFF (1 << 17) 186bc84b18fSNikita Kiryanov 187bc84b18fSNikita Kiryanov /* GFX format */ 188bc84b18fSNikita Kiryanov #define GFXFORMAT_BITMAP1 (0x0 << 1) 189bc84b18fSNikita Kiryanov #define GFXFORMAT_BITMAP2 (0x1 << 1) 190bc84b18fSNikita Kiryanov #define GFXFORMAT_BITMAP4 (0x2 << 1) 191bc84b18fSNikita Kiryanov #define GFXFORMAT_BITMAP8 (0x3 << 1) 192bc84b18fSNikita Kiryanov #define GFXFORMAT_RGB12 (0x4 << 1) 193bc84b18fSNikita Kiryanov #define GFXFORMAT_ARGB16 (0x5 << 1) 194bc84b18fSNikita Kiryanov #define GFXFORMAT_RGB16 (0x6 << 1) 195bc84b18fSNikita Kiryanov #define GFXFORMAT_RGB24_UNPACKED (0x8 << 1) 196bc84b18fSNikita Kiryanov #define GFXFORMAT_RGB24_PACKED (0x9 << 1) 197bc84b18fSNikita Kiryanov #define GFXFORMAT_ARGB32 (0xC << 1) 198bc84b18fSNikita Kiryanov #define GFXFORMAT_RGBA32 (0xD << 1) 199bc84b18fSNikita Kiryanov #define GFXFORMAT_RGBx32 (0xE << 1) 200bc84b18fSNikita Kiryanov 2018da2efb6SJeroen Hofstee /* Panel Configuration */ 202de701d11SSyed Mohammed Khasim struct panel_config { 203de701d11SSyed Mohammed Khasim u32 timing_h; 204de701d11SSyed Mohammed Khasim u32 timing_v; 205de701d11SSyed Mohammed Khasim u32 pol_freq; 206de701d11SSyed Mohammed Khasim u32 divisor; 207de701d11SSyed Mohammed Khasim u32 lcd_size; 208de701d11SSyed Mohammed Khasim u32 panel_type; 209de701d11SSyed Mohammed Khasim u32 data_lines; 210de701d11SSyed Mohammed Khasim u32 load_mode; 211de701d11SSyed Mohammed Khasim u32 panel_color; 212bcc6cc9bSNikita Kiryanov u32 gfx_format; 213d9c13aacSJeroen Hofstee void *frame_buffer; 214de701d11SSyed Mohammed Khasim }; 215de701d11SSyed Mohammed Khasim 216fb380bfaSStefano Babic #define DSS_HBP(bp) (((bp) - 1) << 20) 217fb380bfaSStefano Babic #define DSS_HFP(fp) (((fp) - 1) << 8) 218fb380bfaSStefano Babic #define DSS_HSW(sw) ((sw) - 1) 219fb380bfaSStefano Babic #define DSS_VBP(bp) ((bp) << 20) 220fb380bfaSStefano Babic #define DSS_VFP(fp) ((fp) << 8) 221fb380bfaSStefano Babic #define DSS_VSW(sw) ((sw) - 1) 222fb380bfaSStefano Babic 223fb380bfaSStefano Babic #define PANEL_TIMING_H(bp, fp, sw) (DSS_HBP(bp) | DSS_HFP(fp) | DSS_HSW(sw)) 224fb380bfaSStefano Babic #define PANEL_TIMING_V(bp, fp, sw) (DSS_VBP(bp) | DSS_VFP(fp) | DSS_VSW(sw)) 22560c41d90SStefano Babic #define PANEL_LCD_SIZE(xres, yres) ((yres - 1) << 16 | (xres - 1)) 226fb380bfaSStefano Babic 2278da2efb6SJeroen Hofstee /* Generic DSS Functions */ 228de701d11SSyed Mohammed Khasim void omap3_dss_venc_config(const struct venc_regs *venc_cfg, 229de701d11SSyed Mohammed Khasim u32 height, u32 width); 230de701d11SSyed Mohammed Khasim void omap3_dss_panel_config(const struct panel_config *panel_cfg); 231de701d11SSyed Mohammed Khasim void omap3_dss_enable(void); 232de701d11SSyed Mohammed Khasim 233de701d11SSyed Mohammed Khasim #endif /* DSS_H */ 234