Howto

HDMIで特定の信号を出力したい

本Howtoは参考情報です。
HDMIのシンク機器は、表示できるディスプレイモードをEDIDに格納しています。ソース機器はこれを読み出すことにより、シンク機器が表示可能なディスプレイモードのリストを生成します。従って、通常は/sys/class/graphics/fb*/modesに格納されているビデオモードを設定します。

fbset を使用する事で実現できます。

fbset - show and modify frame buffer device settings

例えば 1440×480iの信号を設定するコマンドは以下のようになります。

[armadillo ~]# fbset -xres 1440 -yres 480 -t 37037 114 38 30 8 124 6

タイミングを指定している -t オプションの意味は、以下の通りです。

-t <pixclock> <left margin> <right margin> <upper margin> <lower margin> <horizontal sync length> <vertical sync length>

正しく値が設定されているかについてもfbsetコマンドで確認できます。

[armadillo ~]# fbset

mode "1440x480-30"
        # D: 27.000 MHz, H: 15.734 kHz, V: 30.027 Hz
        geometry 1440 480 1920 1920 32
        timings 37037 114 38 30 8 124 6
        accel false
        rgba 8/16,8/8,8/0,8/24
endmode

ArmadilloがHDMIに出力する事ができるピクセルクロックは、594MHzを分周したクロックとなります。 fbsetのオプション-tで指定する<pixclock>に、594MHzから生成できない値を指定すると、内部的には 近似値が使われます。その場合、HDMIディスプレイが正しく表示できない可能性がありますので、注意してください。

また、当然ですが HDMIディスプレイがサポートしていないモードでは、表示されません。

設定する値は、modedb.c に登録されているものを使用しました。 (この modedb.c は Patch: Armadillo-840 HDMI接続したモニタが正常に表示できない問題の改善 のパッチが当ったものです)

        /* #6/7: 720(1440)x480iH@59.94/60Hz */
        [6] = {
                NULL, 60, 1440, 480, 37037, 114, 38, 30, 8, 124, 6, 0,
                FB_VMODE_INTERLACED, 0,
        },

fbset のオプションの詳細は fbset の man page を参照してください。