[PATCH v3 1/3] soundwire: qcom: add runtime pm support
Pierre-Louis Bossart
pierre-louis.bossart at linux.intel.com
Wed Apr 20 19:39:26 CEST 2022
> @@ -1017,6 +1032,15 @@ static int qcom_swrm_startup(struct snd_pcm_substream *substream,
> struct snd_soc_dai *codec_dai;
> int ret, i;
>
> + ret = pm_runtime_get_sync(ctrl->dev);
> + if (ret < 0 && ret != -EACCES) {
> + dev_err_ratelimited(ctrl->dev,
> + "pm_runtime_get_sync failed in %s, ret %d\n",
> + __func__, ret);
> + pm_runtime_put_noidle(ctrl->dev);
> + return ret;
here there's an error handling, but ...
> + }
> +
> sruntime = sdw_alloc_stream(dai->name);
> if (!sruntime)
> return -ENOMEM;
> @@ -1044,6 +1068,9 @@ static void qcom_swrm_shutdown(struct snd_pcm_substream *substream,
>
> sdw_release_stream(ctrl->sruntime[dai->id]);
> ctrl->sruntime[dai->id] = NULL;
> + pm_runtime_mark_last_busy(ctrl->dev);
> + pm_runtime_put_autosuspend(ctrl->dev);
> +
> }
>
> static const struct snd_soc_dai_ops qcom_swrm_pdm_dai_ops = {
> @@ -1197,12 +1224,23 @@ static int qcom_swrm_get_port_config(struct qcom_swrm_ctrl *ctrl)
> static int swrm_reg_show(struct seq_file *s_file, void *data)
> {
> struct qcom_swrm_ctrl *swrm = s_file->private;
> - int reg, reg_val;
> + int reg, reg_val, ret;
> +
> + ret = pm_runtime_get_sync(swrm->dev);
> + if (ret < 0 && ret != -EACCES) {
> + dev_err_ratelimited(swrm->dev,
> + "pm_runtime_get_sync failed in %s, ret %d\n",
> + __func__, ret);
> + pm_runtime_put_noidle(swrm->dev);
... here it's missing?
I have a fix ready but thought I would check first if this was intentional
https://github.com/thesofproject/linux/pull/3602/commits/6353eec8dc971c5f0fda0166ae1777f71784ea32
> + }
>
> for (reg = 0; reg <= SWR_MSTR_MAX_REG_ADDR; reg += 4) {
> swrm->reg_read(swrm, reg, ®_val);
> seq_printf(s_file, "0x%.3x: 0x%.2x\n", reg, reg_val);
> }
> + pm_runtime_mark_last_busy(swrm->dev);
> + pm_runtime_put_autosuspend(swrm->dev);
> +
>
> return 0;
More information about the Alsa-devel
mailing list