ads7846.c 35.7 KB
Newer Older
1
// SPDX-License-Identifier: GPL-2.0-only
D
David Brownell 已提交
2 3 4 5
/*
 * ADS7846 based touchscreen and sensor driver
 *
 * Copyright (c) 2005 David Brownell
I
Imre Deak 已提交
6 7
 * Copyright (c) 2006 Nokia Corporation
 * Various changes: Imre Deak <imre.deak@nokia.com>
D
David Brownell 已提交
8 9 10 11 12 13 14 15 16
 *
 * Using code from:
 *  - corgi_ts.c
 *	Copyright (C) 2004-2005 Richard Purdie
 *  - omap_ts.[hc], ads7846.h, ts_osk.c
 *	Copyright (C) 2002 MontaVista Software
 *	Copyright (C) 2004 Texas Instruments
 *	Copyright (C) 2005 Dirk Behme
 */
17
#include <linux/types.h>
18 19
#include <linux/hwmon.h>
#include <linux/err.h>
20
#include <linux/sched.h>
D
David Brownell 已提交
21 22
#include <linux/delay.h>
#include <linux/input.h>
23
#include <linux/input/touchscreen.h>
D
David Brownell 已提交
24 25
#include <linux/interrupt.h>
#include <linux/slab.h>
26
#include <linux/pm.h>
27 28 29
#include <linux/of.h>
#include <linux/of_gpio.h>
#include <linux/of_device.h>
30
#include <linux/gpio.h>
D
David Brownell 已提交
31 32
#include <linux/spi/spi.h>
#include <linux/spi/ads7846.h>
33
#include <linux/regulator/consumer.h>
34
#include <linux/module.h>
35
#include <asm/irq.h>
36
#include <asm/unaligned.h>
D
David Brownell 已提交
37 38

/*
39
 * This code has been heavily tested on a Nokia 770, and lightly
40
 * tested on other ads7846 devices (OSK/Mistral, Lubbock, Spitz).
41
 * TSC2046 is just newer ads7846 silicon.
42 43
 * Support for ads7843 tested on Atmel at91sam926x-EK.
 * Support for ads7845 has only been stubbed in.
44
 * Support for Analog Devices AD7873 and AD7843 tested.
D
David Brownell 已提交
45
 *
I
Imre Deak 已提交
46 47 48 49 50 51
 * IRQ handling needs a workaround because of a shortcoming in handling
 * edge triggered IRQs on some platforms like the OMAP1/2. These
 * platforms don't handle the ARM lazy IRQ disabling properly, thus we
 * have to maintain our own SW IRQ disabled status. This should be
 * removed as soon as the affected platform's IRQ handling is fixed.
 *
52
 * App note sbaa036 talks in more detail about accurate sampling...
D
David Brownell 已提交
53 54
 * that ought to help in situations like LCDs inducing noise (which
 * can also be helped by using synch signals) and more generally.
I
Imre Deak 已提交
55 56 57
 * This driver tries to utilize the measures described in the app
 * note. The strength of filtering can be set in the board-* specific
 * files.
D
David Brownell 已提交
58 59
 */

60 61
#define TS_POLL_DELAY	1	/* ms delay before the first sample */
#define TS_POLL_PERIOD	5	/* ms delay between samples */
D
David Brownell 已提交
62

63 64 65
/* this driver doesn't aim at the peak continuous sample rate */
#define	SAMPLE_BITS	(8 /*cmd*/ + 16 /*sample*/ + 2 /* before, after */)

66 67
struct ads7846_buf {
	u8 cmd;
68
	/*
69 70 71
	 * This union is a temporary hack. The driver does an in-place
	 * endianness conversion. This will be cleaned up in the next
	 * patch.
D
David Brownell 已提交
72
	 */
73 74 75 76 77 78 79 80 81 82 83 84 85
	union {
		__be16 data_be16;
		u16 data;
	};
} __packed;


struct ts_event {
	bool ignore;
	struct ads7846_buf x;
	struct ads7846_buf y;
	struct ads7846_buf z1;
	struct ads7846_buf z2;
D
David Brownell 已提交
86 87
};

88 89 90 91 92 93
/*
 * We allocate this separately to avoid cache line sharing issues when
 * driver is used with DMA-based SPI controllers (like atmel_spi) on
 * systems where main memory is not DMA-coherent (most non-x86 boards).
 */
struct ads7846_packet {
94 95 96 97 98 99
	struct ts_event tc;
	struct ads7846_buf read_x_cmd;
	struct ads7846_buf read_y_cmd;
	struct ads7846_buf read_z1_cmd;
	struct ads7846_buf read_z2_cmd;
	struct ads7846_buf pwrdown_cmd;
100 101
};

D
David Brownell 已提交
102
struct ads7846 {
103
	struct input_dev	*input;
D
David Brownell 已提交
104
	char			phys[32];
105
	char			name[32];
D
David Brownell 已提交
106 107

	struct spi_device	*spi;
108
	struct regulator	*reg;
109

110
#if IS_ENABLED(CONFIG_HWMON)
111
	struct device		*hwmon;
112 113
#endif

D
David Brownell 已提交
114
	u16			model;
115
	u16			vref_mv;
D
David Brownell 已提交
116 117
	u16			vref_delay_usecs;
	u16			x_plate_ohms;
118
	u16			pressure_max;
D
David Brownell 已提交
119

120
	bool			swap_xy;
121
	bool			use_internal;
122

123
	struct ads7846_packet	*packet;
D
David Brownell 已提交
124

125
	struct spi_transfer	xfer[18];
126
	struct spi_message	msg[5];
127 128 129 130 131
	int			msg_count;
	wait_queue_head_t	wait;

	bool			pendown;

132
	int			read_cnt;
133
	int			read_rep;
134 135 136 137
	int			last_read;

	u16			debounce_max;
	u16			debounce_tol;
138
	u16			debounce_rep;
D
David Brownell 已提交
139

140 141
	u16			penirq_recheck_delay_usecs;

142 143
	struct touchscreen_properties core_prop;

144 145 146 147
	struct mutex		lock;
	bool			stopped;	/* P: lock */
	bool			disabled;	/* P: lock */
	bool			suspended;	/* P: lock */
148

149 150 151
	int			(*filter)(void *data, int data_idx, int *val);
	void			*filter_data;
	void			(*filter_cleanup)(void *data);
152
	int			(*get_pendown_state)(void);
153
	int			gpio_pendown;
154 155

	void			(*wait_for_sync)(void);
D
David Brownell 已提交
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
};

/* leave chip selected when we're done, for quicker re-select? */
#if	0
#define	CS_CHANGE(xfer)	((xfer).cs_change = 1)
#else
#define	CS_CHANGE(xfer)	((xfer).cs_change = 0)
#endif

/*--------------------------------------------------------------------------*/

/* The ADS7846 has touchscreen and other sensors.
 * Earlier ads784x chips are somewhat compatible.
 */
#define	ADS_START		(1 << 7)
#define	ADS_A2A1A0_d_y		(1 << 4)	/* differential */
#define	ADS_A2A1A0_d_z1		(3 << 4)	/* differential */
#define	ADS_A2A1A0_d_z2		(4 << 4)	/* differential */
#define	ADS_A2A1A0_d_x		(5 << 4)	/* differential */
#define	ADS_A2A1A0_temp0	(0 << 4)	/* non-differential */
#define	ADS_A2A1A0_vbatt	(2 << 4)	/* non-differential */
#define	ADS_A2A1A0_vaux		(6 << 4)	/* non-differential */
#define	ADS_A2A1A0_temp1	(7 << 4)	/* non-differential */
#define	ADS_8_BIT		(1 << 3)
#define	ADS_12_BIT		(0 << 3)
#define	ADS_SER			(1 << 2)	/* non-differential */
#define	ADS_DFR			(0 << 2)	/* differential */
183
#define	ADS_PD10_PDOWN		(0 << 0)	/* low power mode + penirq */
D
David Brownell 已提交
184 185 186 187 188 189 190
#define	ADS_PD10_ADC_ON		(1 << 0)	/* ADC on */
#define	ADS_PD10_REF_ON		(2 << 0)	/* vREF on + penirq */
#define	ADS_PD10_ALL_ON		(3 << 0)	/* ADC + vREF on */

#define	MAX_12BIT	((1<<12)-1)

/* leave ADC powered up (disables penirq) between differential samples */
191 192 193
#define	READ_12BIT_DFR(x, adc, vref) (ADS_START | ADS_A2A1A0_d_ ## x \
	| ADS_12_BIT | ADS_DFR | \
	(adc ? ADS_PD10_ADC_ON : 0) | (vref ? ADS_PD10_REF_ON : 0))
D
David Brownell 已提交
194

195 196 197
#define	READ_Y(vref)	(READ_12BIT_DFR(y,  1, vref))
#define	READ_Z1(vref)	(READ_12BIT_DFR(z1, 1, vref))
#define	READ_Z2(vref)	(READ_12BIT_DFR(z2, 1, vref))
198

199 200
#define	READ_X(vref)	(READ_12BIT_DFR(x,  1, vref))
#define	PWRDOWN		(READ_12BIT_DFR(y,  0, 0))	/* LAST */
D
David Brownell 已提交
201 202 203 204 205 206 207

/* single-ended samples need to first power up reference voltage;
 * we leave both ADC and VREF powered
 */
#define	READ_12BIT_SER(x) (ADS_START | ADS_A2A1A0_ ## x \
	| ADS_12_BIT | ADS_SER)

208 209
#define	REF_ON	(READ_12BIT_DFR(x, 1, 1))
#define	REF_OFF	(READ_12BIT_DFR(y, 0, 0))
D
David Brownell 已提交
210

211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230
static int get_pendown_state(struct ads7846 *ts)
{
	if (ts->get_pendown_state)
		return ts->get_pendown_state();

	return !gpio_get_value(ts->gpio_pendown);
}

static void ads7846_report_pen_up(struct ads7846 *ts)
{
	struct input_dev *input = ts->input;

	input_report_key(input, BTN_TOUCH, 0);
	input_report_abs(input, ABS_PRESSURE, 0);
	input_sync(input);

	ts->pendown = false;
	dev_vdbg(&ts->spi->dev, "UP\n");
}

231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246
/* Must be called with ts->lock held */
static void ads7846_stop(struct ads7846 *ts)
{
	if (!ts->disabled && !ts->suspended) {
		/* Signal IRQ thread to stop polling and disable the handler. */
		ts->stopped = true;
		mb();
		wake_up(&ts->wait);
		disable_irq(ts->spi->irq);
	}
}

/* Must be called with ts->lock held */
static void ads7846_restart(struct ads7846 *ts)
{
	if (!ts->disabled && !ts->suspended) {
247 248 249 250
		/* Check if pen was released since last stop */
		if (ts->pendown && !get_pendown_state(ts))
			ads7846_report_pen_up(ts);

251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
		/* Tell IRQ thread that it may poll the device. */
		ts->stopped = false;
		mb();
		enable_irq(ts->spi->irq);
	}
}

/* Must be called with ts->lock held */
static void __ads7846_disable(struct ads7846 *ts)
{
	ads7846_stop(ts);
	regulator_disable(ts->reg);

	/*
	 * We know the chip's in low power mode since we always
	 * leave it that way after every request
	 */
}

/* Must be called with ts->lock held */
static void __ads7846_enable(struct ads7846 *ts)
{
273 274 275 276 277 278
	int error;

	error = regulator_enable(ts->reg);
	if (error != 0)
		dev_err(&ts->spi->dev, "Failed to enable supply: %d\n", error);

279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311
	ads7846_restart(ts);
}

static void ads7846_disable(struct ads7846 *ts)
{
	mutex_lock(&ts->lock);

	if (!ts->disabled) {

		if  (!ts->suspended)
			__ads7846_disable(ts);

		ts->disabled = true;
	}

	mutex_unlock(&ts->lock);
}

static void ads7846_enable(struct ads7846 *ts)
{
	mutex_lock(&ts->lock);

	if (ts->disabled) {

		ts->disabled = false;

		if (!ts->suspended)
			__ads7846_enable(ts);
	}

	mutex_unlock(&ts->lock);
}

D
David Brownell 已提交
312 313 314 315
/*--------------------------------------------------------------------------*/

/*
 * Non-touchscreen sensors only use single-ended conversions.
316 317
 * The range is GND..vREF. The ads7843 and ads7835 must use external vREF;
 * ads7846 lets that pin be unconnected, to use internal vREF.
D
David Brownell 已提交
318 319 320
 */

struct ser_req {
321
	u8			ref_on;
D
David Brownell 已提交
322
	u8			command;
323
	u8			ref_off;
D
David Brownell 已提交
324 325 326
	u16			scratch;
	struct spi_message	msg;
	struct spi_transfer	xfer[6];
327 328 329 330 331
	/*
	 * DMA (thus cache coherency maintenance) requires the
	 * transfer buffers to live in their own cache lines.
	 */
	__be16 sample ____cacheline_aligned;
D
David Brownell 已提交
332 333
};

334 335 336 337
struct ads7845_ser_req {
	u8			command[3];
	struct spi_message	msg;
	struct spi_transfer	xfer[2];
338 339 340 341 342
	/*
	 * DMA (thus cache coherency maintenance) requires the
	 * transfer buffers to live in their own cache lines.
	 */
	u8 sample[3] ____cacheline_aligned;
343 344
};

D
David Brownell 已提交
345 346
static int ads7846_read12_ser(struct device *dev, unsigned command)
{
347 348 349 350
	struct spi_device *spi = to_spi_device(dev);
	struct ads7846 *ts = dev_get_drvdata(dev);
	struct ser_req *req;
	int status;
D
David Brownell 已提交
351

352
	req = kzalloc(sizeof *req, GFP_KERNEL);
D
David Brownell 已提交
353 354 355
	if (!req)
		return -ENOMEM;

356
	spi_message_init(&req->msg);
357

358
	/* maybe turn on internal vREF, and let it settle */
359
	if (ts->use_internal) {
360 361 362 363 364 365 366 367 368
		req->ref_on = REF_ON;
		req->xfer[0].tx_buf = &req->ref_on;
		req->xfer[0].len = 1;
		spi_message_add_tail(&req->xfer[0], &req->msg);

		req->xfer[1].rx_buf = &req->scratch;
		req->xfer[1].len = 2;

		/* for 1uF, settle for 800 usec; no cap, 100 usec.  */
369 370
		req->xfer[1].delay.value = ts->vref_delay_usecs;
		req->xfer[1].delay.unit = SPI_DELAY_UNIT_USECS;
371
		spi_message_add_tail(&req->xfer[1], &req->msg);
372 373 374

		/* Enable reference voltage */
		command |= ADS_PD10_REF_ON;
375
	}
D
David Brownell 已提交
376

377 378 379
	/* Enable ADC in every case */
	command |= ADS_PD10_ADC_ON;

D
David Brownell 已提交
380 381 382 383
	/* take sample */
	req->command = (u8) command;
	req->xfer[2].tx_buf = &req->command;
	req->xfer[2].len = 1;
384 385
	spi_message_add_tail(&req->xfer[2], &req->msg);

D
David Brownell 已提交
386 387
	req->xfer[3].rx_buf = &req->sample;
	req->xfer[3].len = 2;
388
	spi_message_add_tail(&req->xfer[3], &req->msg);
D
David Brownell 已提交
389 390 391

	/* REVISIT:  take a few more samples, and compare ... */

392 393 394 395 396 397 398 399 400 401
	/* converter in low power mode & enable PENIRQ */
	req->ref_off = PWRDOWN;
	req->xfer[4].tx_buf = &req->ref_off;
	req->xfer[4].len = 1;
	spi_message_add_tail(&req->xfer[4], &req->msg);

	req->xfer[5].rx_buf = &req->scratch;
	req->xfer[5].len = 2;
	CS_CHANGE(req->xfer[5]);
	spi_message_add_tail(&req->xfer[5], &req->msg);
D
David Brownell 已提交
402

403 404
	mutex_lock(&ts->lock);
	ads7846_stop(ts);
D
David Brownell 已提交
405
	status = spi_sync(spi, &req->msg);
406 407
	ads7846_restart(ts);
	mutex_unlock(&ts->lock);
D
David Brownell 已提交
408

409 410
	if (status == 0) {
		/* on-wire is a must-ignore bit, a BE12 value, then padding */
411 412 413
		status = be16_to_cpu(req->sample);
		status = status >> 3;
		status &= 0x0fff;
414
	}
D
David Brownell 已提交
415

416
	kfree(req);
417
	return status;
D
David Brownell 已提交
418 419
}

420 421
static int ads7845_read12_ser(struct device *dev, unsigned command)
{
422 423 424 425
	struct spi_device *spi = to_spi_device(dev);
	struct ads7846 *ts = dev_get_drvdata(dev);
	struct ads7845_ser_req *req;
	int status;
426

427
	req = kzalloc(sizeof *req, GFP_KERNEL);
428 429 430 431 432 433 434 435 436 437 438
	if (!req)
		return -ENOMEM;

	spi_message_init(&req->msg);

	req->command[0] = (u8) command;
	req->xfer[0].tx_buf = req->command;
	req->xfer[0].rx_buf = req->sample;
	req->xfer[0].len = 3;
	spi_message_add_tail(&req->xfer[0], &req->msg);

439 440
	mutex_lock(&ts->lock);
	ads7846_stop(ts);
441
	status = spi_sync(spi, &req->msg);
442 443
	ads7846_restart(ts);
	mutex_unlock(&ts->lock);
444 445 446

	if (status == 0) {
		/* BE12 value, then padding */
447
		status = get_unaligned_be16(&req->sample[1]);
448 449 450 451 452 453 454 455
		status = status >> 3;
		status &= 0x0fff;
	}

	kfree(req);
	return status;
}

456
#if IS_ENABLED(CONFIG_HWMON)
457 458

#define SHOW(name, var, adjust) static ssize_t \
D
David Brownell 已提交
459 460
name ## _show(struct device *dev, struct device_attribute *attr, char *buf) \
{ \
461
	struct ads7846 *ts = dev_get_drvdata(dev); \
462
	ssize_t v = ads7846_read12_ser(&ts->spi->dev, \
463
			READ_12BIT_SER(var)); \
D
David Brownell 已提交
464 465
	if (v < 0) \
		return v; \
466
	return sprintf(buf, "%u\n", adjust(ts, v)); \
D
David Brownell 已提交
467 468 469
} \
static DEVICE_ATTR(name, S_IRUGO, name ## _show, NULL);

470

471
/* Sysfs conventions report temperatures in millidegrees Celsius.
472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493
 * ADS7846 could use the low-accuracy two-sample scheme, but can't do the high
 * accuracy scheme without calibration data.  For now we won't try either;
 * userspace sees raw sensor values, and must scale/calibrate appropriately.
 */
static inline unsigned null_adjust(struct ads7846 *ts, ssize_t v)
{
	return v;
}

SHOW(temp0, temp0, null_adjust)		/* temp1_input */
SHOW(temp1, temp1, null_adjust)		/* temp2_input */


/* sysfs conventions report voltages in millivolts.  We can convert voltages
 * if we know vREF.  userspace may need to scale vAUX to match the board's
 * external resistors; we assume that vBATT only uses the internal ones.
 */
static inline unsigned vaux_adjust(struct ads7846 *ts, ssize_t v)
{
	unsigned retval = v;

	/* external resistors may scale vAUX into 0..vREF */
494
	retval *= ts->vref_mv;
495
	retval = retval >> 12;
496

497 498 499 500 501 502 503 504 505 506
	return retval;
}

static inline unsigned vbatt_adjust(struct ads7846 *ts, ssize_t v)
{
	unsigned retval = vaux_adjust(ts, v);

	/* ads7846 has a resistor ladder to scale this signal down */
	if (ts->model == 7846)
		retval *= 4;
507

508 509 510 511 512 513
	return retval;
}

SHOW(in0_input, vaux, vaux_adjust)
SHOW(in1_input, vbatt, vbatt_adjust)

514 515 516
static umode_t ads7846_is_visible(struct kobject *kobj, struct attribute *attr,
				  int index)
{
W
Wang Qing 已提交
517
	struct device *dev = kobj_to_dev(kobj);
518
	struct ads7846 *ts = dev_get_drvdata(dev);
519

520 521 522 523
	if (ts->model == 7843 && index < 2)	/* in0, in1 */
		return 0;
	if (ts->model == 7845 && index != 2)	/* in0 */
		return 0;
524

525 526
	return attr->mode;
}
527

528 529 530 531 532
static struct attribute *ads7846_attributes[] = {
	&dev_attr_temp0.attr,		/* 0 */
	&dev_attr_temp1.attr,		/* 1 */
	&dev_attr_in0_input.attr,	/* 2 */
	&dev_attr_in1_input.attr,	/* 3 */
533 534 535
	NULL,
};

536
static const struct attribute_group ads7846_attr_group = {
537 538
	.attrs = ads7846_attributes,
	.is_visible = ads7846_is_visible,
539
};
540
__ATTRIBUTE_GROUPS(ads7846_attr);
541 542 543 544 545 546

static int ads784x_hwmon_register(struct spi_device *spi, struct ads7846 *ts)
{
	/* hwmon sensors need a reference voltage */
	switch (ts->model) {
	case 7846:
547
		if (!ts->vref_mv) {
548
			dev_dbg(&spi->dev, "assuming 2.5V internal vREF\n");
549
			ts->vref_mv = 2500;
550
			ts->use_internal = true;
551 552 553 554
		}
		break;
	case 7845:
	case 7843:
555
		if (!ts->vref_mv) {
556 557 558 559 560 561 562 563
			dev_warn(&spi->dev,
				"external vREF for ADS%d not specified\n",
				ts->model);
			return 0;
		}
		break;
	}

564 565
	ts->hwmon = hwmon_device_register_with_groups(&spi->dev, spi->modalias,
						      ts, ads7846_attr_groups);
566

567
	return PTR_ERR_OR_ZERO(ts->hwmon);
568 569 570 571 572
}

static void ads784x_hwmon_unregister(struct spi_device *spi,
				     struct ads7846 *ts)
{
573
	if (ts->hwmon)
574 575 576 577 578 579 580 581 582 583 584 585 586 587 588
		hwmon_device_unregister(ts->hwmon);
}

#else
static inline int ads784x_hwmon_register(struct spi_device *spi,
					 struct ads7846 *ts)
{
	return 0;
}

static inline void ads784x_hwmon_unregister(struct spi_device *spi,
					    struct ads7846 *ts)
{
}
#endif
D
David Brownell 已提交
589

590 591 592
static ssize_t ads7846_pen_down_show(struct device *dev,
				     struct device_attribute *attr, char *buf)
{
593 594 595
	struct ads7846 *ts = dev_get_drvdata(dev);

	return sprintf(buf, "%u\n", ts->pendown);
596 597 598 599
}

static DEVICE_ATTR(pen_down, S_IRUGO, ads7846_pen_down_show, NULL);

I
Imre Deak 已提交
600 601 602
static ssize_t ads7846_disable_show(struct device *dev,
				     struct device_attribute *attr, char *buf)
{
603
	struct ads7846 *ts = dev_get_drvdata(dev);
I
Imre Deak 已提交
604 605 606 607 608 609 610 611 612

	return sprintf(buf, "%u\n", ts->disabled);
}

static ssize_t ads7846_disable_store(struct device *dev,
				     struct device_attribute *attr,
				     const char *buf, size_t count)
{
	struct ads7846 *ts = dev_get_drvdata(dev);
613 614
	unsigned int i;
	int err;
615

616 617 618
	err = kstrtouint(buf, 10, &i);
	if (err)
		return err;
I
Imre Deak 已提交
619 620 621 622 623 624 625 626 627 628 629

	if (i)
		ads7846_disable(ts);
	else
		ads7846_enable(ts);

	return count;
}

static DEVICE_ATTR(disable, 0664, ads7846_disable_show, ads7846_disable_store);

630
static struct attribute *ads784x_attributes[] = {
631 632 633 634 635
	&dev_attr_pen_down.attr,
	&dev_attr_disable.attr,
	NULL,
};

636
static const struct attribute_group ads784x_attr_group = {
637
	.attrs = ads784x_attributes,
638 639
};

D
David Brownell 已提交
640 641
/*--------------------------------------------------------------------------*/

642 643 644 645
static void null_wait_for_sync(void)
{
}

646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694
static int ads7846_debounce_filter(void *ads, int data_idx, int *val)
{
	struct ads7846 *ts = ads;

	if (!ts->read_cnt || (abs(ts->last_read - *val) > ts->debounce_tol)) {
		/* Start over collecting consistent readings. */
		ts->read_rep = 0;
		/*
		 * Repeat it, if this was the first read or the read
		 * wasn't consistent enough.
		 */
		if (ts->read_cnt < ts->debounce_max) {
			ts->last_read = *val;
			ts->read_cnt++;
			return ADS7846_FILTER_REPEAT;
		} else {
			/*
			 * Maximum number of debouncing reached and still
			 * not enough number of consistent readings. Abort
			 * the whole sample, repeat it in the next sampling
			 * period.
			 */
			ts->read_cnt = 0;
			return ADS7846_FILTER_IGNORE;
		}
	} else {
		if (++ts->read_rep > ts->debounce_rep) {
			/*
			 * Got a good reading for this coordinate,
			 * go for the next one.
			 */
			ts->read_cnt = 0;
			ts->read_rep = 0;
			return ADS7846_FILTER_OK;
		} else {
			/* Read more values that are consistent. */
			ts->read_cnt++;
			return ADS7846_FILTER_REPEAT;
		}
	}
}

static int ads7846_no_filter(void *ads, int data_idx, int *val)
{
	return ADS7846_FILTER_OK;
}

static int ads7846_get_value(struct ads7846 *ts, struct spi_message *m)
{
695
	int value;
696 697
	struct spi_transfer *t =
		list_entry(m->transfers.prev, struct spi_transfer, transfer_list);
698
	struct ads7846_buf *buf = t->rx_buf;
699

700
	value = be16_to_cpup(&buf->data_be16);
701 702 703

	/* enforce ADC output is 12 bits width */
	return (value >> 3) & 0xfff;
704 705 706 707 708 709
}

static void ads7846_update_value(struct spi_message *m, int val)
{
	struct spi_transfer *t =
		list_entry(m->transfers.prev, struct spi_transfer, transfer_list);
710
	struct ads7846_buf *buf = t->rx_buf;
711

712
	buf->data = val;
713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730
}

static void ads7846_read_state(struct ads7846 *ts)
{
	struct ads7846_packet *packet = ts->packet;
	struct spi_message *m;
	int msg_idx = 0;
	int val;
	int action;
	int error;

	while (msg_idx < ts->msg_count) {

		ts->wait_for_sync();

		m = &ts->msg[msg_idx];
		error = spi_sync(ts->spi, m);
		if (error) {
731
			dev_err(&ts->spi->dev, "spi_sync --> %d\n", error);
732 733 734 735 736 737 738 739 740
			packet->tc.ignore = true;
			return;
		}

		/*
		 * Last message is power down request, no need to convert
		 * or filter the value.
		 */
		if (msg_idx < ts->msg_count - 1) {
D
David Brownell 已提交
741

742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769
			val = ads7846_get_value(ts, m);

			action = ts->filter(ts->filter_data, msg_idx, &val);
			switch (action) {
			case ADS7846_FILTER_REPEAT:
				continue;

			case ADS7846_FILTER_IGNORE:
				packet->tc.ignore = true;
				msg_idx = ts->msg_count - 1;
				continue;

			case ADS7846_FILTER_OK:
				ads7846_update_value(m, val);
				packet->tc.ignore = false;
				msg_idx++;
				break;

			default:
				BUG();
			}
		} else {
			msg_idx++;
		}
	}
}

static void ads7846_report_state(struct ads7846 *ts)
D
David Brownell 已提交
770
{
771 772 773
	struct ads7846_packet *packet = ts->packet;
	unsigned int Rt;
	u16 x, y, z1, z2;
D
David Brownell 已提交
774

775 776 777 778
	/*
	 * ads7846_get_value() does in-place conversion (including byte swap)
	 * from on-the-wire format as part of debouncing to get stable
	 * readings.
D
David Brownell 已提交
779
	 */
780 781
	x = packet->tc.x.data;
	y = packet->tc.y.data;
782 783 784 785
	if (ts->model == 7845) {
		z1 = 0;
		z2 = 0;
	} else {
786 787
		z1 = packet->tc.z1.data;
		z2 = packet->tc.z2.data;
788
	}
D
David Brownell 已提交
789 790 791 792 793

	/* range filtering */
	if (x == MAX_12BIT)
		x = 0;

794 795
	if (ts->model == 7843) {
		Rt = ts->pressure_max / 2;
796 797 798 799 800 801
	} else if (ts->model == 7845) {
		if (get_pendown_state(ts))
			Rt = ts->pressure_max / 2;
		else
			Rt = 0;
		dev_vdbg(&ts->spi->dev, "x/y: %d/%d, PD %d\n", x, y, Rt);
802
	} else if (likely(x && z1)) {
D
David Brownell 已提交
803 804 805 806
		/* compute touch pressure resistance using equation #2 */
		Rt = z2;
		Rt -= z1;
		Rt *= ts->x_plate_ohms;
807 808
		Rt = DIV_ROUND_CLOSEST(Rt, 16);
		Rt *= x;
D
David Brownell 已提交
809
		Rt /= z1;
810
		Rt = DIV_ROUND_CLOSEST(Rt, 256);
811
	} else {
D
David Brownell 已提交
812
		Rt = 0;
813
	}
814

815 816
	/*
	 * Sample found inconsistent by debouncing or pressure is beyond
817 818 819
	 * the maximum. Don't report it to user space, repeat at least
	 * once more the measurement
	 */
820
	if (packet->tc.ignore || Rt > ts->pressure_max) {
821 822
		dev_vdbg(&ts->spi->dev, "ignored %d pressure %d\n",
			 packet->tc.ignore, Rt);
823 824 825
		return;
	}

826 827
	/*
	 * Maybe check the pendown state before reporting. This discards
828 829 830 831
	 * false readings when the pen is lifted.
	 */
	if (ts->penirq_recheck_delay_usecs) {
		udelay(ts->penirq_recheck_delay_usecs);
832
		if (!get_pendown_state(ts))
833 834 835
			Rt = 0;
	}

836 837 838
	/*
	 * NOTE: We can't rely on the pressure to determine the pen down
	 * state, even this controller has a pressure sensor. The pressure
839 840
	 * value can fluctuate for quite a while after lifting the pen and
	 * in some cases may not even settle at the expected value.
D
David Brownell 已提交
841
	 *
842 843
	 * The only safe way to check for the pen up condition is in the
	 * timer by reading the pen signal state (it's a GPIO _and_ IRQ).
D
David Brownell 已提交
844 845
	 */
	if (Rt) {
846
		struct input_dev *input = ts->input;
847

848 849
		if (!ts->pendown) {
			input_report_key(input, BTN_TOUCH, 1);
850
			ts->pendown = true;
851
			dev_vdbg(&ts->spi->dev, "DOWN\n");
852
		}
853

854
		touchscreen_report_pos(input, &ts->core_prop, x, y, false);
855
		input_report_abs(input, ABS_PRESSURE, ts->pressure_max - Rt);
D
David Brownell 已提交
856

857
		input_sync(input);
858
		dev_vdbg(&ts->spi->dev, "%4d/%4d/%4d\n", x, y, Rt);
859
	}
860 861
}

862
static irqreturn_t ads7846_hard_irq(int irq, void *handle)
863
{
864
	struct ads7846 *ts = handle;
865

866
	return get_pendown_state(ts) ? IRQ_WAKE_THREAD : IRQ_HANDLED;
867 868 869
}


870
static irqreturn_t ads7846_irq(int irq, void *handle)
871 872
{
	struct ads7846 *ts = handle;
I
Imre Deak 已提交
873

874 875
	/* Start with a small delay before checking pendown state */
	msleep(TS_POLL_DELAY);
D
David Brownell 已提交
876

877
	while (!ts->stopped && get_pendown_state(ts)) {
D
David Brownell 已提交
878

879 880
		/* pen is down, continue with the measurement */
		ads7846_read_state(ts);
D
David Brownell 已提交
881

882 883
		if (!ts->stopped)
			ads7846_report_state(ts);
884

885 886
		wait_event_timeout(ts->wait, ts->stopped,
				   msecs_to_jiffies(TS_POLL_PERIOD));
D
David Brownell 已提交
887 888
	}

889 890
	if (ts->pendown && !ts->stopped)
		ads7846_report_pen_up(ts);
891

892
	return IRQ_HANDLED;
I
Imre Deak 已提交
893 894
}

895
static int __maybe_unused ads7846_suspend(struct device *dev)
I
Imre Deak 已提交
896
{
897
	struct ads7846 *ts = dev_get_drvdata(dev);
I
Imre Deak 已提交
898

899
	mutex_lock(&ts->lock);
I
Imre Deak 已提交
900

901
	if (!ts->suspended) {
I
Imre Deak 已提交
902

903 904
		if (!ts->disabled)
			__ads7846_disable(ts);
I
Imre Deak 已提交
905

906 907
		if (device_may_wakeup(&ts->spi->dev))
			enable_irq_wake(ts->spi->irq);
908

909 910 911 912
		ts->suspended = true;
	}

	mutex_unlock(&ts->lock);
I
Imre Deak 已提交
913

914
	return 0;
D
David Brownell 已提交
915 916
}

917
static int __maybe_unused ads7846_resume(struct device *dev)
D
David Brownell 已提交
918
{
919
	struct ads7846 *ts = dev_get_drvdata(dev);
D
David Brownell 已提交
920

921 922 923
	mutex_lock(&ts->lock);

	if (ts->suspended) {
924

925
		ts->suspended = false;
I
Imre Deak 已提交
926

927 928
		if (device_may_wakeup(&ts->spi->dev))
			disable_irq_wake(ts->spi->irq);
I
Imre Deak 已提交
929

930 931 932 933 934
		if (!ts->disabled)
			__ads7846_enable(ts);
	}

	mutex_unlock(&ts->lock);
I
Imre Deak 已提交
935

D
David Brownell 已提交
936 937
	return 0;
}
938 939

static SIMPLE_DEV_PM_OPS(ads7846_pm, ads7846_suspend, ads7846_resume);
D
David Brownell 已提交
940

B
Bill Pemberton 已提交
941
static int ads7846_setup_pendown(struct spi_device *spi,
942 943
				 struct ads7846 *ts,
				 const struct ads7846_platform_data *pdata)
944 945 946
{
	int err;

947 948
	/*
	 * REVISIT when the irq can be triggered active-low, or if for some
949 950 951 952 953 954
	 * reason the touchscreen isn't hooked up, we don't need to access
	 * the pendown state.
	 */

	if (pdata->get_pendown_state) {
		ts->get_pendown_state = pdata->get_pendown_state;
955
	} else if (gpio_is_valid(pdata->gpio_pendown)) {
956

957 958
		err = gpio_request_one(pdata->gpio_pendown, GPIOF_IN,
				       "ads7846_pendown");
959
		if (err) {
960 961 962
			dev_err(&spi->dev,
				"failed to request/setup pendown GPIO%d: %d\n",
				pdata->gpio_pendown, err);
963 964
			return err;
		}
965

966 967
		ts->gpio_pendown = pdata->gpio_pendown;

968 969 970
		if (pdata->gpio_pendown_debounce)
			gpio_set_debounce(pdata->gpio_pendown,
					  pdata->gpio_pendown_debounce);
971 972 973 974
	} else {
		dev_err(&spi->dev, "no get_pendown_state nor gpio_pendown?\n");
		return -EINVAL;
	}
975

976 977 978
	return 0;
}

979 980 981 982
/*
 * Set up the transfers to read touchscreen state; this assumes we
 * use formula #2 for pressure, not #3.
 */
B
Bill Pemberton 已提交
983
static void ads7846_setup_spi_msg(struct ads7846 *ts,
984
				  const struct ads7846_platform_data *pdata)
D
David Brownell 已提交
985
{
986 987 988 989
	struct spi_message *m = &ts->msg[0];
	struct spi_transfer *x = ts->xfer;
	struct ads7846_packet *packet = ts->packet;
	int vref = pdata->keep_vref_on;
990

991
	if (ts->model == 7873) {
992 993
		/*
		 * The AD7873 is almost identical to the ADS7846
994
		 * keep VREF off during differential/ratiometric
995
		 * conversion modes.
996 997 998 999 1000
		 */
		ts->model = 7846;
		vref = 0;
	}

1001
	ts->msg_count = 1;
1002
	spi_message_init(m);
1003
	m->context = ts;
1004

1005 1006 1007 1008 1009
	packet->read_y_cmd.cmd = READ_Y(vref);
	x->tx_buf = &packet->read_y_cmd;
	x->rx_buf = &packet->tc.y;
	x->len = 3;
	spi_message_add_tail(x, m);
1010

1011 1012
	/*
	 * The first sample after switching drivers can be low quality;
1013 1014 1015 1016
	 * optionally discard it, using a second one after the signals
	 * have had enough time to stabilize.
	 */
	if (pdata->settle_delay_usecs) {
1017 1018
		x->delay.value = pdata->settle_delay_usecs;
		x->delay.unit = SPI_DELAY_UNIT_USECS;
1019 1020
		x++;

1021
		x->tx_buf = &packet->read_y_cmd;
1022
		x->rx_buf = &packet->tc.y;
1023
		x->len = 3;
1024 1025 1026
		spi_message_add_tail(x, m);
	}

1027
	ts->msg_count++;
1028 1029
	m++;
	spi_message_init(m);
1030
	m->context = ts;
1031

1032 1033 1034 1035 1036 1037 1038
	/* turn y- off, x+ on, then leave in lowpower */
	x++;
	packet->read_x_cmd.cmd = READ_X(vref);
	x->tx_buf = &packet->read_x_cmd;
	x->rx_buf = &packet->tc.x;
	x->len = 3;
	spi_message_add_tail(x, m);
1039

1040 1041
	/* ... maybe discard first sample ... */
	if (pdata->settle_delay_usecs) {
1042 1043
		x->delay.value = pdata->settle_delay_usecs;
		x->delay.unit = SPI_DELAY_UNIT_USECS;
1044 1045

		x++;
1046
		x->tx_buf = &packet->read_x_cmd;
1047
		x->rx_buf = &packet->tc.x;
1048
		x->len = 3;
1049 1050 1051
		spi_message_add_tail(x, m);
	}

D
David Brownell 已提交
1052 1053
	/* turn y+ off, x- on; we'll use formula #2 */
	if (ts->model == 7846) {
1054
		ts->msg_count++;
1055 1056
		m++;
		spi_message_init(m);
1057
		m->context = ts;
1058

1059
		x++;
1060 1061
		packet->read_z1_cmd.cmd = READ_Z1(vref);
		x->tx_buf = &packet->read_z1_cmd;
1062
		x->rx_buf = &packet->tc.z1;
1063
		x->len = 3;
1064 1065
		spi_message_add_tail(x, m);

1066 1067
		/* ... maybe discard first sample ... */
		if (pdata->settle_delay_usecs) {
1068 1069
			x->delay.value = pdata->settle_delay_usecs;
			x->delay.unit = SPI_DELAY_UNIT_USECS;
1070 1071

			x++;
1072
			x->tx_buf = &packet->read_z1_cmd;
1073
			x->rx_buf = &packet->tc.z1;
1074
			x->len = 3;
1075 1076 1077
			spi_message_add_tail(x, m);
		}

1078
		ts->msg_count++;
1079 1080
		m++;
		spi_message_init(m);
1081
		m->context = ts;
D
David Brownell 已提交
1082

1083
		x++;
1084 1085
		packet->read_z2_cmd.cmd = READ_Z2(vref);
		x->tx_buf = &packet->read_z2_cmd;
1086
		x->rx_buf = &packet->tc.z2;
1087
		x->len = 3;
1088
		spi_message_add_tail(x, m);
D
David Brownell 已提交
1089

1090 1091
		/* ... maybe discard first sample ... */
		if (pdata->settle_delay_usecs) {
1092 1093
			x->delay.value = pdata->settle_delay_usecs;
			x->delay.unit = SPI_DELAY_UNIT_USECS;
1094 1095

			x++;
1096
			x->tx_buf = &packet->read_z2_cmd;
1097
			x->rx_buf = &packet->tc.z2;
1098
			x->len = 3;
1099 1100
			spi_message_add_tail(x, m);
		}
1101
	}
1102 1103

	/* power down */
1104
	ts->msg_count++;
1105 1106
	m++;
	spi_message_init(m);
1107
	m->context = ts;
1108

1109 1110 1111 1112
	x++;
	packet->pwrdown_cmd.cmd = PWRDOWN;
	x->tx_buf = &packet->pwrdown_cmd;
	x->len = 3;
1113

1114
	CS_CHANGE(*x);
1115
	spi_message_add_tail(x, m);
1116
}
D
David Brownell 已提交
1117

1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133
#ifdef CONFIG_OF
static const struct of_device_id ads7846_dt_ids[] = {
	{ .compatible = "ti,tsc2046",	.data = (void *) 7846 },
	{ .compatible = "ti,ads7843",	.data = (void *) 7843 },
	{ .compatible = "ti,ads7845",	.data = (void *) 7845 },
	{ .compatible = "ti,ads7846",	.data = (void *) 7846 },
	{ .compatible = "ti,ads7873",	.data = (void *) 7873 },
	{ }
};
MODULE_DEVICE_TABLE(of, ads7846_dt_ids);

static const struct ads7846_platform_data *ads7846_probe_dt(struct device *dev)
{
	struct ads7846_platform_data *pdata;
	struct device_node *node = dev->of_node;
	const struct of_device_id *match;
1134
	u32 value;
1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172

	if (!node) {
		dev_err(dev, "Device does not have associated DT data\n");
		return ERR_PTR(-EINVAL);
	}

	match = of_match_device(ads7846_dt_ids, dev);
	if (!match) {
		dev_err(dev, "Unknown device model\n");
		return ERR_PTR(-EINVAL);
	}

	pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
	if (!pdata)
		return ERR_PTR(-ENOMEM);

	pdata->model = (unsigned long)match->data;

	of_property_read_u16(node, "ti,vref-delay-usecs",
			     &pdata->vref_delay_usecs);
	of_property_read_u16(node, "ti,vref-mv", &pdata->vref_mv);
	pdata->keep_vref_on = of_property_read_bool(node, "ti,keep-vref-on");

	pdata->swap_xy = of_property_read_bool(node, "ti,swap-xy");

	of_property_read_u16(node, "ti,settle-delay-usec",
			     &pdata->settle_delay_usecs);
	of_property_read_u16(node, "ti,penirq-recheck-delay-usecs",
			     &pdata->penirq_recheck_delay_usecs);

	of_property_read_u16(node, "ti,x-plate-ohms", &pdata->x_plate_ohms);
	of_property_read_u16(node, "ti,y-plate-ohms", &pdata->y_plate_ohms);

	of_property_read_u16(node, "ti,x-min", &pdata->x_min);
	of_property_read_u16(node, "ti,y-min", &pdata->y_min);
	of_property_read_u16(node, "ti,x-max", &pdata->x_max);
	of_property_read_u16(node, "ti,y-max", &pdata->y_max);

1173 1174 1175 1176
	/*
	 * touchscreen-max-pressure gets parsed during
	 * touchscreen_parse_properties()
	 */
1177
	of_property_read_u16(node, "ti,pressure-min", &pdata->pressure_min);
1178 1179
	if (!of_property_read_u32(node, "touchscreen-min-pressure", &value))
		pdata->pressure_min = (u16) value;
1180 1181 1182
	of_property_read_u16(node, "ti,pressure-max", &pdata->pressure_max);

	of_property_read_u16(node, "ti,debounce-max", &pdata->debounce_max);
1183 1184
	if (!of_property_read_u32(node, "touchscreen-average-samples", &value))
		pdata->debounce_max = (u16) value;
1185 1186 1187 1188 1189 1190
	of_property_read_u16(node, "ti,debounce-tol", &pdata->debounce_tol);
	of_property_read_u16(node, "ti,debounce-rep", &pdata->debounce_rep);

	of_property_read_u32(node, "ti,pendown-gpio-debounce",
			     &pdata->gpio_pendown_debounce);

1191 1192
	pdata->wakeup = of_property_read_bool(node, "wakeup-source") ||
			of_property_read_bool(node, "linux,wakeup");
1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205

	pdata->gpio_pendown = of_get_named_gpio(dev->of_node, "pendown-gpio", 0);

	return pdata;
}
#else
static const struct ads7846_platform_data *ads7846_probe_dt(struct device *dev)
{
	dev_err(dev, "no platform data defined\n");
	return ERR_PTR(-EINVAL);
}
#endif

B
Bill Pemberton 已提交
1206
static int ads7846_probe(struct spi_device *spi)
1207
{
1208
	const struct ads7846_platform_data *pdata;
1209 1210 1211 1212 1213 1214 1215 1216
	struct ads7846 *ts;
	struct ads7846_packet *packet;
	struct input_dev *input_dev;
	unsigned long irq_flags;
	int err;

	if (!spi->irq) {
		dev_dbg(&spi->dev, "no IRQ?\n");
1217
		return -EINVAL;
1218 1219 1220 1221
	}

	/* don't exceed max specified sample rate */
	if (spi->max_speed_hz > (125000 * SAMPLE_BITS)) {
1222
		dev_err(&spi->dev, "f(sample) %d KHz?\n",
1223 1224 1225 1226
				(spi->max_speed_hz/SAMPLE_BITS)/1000);
		return -EINVAL;
	}

1227 1228
	/*
	 * We'd set TX word size 8 bits and RX word size to 13 bits ... except
1229 1230 1231 1232 1233 1234 1235 1236
	 * that even if the hardware can do that, the SPI controller driver
	 * may not.  So we stick to very-portable 8 bit words, both RX and TX.
	 */
	spi->bits_per_word = 8;
	spi->mode = SPI_MODE_0;
	err = spi_setup(spi);
	if (err < 0)
		return err;
D
David Brownell 已提交
1237

1238 1239 1240 1241 1242 1243 1244 1245
	ts = kzalloc(sizeof(struct ads7846), GFP_KERNEL);
	packet = kzalloc(sizeof(struct ads7846_packet), GFP_KERNEL);
	input_dev = input_allocate_device();
	if (!ts || !packet || !input_dev) {
		err = -ENOMEM;
		goto err_free_mem;
	}

1246
	spi_set_drvdata(spi, ts);
1247 1248 1249 1250 1251 1252 1253 1254

	ts->packet = packet;
	ts->spi = spi;
	ts->input = input_dev;

	mutex_init(&ts->lock);
	init_waitqueue_head(&ts->wait);

1255 1256 1257
	pdata = dev_get_platdata(&spi->dev);
	if (!pdata) {
		pdata = ads7846_probe_dt(&spi->dev);
1258 1259 1260 1261
		if (IS_ERR(pdata)) {
			err = PTR_ERR(pdata);
			goto err_free_mem;
		}
1262 1263
	}

1264 1265 1266
	ts->model = pdata->model ? : 7846;
	ts->vref_delay_usecs = pdata->vref_delay_usecs ? : 100;
	ts->x_plate_ohms = pdata->x_plate_ohms ? : 400;
1267 1268
	ts->vref_mv = pdata->vref_mv;

1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288
	if (pdata->filter != NULL) {
		if (pdata->filter_init != NULL) {
			err = pdata->filter_init(pdata, &ts->filter_data);
			if (err < 0)
				goto err_free_mem;
		}
		ts->filter = pdata->filter;
		ts->filter_cleanup = pdata->filter_cleanup;
	} else if (pdata->debounce_max) {
		ts->debounce_max = pdata->debounce_max;
		if (ts->debounce_max < 2)
			ts->debounce_max = 2;
		ts->debounce_tol = pdata->debounce_tol;
		ts->debounce_rep = pdata->debounce_rep;
		ts->filter = ads7846_debounce_filter;
		ts->filter_data = ts;
	} else {
		ts->filter = ads7846_no_filter;
	}

1289
	err = ads7846_setup_pendown(spi, ts, pdata);
1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318
	if (err)
		goto err_cleanup_filter;

	if (pdata->penirq_recheck_delay_usecs)
		ts->penirq_recheck_delay_usecs =
				pdata->penirq_recheck_delay_usecs;

	ts->wait_for_sync = pdata->wait_for_sync ? : null_wait_for_sync;

	snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(&spi->dev));
	snprintf(ts->name, sizeof(ts->name), "ADS%d Touchscreen", ts->model);

	input_dev->name = ts->name;
	input_dev->phys = ts->phys;
	input_dev->dev.parent = &spi->dev;

	input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
	input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
	input_set_abs_params(input_dev, ABS_X,
			pdata->x_min ? : 0,
			pdata->x_max ? : MAX_12BIT,
			0, 0);
	input_set_abs_params(input_dev, ABS_Y,
			pdata->y_min ? : 0,
			pdata->y_max ? : MAX_12BIT,
			0, 0);
	input_set_abs_params(input_dev, ABS_PRESSURE,
			pdata->pressure_min, pdata->pressure_max, 0, 0);

1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335
	/*
	 * Parse common framework properties. Must be done here to ensure the
	 * correct behaviour in case of using the legacy vendor bindings. The
	 * general binding value overrides the vendor specific one.
	 */
	touchscreen_parse_properties(ts->input, false, &ts->core_prop);
	ts->pressure_max = input_abs_get_max(input_dev, ABS_PRESSURE) ? : ~0;

	/*
	 * Check if legacy ti,swap-xy binding is used instead of
	 * touchscreen-swapped-x-y
	 */
	if (!ts->core_prop.swap_x_y && pdata->swap_xy) {
		swap(input_dev->absinfo[ABS_X], input_dev->absinfo[ABS_Y]);
		ts->core_prop.swap_x_y = true;
	}

1336
	ads7846_setup_spi_msg(ts, pdata);
1337

1338 1339
	ts->reg = regulator_get(&spi->dev, "vcc");
	if (IS_ERR(ts->reg)) {
1340
		err = PTR_ERR(ts->reg);
1341
		dev_err(&spi->dev, "unable to get regulator: %d\n", err);
1342 1343 1344 1345 1346 1347 1348 1349 1350
		goto err_free_gpio;
	}

	err = regulator_enable(ts->reg);
	if (err) {
		dev_err(&spi->dev, "unable to enable regulator: %d\n", err);
		goto err_put_regulator;
	}

1351
	irq_flags = pdata->irq_flags ? : IRQF_TRIGGER_FALLING;
1352
	irq_flags |= IRQF_ONESHOT;
1353

1354 1355
	err = request_threaded_irq(spi->irq, ads7846_hard_irq, ads7846_irq,
				   irq_flags, spi->dev.driver->name, ts);
1356
	if (err && !pdata->irq_flags) {
1357 1358
		dev_info(&spi->dev,
			"trying pin change workaround on irq %d\n", spi->irq);
1359 1360 1361 1362
		irq_flags |= IRQF_TRIGGER_RISING;
		err = request_threaded_irq(spi->irq,
				  ads7846_hard_irq, ads7846_irq,
				  irq_flags, spi->dev.driver->name, ts);
1363 1364 1365 1366 1367
	}

	if (err) {
		dev_dbg(&spi->dev, "irq %d busy?\n", spi->irq);
		goto err_disable_regulator;
D
David Brownell 已提交
1368 1369
	}

1370 1371 1372 1373
	err = ads784x_hwmon_register(spi, ts);
	if (err)
		goto err_free_irq;

1374
	dev_info(&spi->dev, "touchscreen, irq %d\n", spi->irq);
D
David Brownell 已提交
1375

1376 1377
	/*
	 * Take a first sample, leaving nPENIRQ active and vREF off; avoid
D
David Brownell 已提交
1378 1379
	 * the touchscreen, in case it's not connected.
	 */
1380 1381 1382
	if (ts->model == 7845)
		ads7845_read12_ser(&spi->dev, PWRDOWN);
	else
1383
		(void) ads7846_read12_ser(&spi->dev, READ_12BIT_SER(vaux));
D
David Brownell 已提交
1384

1385
	err = sysfs_create_group(&spi->dev.kobj, &ads784x_attr_group);
1386
	if (err)
1387
		goto err_remove_hwmon;
I
Imre Deak 已提交
1388

1389 1390
	err = input_register_device(input_dev);
	if (err)
1391
		goto err_remove_attr_group;
1392

1393 1394
	device_init_wakeup(&spi->dev, pdata->wakeup);

1395 1396 1397 1398 1399 1400 1401
	/*
	 * If device does not carry platform data we must have allocated it
	 * when parsing DT data.
	 */
	if (!dev_get_platdata(&spi->dev))
		devm_kfree(&spi->dev, (void *)pdata);

D
David Brownell 已提交
1402
	return 0;
1403

1404
 err_remove_attr_group:
1405 1406 1407
	sysfs_remove_group(&spi->dev.kobj, &ads784x_attr_group);
 err_remove_hwmon:
	ads784x_hwmon_unregister(spi, ts);
1408
 err_free_irq:
1409
	free_irq(spi->irq, ts);
1410 1411 1412 1413
 err_disable_regulator:
	regulator_disable(ts->reg);
 err_put_regulator:
	regulator_put(ts->reg);
1414
 err_free_gpio:
1415
	if (!ts->get_pendown_state)
1416
		gpio_free(ts->gpio_pendown);
1417 1418 1419
 err_cleanup_filter:
	if (ts->filter_cleanup)
		ts->filter_cleanup(ts->filter_data);
1420 1421
 err_free_mem:
	input_free_device(input_dev);
1422
	kfree(packet);
1423 1424
	kfree(ts);
	return err;
D
David Brownell 已提交
1425 1426
}

B
Bill Pemberton 已提交
1427
static int ads7846_remove(struct spi_device *spi)
D
David Brownell 已提交
1428
{
1429
	struct ads7846 *ts = spi_get_drvdata(spi);
D
David Brownell 已提交
1430

1431
	sysfs_remove_group(&spi->dev.kobj, &ads784x_attr_group);
D
David Brownell 已提交
1432

1433
	ads7846_disable(ts);
I
Imre Deak 已提交
1434
	free_irq(ts->spi->irq, ts);
1435 1436 1437 1438

	input_unregister_device(ts->input);

	ads784x_hwmon_unregister(spi, ts);
I
Imre Deak 已提交
1439

1440 1441
	regulator_put(ts->reg);

1442 1443 1444 1445 1446
	if (!ts->get_pendown_state) {
		/*
		 * If we are not using specialized pendown method we must
		 * have been relying on gpio we set up ourselves.
		 */
1447
		gpio_free(ts->gpio_pendown);
1448
	}
1449

1450 1451 1452
	if (ts->filter_cleanup)
		ts->filter_cleanup(ts->filter_data);

1453
	kfree(ts->packet);
D
David Brownell 已提交
1454 1455
	kfree(ts);

1456
	dev_dbg(&spi->dev, "unregistered touchscreen\n");
1457

D
David Brownell 已提交
1458 1459 1460
	return 0;
}

1461 1462 1463
static struct spi_driver ads7846_driver = {
	.driver = {
		.name	= "ads7846",
1464
		.pm	= &ads7846_pm,
1465
		.of_match_table = of_match_ptr(ads7846_dt_ids),
1466
	},
D
David Brownell 已提交
1467
	.probe		= ads7846_probe,
B
Bill Pemberton 已提交
1468
	.remove		= ads7846_remove,
D
David Brownell 已提交
1469 1470
};

1471
module_spi_driver(ads7846_driver);
D
David Brownell 已提交
1472 1473 1474

MODULE_DESCRIPTION("ADS7846 TouchScreen Driver");
MODULE_LICENSE("GPL");
1475
MODULE_ALIAS("spi:ads7846");