diff options
| author | Jonathan Gordon <rockbox@jdgordon.info> | 2007-09-22 14:21:07 +0000 |
|---|---|---|
| committer | Jonathan Gordon <rockbox@jdgordon.info> | 2007-09-22 14:21:07 +0000 |
| commit | d331d00a2d18654ff5ea493adb194fc4a8aa5976 (patch) | |
| tree | 1a83be2570035f6fc926433a487a2522223998c0 /firmware/drivers | |
| parent | 376169ab957b38902f58e4e531c4600f79bd4424 (diff) | |
| download | rockbox-d331d00a2d18654ff5ea493adb194fc4a8aa5976.zip rockbox-d331d00a2d18654ff5ea493adb194fc4a8aa5976.tar.gz rockbox-d331d00a2d18654ff5ea493adb194fc4a8aa5976.tar.bz2 rockbox-d331d00a2d18654ff5ea493adb194fc4a8aa5976.tar.xz | |
start of the tsc2100 driver.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14816 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers')
| -rw-r--r-- | firmware/drivers/tsc2100.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/firmware/drivers/tsc2100.c b/firmware/drivers/tsc2100.c new file mode 100644 index 0000000..19da33e --- /dev/null +++ b/firmware/drivers/tsc2100.c @@ -0,0 +1,64 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: $ + * + * Copyright (C) 2007 by Jonathan Gordon + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "config.h" +#include "cpu.h" +#include "system.h" +#include "spi.h" +#include "tsc2100.h" + +/* Read X, Y, Z1, Z2 touchscreen coordinates. */ +void tsc2100_read_values(short *x, short* y, short *z1, short *z2) +{ + int page = 0, address = 0; + unsigned short command = 0x8000|(page << 11)|(address << 5); + unsigned char out[] = {command >> 8, command & 0xff}; + unsigned char in[8]; + spi_block_transfer(out, sizeof(out), in, sizeof(in)); + + *x = (in[0]<<8)|in[1]; + *y = (in[2]<<8)|in[3]; + *z1 = (in[4]<<8)|in[5]; + *z2 = (in[6]<<8)|in[7]; +} + +short tsc2100_readreg(int page, int address) +{ + unsigned short command = 0x8000|(page << 11)|(address << 5); + unsigned char out[] = {command >> 8, command & 0xff}; + unsigned char in[2]; + spi_block_transfer(out, sizeof(out), in, sizeof(in)); + return (in[0]<<8)|in[1]; +} + + +void tsc2100_writereg(int page, int address, short value) +{ + unsigned short command = 0x8000|(page << 11)|(address << 5); + unsigned char out[4] = {command >> 8, command & 0xff, + value >> 8, value & 0xff}; + spi_block_transfer(out, sizeof(out), NULL, 0); +} + +void tsc2100_keyclick(void) +{ + // 1100 0100 0001 0000 + short val = 0xC410; + tsc2100_writereg(TSAC2_PAGE, TSAC2_ADDRESS, val); +} |