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