Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
Pull drm merge from Dave Airlie:
"Highlights:
- TI LCD controller KMS driver
- TI OMAP KMS driver merged from staging
- drop gma500 stub driver
- the fbcon locking fixes
- the vgacon dirty like zebra fix.
- open firmware videomode and hdmi common code helpers
- major locking rework for kms object handling - pageflip/cursor
won't block on polling anymore!
- fbcon helper and prime helper cleanups
- i915: all over the map, haswell power well enhancements, valleyview
macro horrors cleaned up, killing lots of legacy GTT code,
- radeon: CS ioctl unification, deprecated UMS support, gpu reset
rework, VM fixes
- nouveau: reworked thermal code, external dp/tmds encoder support
(anx9805), fences sleep instead of polling,
- exynos: all over the driver fixes."
Lovely conflict in radeon/evergreen_cs.c between commit de0babd60d
("drm/radeon: enforce use of radeon_get_ib_value when reading user cmd")
and the new changes that modified that evergreen_dma_cs_parse()
function.
* 'drm-next' of git://people.freedesktop.org/~airlied/linux: (508 commits)
drm/tilcdc: only build on arm
drm/i915: Revert hdmi HDP pin checks
drm/tegra: Add list of framebuffers to debugfs
drm/tegra: Fix color expansion
drm/tegra: Split DC_CMD_STATE_CONTROL register write
drm/tegra: Implement page-flipping support
drm/tegra: Implement VBLANK support
drm/tegra: Implement .mode_set_base()
drm/tegra: Add plane support
drm/tegra: Remove bogus tegra_framebuffer structure
drm: Add consistency check for page-flipping
drm/radeon: Use generic HDMI infoframe helpers
drm/tegra: Use generic HDMI infoframe helpers
drm: Add EDID helper documentation
drm: Add HDMI infoframe helpers
video: Add generic HDMI infoframe helpers
drm: Add some missing forward declarations
drm: Move mode tables to drm_edid.c
drm: Remove duplicate drm_mode_cea_vic()
gma500: Fix n, m1 and m2 clock limits for sdvo and lvds
...
Esse commit está contido em:
124
include/video/display_timing.h
Arquivo normal
124
include/video/display_timing.h
Arquivo normal
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* Copyright 2012 Steffen Trumtrar <s.trumtrar@pengutronix.de>
|
||||
*
|
||||
* description of display timings
|
||||
*
|
||||
* This file is released under the GPLv2
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_DISPLAY_TIMING_H
|
||||
#define __LINUX_DISPLAY_TIMING_H
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
/* VESA display monitor timing parameters */
|
||||
#define VESA_DMT_HSYNC_LOW BIT(0)
|
||||
#define VESA_DMT_HSYNC_HIGH BIT(1)
|
||||
#define VESA_DMT_VSYNC_LOW BIT(2)
|
||||
#define VESA_DMT_VSYNC_HIGH BIT(3)
|
||||
|
||||
/* display specific flags */
|
||||
#define DISPLAY_FLAGS_DE_LOW BIT(0) /* data enable flag */
|
||||
#define DISPLAY_FLAGS_DE_HIGH BIT(1)
|
||||
#define DISPLAY_FLAGS_PIXDATA_POSEDGE BIT(2) /* drive data on pos. edge */
|
||||
#define DISPLAY_FLAGS_PIXDATA_NEGEDGE BIT(3) /* drive data on neg. edge */
|
||||
#define DISPLAY_FLAGS_INTERLACED BIT(4)
|
||||
#define DISPLAY_FLAGS_DOUBLESCAN BIT(5)
|
||||
|
||||
/*
|
||||
* 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;
|
||||
};
|
||||
|
||||
enum timing_entry_index {
|
||||
TE_MIN = 0,
|
||||
TE_TYP = 1,
|
||||
TE_MAX = 2,
|
||||
};
|
||||
|
||||
/*
|
||||
* 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 */
|
||||
|
||||
unsigned int dmt_flags; /* VESA DMT flags */
|
||||
unsigned int data_flags; /* video data 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 value specified by index from struct timing_entry */
|
||||
static inline u32 display_timing_get_value(const struct timing_entry *te,
|
||||
enum timing_entry_index index)
|
||||
{
|
||||
switch (index) {
|
||||
case TE_MIN:
|
||||
return te->min;
|
||||
break;
|
||||
case TE_TYP:
|
||||
return te->typ;
|
||||
break;
|
||||
case TE_MAX:
|
||||
return te->max;
|
||||
break;
|
||||
default:
|
||||
return te->typ;
|
||||
}
|
||||
}
|
||||
|
||||
/* 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
|
20
include/video/of_display_timing.h
Arquivo normal
20
include/video/of_display_timing.h
Arquivo normal
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2012 Steffen Trumtrar <s.trumtrar@pengutronix.de>
|
||||
*
|
||||
* display timings of helpers
|
||||
*
|
||||
* This file is released under the GPLv2
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_OF_DISPLAY_TIMING_H
|
||||
#define __LINUX_OF_DISPLAY_TIMING_H
|
||||
|
||||
struct device_node;
|
||||
struct display_timings;
|
||||
|
||||
#define OF_USE_NATIVE_MODE -1
|
||||
|
||||
struct display_timings *of_get_display_timings(struct device_node *np);
|
||||
int of_display_timings_exist(struct device_node *np);
|
||||
|
||||
#endif
|
18
include/video/of_videomode.h
Arquivo normal
18
include/video/of_videomode.h
Arquivo normal
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Copyright 2012 Steffen Trumtrar <s.trumtrar@pengutronix.de>
|
||||
*
|
||||
* videomode of-helpers
|
||||
*
|
||||
* This file is released under the GPLv2
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_OF_VIDEOMODE_H
|
||||
#define __LINUX_OF_VIDEOMODE_H
|
||||
|
||||
struct device_node;
|
||||
struct videomode;
|
||||
|
||||
int of_get_videomode(struct device_node *np, struct videomode *vm,
|
||||
int index);
|
||||
|
||||
#endif /* __LINUX_OF_VIDEOMODE_H */
|
48
include/video/videomode.h
Arquivo normal
48
include/video/videomode.h
Arquivo normal
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright 2012 Steffen Trumtrar <s.trumtrar@pengutronix.de>
|
||||
*
|
||||
* generic videomode description
|
||||
*
|
||||
* This file is released under the GPLv2
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_VIDEOMODE_H
|
||||
#define __LINUX_VIDEOMODE_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <video/display_timing.h>
|
||||
|
||||
/*
|
||||
* Subsystem independent description of a videomode.
|
||||
* Can be generated from struct display_timing.
|
||||
*/
|
||||
struct videomode {
|
||||
unsigned long pixelclock; /* pixelclock in Hz */
|
||||
|
||||
u32 hactive;
|
||||
u32 hfront_porch;
|
||||
u32 hback_porch;
|
||||
u32 hsync_len;
|
||||
|
||||
u32 vactive;
|
||||
u32 vfront_porch;
|
||||
u32 vback_porch;
|
||||
u32 vsync_len;
|
||||
|
||||
unsigned int dmt_flags; /* VESA DMT flags */
|
||||
unsigned int data_flags; /* video data flags */
|
||||
};
|
||||
|
||||
/**
|
||||
* videomode_from_timing - convert display timing to videomode
|
||||
* @disp: structure with all possible timing entries
|
||||
* @vm: return value
|
||||
* @index: index into the list of display timings in devicetree
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function converts a struct display_timing to a struct videomode.
|
||||
*/
|
||||
int videomode_from_timing(const struct display_timings *disp,
|
||||
struct videomode *vm, unsigned int index);
|
||||
|
||||
#endif
|
Referência em uma nova issue
Block a user