1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun /* 4*4882a593Smuzhiyun * Copyright (c) 2008 MtekVision Co., Ltd. 5*4882a593Smuzhiyun * Kwangwoo Lee <kwlee@mtekvision.com> 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Using code from: 8*4882a593Smuzhiyun * - ads7846.c 9*4882a593Smuzhiyun * Copyright (c) 2005 David Brownell 10*4882a593Smuzhiyun * Copyright (c) 2006 Nokia Corporation 11*4882a593Smuzhiyun * - corgi_ts.c 12*4882a593Smuzhiyun * Copyright (C) 2004-2005 Richard Purdie 13*4882a593Smuzhiyun * - omap_ts.[hc], ads7846.h, ts_osk.c 14*4882a593Smuzhiyun * Copyright (C) 2002 MontaVista Software 15*4882a593Smuzhiyun * Copyright (C) 2004 Texas Instruments 16*4882a593Smuzhiyun * Copyright (C) 2005 Dirk Behme 17*4882a593Smuzhiyun */ 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #ifndef _TSC2007_H 20*4882a593Smuzhiyun #define _TSC2007_H 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define TSC2007_MEASURE_TEMP0 (0x0 << 4) 23*4882a593Smuzhiyun #define TSC2007_MEASURE_AUX (0x2 << 4) 24*4882a593Smuzhiyun #define TSC2007_MEASURE_TEMP1 (0x4 << 4) 25*4882a593Smuzhiyun #define TSC2007_ACTIVATE_XN (0x8 << 4) 26*4882a593Smuzhiyun #define TSC2007_ACTIVATE_YN (0x9 << 4) 27*4882a593Smuzhiyun #define TSC2007_ACTIVATE_YP_XN (0xa << 4) 28*4882a593Smuzhiyun #define TSC2007_SETUP (0xb << 4) 29*4882a593Smuzhiyun #define TSC2007_MEASURE_X (0xc << 4) 30*4882a593Smuzhiyun #define TSC2007_MEASURE_Y (0xd << 4) 31*4882a593Smuzhiyun #define TSC2007_MEASURE_Z1 (0xe << 4) 32*4882a593Smuzhiyun #define TSC2007_MEASURE_Z2 (0xf << 4) 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun #define TSC2007_POWER_OFF_IRQ_EN (0x0 << 2) 35*4882a593Smuzhiyun #define TSC2007_ADC_ON_IRQ_DIS0 (0x1 << 2) 36*4882a593Smuzhiyun #define TSC2007_ADC_OFF_IRQ_EN (0x2 << 2) 37*4882a593Smuzhiyun #define TSC2007_ADC_ON_IRQ_DIS1 (0x3 << 2) 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun #define TSC2007_12BIT (0x0 << 1) 40*4882a593Smuzhiyun #define TSC2007_8BIT (0x1 << 1) 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun #define MAX_12BIT ((1 << 12) - 1) 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun #define ADC_ON_12BIT (TSC2007_12BIT | TSC2007_ADC_ON_IRQ_DIS0) 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun #define READ_Y (ADC_ON_12BIT | TSC2007_MEASURE_Y) 47*4882a593Smuzhiyun #define READ_Z1 (ADC_ON_12BIT | TSC2007_MEASURE_Z1) 48*4882a593Smuzhiyun #define READ_Z2 (ADC_ON_12BIT | TSC2007_MEASURE_Z2) 49*4882a593Smuzhiyun #define READ_X (ADC_ON_12BIT | TSC2007_MEASURE_X) 50*4882a593Smuzhiyun #define PWRDOWN (TSC2007_12BIT | TSC2007_POWER_OFF_IRQ_EN) 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun struct ts_event { 53*4882a593Smuzhiyun u16 x; 54*4882a593Smuzhiyun u16 y; 55*4882a593Smuzhiyun u16 z1, z2; 56*4882a593Smuzhiyun }; 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun struct tsc2007 { 59*4882a593Smuzhiyun struct input_dev *input; 60*4882a593Smuzhiyun char phys[32]; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun struct i2c_client *client; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun u16 model; 65*4882a593Smuzhiyun u16 x_plate_ohms; 66*4882a593Smuzhiyun u16 max_rt; 67*4882a593Smuzhiyun unsigned long poll_period; /* in jiffies */ 68*4882a593Smuzhiyun int fuzzx; 69*4882a593Smuzhiyun int fuzzy; 70*4882a593Smuzhiyun int fuzzz; 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun unsigned int gpio; 73*4882a593Smuzhiyun int irq; 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun wait_queue_head_t wait; 76*4882a593Smuzhiyun bool stopped; 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun int (*get_pendown_state)(struct device *); 79*4882a593Smuzhiyun void (*clear_penirq)(void); 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun struct mutex mlock; 82*4882a593Smuzhiyun }; 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun int tsc2007_xfer(struct tsc2007 *tsc, u8 cmd); 85*4882a593Smuzhiyun u32 tsc2007_calculate_resistance(struct tsc2007 *tsc, struct ts_event *tc); 86*4882a593Smuzhiyun bool tsc2007_is_pen_down(struct tsc2007 *ts); 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun #if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007_IIO) 89*4882a593Smuzhiyun /* defined in tsc2007_iio.c */ 90*4882a593Smuzhiyun int tsc2007_iio_configure(struct tsc2007 *ts); 91*4882a593Smuzhiyun #else tsc2007_iio_configure(struct tsc2007 * ts)92*4882a593Smuzhiyunstatic inline int tsc2007_iio_configure(struct tsc2007 *ts) 93*4882a593Smuzhiyun { 94*4882a593Smuzhiyun return 0; 95*4882a593Smuzhiyun } 96*4882a593Smuzhiyun #endif /* CONFIG_TOUCHSCREEN_TSC2007_IIO */ 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun #endif /* _TSC2007_H */ 99