home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / arm / mach-pxa / include / mach / pxafb.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  4.9 KB  |  155 lines

  1. /*
  2.  *  arch/arm/mach-pxa/include/mach/pxafb.h
  3.  *
  4.  *  Support for the xscale frame buffer.
  5.  *
  6.  *  Author:     Jean-Frederic Clere
  7.  *  Created:    Sep 22, 2003
  8.  *  Copyright:  jfclere@sinix.net
  9.  *
  10.  *  This program is free software; you can redistribute it and/or modify
  11.  *  it under the terms of the GNU General Public License version 2 as
  12.  *  published by the Free Software Foundation.
  13.  */
  14.  
  15. #include <linux/fb.h>
  16. #include <mach/regs-lcd.h>
  17.  
  18. /*
  19.  * Supported LCD connections
  20.  *
  21.  * bits 0 - 3: for LCD panel type:
  22.  *
  23.  *   STN  - for passive matrix
  24.  *   DSTN - for dual scan passive matrix
  25.  *   TFT  - for active matrix
  26.  *
  27.  * bits 4 - 9 : for bus width
  28.  * bits 10-17 : for AC Bias Pin Frequency
  29.  * bit     18 : for output enable polarity
  30.  * bit     19 : for pixel clock edge
  31.  * bit     20 : for output pixel format when base is RGBT16
  32.  */
  33. #define LCD_CONN_TYPE(_x)    ((_x) & 0x0f)
  34. #define LCD_CONN_WIDTH(_x)    (((_x) >> 4) & 0x1f)
  35.  
  36. #define LCD_TYPE_MASK        0xf
  37. #define LCD_TYPE_UNKNOWN    0
  38. #define LCD_TYPE_MONO_STN    1
  39. #define LCD_TYPE_MONO_DSTN    2
  40. #define LCD_TYPE_COLOR_STN    3
  41. #define LCD_TYPE_COLOR_DSTN    4
  42. #define LCD_TYPE_COLOR_TFT    5
  43. #define LCD_TYPE_SMART_PANEL    6
  44. #define LCD_TYPE_MAX        7
  45.  
  46. #define LCD_MONO_STN_4BPP    ((4  << 4) | LCD_TYPE_MONO_STN)
  47. #define LCD_MONO_STN_8BPP    ((8  << 4) | LCD_TYPE_MONO_STN)
  48. #define LCD_MONO_DSTN_8BPP    ((8  << 4) | LCD_TYPE_MONO_DSTN)
  49. #define LCD_COLOR_STN_8BPP    ((8  << 4) | LCD_TYPE_COLOR_STN)
  50. #define LCD_COLOR_DSTN_16BPP    ((16 << 4) | LCD_TYPE_COLOR_DSTN)
  51. #define LCD_COLOR_TFT_16BPP    ((16 << 4) | LCD_TYPE_COLOR_TFT)
  52. #define LCD_COLOR_TFT_18BPP    ((18 << 4) | LCD_TYPE_COLOR_TFT)
  53. #define LCD_SMART_PANEL_8BPP    ((8  << 4) | LCD_TYPE_SMART_PANEL)
  54. #define LCD_SMART_PANEL_16BPP    ((16 << 4) | LCD_TYPE_SMART_PANEL)
  55. #define LCD_SMART_PANEL_18BPP    ((18 << 4) | LCD_TYPE_SMART_PANEL)
  56.  
  57. #define LCD_AC_BIAS_FREQ(x)    (((x) & 0xff) << 10)
  58. #define LCD_BIAS_ACTIVE_HIGH    (0 << 18)
  59. #define LCD_BIAS_ACTIVE_LOW    (1 << 18)
  60. #define LCD_PCLK_EDGE_RISE    (0 << 19)
  61. #define LCD_PCLK_EDGE_FALL    (1 << 19)
  62. #define LCD_ALTERNATE_MAPPING    (1 << 20)
  63.  
  64. /*
  65.  * This structure describes the machine which we are running on.
  66.  * It is set in linux/arch/arm/mach-pxa/machine_name.c and used in the probe routine
  67.  * of linux/drivers/video/pxafb.c
  68.  */
  69. struct pxafb_mode_info {
  70.     u_long        pixclock;
  71.  
  72.     u_short        xres;
  73.     u_short        yres;
  74.  
  75.     u_char        bpp;
  76.     u_int        cmap_greyscale:1,
  77.             depth:8,
  78.             unused:23;
  79.  
  80.     /* Parallel Mode Timing */
  81.     u_char        hsync_len;
  82.     u_char        left_margin;
  83.     u_char        right_margin;
  84.  
  85.     u_char        vsync_len;
  86.     u_char        upper_margin;
  87.     u_char        lower_margin;
  88.     u_char        sync;
  89.  
  90.     /* Smart Panel Mode Timing - see PXA27x DM 7.4.15.0.3 for details
  91.      * Note:
  92.      * 1. all parameters in nanosecond (ns)
  93.      * 2. a0cs{rd,wr}_set_hld are controlled by the same register bits
  94.      *    in pxa27x and pxa3xx, initialize them to the same value or
  95.      *    the larger one will be used
  96.      * 3. same to {rd,wr}_pulse_width
  97.      */
  98.     unsigned    a0csrd_set_hld;    /* A0 and CS Setup/Hold Time before/after L_FCLK_RD */
  99.     unsigned    a0cswr_set_hld;    /* A0 and CS Setup/Hold Time before/after L_PCLK_WR */
  100.     unsigned    wr_pulse_width;    /* L_PCLK_WR pulse width */
  101.     unsigned    rd_pulse_width;    /* L_FCLK_RD pulse width */
  102.     unsigned    cmd_inh_time;    /* Command Inhibit time between two writes */
  103.     unsigned    op_hold_time;    /* Output Hold time from L_FCLK_RD negation */
  104. };
  105.  
  106. struct pxafb_mach_info {
  107.     struct pxafb_mode_info *modes;
  108.     unsigned int num_modes;
  109.  
  110.     unsigned int    lcd_conn;
  111.  
  112.     u_int        fixed_modes:1,
  113.             cmap_inverse:1,
  114.             cmap_static:1,
  115.             unused:29;
  116.  
  117.     /* The following should be defined in LCCR0
  118.      *      LCCR0_Act or LCCR0_Pas          Active or Passive
  119.      *      LCCR0_Sngl or LCCR0_Dual        Single/Dual panel
  120.      *      LCCR0_Mono or LCCR0_Color       Mono/Color
  121.      *      LCCR0_4PixMono or LCCR0_8PixMono (in mono single mode)
  122.      *      LCCR0_DMADel(Tcpu) (optional)   DMA request delay
  123.      *
  124.      * The following should not be defined in LCCR0:
  125.      *      LCCR0_OUM, LCCR0_BM, LCCR0_QDM, LCCR0_DIS, LCCR0_EFM
  126.      *      LCCR0_IUM, LCCR0_SFM, LCCR0_LDM, LCCR0_ENB
  127.      */
  128.     u_int        lccr0;
  129.     /* The following should be defined in LCCR3
  130.      *      LCCR3_OutEnH or LCCR3_OutEnL    Output enable polarity
  131.      *      LCCR3_PixRsEdg or LCCR3_PixFlEdg Pixel clock edge type
  132.      *      LCCR3_Acb(X)                    AB Bias pin frequency
  133.      *      LCCR3_DPC (optional)            Double Pixel Clock mode (untested)
  134.      *
  135.      * The following should not be defined in LCCR3
  136.      *      LCCR3_HSP, LCCR3_VSP, LCCR0_Pcd(x), LCCR3_Bpp
  137.      */
  138.     u_int        lccr3;
  139.     /* The following should be defined in LCCR4
  140.      *    LCCR4_PAL_FOR_0 or LCCR4_PAL_FOR_1 or LCCR4_PAL_FOR_2
  141.      *
  142.      * All other bits in LCCR4 should be left alone.
  143.      */
  144.     u_int        lccr4;
  145.     void (*pxafb_backlight_power)(int);
  146.     void (*pxafb_lcd_power)(int, struct fb_var_screeninfo *);
  147.     void (*smart_update)(struct fb_info *);
  148. };
  149. void set_pxa_fb_info(struct pxafb_mach_info *hard_pxa_fb_info);
  150. void set_pxa_fb_parent(struct device *parent_dev);
  151. unsigned long pxafb_get_hsync_time(struct device *dev);
  152.  
  153. extern int pxafb_smart_queue(struct fb_info *info, uint16_t *cmds, int);
  154. extern int pxafb_smart_flush(struct fb_info *info);
  155.