Dear Ian,
Am Freitag, den 10.08.2012, 13:44 -0500 schrieb Ian Pilcher:
[…]
diff --git a/Documentation/EDID/edid_quirks.txt b/Documentation/EDID/edid_quirks.txt new file mode 100644 index 0000000..256ded0 --- /dev/null +++ b/Documentation/EDID/edid_quirks.txt
[…]
+Overview +========
+EDID quirks provide a mechanism for working around display hardware with buggy +EDID data.
+An individual EDID quirk maps a display type (identified by its EDID +manufacturer ID and product code[1]) to a set of flags. For example, the current +list of quirks built into the kernel is:
- ACR:0xad46:0x00000001
- API:0x7602:0x00000001
- ACR:0x0977:0x00000020
- MAX:0x05ec:0x00000001
- MAX:0x077e:0x00000001
- EPI:0xe780:0x00000002
- EPI:0x2028:0x00000001
- FCM:0x3520:0x0000000c
- LPL:0x0000:0x00000010
- LPL:0x2a00:0x00000010
- PHL:0xe014:0x00000020
- PTS:0x02fd:0x00000020
- SAM:0x021d:0x00000040
- SAM:0x0254:0x00000001
- SAM:0x027e:0x00000001
- VSC:0x139c:0x00000080
- GSM:0x563f:0x00000300
reading the document again, I guess keeping this list up to date will be forgotten and duplicating this information is not necessary. Maybe just add one or two example quirks.
I cannot think of a `grep` command to run to list all quirks, so maybe just mention that all the quirks are stored in `edid_quirk_list[]` in `drivers/gpu/drm/drm_edid.c` [1].
+The first field of each quirk is the manufacturer ID, the second field is the +product code, and the third field is the quirk flags.
+NOTE: All of the manufacturer IDs above are displayed as 3-character strings,
- because they are conformant IDs that have been properly encoded:
- The most-significant bit of the encoded ID is 0
- They only contain ASCII characters in the range A-Z
- IDs that do not conform to these rules are displayed as "raw" hexadecimal
- values.
+The current quirk flags are:
- /* First detailed mode wrong, use largest 60Hz mode */
- #define EDID_QUIRK_PREFER_LARGE_60 0x00000001
- /* Reported 135MHz pixel clock is too high, needs adjustment */
- #define EDID_QUIRK_135_CLOCK_TOO_HIGH 0x00000002
- /* Prefer the largest mode at 75 Hz */
- #define EDID_QUIRK_PREFER_LARGE_75 0x00000004
- /* Detail timing is in cm not mm */
- #define EDID_QUIRK_DETAILED_IN_CM 0x00000008
- /* Detailed timing descriptors have bogus size values, so just take the
* maximum size and use that.
*/
- #define EDID_QUIRK_DETAILED_USE_MAXIMUM_SIZE 0x00000010
- /* Monitor forgot to set the first detailed is preferred bit. */
- #define EDID_QUIRK_FIRST_DETAILED_PREFERRED 0x00000020
- /* use +hsync +vsync for detailed mode */
- #define EDID_QUIRK_DETAILED_SYNC_PP 0x00000040
- /* Force reduced-blanking timings for detailed modes */
- #define EDID_QUIRK_FORCE_REDUCED_BLANKING 0x00000080
- /* Display is confused by InfoFrames; don't sent any */
- #define EDID_QUIRK_DISABLE_INFOFRAMES 0x00000100
- /* Display doesn't have any audio output */
- #define EDID_QUIRK_NO_AUDIO 0x00000200
That might be also hard to keep up to date. Maybe also just note that these quirks are defined in the beginning of `drivers/gpu/drm/drm_edid.c` [1] and that these are bit shifts(?) [2].
[1] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=driver... [2] https://en.wikipedia.org/wiki/Bitwise_operation#Shifts_in_C.2C_C.2B.2B.2C_C....
[…]
Thanks,
Paul