diff options
author | Virupax Sadashivpetimath <virupax.sadashivpetimath@stericsson.com> | 2011-10-17 08:52:47 -0400 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2011-12-01 11:16:08 -0500 |
commit | 0ad2deeab5d3fc80fc7cd85638f805830254ef1d (patch) | |
tree | b413887d19ad0bbf2ae970f4ef55cd5e1679262a /drivers/spi | |
parent | d4b6af2e0e29278f2353c7c8721ddf2f2446414f (diff) |
spi/pl022: disable the PL022 block when unused
Make sure we clear the enable bit when the block is not used.
This will save some energy in certain hardware versions.
Reviewed-by: Viresh Kumar <viresh.kumar@st.com>
Signed-off-by: Virupax Sadashivpetimath <virupax.sadashivpetimath@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/spi')
-rw-r--r-- | drivers/spi/spi-pl022.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c index d165c0bfcab5..82a929f916fd 100644 --- a/drivers/spi/spi-pl022.c +++ b/drivers/spi/spi-pl022.c | |||
@@ -1512,8 +1512,12 @@ static void pump_messages(struct work_struct *work) | |||
1512 | /* Lock queue and check for queue work */ | 1512 | /* Lock queue and check for queue work */ |
1513 | spin_lock_irqsave(&pl022->queue_lock, flags); | 1513 | spin_lock_irqsave(&pl022->queue_lock, flags); |
1514 | if (list_empty(&pl022->queue) || !pl022->running) { | 1514 | if (list_empty(&pl022->queue) || !pl022->running) { |
1515 | if (pl022->busy) | 1515 | if (pl022->busy) { |
1516 | /* nothing more to do - disable spi/ssp and power off */ | ||
1517 | writew((readw(SSP_CR1(pl022->virtbase)) & | ||
1518 | (~SSP_CR1_MASK_SSE)), SSP_CR1(pl022->virtbase)); | ||
1516 | pm_runtime_put(&pl022->adev->dev); | 1519 | pm_runtime_put(&pl022->adev->dev); |
1520 | } | ||
1517 | pl022->busy = false; | 1521 | pl022->busy = false; |
1518 | spin_unlock_irqrestore(&pl022->queue_lock, flags); | 1522 | spin_unlock_irqrestore(&pl022->queue_lock, flags); |
1519 | return; | 1523 | return; |