aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc
diff options
context:
space:
mode:
authorVinod Koul <vinod.koul@intel.com>2015-02-24 01:09:45 -0500
committerMark Brown <broonie@kernel.org>2015-02-24 03:00:35 -0500
commit9308d1456e30e374d93957e3376a09370be9dc52 (patch)
tree0128dee3f891ad64dfaffbde7eb2884c86e8e540 /sound/soc
parent4a8448d4289d7210053a43f9f21e42929beb159b (diff)
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 'sound/soc')
-rw-r--r--sound/soc/intel/sst/sst.c18
-rw-r--r--sound/soc/intel/sst/sst_drv_interface.c27
2 files changed, 24 insertions, 21 deletions
diff --git a/sound/soc/intel/sst/sst.c b/sound/soc/intel/sst/sst.c
index 8f938112a01f..4d8f73ac5dd9 100644
--- a/sound/soc/intel/sst/sst.c
+++ b/sound/soc/intel/sst/sst.c
@@ -492,21 +492,6 @@ iram:
492 return ret; 492 return ret;
493} 493}
494 494
495static int intel_sst_runtime_resume(struct device *dev)
496{
497 int ret = 0;
498 struct intel_sst_drv *ctx = dev_get_drvdata(dev);
499
500 if (ctx->sst_state == SST_RESET) {
501 ret = sst_load_fw(ctx);
502 if (ret) {
503 dev_err(dev, "FW download fail %d\n", ret);
504 sst_set_fw_state_locked(ctx, SST_RESET);
505 }
506 }
507 return ret;
508}
509
510static int intel_sst_resume(struct device *dev) 495static int intel_sst_resume(struct device *dev)
511{ 496{
512 struct intel_sst_drv *ctx = dev_get_drvdata(dev); 497 struct intel_sst_drv *ctx = dev_get_drvdata(dev);
@@ -515,7 +500,7 @@ static int intel_sst_resume(struct device *dev)
515 struct sst_block *block; 500 struct sst_block *block;
516 501
517 if (!fw_save) 502 if (!fw_save)
518 return intel_sst_runtime_resume(dev); 503 return 0;
519 504
520 sst_set_fw_state_locked(ctx, SST_FW_LOADING); 505 sst_set_fw_state_locked(ctx, SST_FW_LOADING);
521 506
@@ -560,6 +545,5 @@ const struct dev_pm_ops intel_sst_pm = {
560 .suspend = intel_sst_suspend, 545 .suspend = intel_sst_suspend,
561 .resume = intel_sst_resume, 546 .resume = intel_sst_resume,
562 .runtime_suspend = intel_sst_runtime_suspend, 547 .runtime_suspend = intel_sst_runtime_suspend,
563 .runtime_resume = intel_sst_runtime_resume,
564}; 548};
565EXPORT_SYMBOL_GPL(intel_sst_pm); 549EXPORT_SYMBOL_GPL(intel_sst_pm);
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,
138static int sst_power_control(struct device *dev, bool state) 138static int sst_power_control(struct device *dev, bool state)
139{ 139{
140 struct intel_sst_drv *ctx = dev_get_drvdata(dev); 140 struct intel_sst_drv *ctx = dev_get_drvdata(dev);
141 int ret = 0;
141 142
142 dev_dbg(ctx->dev, "state:%d", state); 143 if (state == true) {
143 if (state == true) 144 ret = pm_runtime_get_sync(dev);
144 return pm_runtime_get_sync(dev); 145 dev_dbg(ctx->dev, "Enable: pm usage count: %d\n",
145 else 146 atomic_read(&dev->power.usage_count));
147 if (ret < 0) {
148 dev_err(ctx->dev, "Runtime get failed with err: %d\n", ret);
149 return ret;
150 }
151 if ((ctx->sst_state == SST_RESET) &&
152 (atomic_read(&dev->power.usage_count) == 1)) {
153 ret = sst_load_fw(ctx);
154 if (ret) {
155 dev_err(dev, "FW download fail %d\n", ret);
156 sst_set_fw_state_locked(ctx, SST_RESET);
157 ret = sst_pm_runtime_put(ctx);
158 }
159 }
160 } else {
161 dev_dbg(ctx->dev, "Disable: pm usage count: %d\n",
162 atomic_read(&dev->power.usage_count));
146 return sst_pm_runtime_put(ctx); 163 return sst_pm_runtime_put(ctx);
164 }
165 return ret;
147} 166}
148 167
149/* 168/*