xf86DDC.h revision b9a21c3c91c47e090316e28d759194e46628ed49
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering/* xf86DDC.h
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering *
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering * This file contains all information to interpret a standard EDIC block
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering * transmitted by a display device via DDC (Display Data Channel). So far
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering * there is no information to deal with optional EDID blocks.
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering * DDC is a Trademark of VESA (Video Electronics Standard Association).
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering *
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering * Copyright 1998 by Egbert Eich <Egbert.Eich@Physik.TU-Darmstadt.DE>
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering */
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering#ifndef XF86_DDC_H
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering# define XF86_DDC_H
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering#include "edid.h"
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering#include "xf86i2c.h"
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering#include "xf86str.h"
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering/* speed up / slow down */
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poetteringtypedef enum {
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering DDC_SLOW,
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering DDC_FAST
7b4d7cc08283e5485dcfa49ffdf1915de1d5e81bKay Sievers} xf86ddcSpeed;
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poetteringtypedef void (* DDC1SetSpeedProc)(ScrnInfoPtr, xf86ddcSpeed);
3ffd4af22052963e7a29431721ee204e634bea75Lennart Poettering
3ffd4af22052963e7a29431721ee204e634bea75Lennart Poetteringextern _X_EXPORT xf86MonPtr xf86DoEDID_DDC1(
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering int scrnIndex,
3ffd4af22052963e7a29431721ee204e634bea75Lennart Poettering DDC1SetSpeedProc DDC1SetSpeed,
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen unsigned int (*DDC1Read)(ScrnInfoPtr)
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering);
b872e9a05939bc3e0ac95a042592506a7488dd6fLennart Poettering
b872e9a05939bc3e0ac95a042592506a7488dd6fLennart Poetteringextern _X_EXPORT xf86MonPtr xf86DoEDID_DDC2(
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers int scrnIndex,
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers I2CBusPtr pBus
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers);
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieversextern _X_EXPORT xf86MonPtr xf86DoEEDID(int scrnIndex, I2CBusPtr pBus, Bool);
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieversextern _X_EXPORT xf86MonPtr xf86PrintEDID(
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers xf86MonPtr monPtr
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen);
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieversextern _X_EXPORT xf86MonPtr xf86InterpretEDID(
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers int screenIndex, Uchar *block
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers);
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers
885fdebc13b13307555e4b837fae604bcc4e72b4Lennart Poetteringextern _X_EXPORT xf86MonPtr xf86InterpretEEDID(
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers int screenIndex, Uchar *block
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers);
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieversextern _X_EXPORT void
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieversxf86EdidMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC);
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieversextern _X_EXPORT Bool xf86SetDDCproperties(
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers ScrnInfoPtr pScreen,
885fdebc13b13307555e4b837fae604bcc4e72b4Lennart Poettering xf86MonPtr DDC
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers);
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieversextern _X_EXPORT DisplayModePtr xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC);
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieversextern _X_EXPORT Bool
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieversxf86MonitorIsHDMI(xf86MonPtr mon);
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieversextern _X_EXPORT xf86MonPtr
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieversxf86DoDisplayID(int scrnIndex, I2CBusPtr pBus);
885fdebc13b13307555e4b837fae604bcc4e72b4Lennart Poettering
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieversextern _X_EXPORT void
9cde64ff264c432fc83be638e57d8fd6392793a6Lennart Poetteringxf86DisplayIDMonitorSet(int scrnIndex, MonPtr mon, xf86MonPtr DDC);
34e5a31ec5897de8ba1436dad53df99637569d0aLennart Poettering
34e5a31ec5897de8ba1436dad53df99637569d0aLennart Poetteringextern _X_EXPORT DisplayModePtr
34e5a31ec5897de8ba1436dad53df99637569d0aLennart PoetteringFindDMTMode(int hsize, int vsize, int refresh, Bool rb);
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers
bc6f2e7c62bcd08177f879423188c54289694619Kay Sieversextern _X_EXPORT const DisplayModeRec DMTModes[];
b47d419c25ecc735615a1088060c1ec8bef1e41fZbigniew Jędrzejewski-Szmek
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers/*
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers * Quirks to work around broken EDID data from various monitors.
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers */
bc6f2e7c62bcd08177f879423188c54289694619Kay Sieverstypedef enum {
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers DDC_QUIRK_NONE = 0,
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers /* First detailed mode is bogus, prefer largest mode at 60hz */
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers DDC_QUIRK_PREFER_LARGE_60 = 1 << 0,
b47d419c25ecc735615a1088060c1ec8bef1e41fZbigniew Jędrzejewski-Szmek /* 135MHz clock is too high, drop a bit */
b47d419c25ecc735615a1088060c1ec8bef1e41fZbigniew Jędrzejewski-Szmek DDC_QUIRK_135_CLOCK_TOO_HIGH = 1 << 1,
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers /* Prefer the largest mode at 75 Hz */
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers DDC_QUIRK_PREFER_LARGE_75 = 1 << 2,
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers /* Convert detailed timing's horizontal from units of cm to mm */
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers DDC_QUIRK_DETAILED_H_IN_CM = 1 << 3,
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers /* Convert detailed timing's vertical from units of cm to mm */
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers DDC_QUIRK_DETAILED_V_IN_CM = 1 << 4,
9df49b33583e8a7d0a252bc5bd532fd2448ef0c8Tom Gundersen /* Detailed timing descriptors have bogus size values, so just take the
9df49b33583e8a7d0a252bc5bd532fd2448ef0c8Tom Gundersen * maximum size and use that.
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers */
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers DDC_QUIRK_DETAILED_USE_MAXIMUM_SIZE = 1 << 5,
9df49b33583e8a7d0a252bc5bd532fd2448ef0c8Tom Gundersen /* Monitor forgot to set the first detailed is preferred bit. */
9df49b33583e8a7d0a252bc5bd532fd2448ef0c8Tom Gundersen DDC_QUIRK_FIRST_DETAILED_PREFERRED = 1 << 6,
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers /* use +hsync +vsync for detailed mode */
bc6f2e7c62bcd08177f879423188c54289694619Kay Sievers DDC_QUIRK_DETAILED_SYNC_PP = 1 << 7,
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen /* Force single-link DVI bandwidth limit */
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen DDC_QUIRK_DVI_SINGLE_LINK = 1 << 8,
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen} ddc_quirk_t;
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen
5bdf22430e367799dfa66c724144b624c5479518Jan JanssenDisplayModePtr xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC);
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen
75f86906c52735c98dc0aa7e24b773edb42ee814Lennart Poetteringextern Bool
5bdf22430e367799dfa66c724144b624c5479518Jan Janssenxf86MonitorIsHDMI(xf86MonPtr mon);
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen
5bdf22430e367799dfa66c724144b624c5479518Jan Janssentypedef void (* handle_detailed_fn)(struct detailed_monitor_section *,void *);
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen
5bdf22430e367799dfa66c724144b624c5479518Jan Janssenvoid xf86ForEachDetailedBlock(xf86MonPtr mon,
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen handle_detailed_fn,
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen void *data);
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen
5bdf22430e367799dfa66c724144b624c5479518Jan Janssenddc_quirk_t
5bdf22430e367799dfa66c724144b624c5479518Jan Janssenxf86DDCDetectQuirks(int scrnIndex, xf86MonPtr DDC, Bool verbose);
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen
5bdf22430e367799dfa66c724144b624c5479518Jan Janssenvoid xf86DetTimingApplyQuirks(struct detailed_monitor_section *det_mon,
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen ddc_quirk_t quirks, int hsize, int vsize);
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen
5bdf22430e367799dfa66c724144b624c5479518Jan Janssentypedef void (* handle_video_fn)(struct cea_video_block *, void *);
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen
5bdf22430e367799dfa66c724144b624c5479518Jan Janssenvoid xf86ForEachVideoBlock(xf86MonPtr,
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen handle_video_fn,
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen void *);
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen#endif
5bdf22430e367799dfa66c724144b624c5479518Jan Janssen