| From 5f74db105b1c0980c9863e7a7d1bc0525e0316e8 Mon Sep 17 00:00:00 2001 |
| From: Sebastian Reichel <sre@kernel.org> |
| Date: Wed, 22 Jul 2015 20:46:09 +0200 |
| Subject: spi: omap2-mcspi: add runtime PM to set_cs() |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Sebastian Reichel <sre@kernel.org> |
| |
| commit 5f74db105b1c0980c9863e7a7d1bc0525e0316e8 upstream. |
| |
| Since commit ddcad7e9068eb omap2_mcspi_set_cs() is called without |
| runtime power management requested. This patch fixes the problem by |
| requesting runtime power management in omap2_mcspi_set_cs(). |
| |
| Reported-By: Pali Rohรกr <pali.rohar@gmail.com> |
| Fixes: ddcad7e9068eb (spi: omap2-mcspi: Fix native cs with new set_cs) |
| Tested-By: Pavel Machek <pavel@ucw.cz> |
| Signed-off-by: Sebastian Reichel <sre@kernel.org> |
| Acked-by: Michael Welling <mwelling@ieee.org> |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/spi/spi-omap2-mcspi.c | 10 ++++++++++ |
| 1 file changed, 10 insertions(+) |
| |
| --- a/drivers/spi/spi-omap2-mcspi.c |
| +++ b/drivers/spi/spi-omap2-mcspi.c |
| @@ -245,6 +245,7 @@ static void omap2_mcspi_set_enable(const |
| |
| static void omap2_mcspi_set_cs(struct spi_device *spi, bool enable) |
| { |
| + struct omap2_mcspi *mcspi = spi_master_get_devdata(spi->master); |
| u32 l; |
| |
| /* The controller handles the inverted chip selects |
| @@ -255,6 +256,12 @@ static void omap2_mcspi_set_cs(struct sp |
| enable = !enable; |
| |
| if (spi->controller_state) { |
| + int err = pm_runtime_get_sync(mcspi->dev); |
| + if (err < 0) { |
| + dev_err(mcspi->dev, "failed to get sync: %d\n", err); |
| + return; |
| + } |
| + |
| l = mcspi_cached_chconf0(spi); |
| |
| if (enable) |
| @@ -263,6 +270,9 @@ static void omap2_mcspi_set_cs(struct sp |
| l |= OMAP2_MCSPI_CHCONF_FORCE; |
| |
| mcspi_write_chconf0(spi, l); |
| + |
| + pm_runtime_mark_last_busy(mcspi->dev); |
| + pm_runtime_put_autosuspend(mcspi->dev); |
| } |
| } |
| |