0x01
  "   ˆl–Ðz¾””ÔD¨ 	Å ýÁ7pS�ÿÅƒh¹ÈÇ      0x00
     ˆÆÅƒd/=ÄÈÇ t    /* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright 2012 Steffen Trumtrar <s.trumtrar@pengutronix.de>
 *
 * description of display timings
 */

#ifndef __LINUX_DISPLAY_TIMING_H
#define __LINUX_DISPLAY_TIMING_H

#include <linux/bitops.h>
#include <linux/types.h>

enum display_flags {
	DISPLAY_FLAGS_HSYNC_LOW		= BIT(0),
	DISPLAY_FLAGS_HSYNC_HIGH	= BIT(1),
	DISPLAY_FLAGS_VSYNC_LOW		= BIT(2),
	DISPLAY_FLAGS_VSYNC_HIGH	= BIT(3),

	/* data enable flag */
	DISPLAY_FLAGS_DE_LOW		= BIT(4),
	DISPLAY_FLAGS_DE_HIGH		= BIT(5),
	/* drive data on pos. edge */
	DISPLAY_FLAGS_PIXDATA_POSEDGE	= BIT(6),
	/* drive data on neg. edge */
	DISPLAY_FLAGS_PIXDATA_NEGEDGE	= BIT(7),
	DISPLAY_FLAGS_INTERLACED	= BIT(8),
	DISPLAY_FLAGS_DOUBLESCAN	= BIT(9),
	DISPLAY_FLAGS_DOUBLECLK		= BIT(10),
	/* drive sync on pos. edge */
	DISPLAY_FLAGS_SYNC_POSEDGE	= BIT(11),
	/* drive sync on neg. edge */
	DISPLAY_FLAGS_SYNC_NEGEDGE	= BIT(12),
};

/*
 * A single signal can be specified via a range of minimal and maximal values
 * with a typical value, that lies somewhere inbetween.
 */
struct timing_entry {
	u32 min;
	u32 typ;
	u32 max;
};

/*
 * Single "mode" entry. This describes one set of signal timings a display can
 * have in one setting. This struct can later be converted to struct videomode
 * (see include/video/videomode.h). As each timing_entry can be defined as a
 * range, one struct display_timing may become multiple struct videomodes.
 *
 * Example: hsync active high, vsync active low
 *
 *				    Active Video
 * Video  ______________________XXXXXXXXXXXXXXXXXXXXXX_____________________
 *	  |<- sync ->|<- back ->|<----- active ----->|<- front ->|<- sync..
 *	  |	     |	 porch  |		     |	 porch	 |
 *
 * HSync _|Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯|___________________________________________|Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯
 *
 * VSync Â¯|__________|Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯Â¯|_________
 */
struct display_timing {
	struct timing_entry pixelclock;

	struct timing_entry hactive;		/* hor. active video */
	struct timing_entry hfront_porch;	/* hor. front porch */
	struct timing_entry hback_porch;	/* hor. back porch */
	struct timing_entry hsync_len;		/* hor. sync len */

	struct timing_entry vactive;		/* ver. active video */
	struct timing_entry vfront_porch;	/* ver. front porch */
	struct timing_entry vback_porch;	/* ver. back porch */
	struct timing_entry vsync_len;		/* ver. sync len */

	enum display_flags flags;		/* display flags */
};

/*
 * This describes all timing settings a display provides.
 * The native_mode is the default setting for this display.
 * Drivers that can handle multiple videomodes should work with this struct and
 * convert each entry to the desired end result.
 */
struct display_timings {
	unsigned int num_timings;
	unsigned int native_mode;

	struct display_timing **timings;
};

/* get one entry from struct display_timings */
static inline struct display_timing *display_timings_get(const struct
							 display_timings *disp,
							 unsigned int index)
{
	if (disp->num_timings > index)
		return disp->timings[index];
	else
		return NULL;
}

void display_timings_release(struct display_timings *disp);

#endif
  #   ˆl–ßi~”d*hŠq@½q§nå1hßÆ„q–\kÉÈ ?÷     AAA	Avolites Ltd
AAE	Anatek Electronics Inc.
AAM	Aava Mobile Oy
AAN	AAEON Technology Inc.
AAT	Ann Arbor Technologies
ABA	ABBAHOME INC.
ABC	AboCom System Inc.
ABD	Allen Bradley Company
ABE	Alcatel Bell
ABO	D-Link Systems Inc
ABS	Abaco Systems, Inc.
ABT	Anchor Bay Technologies, Inc.
ABV	Advanced Research Technology
ACA	Ariel Corporation
ACB	Aculab Ltd
ACC	Accton Technology Corporation
ACD	AWETA BV
ACE	Actek Engineering Pty Ltd
ACG	A&R Cambridge Ltd.
ACH	Archtek Telecom Corporation
ACI	Ancor Communications Inc
ACK	Acksys
ACL	Apricot Computers
ACM	Acroloop Motion Control Systems Inc
ACO	Allion Computer Inc.
ACP	Aspen Tech Inc
ACR	Acer Technologies
ACS	Altos Computer Systems
ACT	Applied Creative Technology
ACU	Acculogic
ACV	ActivCard S.A
ADA	Addi-Data GmbH
A