diff options
author | 2015-02-24 11:39:45 +0530 | |
---|---|---|
committer | 2015-02-24 17:00:35 +0900 | |
commit | 9308d1456e30e374d93957e3376a09370be9dc52 (patch) | |
tree | 0128dee3f891ad64dfaffbde7eb2884c86e8e540 /sound/soc/intel/sst/sst_drv_interface.c | |
parent | ASoC: Intel: add pm support in sst ipc driver (diff) | |
download | linux-dev-9308d1456e30e374d93957e3376a09370be9dc52.tar.xz linux-dev-9308d1456e30e374d93957e3376a09370be9dc52.zip |
ASoC: Intel: Move the fw download to power_control
Thus removing the runtime_resume handler.
Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to '')
-rw-r--r-- | sound/soc/intel/sst/sst_drv_interface.c | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/sound/soc/intel/sst/sst_drv_interface.c b/sound/soc/intel/sst/sst_drv_interface.c index 5d56fcdd58d8..549af7d7f6d0 100644 --- a/sound/soc/intel/sst/sst_drv_interface.c +++ b/sound/soc/intel/sst/sst_drv_interface.c @@ -138,12 +138,31 @@ int sst_get_stream(struct intel_sst_drv *ctx, static int sst_power_control(struct device *dev, bool state) { struct intel_sst_drv *ctx = dev_get_drvdata(dev); + int ret = 0; - dev_dbg(ctx->dev, "state:%d", state); - if (state == true) - return pm_runtime_get_sync(dev); - else + if (state == true) { + ret = pm_runtime_get_sync(dev); + dev_dbg(ctx->dev, "Enable: pm usage count: %d\n", + atomic_read(&dev->power.usage_count)); + if (ret < 0) { + dev_err(ctx->dev, "Runtime get failed with err: %d\n", ret); + return ret; + } + if ((ctx->sst_state == SST_RESET) && + (atomic_read(&dev->power.usage_count) == 1)) { + ret = sst_load_fw(ctx); + if (ret) { + dev_err(dev, "FW download fail %d\n", ret); + sst_set_fw_state_locked(ctx, SST_RESET); + ret = sst_pm_runtime_put(ctx); + } + } + } else { + dev_dbg(ctx->dev, "Disable: pm usage count: %d\n", + atomic_read(&dev->power.usage_count)); return sst_pm_runtime_put(ctx); + } + return ret; } /* |