Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 47819
b: refs/heads/master
c: de2defd
h: refs/heads/master
i:
  47817: d61646a
  47815: df886e6
v: v3
  • Loading branch information
Imre Deak authored and Dmitry Torokhov committed Jan 18, 2007
1 parent 5971b24 commit 1704188
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: da970e69efb9fd0be0c23ace5bde42d4caf17b40
refs/heads/master: de2defd96d7d92fe8b5f9cf2bfd385d8d4819923
30 changes: 17 additions & 13 deletions trunk/drivers/input/touchscreen/ads7846.c
Original file line number Diff line number Diff line change
Expand Up @@ -145,24 +145,25 @@ struct ads7846 {
#define MAX_12BIT ((1<<12)-1)

/* leave ADC powered up (disables penirq) between differential samples */
#define READ_12BIT_DFR(x) (ADS_START | ADS_A2A1A0_d_ ## x \
| ADS_12_BIT | ADS_DFR)
#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))

#define READ_Y (READ_12BIT_DFR(y) | ADS_PD10_ADC_ON)
#define READ_Z1 (READ_12BIT_DFR(z1) | ADS_PD10_ADC_ON)
#define READ_Z2 (READ_12BIT_DFR(z2) | ADS_PD10_ADC_ON)
#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))

#define READ_X (READ_12BIT_DFR(x) | ADS_PD10_ADC_ON)
#define PWRDOWN (READ_12BIT_DFR(y) | ADS_PD10_PDOWN) /* LAST */
#define READ_X(vref) (READ_12BIT_DFR(x, 1, vref))
#define PWRDOWN (READ_12BIT_DFR(y, 0, 0)) /* LAST */

/* 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)

#define REF_ON (READ_12BIT_DFR(x) | ADS_PD10_ALL_ON)
#define REF_OFF (READ_12BIT_DFR(y) | ADS_PD10_PDOWN)
#define REF_ON (READ_12BIT_DFR(x, 1, 1))
#define REF_OFF (READ_12BIT_DFR(y, 0, 0))

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

Expand Down Expand Up @@ -670,6 +671,7 @@ static int __devinit ads7846_probe(struct spi_device *spi)
struct ads7846_platform_data *pdata = spi->dev.platform_data;
struct spi_message *m;
struct spi_transfer *x;
int vref;
int err;

if (!spi->irq) {
Expand Down Expand Up @@ -767,6 +769,8 @@ static int __devinit ads7846_probe(struct spi_device *spi)
input_set_abs_params(input_dev, ABS_PRESSURE,
pdata->pressure_min, pdata->pressure_max, 0, 0);

vref = pdata->keep_vref_on;

/* set up the transfers to read touchscreen state; this assumes we
* use formula #2 for pressure, not #3.
*/
Expand All @@ -776,7 +780,7 @@ static int __devinit ads7846_probe(struct spi_device *spi)
spi_message_init(m);

/* y- still on; turn on only y+ (and ADC) */
ts->read_y = READ_Y;
ts->read_y = READ_Y(vref);
x->tx_buf = &ts->read_y;
x->len = 1;
spi_message_add_tail(x, m);
Expand All @@ -794,7 +798,7 @@ static int __devinit ads7846_probe(struct spi_device *spi)

/* turn y- off, x+ on, then leave in lowpower */
x++;
ts->read_x = READ_X;
ts->read_x = READ_X(vref);
x->tx_buf = &ts->read_x;
x->len = 1;
spi_message_add_tail(x, m);
Expand All @@ -813,7 +817,7 @@ static int __devinit ads7846_probe(struct spi_device *spi)
spi_message_init(m);

x++;
ts->read_z1 = READ_Z1;
ts->read_z1 = READ_Z1(vref);
x->tx_buf = &ts->read_z1;
x->len = 1;
spi_message_add_tail(x, m);
Expand All @@ -830,7 +834,7 @@ static int __devinit ads7846_probe(struct spi_device *spi)
spi_message_init(m);

x++;
ts->read_z2 = READ_Z2;
ts->read_z2 = READ_Z2(vref);
x->tx_buf = &ts->read_z2;
x->len = 1;
spi_message_add_tail(x, m);
Expand Down
2 changes: 2 additions & 0 deletions trunk/include/linux/spi/ads7846.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ enum ads7846_filter {
struct ads7846_platform_data {
u16 model; /* 7843, 7845, 7846. */
u16 vref_delay_usecs; /* 0 for external vref; etc */
int keep_vref_on:1; /* set to keep vref on for differential
* measurements as well */
u16 x_plate_ohms;
u16 y_plate_ohms;

Expand Down

0 comments on commit 1704188

Please sign in to comment.