[Armadillo:04137] Re: SVGA表示時にディスプレイにて両端が切れる

nakai email@hidden
2009年 3月 23日 (月) 18:55:58 JST


nakaiです。

modedbをいじって、
フロントポーチ、バックポーチ、同期期間などを調整してみてはどうでしょう?

山内 洋典 さんは書きました:
> NTTDMSEの山内です。
> いつもお世話になっております。
> 
> Quixunのタッチパネル QT-802-AV-TPをArmadillo-500に接続し、
> 以下の手順にて動作させることが出来ましたが、
> ディスプレイ側のOSDから水平位置等を調節しても
> 表示領域の両端が切れてしまいます。
> (directFBのプログラムdf_inputで確認しております。)
> 
> directfbrc, mxcfbドライバ等いじりながら探っておりますが、
> 表示内容には変化がありません。
> このあたりの問題をLinuxとして解決したい場合には
> どのあたりのソースをいじるのが妥当なのでしょうか?
> 
> 
> ○作業内容
> 
> ※対象カーネルソースはAtmark-dist。
>  CFカード上のDebian環境でも、カーネルイメージに同じものを使えば動作しました。
> 
> ・directfbをカーネルに組込み
> 参考URL:http://armadillo.atmark-techno.com/articles/sd-a500-embedded-course-ch4
> 
> ・USB touchscreenドライバに手を入れる
> 参考URL:http://armadillo.atmark-techno.com/articles/sd-a500-embedded-course-ch4
> 
> 上記の対応に加えていくつか対応を入れる。
> 
> ・全てのドライバをカーネル組込みにするとusbtouchscreenよりusbhidが優先されるので、
>  USB HIDに認識されないようにHID_QUIRK_IGNOREフラグを設定。
>  参考URL:http://www.netfort.gr.jp/~dancer/diary/200709.html
> 
> drivers/usb/input/hid-core.c
> 	/* ##### 2009.03.17 added */
> 	//ignore EGALAX DEVICES
> 	{ 0x3823, 0x0001, HID_QUIRK_IGNORE },
> 	{ 0x0123, 0x0001, HID_QUIRK_IGNORE },
> 	{ 0x0eef, 0x0001, HID_QUIRK_IGNORE },
> 	{ 0x0eef, 0x0002, HID_QUIRK_IGNORE },
> 
> ・データフォーマットが想定と違うためusbtouchscreen.cでドロップされている様なので対応
> 
>  ドライバは画面をタッチ時に0x80または0x81から始まる5byteが読み出されることを想定しているが、
>  usbtouchscreen.c egalax_process()にprintk()を追加して確認したところ、
>  実際にQT802を接続時には以下の様な6byte(例:02 03 58 00 84 00)が読み取れる。
> 	/* pkt
> 	 * [0]   02(fixed)
> 	 * [1]   03 press 02 release
> 	 * [2-3] X
> 	 * [4-5] Y
> 	 */
> drivers/usb/input/usbtouchscreen.c に以下の様な対応を追加。
> 
> static int egalax_read_data(unsigned char *pkt, int *x, int *y, int *touch, int *press)
> {
> 	//printk(KERN_INFO "egalax_read_data: pkt %02X %02X %02X %02X %02X %02X\n", pkt[0], pkt[1], pkt[2], pkt[3], pkt[4], pkt[5]);
> 
> /* pkt
>  * [0]   02(fixed)
>  * [1]   03 press 02 release
>  * [2-3] X 48-1932
>  * [4-5] Y 128-1900
>  */
> 	int _x, _y;
> 	_x = (pkt[3] << 8) | (pkt[2] & 0xFF);
> 	_y = (pkt[5] << 8) | (pkt[4] & 0xFF);
> 	_x = 1932 - _x;
> 	_y = 1900 - _y;
> 	if( _x < 0 ){ _x = 0; }
> 	if( _y < 0 ){ _y = 0; }
> 
> 	*x = (int)( (CONFIG_INPUT_TSDEV_SCREEN_X * _x ) / (1932-48));
> 	*y = (int)( (CONFIG_INPUT_TSDEV_SCREEN_Y * _y ) / (1900-128));
> 	if(pkt[1] == 0x02)
> 	{
> 		*touch = 0x01;
> 	}
> 	else
> 	{
> 		*touch = 0x00;
> 	}
> 
> 	printk(KERN_INFO "egalax_read_data: x=%d y=%d touch=%d\n", *x, *y, *touch);
> 
> //	if ((pkt[0] & EGALAX_PKT_TYPE_MASK) != EGALAX_PKT_TYPE_REPT)
> //		return 0;
> 
> //#if !defined(CONFIG_USB_TOUCHSCREEN_EGALAX_QT701AVS)
> //	*x = ((pkt[3] & 0x0F) << 7) | (pkt[4] & 0x7F);
> //	*y = ((pkt[1] & 0x0F) << 7) | (pkt[2] & 0x7F);
> //#else
> //	{
> //		int _x, _y, _x2, _y2;
> //		_x = ((pkt[1] & 0x0F) << 7) | (pkt[2] & 0x7F);
> //		_y = ((pkt[3] & 0x0F) << 7) | (pkt[4] & 0x7F);
> //		                                                          
> //		_x2 = ((_x - 90) < 0 ? 0 : (_x - 90));
> //		_y2 = ((1900 - _y) < 0 ? 0 : (1900 - _y));
> //		
> //		printk(KERN_ERR "egalax_read_data: _x,_y %d %d _x2,_y2 %d %d\n", _x, _y, _x2, _y2);
> //		
> //		*x = (int)((CONFIG_INPUT_TSDEV_SCREEN_X * _x2) / 1850);
> //		*y = (int)((CONFIG_INPUT_TSDEV_SCREEN_Y * _y2) / 1750);
> //	}
> //#endif
> //
> //	*touch = pkt[0] & 0x01;
> 
> 	return 1;
> 
> }
> 
> static int egalax_get_pkt_len(unsigned char *buf)
> {
> 	switch (buf[0] & EGALAX_PKT_TYPE_MASK) {
> 	case EGALAX_PKT_TYPE_REPT:
> 		return 5;
> 
> 	case EGALAX_PKT_TYPE_DIAG:
> 		return buf[1] + 2;
> 
> 	//##### 2009.03.17 added
> 	case 0x02:
> 		return 6;
> 	}
> 
> 	return 0;
> }
> 
> ・tsdev evdev usbhid usbtouchscreenをカーネル組込みで設定。
> 
> Device Drivers --->
> 	input device support --->
> 		<*> Touchscreen interface
> 		(800) Horizontal screen resolution
> 		(600) Vertical screen resolution
> 		<*> Event interface
> 	USB support --->
> 		<*> USB Human Interface Device(full HID) support
> 		<*> USB Touchscreen Drfiver
> 			[*] eGalax device support
> 
> ⇒この時点でQT802のタッチパネルが一応動作する。
> 
> 
> 以上、よろしくお願いします。
> ============================================================
> 山内 洋典 <email@hidden>
> 
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo



armadillo メーリングリストの案内