By supporting the new SPI_BOARD_FLAG_RELEASE_CS flag we let underlying
hardware drivers implement more efficient runtime power-management.

Signed-off-by: Guennadi Liakhovetski <[email protected]>
---
 drivers/spi/spi-bitbang.c |   22 ++++++++++------------
 1 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/drivers/spi/spi-bitbang.c b/drivers/spi/spi-bitbang.c
index fe06e1b..c895d85 100644
--- a/drivers/spi/spi-bitbang.c
+++ b/drivers/spi/spi-bitbang.c
@@ -347,17 +347,14 @@ static void bitbang_work(struct work_struct *work)
                        if (t->delay_usecs)
                                udelay(t->delay_usecs);
 
-                       if (!cs_change)
-                               continue;
-                       if (t->transfer_list.next == &m->transfers)
-                               break;
-
-                       /* sometimes a short mid-message deselect of the chip
-                        * may be needed to terminate a mode or command
-                        */
-                       ndelay(nsecs);
-                       bitbang->chipselect(spi, BITBANG_CS_INACTIVE);
-                       ndelay(nsecs);
+                       if (cs_change && !list_is_last(&t->transfer_list, 
&m->transfers)) {
+                               /* sometimes a short mid-message deselect of 
the chip
+                                * may be needed to terminate a mode or command
+                                */
+                               ndelay(nsecs);
+                               bitbang->chipselect(spi, BITBANG_CS_INACTIVE);
+                               ndelay(nsecs);
+                       }
                }
 
                m->status = status;
@@ -367,7 +364,8 @@ static void bitbang_work(struct work_struct *work)
                 * cs_change has hinted that the next message will probably
                 * be for this chip too.
                 */
-               if (!(status == 0 && cs_change)) {
+               if (!(status == 0 && cs_change) ||
+                   spi->flags & SPI_BOARD_FLAG_RELEASE_CS) {
                        ndelay(nsecs);
                        bitbang->chipselect(spi, BITBANG_CS_INACTIVE);
                        ndelay(nsecs);
-- 
1.7.2.5


------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
spi-devel-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/spi-devel-general

Reply via email to