Module Name: src Committed By: maya Date: Mon Dec 5 13:14:22 UTC 2016
Modified Files: src/sys/dev/usb: uep.c Log Message: uep: allow (hard-coded) calibration. >From Nicolas Jouanne in PR kern/40105 ok skrll To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.21 src/sys/dev/usb/uep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/usb/uep.c diff -u src/sys/dev/usb/uep.c:1.20 src/sys/dev/usb/uep.c:1.21 --- src/sys/dev/usb/uep.c:1.20 Sat Apr 23 10:15:32 2016 +++ src/sys/dev/usb/uep.c Mon Dec 5 13:14:22 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: uep.c,v 1.20 2016/04/23 10:15:32 skrll Exp $ */ +/* $NetBSD: uep.c,v 1.21 2016/12/05 13:14:22 maya Exp $ */ /* * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ * eGalax USB touchpanel controller driver. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uep.c,v 1.20 2016/04/23 10:15:32 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uep.c,v 1.21 2016/12/05 13:14:22 maya Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -54,6 +54,14 @@ __KERNEL_RCSID(0, "$NetBSD: uep.c,v 1.20 #include <dev/wscons/tpcalibvar.h> #define UIDSTR "eGalax USB SN000000" +/* calibration - integer values, perhaps sysctls? */ +#define X_RATIO 293 +#define X_OFFSET -28 +#define Y_RATIO -348 +#define Y_OFFSET 537 +/* an X_RATIO of ``312'' means : reduce by a factor 3.12 x axis amplitude */ +/* an Y_RATIO of ``-157'' means : reduce by a factor 1.57 y axis amplitude, + * and reverse y motion */ struct uep_softc { device_t sc_dev; @@ -358,6 +366,17 @@ uep_ioctl(void *v, u_long cmd, void *dat return EPASSTHROUGH; } +static int +uep_adjust(int v, int off, int rat) +{ + int num = 100 * v; + int quot = num / rat; + int rem = num % rat; + if (num >= 0 && rem < 0) + quot++; + return quot + off; +} + void uep_intr(struct usbd_xfer *xfer, void *addr, usbd_status status) { @@ -429,8 +448,8 @@ uep_intr(struct usbd_xfer *xfer, void *a default: msk = 0x0f; /* H=0, L=0 */ } - x = ((p[3] & msk) << 7) | p[4]; - y = ((p[1] & msk) << 7) | p[2]; + x = uep_adjust(((p[3] & msk) << 7) | p[4], X_OFFSET, X_RATIO); + y = uep_adjust(((p[1] & msk) << 7) | p[2], Y_OFFSET, Y_RATIO); tpcalib_trans(&sc->sc_tpcalib, x, y, &x, &y);