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 31*8da2efb6SJeroen 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 FRAME_MODE_SHIFT 1 146de701d11SSyed Mohammed Khasim #define TFTSTN_SHIFT 3 147de701d11SSyed Mohammed Khasim #define DATALINES_SHIFT 8 148de701d11SSyed Mohammed Khasim 149d9c13aacSJeroen Hofstee #define GFX_ENABLE 1 150d9c13aacSJeroen Hofstee #define GFX_FORMAT_SHIFT 1 151d9c13aacSJeroen Hofstee #define LOADMODE_SHIFT 1 152d9c13aacSJeroen Hofstee 153d9c13aacSJeroen Hofstee #define DSS_SOFTRESET (1 << 1) 154d9c13aacSJeroen Hofstee #define DSS_RESETDONE 1 155d9c13aacSJeroen Hofstee 156de701d11SSyed Mohammed Khasim /* Enabling Display controller */ 157de701d11SSyed Mohammed Khasim #define LCD_ENABLE 1 158de701d11SSyed Mohammed Khasim #define DIG_ENABLE (1 << 1) 159de701d11SSyed Mohammed Khasim #define GO_LCD (1 << 5) 160de701d11SSyed Mohammed Khasim #define GO_DIG (1 << 6) 161de701d11SSyed Mohammed Khasim #define GP_OUT0 (1 << 15) 162de701d11SSyed Mohammed Khasim #define GP_OUT1 (1 << 16) 163de701d11SSyed Mohammed Khasim 164de701d11SSyed Mohammed Khasim /* Configure VENC DSS Params */ 165de701d11SSyed Mohammed Khasim #define VENC_CLK_ENABLE (1 << 3) 166de701d11SSyed Mohammed Khasim #define DAC_DEMEN (1 << 4) 167de701d11SSyed Mohammed Khasim #define DAC_POWERDN (1 << 5) 168de701d11SSyed Mohammed Khasim #define VENC_OUT_SEL (1 << 6) 169de701d11SSyed Mohammed Khasim #define DIG_LPP_SHIFT 16 170*8da2efb6SJeroen Hofstee 171*8da2efb6SJeroen Hofstee /* Panel Configuration */ 172de701d11SSyed Mohammed Khasim struct panel_config { 173de701d11SSyed Mohammed Khasim u32 timing_h; 174de701d11SSyed Mohammed Khasim u32 timing_v; 175de701d11SSyed Mohammed Khasim u32 pol_freq; 176de701d11SSyed Mohammed Khasim u32 divisor; 177de701d11SSyed Mohammed Khasim u32 lcd_size; 178de701d11SSyed Mohammed Khasim u32 panel_type; 179de701d11SSyed Mohammed Khasim u32 data_lines; 180de701d11SSyed Mohammed Khasim u32 load_mode; 181de701d11SSyed Mohammed Khasim u32 panel_color; 182d9c13aacSJeroen Hofstee void *frame_buffer; 183de701d11SSyed Mohammed Khasim }; 184de701d11SSyed Mohammed Khasim 185*8da2efb6SJeroen Hofstee /* Generic DSS Functions */ 186de701d11SSyed Mohammed Khasim void omap3_dss_venc_config(const struct venc_regs *venc_cfg, 187de701d11SSyed Mohammed Khasim u32 height, u32 width); 188de701d11SSyed Mohammed Khasim void omap3_dss_panel_config(const struct panel_config *panel_cfg); 189de701d11SSyed Mohammed Khasim void omap3_dss_enable(void); 190de701d11SSyed Mohammed Khasim 191de701d11SSyed Mohammed Khasim #endif /* DSS_H */ 192