|
@@ -95,7 +95,7 @@ struct ads7846 {
|
|
|
u16 dummy; /* for the pwrdown read */
|
|
|
struct ts_event tc;
|
|
|
|
|
|
- struct spi_transfer xfer[10];
|
|
|
+ struct spi_transfer xfer[18];
|
|
|
struct spi_message msg[5];
|
|
|
struct spi_message *last_msg;
|
|
|
int msg_idx;
|
|
@@ -936,6 +936,24 @@ static int __devinit ads7846_probe(struct spi_device *spi)
|
|
|
x->len = 2;
|
|
|
spi_message_add_tail(x, m);
|
|
|
|
|
|
+ /* the first sample after switching drivers can be low quality;
|
|
|
+ * optionally discard it, using a second one after the signals
|
|
|
+ * have had enough time to stabilize.
|
|
|
+ */
|
|
|
+ if (pdata->settle_delay_usecs) {
|
|
|
+ x->delay_usecs = pdata->settle_delay_usecs;
|
|
|
+
|
|
|
+ x++;
|
|
|
+ x->tx_buf = &ts->read_y;
|
|
|
+ x->len = 1;
|
|
|
+ spi_message_add_tail(x, m);
|
|
|
+
|
|
|
+ x++;
|
|
|
+ x->rx_buf = &ts->tc.y;
|
|
|
+ x->len = 2;
|
|
|
+ spi_message_add_tail(x, m);
|
|
|
+ }
|
|
|
+
|
|
|
m->complete = ads7846_rx_val;
|
|
|
m->context = ts;
|
|
|
|
|
@@ -954,6 +972,21 @@ static int __devinit ads7846_probe(struct spi_device *spi)
|
|
|
x->len = 2;
|
|
|
spi_message_add_tail(x, m);
|
|
|
|
|
|
+ /* ... maybe discard first sample ... */
|
|
|
+ if (pdata->settle_delay_usecs) {
|
|
|
+ x->delay_usecs = pdata->settle_delay_usecs;
|
|
|
+
|
|
|
+ x++;
|
|
|
+ x->tx_buf = &ts->read_x;
|
|
|
+ x->len = 1;
|
|
|
+ spi_message_add_tail(x, m);
|
|
|
+
|
|
|
+ x++;
|
|
|
+ x->rx_buf = &ts->tc.x;
|
|
|
+ x->len = 2;
|
|
|
+ spi_message_add_tail(x, m);
|
|
|
+ }
|
|
|
+
|
|
|
m->complete = ads7846_rx_val;
|
|
|
m->context = ts;
|
|
|
|
|
@@ -973,6 +1006,21 @@ static int __devinit ads7846_probe(struct spi_device *spi)
|
|
|
x->len = 2;
|
|
|
spi_message_add_tail(x, m);
|
|
|
|
|
|
+ /* ... maybe discard first sample ... */
|
|
|
+ if (pdata->settle_delay_usecs) {
|
|
|
+ x->delay_usecs = pdata->settle_delay_usecs;
|
|
|
+
|
|
|
+ x++;
|
|
|
+ x->tx_buf = &ts->read_z1;
|
|
|
+ x->len = 1;
|
|
|
+ spi_message_add_tail(x, m);
|
|
|
+
|
|
|
+ x++;
|
|
|
+ x->rx_buf = &ts->tc.z1;
|
|
|
+ x->len = 2;
|
|
|
+ spi_message_add_tail(x, m);
|
|
|
+ }
|
|
|
+
|
|
|
m->complete = ads7846_rx_val;
|
|
|
m->context = ts;
|
|
|
|
|
@@ -990,6 +1038,21 @@ static int __devinit ads7846_probe(struct spi_device *spi)
|
|
|
x->len = 2;
|
|
|
spi_message_add_tail(x, m);
|
|
|
|
|
|
+ /* ... maybe discard first sample ... */
|
|
|
+ if (pdata->settle_delay_usecs) {
|
|
|
+ x->delay_usecs = pdata->settle_delay_usecs;
|
|
|
+
|
|
|
+ x++;
|
|
|
+ x->tx_buf = &ts->read_z2;
|
|
|
+ x->len = 1;
|
|
|
+ spi_message_add_tail(x, m);
|
|
|
+
|
|
|
+ x++;
|
|
|
+ x->rx_buf = &ts->tc.z2;
|
|
|
+ x->len = 2;
|
|
|
+ spi_message_add_tail(x, m);
|
|
|
+ }
|
|
|
+
|
|
|
m->complete = ads7846_rx_val;
|
|
|
m->context = ts;
|
|
|
}
|