1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | |
3 | /* |
4 | * Copyright (c) 2008 MtekVision Co., Ltd. |
5 | * Kwangwoo Lee <kwlee@mtekvision.com> |
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 | struct gpio_desc; |
23 | |
24 | #define TSC2007_MEASURE_TEMP0 (0x0 << 4) |
25 | #define TSC2007_MEASURE_AUX (0x2 << 4) |
26 | #define TSC2007_MEASURE_TEMP1 (0x4 << 4) |
27 | #define TSC2007_ACTIVATE_XN (0x8 << 4) |
28 | #define TSC2007_ACTIVATE_YN (0x9 << 4) |
29 | #define TSC2007_ACTIVATE_YP_XN (0xa << 4) |
30 | #define TSC2007_SETUP (0xb << 4) |
31 | #define TSC2007_MEASURE_X (0xc << 4) |
32 | #define TSC2007_MEASURE_Y (0xd << 4) |
33 | #define TSC2007_MEASURE_Z1 (0xe << 4) |
34 | #define TSC2007_MEASURE_Z2 (0xf << 4) |
35 | |
36 | #define TSC2007_POWER_OFF_IRQ_EN (0x0 << 2) |
37 | #define TSC2007_ADC_ON_IRQ_DIS0 (0x1 << 2) |
38 | #define TSC2007_ADC_OFF_IRQ_EN (0x2 << 2) |
39 | #define TSC2007_ADC_ON_IRQ_DIS1 (0x3 << 2) |
40 | |
41 | #define TSC2007_12BIT (0x0 << 1) |
42 | #define TSC2007_8BIT (0x1 << 1) |
43 | |
44 | #define MAX_12BIT ((1 << 12) - 1) |
45 | |
46 | #define ADC_ON_12BIT (TSC2007_12BIT | TSC2007_ADC_ON_IRQ_DIS0) |
47 | |
48 | #define READ_Y (ADC_ON_12BIT | TSC2007_MEASURE_Y) |
49 | #define READ_Z1 (ADC_ON_12BIT | TSC2007_MEASURE_Z1) |
50 | #define READ_Z2 (ADC_ON_12BIT | TSC2007_MEASURE_Z2) |
51 | #define READ_X (ADC_ON_12BIT | TSC2007_MEASURE_X) |
52 | #define PWRDOWN (TSC2007_12BIT | TSC2007_POWER_OFF_IRQ_EN) |
53 | |
54 | struct ts_event { |
55 | u16 x; |
56 | u16 y; |
57 | u16 z1, z2; |
58 | }; |
59 | |
60 | struct tsc2007 { |
61 | struct input_dev *input; |
62 | char phys[32]; |
63 | |
64 | struct i2c_client *client; |
65 | |
66 | u16 model; |
67 | u16 x_plate_ohms; |
68 | u16 max_rt; |
69 | unsigned long poll_period; /* in jiffies */ |
70 | int fuzzx; |
71 | int fuzzy; |
72 | int fuzzz; |
73 | |
74 | struct gpio_desc *gpiod; |
75 | int irq; |
76 | |
77 | wait_queue_head_t wait; |
78 | bool stopped; |
79 | |
80 | int (*get_pendown_state)(struct device *); |
81 | void (*clear_penirq)(void); |
82 | |
83 | struct mutex mlock; |
84 | }; |
85 | |
86 | int tsc2007_xfer(struct tsc2007 *tsc, u8 cmd); |
87 | u32 tsc2007_calculate_resistance(struct tsc2007 *tsc, struct ts_event *tc); |
88 | bool tsc2007_is_pen_down(struct tsc2007 *ts); |
89 | |
90 | #if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007_IIO) |
91 | /* defined in tsc2007_iio.c */ |
92 | int tsc2007_iio_configure(struct tsc2007 *ts); |
93 | #else |
94 | static inline int tsc2007_iio_configure(struct tsc2007 *ts) |
95 | { |
96 | return 0; |
97 | } |
98 | #endif /* CONFIG_TOUCHSCREEN_TSC2007_IIO */ |
99 | |
100 | #endif /* _TSC2007_H */ |
101 | |