cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

display_timing.h (3188B)


      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
     14enum 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 */
     40struct 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 */
     63struct 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 */
     85struct 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 */
     93static inline struct display_timing *display_timings_get(const struct
     94							 display_timings *disp,
     95							 unsigned int index)
     96{
     97	if (disp->num_timings > index)
     98		return disp->timings[index];
     99	else
    100		return NULL;
    101}
    102
    103void display_timings_release(struct display_timings *disp);
    104
    105#endif