Module Name: src Committed By: tsutsui Date: Mon Jul 19 15:20:21 UTC 2010
Modified Files: src/sys/arch/hpcarm/dev: wzero3_tp.c Log Message: - in max1233_readpos(), add some DELAY() after starting A/D so that output values of touchscreen position are more stable on my WS003SH - also tidy up read and calc ops in max1233_readpos() - turn DAC on in max1233_init() as well as max1233_resume() To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/hpcarm/dev/wzero3_tp.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/arch/hpcarm/dev/wzero3_tp.c diff -u src/sys/arch/hpcarm/dev/wzero3_tp.c:1.5 src/sys/arch/hpcarm/dev/wzero3_tp.c:1.6 --- src/sys/arch/hpcarm/dev/wzero3_tp.c:1.5 Sun May 30 10:00:27 2010 +++ src/sys/arch/hpcarm/dev/wzero3_tp.c Mon Jul 19 15:20:21 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: wzero3_tp.c,v 1.5 2010/05/30 10:00:27 nonaka Exp $ */ +/* $NetBSD: wzero3_tp.c,v 1.6 2010/07/19 15:20:21 tsutsui Exp $ */ /* * Copyright (c) 2010 NONAKA Kimihiro <non...@netbsd.org> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: wzero3_tp.c,v 1.5 2010/05/30 10:00:27 nonaka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: wzero3_tp.c,v 1.6 2010/07/19 15:20:21 tsutsui Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -549,8 +549,8 @@ #define MAXCTRL_RW_SH 15 /* R/W bit (0:Write/1:Read) */ /* VREF=2.5V, sets interrupt initiated touch-screen scans - * 3.5us/sample, 4 data ave., settling time: 100us */ -#define MAX1233_ADCCTRL 0x8b43 + * 3.5us/sample, 16 data ave., 12 bit, settling time: 100us */ +#define MAX1233_ADCCTRL 0x8be3 void max1233_init(void) @@ -564,6 +564,10 @@ (void)wzero3ssp_ic_send(WZERO3_SSP_IC_MAX1233, (0<<MAXCTRL_RW_SH) | (1<<MAXCTRL_PAGE_SH) | (0<<MAXCTRL_ADDR_SH), MAX1233_ADCCTRL); + /* DAC on */ + (void)wzero3ssp_ic_send(WZERO3_SSP_IC_MAX1233, + (0<<MAXCTRL_RW_SH) | (1<<MAXCTRL_PAGE_SH) | (2<<MAXCTRL_ADDR_SH), + 0x0000); } void @@ -601,36 +605,30 @@ int max1233_readpos(struct wzero3tp_pos *pos) { - uint32_t z1 = 0, z2 = 0, rt; + uint32_t x, y, z1 = 0, z2 = 0, rt; uint32_t status; int down; (void)wzero3ssp_ic_send(WZERO3_SSP_IC_MAX1233, (0<<MAXCTRL_RW_SH) | (1<<MAXCTRL_PAGE_SH) | (0<<MAXCTRL_ADDR_SH), 0x0bf3); + DELAY(300); while ((status = (wzero3ssp_ic_send(WZERO3_SSP_IC_MAX1233, (1<<MAXCTRL_RW_SH) | (1<<MAXCTRL_PAGE_SH) | (0<<MAXCTRL_ADDR_SH), 0) & 0x4000)) != 0x4000) { DPRINTF(("%s: status=%#x\n", __func__, status)); + DELAY(10); } DPRINTF(("%s: status=%#x\n", __func__, status)); - z1 = wzero3ssp_ic_send(WZERO3_SSP_IC_MAX1233, - (1<<MAXCTRL_RW_SH) | (0<<MAXCTRL_PAGE_SH) | (2<<MAXCTRL_ADDR_SH),0); - DPRINTF(("%s: first z1=%d\n", __func__, z1)); - - down = (z1 >= 10); - if (!down) - goto out; - - pos->x = wzero3ssp_ic_send(WZERO3_SSP_IC_MAX1233, + x = wzero3ssp_ic_send(WZERO3_SSP_IC_MAX1233, (1<<MAXCTRL_RW_SH) | (0<<MAXCTRL_PAGE_SH) | (0<<MAXCTRL_ADDR_SH),0); - DPRINTF(("%s: x=%d\n", __func__, pos->x)); - pos->y = wzero3ssp_ic_send(WZERO3_SSP_IC_MAX1233, + DPRINTF(("%s: x=%d\n", __func__, x)); + y = wzero3ssp_ic_send(WZERO3_SSP_IC_MAX1233, (1<<MAXCTRL_RW_SH) | (0<<MAXCTRL_PAGE_SH) | (1<<MAXCTRL_ADDR_SH),0); - DPRINTF(("%s: y=%d\n", __func__, pos->y)); + DPRINTF(("%s: y=%d\n", __func__, y)); z1 = wzero3ssp_ic_send(WZERO3_SSP_IC_MAX1233, (1<<MAXCTRL_RW_SH) | (0<<MAXCTRL_PAGE_SH) | (2<<MAXCTRL_ADDR_SH),0); DPRINTF(("%s: z1=%d\n", __func__, z1)); @@ -638,21 +636,22 @@ (1<<MAXCTRL_RW_SH) | (0<<MAXCTRL_PAGE_SH) | (3<<MAXCTRL_ADDR_SH),0); DPRINTF(("%s: z2=%d\n", __func__, z2)); - if (z1) { + if (z1 >= 10) { rt = 400 /* XXX: X plate ohms */; - rt *= pos->x; + rt *= x; rt *= (z2 / z1) - 1; rt >>= 12; } else rt = 0; DPRINTF(("%s: rt=%d\n", __func__, rt)); - /* check that pen is still down */ - if (z1 == 0 || rt == 0) - down = 0; + down = (rt != 0); + if (down) { + pos->x = x; + pos->y = y; + } pos->z = down; -out: return down; }