LCOV - code coverage report
Current view: top level - include/video - display_timing.h (source / functions) Hit Total Coverage
Test: gcov_data_raspi2_qemu_modules_combined.info Lines: 0 2 0.0 %
Date: 2020-09-30 20:25:01 Functions: 0 0 -
Branches: 0 2 0.0 %

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

Generated by: LCOV version 1.14