Title: [8852] trunk/drivers/input/touchscreen/ad7877.c: [PATCH] ad7877:
- Revision
- 8852
- Author
- hennerich
- Date
- 2010-05-26 07:48:36 -0400 (Wed, 26 May 2010)
Log Message
[PATCH] ad7877:
fix spi word size to 16 bit, force SPI_MODE_0 and
make sure that the chip select toggles between each 16-bit word.
Modified Paths
Diff
Modified: trunk/drivers/input/touchscreen/ad7877.c (8851 => 8852)
--- trunk/drivers/input/touchscreen/ad7877.c 2010-05-26 08:41:43 UTC (rev 8851)
+++ trunk/drivers/input/touchscreen/ad7877.c 2010-05-26 11:48:36 UTC (rev 8852)
@@ -230,6 +230,7 @@
AD7877_READADD(reg));
req->xfer[0].tx_buf = &req->command;
req->xfer[0].len = 2;
+ req->xfer[0].cs_change = 1;
req->xfer[1].rx_buf = &req->sample;
req->xfer[1].len = 2;
@@ -295,20 +296,25 @@
req->xfer[0].tx_buf = &req->reset;
req->xfer[0].len = 2;
+ req->xfer[0].cs_change = 1;
req->xfer[1].tx_buf = &req->ref_on;
req->xfer[1].len = 2;
req->xfer[1].delay_usecs = ts->vref_delay_usecs;
+ req->xfer[1].cs_change = 1;
req->xfer[2].tx_buf = &req->command;
req->xfer[2].len = 2;
req->xfer[2].delay_usecs = ts->vref_delay_usecs;
+ req->xfer[2].cs_change = 1;
req->xfer[3].rx_buf = &req->sample;
req->xfer[3].len = 2;
+ req->xfer[3].cs_change = 1;
req->xfer[4].tx_buf = &ts->cmd_crtl2; /*REF OFF*/
req->xfer[4].len = 2;
+ req->xfer[4].cs_change = 1;
req->xfer[5].tx_buf = &ts->cmd_crtl1; /*DEFAULT*/
req->xfer[5].len = 2;
@@ -640,17 +646,21 @@
ts->xfer[0].tx_buf = &ts->cmd_crtl1;
ts->xfer[0].len = 2;
+ ts->xfer[0].cs_change = 1;
spi_message_add_tail(&ts->xfer[0], m);
ts->xfer[1].tx_buf = &ts->cmd_dummy; /* Send ZERO */
ts->xfer[1].len = 2;
+ ts->xfer[1].cs_change = 1;
spi_message_add_tail(&ts->xfer[1], m);
- for (i = 0; i < 11; i++) {
+ for (i = 0; i < AD7877_NR_SENSE; i++) {
ts->xfer[i + 2].rx_buf = &ts->conversion_data[AD7877_SEQ_YPOS + i];
ts->xfer[i + 2].len = 2;
+ if (i < (AD7877_NR_SENSE - 1))
+ ts->xfer[i + 2].cs_change = 1;
spi_message_add_tail(&ts->xfer[i + 2], m);
}
}
@@ -679,9 +689,12 @@
return -EINVAL;
}
- if (spi->bits_per_word != 16) {
- spi->bits_per_word = 16;
- spi_setup(spi);
+ spi->bits_per_word = 16;
+ spi->mode = SPI_MODE_0;
+ err = spi_setup(spi);
+ if (err) {
+ dev_dbg(&spi->dev, "spi master doesn't support 16 bits/word\n");
+ return err;
}
ts = kzalloc(sizeof(struct ad7877), GFP_KERNEL);
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits