On Wed, 14 Mar 2012 22:04:25 +0100 (CET), Guennadi Liakhovetski 
<g.liakhovet...@gmx.de> wrote:
> This patch adds a PM QoS requirement to the spi-bitbang driver, preventing
> the underlying SPI hardware driver to suspend for too long a time, as long
> as there are transfers on the queue.
> 
> Signed-off-by: Guennadi Liakhovetski <g.liakhovet...@gmx.de>

Shouldn't this be part of the core spi infrastructure?  Particularly since 
queuing
is moving into the core.

g.

> ---
> 
> RFC, because a patch set has been developed recently, adding a PM QoS 
> sysfs attribute to all supporting devices per 
> dev_pm_qos_expose_latency_limit(). But I'm not sure, whether and how to 
> combine user-space supplied constraint with driver's own idea of which 
> code paths should be executed with amended latency requirements. Maybe 
> this should be discussed separately, though.
> 
>  drivers/spi/spi-bitbang.c       |    6 ++++++
>  include/linux/spi/spi_bitbang.h |    2 ++
>  2 files changed, 8 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/spi/spi-bitbang.c b/drivers/spi/spi-bitbang.c
> index aef59b1..497e725 100644
> --- a/drivers/spi/spi-bitbang.c
> +++ b/drivers/spi/spi-bitbang.c
> @@ -24,6 +24,7 @@
>  #include <linux/delay.h>
>  #include <linux/errno.h>
>  #include <linux/platform_device.h>
> +#include <linux/pm_qos.h>
>  #include <linux/slab.h>
>  
>  #include <linux/spi/spi.h>
> @@ -260,6 +261,8 @@ static void bitbang_work(struct work_struct *work)
>       struct spi_bitbang      *bitbang =
>               container_of(work, struct spi_bitbang, work);
>       unsigned long           flags;
> +     int pmrq = dev_pm_qos_add_request(bitbang->master->dev.parent,
> +                                       &bitbang->pm_qos, 100);
>  
>       spin_lock_irqsave(&bitbang->lock, flags);
>       bitbang->busy = 1;
> @@ -376,6 +379,9 @@ static void bitbang_work(struct work_struct *work)
>       }
>       bitbang->busy = 0;
>       spin_unlock_irqrestore(&bitbang->lock, flags);
> +
> +     if (pmrq >= 0)
> +             dev_pm_qos_remove_request(&bitbang->pm_qos);
>  }
>  
>  /**
> diff --git a/include/linux/spi/spi_bitbang.h b/include/linux/spi/spi_bitbang.h
> index f987a2b..bed583f1 100644
> --- a/include/linux/spi/spi_bitbang.h
> +++ b/include/linux/spi/spi_bitbang.h
> @@ -1,6 +1,7 @@
>  #ifndef      __SPI_BITBANG_H
>  #define      __SPI_BITBANG_H
>  
> +#include <linux/pm_qos.h>
>  #include <linux/workqueue.h>
>  
>  struct spi_bitbang {
> @@ -12,6 +13,7 @@ struct spi_bitbang {
>       u8                      busy;
>       u8                      use_dma;
>       u8                      flags;          /* extra spi->mode support */
> +     struct dev_pm_qos_request pm_qos;
>  
>       struct spi_master       *master;
>  
> -- 
> 1.7.2.5
> 
> 
> ------------------------------------------------------------------------------
> Virtualization & Cloud Management Using Capacity Planning
> Cloud computing makes use of virtualization - but cloud computing 
> also focuses on allowing computing to be delivered as a service.
> http://www.accelacomm.com/jaw/sfnl/114/51521223/
> _______________________________________________
> spi-devel-general mailing list
> spi-devel-general@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/spi-devel-general

-- 
Grant Likely, B.Sc, P.Eng.
Secret Lab Technologies,Ltd.

------------------------------------------------------------------------------
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
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general

Reply via email to