/*
 * Functions to access the TSC2000 controller on TRAB board (used for scanning
 * thermo sensors)
 *
 * Copyright (C) 2003 Martin Krause, TQ-Systems GmbH, martin.krause@tqs.de
 *
 * Copyright (C) 2002 DENX Software Engineering, Wolfgang Denk, wd@denx.de
 *
 * See file CREDITS for list of people who contributed to this
 * project.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307 USA
 */

#ifndef _TSC2000_H_
#define _TSC2000_H_

/* temperature channel multiplexer definitions */
#define CON_MUX0	(gpio->pccon = (gpio->pccon & 0x0FFFFFCFF) | 0x00000100)
#define CLR_MUX0	(gpio->pcdat &= 0x0FFEF)
#define SET_MUX0	(gpio->pcdat |= 0x00010)

#define CON_MUX1	(gpio->pccon = (gpio->pccon & 0x0FFFFF3FF) | 0x00000400)
#define CLR_MUX1	(gpio->pcdat &= 0x0FFDF)
#define SET_MUX1	(gpio->pcdat |= 0x00020)

#define CON_MUX1_ENABLE	(gpio->pccon = (gpio->pccon & 0x0FFFFCFFF) | 0x00001000)
#define CLR_MUX1_ENABLE	(gpio->pcdat |= 0x00040)
#define SET_MUX1_ENABLE	(gpio->pcdat &= 0x0FFBF)

#define CON_MUX2_ENABLE	(gpio->pccon = (gpio->pccon & 0x0FFFF3FFF) | 0x00004000)
#define CLR_MUX2_ENABLE	(gpio->pcdat |= 0x00080)
#define SET_MUX2_ENABLE	(gpio->pcdat &= 0x0FF7F)

#define CON_MUX3_ENABLE	(gpio->pccon = (gpio->pccon & 0x0FFFCFFFF) | 0x00010000)
#define CLR_MUX3_ENABLE	(gpio->pcdat |= 0x00100)
#define SET_MUX3_ENABLE	(gpio->pcdat &= 0x0FEFF)

#define CON_MUX4_ENABLE	(gpio->pccon = (gpio->pccon & 0x0FFF3FFFF) | 0x00040000)
#define CLR_MUX4_ENABLE	(gpio->pcdat |= 0x00200)
#define SET_MUX4_ENABLE	(gpio->pcdat &= 0x0FDFF)

#define CON_SEL_TEMP_V_0	(gpio->pccon = (gpio->pccon & 0x0FFCFFFFF) | \
							0x00100000)
#define CLR_SEL_TEMP_V_0	(gpio->pcdat &= 0x0FBFF)
#define SET_SEL_TEMP_V_0	(gpio->pcdat |= 0x00400)

#define CON_SEL_TEMP_V_1	(gpio->pccon = (gpio->pccon & 0x0FF3FFFFF) | \
		0x00400000)
#define CLR_SEL_TEMP_V_1	(gpio->pcdat &= 0x0F7FF)
#define SET_SEL_TEMP_V_1	(gpio->pcdat |= 0x00800)

#define CON_SEL_TEMP_V_2	(gpio->pccon = (gpio->pccon & 0x0FCFFFFFF) | \
		0x01000000)
#define CLR_SEL_TEMP_V_2	(gpio->pcdat &= 0x0EFFF)
#define SET_SEL_TEMP_V_2	(gpio->pcdat |= 0x01000)

#define CON_SEL_TEMP_V_3	(gpio->pccon = (gpio->pccon & 0x0F3FFFFFF) | \
		0x04000000)
#define CLR_SEL_TEMP_V_3	(gpio->pcdat &= 0x0DFFF)
#define SET_SEL_TEMP_V_3	(gpio->pcdat |= 0x02000)

/* TSC2000 register definition */
#define TSC2000_REG_X		((0 << 11) | (0 << 5))
#define TSC2000_REG_Y		((0 << 11) | (1 << 5))
#define TSC2000_REG_Z1		((0 << 11) | (2 << 5))
#define TSC2000_REG_Z2		((0 << 11) | (3 << 5))
#define TSC2000_REG_BAT1	((0 << 11) | (5 << 5))
#define TSC2000_REG_BAT2	((0 << 11) | (6 << 5))
#define TSC2000_REG_AUX1	((0 << 11) | (7 << 5))
#define TSC2000_REG_AUX2	((0 << 11) | (8 << 5))
#define TSC2000_REG_TEMP1	((0 << 11) | (9 << 5))
#define TSC2000_REG_TEMP2	((0 << 11) | (0xA << 5))
#define TSC2000_REG_DAC		((0 << 11) | (0xB << 5))
#define TSC2000_REG_ZERO	((0 << 11) | (0x10 << 5))
#define TSC2000_REG_ADC		((1 << 11) | (0 << 5))
#define TSC2000_REG_DACCTL	((1 << 11) | (2 << 5))
#define TSC2000_REG_REF		((1 << 11) | (3 << 5))
#define TSC2000_REG_RESET	((1 << 11) | (4 << 5))
#define TSC2000_REG_CONFIG	((1 << 11) | (5 << 5))

/* bit definition of TSC2000 ADC register */
#define TC_PSM			(1 << 15)
#define TC_STS			(1 << 14)
#define TC_AD3			(1 << 13)
#define TC_AD2			(1 << 12)
#define TC_AD1			(1 << 11)
#define TC_AD0			(1 << 10)
#define TC_RS1			(1 << 9)
#define TC_RS0			(1 << 8)
#define TC_AV1			(1 << 7)
#define TC_AV0			(1 << 6)
#define TC_CL1			(1 << 5)
#define TC_CL0			(1 << 4)
#define TC_PV2			(1 << 3)
#define TC_PV1			(1 << 2)
#define TC_PV0			(1 << 1)

/* default value for TSC2000 ADC register for use with touch functions */
#define DEFAULT_ADC		(TC_PV1 | TC_AV0 | TC_AV1 | TC_RS0)

#define TSC2000_DELAY_BASE	500
#define TSC2000_NO_SENSOR	-0x10000

#define ERROR_BATTERY		220	/* must be adjusted, if R68 is changed on TRAB */

void tsc2000_write(unsigned short, unsigned short);
unsigned short tsc2000_read (unsigned short);
u16 tsc2000_read_channel (unsigned int);
void tsc2000_set_mux (unsigned int);
void tsc2000_set_range (unsigned int);
void tsc2000_reg_init (void);
s32 tsc2000_contact_temp (void);
void spi_wait_transmit_done (void);
void tsc2000_spi_init(void);
int tsc2000_interpolate(long value, long data[][2], long *result);
void adc_wait_conversion_done(void);


static inline void SET_CS_TOUCH(void)
{
	struct s3c24x0_gpio * const gpio = s3c24x0_get_base_gpio();

	gpio->pddat &= 0x5FF;
}


static inline void CLR_CS_TOUCH(void)
{
	struct s3c24x0_gpio * const gpio = s3c24x0_get_base_gpio();

	gpio->pddat |= 0x200;
}

#endif	/* _TSC2000_H_ */
