Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Copyright 2012 Steffen Trumtrar <s.trumtrar@pengutronix.de>
  3.  *
  4.  * description of display timings
  5.  *
  6.  * This file is released under the GPLv2
  7.  */
  8.  
  9. #ifndef __LINUX_DISPLAY_TIMING_H
  10. #define __LINUX_DISPLAY_TIMING_H
  11.  
  12. #include <linux/bitops.h>
  13. #include <linux/types.h>
  14.  
  15. enum display_flags {
  16.         DISPLAY_FLAGS_HSYNC_LOW         = BIT(0),
  17.         DISPLAY_FLAGS_HSYNC_HIGH        = BIT(1),
  18.         DISPLAY_FLAGS_VSYNC_LOW         = BIT(2),
  19.         DISPLAY_FLAGS_VSYNC_HIGH        = BIT(3),
  20.  
  21.         /* data enable flag */
  22.         DISPLAY_FLAGS_DE_LOW            = BIT(4),
  23.         DISPLAY_FLAGS_DE_HIGH           = BIT(5),
  24.         /* drive data on pos. edge */
  25.         DISPLAY_FLAGS_PIXDATA_POSEDGE   = BIT(6),
  26.         /* drive data on neg. edge */
  27.         DISPLAY_FLAGS_PIXDATA_NEGEDGE   = BIT(7),
  28.         DISPLAY_FLAGS_INTERLACED        = BIT(8),
  29.         DISPLAY_FLAGS_DOUBLESCAN        = BIT(9),
  30.         DISPLAY_FLAGS_DOUBLECLK         = BIT(10),
  31. };
  32.  
  33. /*
  34.  * A single signal can be specified via a range of minimal and maximal values
  35.  * with a typical value, that lies somewhere inbetween.
  36.  */
  37. struct timing_entry {
  38.         u32 min;
  39.         u32 typ;
  40.         u32 max;
  41. };
  42.  
  43. /*
  44.  * Single "mode" entry. This describes one set of signal timings a display can
  45.  * have in one setting. This struct can later be converted to struct videomode
  46.  * (see include/video/videomode.h). As each timing_entry can be defined as a
  47.  * range, one struct display_timing may become multiple struct videomodes.
  48.  *
  49.  * Example: hsync active high, vsync active low
  50.  *
  51.  *                                  Active Video
  52.  * Video  ______________________XXXXXXXXXXXXXXXXXXXXXX_____________________
  53.  *        |<- sync ->|<- back ->|<----- active ----->|<- front ->|<- sync..
  54.  *        |          |   porch  |                    |   porch   |
  55.  *
  56.  * HSync _|¯¯¯¯¯¯¯¯¯¯|___________________________________________|¯¯¯¯¯¯¯¯¯
  57.  *
  58.  * VSync ¯|__________|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|_________
  59.  */
  60. struct display_timing {
  61.         struct timing_entry pixelclock;
  62.  
  63.         struct timing_entry hactive;            /* hor. active video */
  64.         struct timing_entry hfront_porch;       /* hor. front porch */
  65.         struct timing_entry hback_porch;        /* hor. back porch */
  66.         struct timing_entry hsync_len;          /* hor. sync len */
  67.  
  68.         struct timing_entry vactive;            /* ver. active video */
  69.         struct timing_entry vfront_porch;       /* ver. front porch */
  70.         struct timing_entry vback_porch;        /* ver. back porch */
  71.         struct timing_entry vsync_len;          /* ver. sync len */
  72.  
  73.         enum display_flags flags;               /* display flags */
  74. };
  75.  
  76. /*
  77.  * This describes all timing settings a display provides.
  78.  * The native_mode is the default setting for this display.
  79.  * Drivers that can handle multiple videomodes should work with this struct and
  80.  * convert each entry to the desired end result.
  81.  */
  82. struct display_timings {
  83.         unsigned int num_timings;
  84.         unsigned int native_mode;
  85.  
  86.         struct display_timing **timings;
  87. };
  88.  
  89. /* get one entry from struct display_timings */
  90. static inline struct display_timing *display_timings_get(const struct
  91.                                                          display_timings *disp,
  92.                                                          unsigned int index)
  93. {
  94.         if (disp->num_timings > index)
  95.                 return disp->timings[index];
  96.         else
  97.                 return NULL;
  98. }
  99.  
  100. void display_timings_release(struct display_timings *disp);
  101.  
  102. #endif
  103.