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