EDIDバイナリを作る

1360x768の解像度のEDIDバイナリを作りました。以下はUbuntu12.04LTSで行いました。

カーネルのソースをダウンロードする

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux

Documentation/EDID の中の Makefile以外を /usr/src/linux-headers-3.11.0-15/Documentation/EDID/ にコピーします。
その中の1280x1024.Sなどの、解像度がファイル名であるファイルのうちの一つをコピーして設定ファイルを作ります。今回は1360x768.Sを作りました。

.Sファイルの編集

$ cvt 1360 768 60 -r
# 1360x768 59.96 Hz (CVT) hsync: 47.37kHz; pclk: 72.00MHz
Modeline "1360x768R"   72.00  1360 1408 1440 1520  768 771 781 790 +hsync -vsync
                      (1)    (2)  (3)  (4)  (5)  (6) (7) (8) (9)  (10)   (11)

cvtコマンドの結果を参照しながら1360x768.Sを編集します。

/* Display */
#define CLOCK 72000 /* (1)を1000倍した値 */
#define XPIX 1360 /* (2) */
#define YPIX 768 /* (6) */
#define XY_RATIO XY_RATIO_16_9 /* XY_RATIO_16_10、XY_RATIO_4_3、XY_RATIO_5_4、XY_RATIO_16_9のいずれか */
#define XBLANK 160 /* (5)-(2) */
#define YBLANK 22 /* (9)-(6) */
#define XOFFSET 48 /* (3)-(2) */
#define XPULSE 32 /* (4)-(3) */
#define YOFFSET (63+1) /* 63+((7)-(6)) */
#define YPULSE (63+3) /* 63+((8)-(7)) */
#define DPI 72 /* 72 */
#define VFREQ 60 /* 60 */
#define TIMING_NAME "Linux WXGA" /* お好きに? */
#define ESTABLISHED_TIMINGS_BITS 0x00 /* 0x00に */
#define HSYNC_POL 1 /* (10)が+なら1、-なら0 */
#define VSYNC_POL 0 /* (10)が+なら1、-なら0 */
#define CRC 0xa0 /* ここは後で編集する */

編集が終わったらmake。

$ sudo make

1360x768.binが出来上がってます。CRCを調べるためにバイナリをedid-decodeにかけます。edid-decodeはapt-getでインストール可能です。(yumは調べてないので知りません)

$ edid-decode 1360x768.bin
(略)
Checksum: 0x1b (should be 0x7)

should beの後に書かれている値をCRCの所に記入してもう一度makeします。

#define CRC 0x7

$ sudo make

これでEDIDバイナリが完成しました。1360x768.binは /lib/firmware/edid に移動またはコピーします。

余談

本当は1366x768を作りたかったのですが、水平解像度は1360の次は1368でしか作れませんでした。1368版も作って使ってみましたが文字がにじむので、1360版を使うことにしました。