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