Sun 12/06, 2009

USL-5P + LCD-USB7XB (2) [Computer and Networking ]

OpenBSD-4.6/landisk で LCD-USB7X を使う、続編。

sys/dev/usb/udl.c に次のような LCD-USB7X のための video mode (800x480 @60Hz) 設定情報を追加した。これでテキスト表示でスクロールさせても下部が隠れないで使える。

uint8_t udl_reg_vals_800x480_60[] = {
        0x00, 0x20, 0x3c, 0x7a, 0xc9, 0x93, 0x60, 0xc8, 0xc7, 0x70, 0x53, 0xff,
        0xff, 0x21, 0x27, 0x03, 0x20, 0x91, 0x8f, 0xff, 0xff, 0xff, 0xf2, 0x01,
        0xe0, 0x01, 0x02, 0x40, 0x1f
};
実は 800x600 @60Hz のものの VPIXELS 部分を 480(0x01e0 [2009.12.08 修正]) にしただけ。なーんだ、そーだったのか、と言う感じ。NetBSD のコードを見て Preferred mode から算出した値ではうまく行かなかったが、バイトオーダを間違ったとかつまらない勘違いをしているだけかもしれない。

以下は起動メッセージの抜粋。UDL_DEBUG を設定した状態。dot_clock=24500 云々は自分でデバッグ用に追加した部分。

udl0 at uhub0 port 4 "DisplayLink I-O DATA LCD-USB7X" rev 2.00/0.02 addr 2
udl0: udl_select_chip: iSerialNumber (001EE0) used to select chip (1)
udl0: udl_init_chip: poll=0xf0005001
udl0: udl_init_chip: read 0x82 from 0xc484
udl0: udl_init_chip: write 0x01 to 0xc41f
udl0: udl_init_chip: read EDID
udl0: udl_init_chip: set encryption key
udl0: udl_init_chip: write 0x00 to 0xc40b
udl0: udl_cmd_send: sent 4620 of 4620 bytes
udl0: udl_init_chip: set decompression table
max_dotclock according to supported modes: 24500
Vendor: [IOD]
Product: [0701] LCD-USB7X
Serial number: SerialNumber
Manufactured 2009 Week 10
EDID Version 1.3
EDID Comment:
Video Input: 80
        Digital
Gamma: 2.20
Max Size: 15 cm x 9 cm
Features: a
        RGB
        Preferred timing
Chroma Info:
        Red X: 0.000
        Red Y: 0.000
        Grn X: 0.000
        Grn Y: 0.000
        Blu X: 0.000
        Blu Y: 0.000
        Wht X: 0.000
        Wht Y: 0.002
Range:
        Horizontal: 20 - 50 kHz
        Vertical: 56 - 75 Hz
        Max Dot Clock: 30 MHz
Video modes:
        800x480 @ 60Hz
Preferred mode: 800x480 @ 60Hz
  dot_clock=24500,hdisplay=800,hsync_start=815,hsync_end=818,htotal=824
  vdisplay=480,vsync_start=484,vsync_end=485,vtotal=493,flags=0x8c1f10ee
udl0: udl_select_mode: 800x480 @ 60Hz
udl0: udl_cmd_send: sent 182 of 182 bytes
udl0: udl_cmd_send: sent 779522 of 779522 bytes
udl0: udl_cmd_send: sent 10 of 10 bytes
wsdisplay0 at udl0 mux 1
udl0: udl_alloc_screen
udl0: udl_alloc_screen: using font Boldface.iso1 (100x30)
udl0: udl_show_screen
wsdisplay0: screen 0 added (std, vt100 emulation)

udlbench で 100 回まわしての結果(500 回だと時間がかかりすぎるため端折った)。さすがに結構厳しい結果だ。compress mode のみ。

100 times udlbench
$ sudo udlbench /dev/ttyC0 ringo15i (林檎姫)
23.797s 4.202fps
$ sudo udlbench /dev/ttyC0 /dev/zero
16.546s 6.043fps
$ sudo udlbench /dev/ttyC0 worstcase
122.561s 0.816fps
i386 (ThinkPad G40 - Celeron 2.2MHz) だとこんな感じで、6-10 倍程度の差がある。
500 times udlbench
$ sudo udlbench /dev/ttyC0 ringo15i (林檎姫)
3.952s 25.301fps
$ sudo udlbench /dev/ttyC0 /dev/zero
2.743s 36.455fps
$ sudo udlbench /dev/ttyC0 worstcase
11.851s 8.438fps

USL-TP で X (xenocara) はまだ動かせていない。i386 ではシステムの起動後に LCD-USB7X を挿さないと一旦認識された後で detach されてしまったり、具合が悪かった。

[追記]
変更内容の記載を修正しました。

ところで -current でカーネルを make すると "make: don't know how to make newvers. Stop in /usr/src/sys/arch/i386/compile/GENERIC." のようにエラーが出る。これは Makefile 中の "bsd: ${SYSTEM_DEP} swapgeneric.o newvers" の newvers を vers.o に変更すれば良い。また、4.6 環境でカーネルだけを -current にすると X の具合が悪くなってしまった。xfce4 の起動後にキー入力が効かなくなったりする。

Posted by masato at 11:01 AM
このエントリーのトラックバックURL: http://bird.dip.jp/cgi-bin/mt/mt-tb.cgi/1738
コメントする

おそらく携帯電話等からは投稿できません。日本語文字列を含まないコメントやトラックバック、および当サイトへの言及を含まないトラックバックは御遠慮いただいております。また、90日以上経過した記事へのコメントはできません。










名前、アドレスを登録しますか?