162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci/* 462306a36Sopenharmony_ci * Copyright (c) 2008 MtekVision Co., Ltd. 562306a36Sopenharmony_ci * Kwangwoo Lee <kwlee@mtekvision.com> 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Using code from: 862306a36Sopenharmony_ci * - ads7846.c 962306a36Sopenharmony_ci * Copyright (c) 2005 David Brownell 1062306a36Sopenharmony_ci * Copyright (c) 2006 Nokia Corporation 1162306a36Sopenharmony_ci * - corgi_ts.c 1262306a36Sopenharmony_ci * Copyright (C) 2004-2005 Richard Purdie 1362306a36Sopenharmony_ci * - omap_ts.[hc], ads7846.h, ts_osk.c 1462306a36Sopenharmony_ci * Copyright (C) 2002 MontaVista Software 1562306a36Sopenharmony_ci * Copyright (C) 2004 Texas Instruments 1662306a36Sopenharmony_ci * Copyright (C) 2005 Dirk Behme 1762306a36Sopenharmony_ci */ 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#ifndef _TSC2007_H 2062306a36Sopenharmony_ci#define _TSC2007_H 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cistruct gpio_desc; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#define TSC2007_MEASURE_TEMP0 (0x0 << 4) 2562306a36Sopenharmony_ci#define TSC2007_MEASURE_AUX (0x2 << 4) 2662306a36Sopenharmony_ci#define TSC2007_MEASURE_TEMP1 (0x4 << 4) 2762306a36Sopenharmony_ci#define TSC2007_ACTIVATE_XN (0x8 << 4) 2862306a36Sopenharmony_ci#define TSC2007_ACTIVATE_YN (0x9 << 4) 2962306a36Sopenharmony_ci#define TSC2007_ACTIVATE_YP_XN (0xa << 4) 3062306a36Sopenharmony_ci#define TSC2007_SETUP (0xb << 4) 3162306a36Sopenharmony_ci#define TSC2007_MEASURE_X (0xc << 4) 3262306a36Sopenharmony_ci#define TSC2007_MEASURE_Y (0xd << 4) 3362306a36Sopenharmony_ci#define TSC2007_MEASURE_Z1 (0xe << 4) 3462306a36Sopenharmony_ci#define TSC2007_MEASURE_Z2 (0xf << 4) 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci#define TSC2007_POWER_OFF_IRQ_EN (0x0 << 2) 3762306a36Sopenharmony_ci#define TSC2007_ADC_ON_IRQ_DIS0 (0x1 << 2) 3862306a36Sopenharmony_ci#define TSC2007_ADC_OFF_IRQ_EN (0x2 << 2) 3962306a36Sopenharmony_ci#define TSC2007_ADC_ON_IRQ_DIS1 (0x3 << 2) 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci#define TSC2007_12BIT (0x0 << 1) 4262306a36Sopenharmony_ci#define TSC2007_8BIT (0x1 << 1) 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci#define MAX_12BIT ((1 << 12) - 1) 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci#define ADC_ON_12BIT (TSC2007_12BIT | TSC2007_ADC_ON_IRQ_DIS0) 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci#define READ_Y (ADC_ON_12BIT | TSC2007_MEASURE_Y) 4962306a36Sopenharmony_ci#define READ_Z1 (ADC_ON_12BIT | TSC2007_MEASURE_Z1) 5062306a36Sopenharmony_ci#define READ_Z2 (ADC_ON_12BIT | TSC2007_MEASURE_Z2) 5162306a36Sopenharmony_ci#define READ_X (ADC_ON_12BIT | TSC2007_MEASURE_X) 5262306a36Sopenharmony_ci#define PWRDOWN (TSC2007_12BIT | TSC2007_POWER_OFF_IRQ_EN) 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_cistruct ts_event { 5562306a36Sopenharmony_ci u16 x; 5662306a36Sopenharmony_ci u16 y; 5762306a36Sopenharmony_ci u16 z1, z2; 5862306a36Sopenharmony_ci}; 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_cistruct tsc2007 { 6162306a36Sopenharmony_ci struct input_dev *input; 6262306a36Sopenharmony_ci char phys[32]; 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci struct i2c_client *client; 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci u16 model; 6762306a36Sopenharmony_ci u16 x_plate_ohms; 6862306a36Sopenharmony_ci u16 max_rt; 6962306a36Sopenharmony_ci unsigned long poll_period; /* in jiffies */ 7062306a36Sopenharmony_ci int fuzzx; 7162306a36Sopenharmony_ci int fuzzy; 7262306a36Sopenharmony_ci int fuzzz; 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci struct gpio_desc *gpiod; 7562306a36Sopenharmony_ci int irq; 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci wait_queue_head_t wait; 7862306a36Sopenharmony_ci bool stopped; 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ci int (*get_pendown_state)(struct device *); 8162306a36Sopenharmony_ci void (*clear_penirq)(void); 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci struct mutex mlock; 8462306a36Sopenharmony_ci}; 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ciint tsc2007_xfer(struct tsc2007 *tsc, u8 cmd); 8762306a36Sopenharmony_ciu32 tsc2007_calculate_resistance(struct tsc2007 *tsc, struct ts_event *tc); 8862306a36Sopenharmony_cibool tsc2007_is_pen_down(struct tsc2007 *ts); 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci#if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007_IIO) 9162306a36Sopenharmony_ci/* defined in tsc2007_iio.c */ 9262306a36Sopenharmony_ciint tsc2007_iio_configure(struct tsc2007 *ts); 9362306a36Sopenharmony_ci#else 9462306a36Sopenharmony_cistatic inline int tsc2007_iio_configure(struct tsc2007 *ts) 9562306a36Sopenharmony_ci{ 9662306a36Sopenharmony_ci return 0; 9762306a36Sopenharmony_ci} 9862306a36Sopenharmony_ci#endif /* CONFIG_TOUCHSCREEN_TSC2007_IIO */ 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci#endif /* _TSC2007_H */ 101