Re: Few Jornada 690 questions

Adam Wysocki via ArcaBit <[email protected]> Sun, 13 Aug 2006 11:19:47 +0200 (CEST)
Newsgroups gmane.os.netbsd.ports.hpcsh
Message-ID <[email protected]>
12.08.06 [email protected] wrote:

Hi, and thanks for the quick reply :)

> > And reboots back to WinCE. When I boot with a serial console, it boots 
> > fine. My Jornada is French, but I don't like it's keyboard layout, so 
> > I've selected in hpcboot "European", maybe this is the case (does it 
> > affect only the keyboard layout?).
> 
> Which hpcboot version are you using?

Newest from the CVS (.exe.uue, not compiled by myself).

> > 2. Suspending works okay, but unsuspending does not turn the display
> > on.  I suspect it can be related to booting with a serial console.
> 
> Yes, it's a bug in the driver for the hd64461 video.

I've fixed it by copying some stuff from hd64461video_attach() to the 
power hook. I don't know if all of this is really necessary (probably 
not), but it works. Patch attached.

> > 3. Is there a program or other possibility to turn the display off 
> > and on? I've tried wsconsctl -da, but no option seems to be related.
> 
> I have written small wsblank utility (attached) to turn it on/off.
> Yes, this functionality should really be integrated into wsconsctl.

Thanks, it works. I've done some integration, check wsconsctl.patch.

> > 4. I've calibrated my touch panel using tpctl, but in X it still 
> > seems to be uncalibrated. Maybe there's an other utility for X 
> > and other for the console?
> 
> What are the symptoms?  I guess the issue might be that touchpanel
> readings are not stable when the pen is removed, and the driver picks
> up a "ghost" move during pen removal.

That's not the case. When I drag the stylus, the cursor move is related 
to it, but the position is shifted (shift depends on the position). Take 
a look:

http://gallery.miauk.net/n/0014/dsc006.jpg
http://gallery.miauk.net/n/0014/dsc007.jpg
http://gallery.miauk.net/n/0014/dsc008.jpg
http://gallery.miauk.net/n/0014/dsc009.jpg

And by the way, here's the "warm reboot" message (I know it's not 
readable, but at least the position of the message can be seen):

http://gallery.miauk.net/n/0014/dsc002.jpg

Greetings.

-- 
[ Adam Wysocki :: www.chmurka.net :: +48 514 710 213 ]
[ Software Development Department, ArcaBit Sp. z o.o ]
[ Ul. Fortuny 9 :: 01-339 Warszawa :: www.arcabit.pl ]
hd64461video.c.patch (text/plain, 560 B)
--- hd64461video.c.old	2006-08-13 11:59:47.000000000 +0200
+++ hd64461video.c	2006-08-13 12:02:44.000000000 +0200
@@ -1147,6 +1147,15 @@
 		if (!hvc->console)
 			break; /* serial console */
 		DPRINTF("%s: ON\n", sc->sc_dev.dv_xname);
+		hd64461video_update_videochip_status(hvc);
+		hd64461video_setup_hpcfbif(hvc);
+		{
+			u_int8_t *p = hvc->off_screen_addr;
+			u_int8_t *end = p + hvc->off_screen_size;
+			while (p < end)
+				*p++ = 0xff;
+		}
+		hd64461video_hwaccel_init(hvc);
 		hd64461video_on(hvc);
 		break;
 	case PWR_SUSPEND:
wsconsctl.patch (text/plain, 3.2 KB)
--- wsconsctl.h.old	2006-08-12 19:01:42.000000000 +0200
+++ wsconsctl.h	2006-08-12 19:01:59.000000000 +0200
@@ -69,6 +69,7 @@
 #define FMT_KBMAP	105		/* keyboard map */
 #define FMT_COLOR	201		/* display color */
 #define FMT_ATTRS	202		/* display attributes */
+#define FMT_BLANK	203		/* blanking status */
 	int format;
 #define FLG_RDONLY	0x0001		/* variable cannot be modified */
 #define FLG_WRONLY	0x0002		/* variable cannot be displayed */
--- util.c.old	2006-08-12 19:02:16.000000000 +0200
+++ util.c	2006-08-12 19:15:22.000000000 +0200
@@ -321,6 +321,9 @@
 		if (first)
 			(void)printf("none");
 		break;
+	case FMT_BLANK:
+		(void)printf("%u", (*((unsigned int *) f->valp) == WSDISPLAYIO_VIDEO_OFF) ? 1 : 0);
+		break;
 	default:
 		errx(EXIT_FAILURE, "internal error: pr_field: no format %d",
 		    f->format);
@@ -359,12 +362,27 @@
 
 	switch (f->format) {
 	case FMT_UINT:
+	case FMT_BLANK:
 		if (sscanf(val, "%u", &u) != 1)
 			errx(EXIT_FAILURE, "%s: not a number", val);
 		if (merge)
 			*((unsigned int *) f->valp) += u;
 		else
 			*((unsigned int *) f->valp) = u;
+
+		if (f->format == FMT_BLANK) {
+			switch (*((unsigned int *) f->valp)) {
+				case 0:
+					*((unsigned int *) f->valp) = WSDISPLAYIO_VIDEO_ON;
+					break;
+				case 1:
+					*((unsigned int *) f->valp) = WSDISPLAYIO_VIDEO_OFF;
+					break;
+				default:
+					errx(EXIT_FAILURE, "%d: should be 0 or 1", *((unsigned int *) f->valp));
+			}
+		}
+
 		break;
 	case FMT_STRING:
 		if ((*((char **) f->valp) = strdup(val)) == NULL)
--- display.c.old	2006-08-12 18:44:48.000000000 +0200
+++ display.c	2006-08-12 19:15:31.000000000 +0200
@@ -53,6 +53,7 @@
 static int dpytype;
 static struct wsdisplay_usefontdata font;
 static struct wsdisplay_param backlight;
+static int blank;
 static struct wsdisplay_param brightness;
 static struct wsdisplay_param contrast;
 static struct wsdisplay_scroll_data scroll_l;
@@ -65,6 +66,7 @@
     { "type",			&dpytype,	FMT_DPYTYPE,	FLG_RDONLY },
     { "font",			&font.name,	FMT_STRING,	FLG_WRONLY },
     { "backlight",		&backlight.curval,  FMT_UINT,	0 },
+    { "blank",			&blank,		FMT_BLANK,	0 },
     { "brightness",		&brightness.curval, FMT_UINT,	FLG_MODIFY },
     { "contrast",		&contrast.curval,   FMT_UINT,	FLG_MODIFY },
     { "scroll.fastlines",	&scroll_l.fastlines, FMT_UINT,	FLG_MODIFY },
@@ -100,6 +102,10 @@
 			field_disable_by_value(&backlight.curval);
 	}
 
+	if (field_by_value(&blank)->flags & FLG_GET)
+		if (ioctl(fd, WSDISPLAYIO_GVIDEO, &blank) < 0)
+			field_disable_by_value(&blank);
+
 	if (field_by_value(&brightness.curval)->flags & FLG_GET) {
 		brightness.param = WSDISPLAYIO_PARAM_BRIGHTNESS;
 		if (ioctl(fd, WSDISPLAYIO_GETPARAM, &brightness))
@@ -177,6 +183,12 @@
 		pr_field(field_by_value(&backlight.curval), " -> ");
 	}
 
+	if (field_by_value(&blank)->flags & FLG_SET) {
+		if (ioctl(fd, WSDISPLAYIO_SVIDEO, &blank) < 0)
+			err(EXIT_FAILURE, "WSDISPLAYIO_SVIDEO");
+		pr_field(field_by_value(&blank), " -> ");
+	}
+
 	if (field_by_value(&brightness.curval)->flags & FLG_SET) {
 		brightness.param = WSDISPLAYIO_PARAM_BRIGHTNESS;
 		if (ioctl(fd, WSDISPLAYIO_SETPARAM, &brightness) < 0)