diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c index 140907a41a70..f80f697a5d55 100644 --- a/sound/soc/samsung/i2s.c +++ b/sound/soc/samsung/i2s.c @@ -510,14 +510,13 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int rfs, unsigned int cdcon_mask = 1 << i2s_regs->cdclkcon_off; unsigned int rsrc_mask = 1 << i2s_regs->rclksrc_off; u32 mod, mask, val = 0; - unsigned long flags; int ret = 0; pm_runtime_get_sync(dai->dev); - spin_lock_irqsave(&priv->lock, flags); - mod = readl(priv->addr + I2SMOD); - spin_unlock_irqrestore(&priv->lock, flags); + scoped_guard(spinlock_irqsave, &priv->lock) + mod = readl(priv->addr + I2SMOD); + switch (clk_id) { case SAMSUNG_I2S_OPCLK: @@ -612,11 +611,11 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int rfs, goto err; } - spin_lock_irqsave(&priv->lock, flags); - mod = readl(priv->addr + I2SMOD); - mod = (mod & ~mask) | val; - writel(mod, priv->addr + I2SMOD); - spin_unlock_irqrestore(&priv->lock, flags); + scoped_guard(spinlock_irqsave, &priv->lock) { + mod = readl(priv->addr + I2SMOD); + mod = (mod & ~mask) | val; + writel(mod, priv->addr + I2SMOD); + } done: pm_runtime_put(dai->dev); @@ -729,7 +728,6 @@ static int i2s_hw_params(struct snd_pcm_substream *substream, struct i2s_dai *i2s = to_info(dai); u32 mod, mask = 0, val = 0; struct clk *rclksrc; - unsigned long flags; WARN_ON(!pm_runtime_active(dai->dev)); @@ -801,11 +799,11 @@ static int i2s_hw_params(struct snd_pcm_substream *substream, return -EINVAL; } - spin_lock_irqsave(&priv->lock, flags); - mod = readl(priv->addr + I2SMOD); - mod = (mod & ~mask) | val; - writel(mod, priv->addr + I2SMOD); - spin_unlock_irqrestore(&priv->lock, flags); + scoped_guard(spinlock_irqsave, &priv->lock) { + mod = readl(priv->addr + I2SMOD); + mod = (mod & ~mask) | val; + writel(mod, priv->addr + I2SMOD); + } snd_soc_dai_init_dma_data(dai, &i2s->dma_playback, &i2s->dma_capture); @@ -825,11 +823,10 @@ static int i2s_startup(struct snd_pcm_substream *substream, struct samsung_i2s_priv *priv = snd_soc_dai_get_drvdata(dai); struct i2s_dai *i2s = to_info(dai); struct i2s_dai *other = get_other_dai(i2s); - unsigned long flags; pm_runtime_get_sync(dai->dev); - spin_lock_irqsave(&priv->pcm_lock, flags); + guard(spinlock_irqsave)(&priv->pcm_lock); i2s->mode |= DAI_OPENED; @@ -841,8 +838,6 @@ static int i2s_startup(struct snd_pcm_substream *substream, if (!any_active(i2s) && (priv->quirks & QUIRK_NEED_RSTCLR)) writel(CON_RSTCLR, i2s->priv->addr + I2SCON); - spin_unlock_irqrestore(&priv->pcm_lock, flags); - return 0; } @@ -852,21 +847,18 @@ static void i2s_shutdown(struct snd_pcm_substream *substream, struct samsung_i2s_priv *priv = snd_soc_dai_get_drvdata(dai); struct i2s_dai *i2s = to_info(dai); struct i2s_dai *other = get_other_dai(i2s); - unsigned long flags; - spin_lock_irqsave(&priv->pcm_lock, flags); + scoped_guard(spinlock_irqsave, &priv->pcm_lock) { + i2s->mode &= ~DAI_OPENED; + i2s->mode &= ~DAI_MANAGER; - i2s->mode &= ~DAI_OPENED; - i2s->mode &= ~DAI_MANAGER; + if (is_opened(other)) + other->mode |= DAI_MANAGER; - if (is_opened(other)) - other->mode |= DAI_MANAGER; - - /* Reset any constraint on RFS and BFS */ - i2s->rfs = 0; - i2s->bfs = 0; - - spin_unlock_irqrestore(&priv->pcm_lock, flags); + /* Reset any constraint on RFS and BFS */ + i2s->rfs = 0; + i2s->bfs = 0; + } pm_runtime_put(dai->dev); } @@ -939,7 +931,6 @@ static int i2s_trigger(struct snd_pcm_substream *substream, int capture = (substream->stream == SNDRV_PCM_STREAM_CAPTURE); struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); struct i2s_dai *i2s = to_info(snd_soc_rtd_to_cpu(rtd, 0)); - unsigned long flags; switch (cmd) { case SNDRV_PCM_TRIGGER_START: @@ -950,37 +941,31 @@ static int i2s_trigger(struct snd_pcm_substream *substream, if (priv->fixup_early) priv->fixup_early(substream, dai); - spin_lock_irqsave(&priv->lock, flags); + scoped_guard(spinlock_irqsave, &priv->lock) { + if (config_setup(i2s)) + return -EINVAL; - if (config_setup(i2s)) { - spin_unlock_irqrestore(&priv->lock, flags); - return -EINVAL; + if (priv->fixup_late) + priv->fixup_late(substream, dai); + + if (capture) + i2s_rxctrl(i2s, 1); + else + i2s_txctrl(i2s, 1); } - - if (priv->fixup_late) - priv->fixup_late(substream, dai); - - if (capture) - i2s_rxctrl(i2s, 1); - else - i2s_txctrl(i2s, 1); - - spin_unlock_irqrestore(&priv->lock, flags); break; case SNDRV_PCM_TRIGGER_STOP: case SNDRV_PCM_TRIGGER_SUSPEND: case SNDRV_PCM_TRIGGER_PAUSE_PUSH: - spin_lock_irqsave(&priv->lock, flags); - - if (capture) { - i2s_rxctrl(i2s, 0); - i2s_fifo(i2s, FIC_RXFLUSH); - } else { - i2s_txctrl(i2s, 0); - i2s_fifo(i2s, FIC_TXFLUSH); + scoped_guard(spinlock_irqsave, &priv->lock) { + if (capture) { + i2s_rxctrl(i2s, 0); + i2s_fifo(i2s, FIC_RXFLUSH); + } else { + i2s_txctrl(i2s, 0); + i2s_fifo(i2s, FIC_TXFLUSH); + } } - - spin_unlock_irqrestore(&priv->lock, flags); pm_runtime_put(dai->dev); break; } @@ -1056,7 +1041,6 @@ static int samsung_i2s_dai_probe(struct snd_soc_dai *dai) struct samsung_i2s_priv *priv = snd_soc_dai_get_drvdata(dai); struct i2s_dai *i2s = to_info(dai); struct i2s_dai *other = get_other_dai(i2s); - unsigned long flags; pm_runtime_get_sync(dai->dev); @@ -1079,13 +1063,13 @@ static int samsung_i2s_dai_probe(struct snd_soc_dai *dai) i2s->rfs = 0; i2s->bfs = 0; - spin_lock_irqsave(&priv->lock, flags); - i2s_txctrl(i2s, 0); - i2s_rxctrl(i2s, 0); - i2s_fifo(i2s, FIC_TXFLUSH); - i2s_fifo(other, FIC_TXFLUSH); - i2s_fifo(i2s, FIC_RXFLUSH); - spin_unlock_irqrestore(&priv->lock, flags); + scoped_guard(spinlock_irqsave, &priv->lock) { + i2s_txctrl(i2s, 0); + i2s_rxctrl(i2s, 0); + i2s_fifo(i2s, FIC_TXFLUSH); + i2s_fifo(other, FIC_TXFLUSH); + i2s_fifo(i2s, FIC_RXFLUSH); + } /* Gate CDCLK by default */ if (!is_opened(other)) @@ -1100,15 +1084,13 @@ static int samsung_i2s_dai_remove(struct snd_soc_dai *dai) { struct samsung_i2s_priv *priv = snd_soc_dai_get_drvdata(dai); struct i2s_dai *i2s = to_info(dai); - unsigned long flags; pm_runtime_get_sync(dai->dev); if (!is_secondary(i2s)) { if (priv->quirks & QUIRK_NEED_RSTCLR) { - spin_lock_irqsave(&priv->lock, flags); - writel(0, priv->addr + I2SCON); - spin_unlock_irqrestore(&priv->lock, flags); + scoped_guard(spinlock_irqsave, &priv->lock) + writel(0, priv->addr + I2SCON); } } diff --git a/sound/soc/samsung/idma.c b/sound/soc/samsung/idma.c index cb455ddce253..d362136e1069 100644 --- a/sound/soc/samsung/idma.c +++ b/sound/soc/samsung/idma.c @@ -67,9 +67,8 @@ static int idma_enqueue(struct snd_pcm_substream *substream) struct idma_ctrl *prtd = substream->runtime->private_data; u32 val; - spin_lock(&prtd->lock); - prtd->token = (void *) substream; - spin_unlock(&prtd->lock); + scoped_guard(spinlock, &prtd->lock) + prtd->token = (void *) substream; /* Internal DMA Level0 Interrupt Address */ val = idma.lp_tx_addr + prtd->periodsz; @@ -101,16 +100,15 @@ static void idma_setcallbk(struct snd_pcm_substream *substream, { struct idma_ctrl *prtd = substream->runtime->private_data; - spin_lock(&prtd->lock); + guard(spinlock)(&prtd->lock); prtd->cb = cb; - spin_unlock(&prtd->lock); } static void idma_control(int op) { u32 val = readl(idma.regs + I2SAHB); - spin_lock(&idma.lock); + guard(spinlock)(&idma.lock); switch (op) { case LPAM_DMA_START: @@ -120,12 +118,10 @@ static void idma_control(int op) val &= ~(AHB_INTENLVL0 | AHB_DMAEN); break; default: - spin_unlock(&idma.lock); return; } writel(val, idma.regs + I2SAHB); - spin_unlock(&idma.lock); } static void idma_done(void *id, int bytes_xfer) @@ -192,7 +188,7 @@ static int idma_trigger(struct snd_soc_component *component, struct idma_ctrl *prtd = substream->runtime->private_data; int ret = 0; - spin_lock(&prtd->lock); + guard(spinlock)(&prtd->lock); switch (cmd) { case SNDRV_PCM_TRIGGER_RESUME: @@ -214,8 +210,6 @@ static int idma_trigger(struct snd_soc_component *component, break; } - spin_unlock(&prtd->lock); - return ret; } @@ -228,12 +222,10 @@ idma_pointer(struct snd_soc_component *component, dma_addr_t src; unsigned long res; - spin_lock(&prtd->lock); - - idma_getpos(&src); - res = src - prtd->start; - - spin_unlock(&prtd->lock); + scoped_guard(spinlock, &prtd->lock) { + idma_getpos(&src); + res = src - prtd->start; + } return bytes_to_frames(substream->runtime, res); } diff --git a/sound/soc/samsung/odroid.c b/sound/soc/samsung/odroid.c index ab3398f39f4a..5c5ecbea5331 100644 --- a/sound/soc/samsung/odroid.c +++ b/sound/soc/samsung/odroid.c @@ -36,15 +36,12 @@ static int odroid_card_fe_hw_params(struct snd_pcm_substream *substream, { struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); struct odroid_priv *priv = snd_soc_card_get_drvdata(rtd->card); - unsigned long flags; - int ret = 0; - spin_lock_irqsave(&priv->lock, flags); + guard(spinlock_irqsave)(&priv->lock); if (priv->be_active && priv->be_sample_rate != params_rate(params)) - ret = -EINVAL; - spin_unlock_irqrestore(&priv->lock, flags); + return -EINVAL; - return ret; + return 0; } static const struct snd_soc_ops odroid_card_fe_ops = { @@ -58,7 +55,6 @@ static int odroid_card_be_hw_params(struct snd_pcm_substream *substream, struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); struct odroid_priv *priv = snd_soc_card_get_drvdata(rtd->card); unsigned int pll_freq, rclk_freq, rfs; - unsigned long flags; int ret; switch (params_rate(params)) { @@ -105,10 +101,8 @@ static int odroid_card_be_hw_params(struct snd_pcm_substream *substream, return ret; } - spin_lock_irqsave(&priv->lock, flags); - priv->be_sample_rate = params_rate(params); - spin_unlock_irqrestore(&priv->lock, flags); - + scoped_guard(spinlock_irqsave, &priv->lock) + priv->be_sample_rate = params_rate(params); return 0; } @@ -116,9 +110,8 @@ static int odroid_card_be_trigger(struct snd_pcm_substream *substream, int cmd) { struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); struct odroid_priv *priv = snd_soc_card_get_drvdata(rtd->card); - unsigned long flags; - spin_lock_irqsave(&priv->lock, flags); + guard(spinlock_irqsave)(&priv->lock); switch (cmd) { case SNDRV_PCM_TRIGGER_START: @@ -134,8 +127,6 @@ static int odroid_card_be_trigger(struct snd_pcm_substream *substream, int cmd) break; } - spin_unlock_irqrestore(&priv->lock, flags); - return 0; } diff --git a/sound/soc/samsung/pcm.c b/sound/soc/samsung/pcm.c index a03ba9374c2e..309f024bf2a4 100644 --- a/sound/soc/samsung/pcm.c +++ b/sound/soc/samsung/pcm.c @@ -218,7 +218,6 @@ static int s3c_pcm_trigger(struct snd_pcm_substream *substream, int cmd, { struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(snd_soc_rtd_to_cpu(rtd, 0)); - unsigned long flags; dev_dbg(pcm->dev, "Entered %s\n", __func__); @@ -226,27 +225,23 @@ static int s3c_pcm_trigger(struct snd_pcm_substream *substream, int cmd, case SNDRV_PCM_TRIGGER_START: case SNDRV_PCM_TRIGGER_RESUME: case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: - spin_lock_irqsave(&pcm->lock, flags); - - if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) - s3c_pcm_snd_rxctrl(pcm, 1); - else - s3c_pcm_snd_txctrl(pcm, 1); - - spin_unlock_irqrestore(&pcm->lock, flags); + scoped_guard(spinlock_irqsave, &pcm->lock) { + if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) + s3c_pcm_snd_rxctrl(pcm, 1); + else + s3c_pcm_snd_txctrl(pcm, 1); + } break; case SNDRV_PCM_TRIGGER_STOP: case SNDRV_PCM_TRIGGER_SUSPEND: case SNDRV_PCM_TRIGGER_PAUSE_PUSH: - spin_lock_irqsave(&pcm->lock, flags); - - if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) - s3c_pcm_snd_rxctrl(pcm, 0); - else - s3c_pcm_snd_txctrl(pcm, 0); - - spin_unlock_irqrestore(&pcm->lock, flags); + scoped_guard(spinlock_irqsave, &pcm->lock) { + if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) + s3c_pcm_snd_rxctrl(pcm, 0); + else + s3c_pcm_snd_txctrl(pcm, 0); + } break; default: @@ -265,7 +260,6 @@ static int s3c_pcm_hw_params(struct snd_pcm_substream *substream, void __iomem *regs = pcm->regs; struct clk *clk; int sclk_div, sync_div; - unsigned long flags; u32 clkctl; dev_dbg(pcm->dev, "Entered %s\n", __func__); @@ -278,36 +272,33 @@ static int s3c_pcm_hw_params(struct snd_pcm_substream *substream, return -EINVAL; } - spin_lock_irqsave(&pcm->lock, flags); + scoped_guard(spinlock_irqsave, &pcm->lock) { + /* Get hold of the PCMSOURCE_CLK */ + clkctl = readl(regs + S3C_PCM_CLKCTL); + if (clkctl & S3C_PCM_CLKCTL_SERCLKSEL_PCLK) + clk = pcm->pclk; + else + clk = pcm->cclk; - /* Get hold of the PCMSOURCE_CLK */ - clkctl = readl(regs + S3C_PCM_CLKCTL); - if (clkctl & S3C_PCM_CLKCTL_SERCLKSEL_PCLK) - clk = pcm->pclk; - else - clk = pcm->cclk; + /* Set the SCLK divider */ + sclk_div = clk_get_rate(clk) / pcm->sclk_per_fs / + params_rate(params) / 2 - 1; - /* Set the SCLK divider */ - sclk_div = clk_get_rate(clk) / pcm->sclk_per_fs / - params_rate(params) / 2 - 1; + clkctl &= ~(S3C_PCM_CLKCTL_SCLKDIV_MASK + << S3C_PCM_CLKCTL_SCLKDIV_SHIFT); + clkctl |= ((sclk_div & S3C_PCM_CLKCTL_SCLKDIV_MASK) + << S3C_PCM_CLKCTL_SCLKDIV_SHIFT); - clkctl &= ~(S3C_PCM_CLKCTL_SCLKDIV_MASK - << S3C_PCM_CLKCTL_SCLKDIV_SHIFT); - clkctl |= ((sclk_div & S3C_PCM_CLKCTL_SCLKDIV_MASK) - << S3C_PCM_CLKCTL_SCLKDIV_SHIFT); + /* Set the SYNC divider */ + sync_div = pcm->sclk_per_fs - 1; - /* Set the SYNC divider */ - sync_div = pcm->sclk_per_fs - 1; - - clkctl &= ~(S3C_PCM_CLKCTL_SYNCDIV_MASK - << S3C_PCM_CLKCTL_SYNCDIV_SHIFT); - clkctl |= ((sync_div & S3C_PCM_CLKCTL_SYNCDIV_MASK) - << S3C_PCM_CLKCTL_SYNCDIV_SHIFT); - - writel(clkctl, regs + S3C_PCM_CLKCTL); - - spin_unlock_irqrestore(&pcm->lock, flags); + clkctl &= ~(S3C_PCM_CLKCTL_SYNCDIV_MASK + << S3C_PCM_CLKCTL_SYNCDIV_SHIFT); + clkctl |= ((sync_div & S3C_PCM_CLKCTL_SYNCDIV_MASK) + << S3C_PCM_CLKCTL_SYNCDIV_SHIFT); + writel(clkctl, regs + S3C_PCM_CLKCTL); + } dev_dbg(pcm->dev, "PCMSOURCE_CLK-%lu SCLK=%ufs SCLK_DIV=%d SYNC_DIV=%d\n", clk_get_rate(clk), pcm->sclk_per_fs, sclk_div, sync_div); @@ -320,13 +311,11 @@ static int s3c_pcm_set_fmt(struct snd_soc_dai *cpu_dai, { struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(cpu_dai); void __iomem *regs = pcm->regs; - unsigned long flags; - int ret = 0; u32 ctl; dev_dbg(pcm->dev, "Entered %s\n", __func__); - spin_lock_irqsave(&pcm->lock, flags); + guard(spinlock_irqsave)(&pcm->lock); ctl = readl(regs + S3C_PCM_CTL); @@ -336,8 +325,7 @@ static int s3c_pcm_set_fmt(struct snd_soc_dai *cpu_dai, break; default: dev_err(pcm->dev, "Unsupported clock inversion!\n"); - ret = -EINVAL; - goto exit; + return -EINVAL; } switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) { @@ -346,8 +334,7 @@ static int s3c_pcm_set_fmt(struct snd_soc_dai *cpu_dai, break; default: dev_err(pcm->dev, "Unsupported master/slave format!\n"); - ret = -EINVAL; - goto exit; + return -EINVAL; } switch (fmt & SND_SOC_DAIFMT_CLOCK_MASK) { @@ -359,8 +346,7 @@ static int s3c_pcm_set_fmt(struct snd_soc_dai *cpu_dai, break; default: dev_err(pcm->dev, "Invalid Clock gating request!\n"); - ret = -EINVAL; - goto exit; + return -EINVAL; } switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { @@ -374,16 +360,11 @@ static int s3c_pcm_set_fmt(struct snd_soc_dai *cpu_dai, break; default: dev_err(pcm->dev, "Unsupported data format!\n"); - ret = -EINVAL; - goto exit; + return -EINVAL; } writel(ctl, regs + S3C_PCM_CTL); - -exit: - spin_unlock_irqrestore(&pcm->lock, flags); - - return ret; + return 0; } static int s3c_pcm_set_clkdiv(struct snd_soc_dai *cpu_dai, diff --git a/sound/soc/samsung/spdif.c b/sound/soc/samsung/spdif.c index fb30f6b637a0..7fc46d55c522 100644 --- a/sound/soc/samsung/spdif.c +++ b/sound/soc/samsung/spdif.c @@ -143,7 +143,6 @@ static int spdif_trigger(struct snd_pcm_substream *substream, int cmd, { struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); struct samsung_spdif_info *spdif = to_info(snd_soc_rtd_to_cpu(rtd, 0)); - unsigned long flags; dev_dbg(spdif->dev, "Entered %s\n", __func__); @@ -151,16 +150,14 @@ static int spdif_trigger(struct snd_pcm_substream *substream, int cmd, case SNDRV_PCM_TRIGGER_START: case SNDRV_PCM_TRIGGER_RESUME: case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: - spin_lock_irqsave(&spdif->lock, flags); - spdif_snd_txctrl(spdif, 1); - spin_unlock_irqrestore(&spdif->lock, flags); + scoped_guard(spinlock_irqsave, &spdif->lock) + spdif_snd_txctrl(spdif, 1); break; case SNDRV_PCM_TRIGGER_STOP: case SNDRV_PCM_TRIGGER_SUSPEND: case SNDRV_PCM_TRIGGER_PAUSE_PUSH: - spin_lock_irqsave(&spdif->lock, flags); - spdif_snd_txctrl(spdif, 0); - spin_unlock_irqrestore(&spdif->lock, flags); + scoped_guard(spinlock_irqsave, &spdif->lock) + spdif_snd_txctrl(spdif, 0); break; default: return -EINVAL; @@ -182,7 +179,6 @@ static int spdif_hw_params(struct snd_pcm_substream *substream, void __iomem *regs = spdif->regs; struct snd_dmaengine_dai_dma_data *dma_data; u32 con, clkcon, cstas; - unsigned long flags; int i, ratio; dev_dbg(spdif->dev, "Entered %s\n", __func__); @@ -196,7 +192,7 @@ static int spdif_hw_params(struct snd_pcm_substream *substream, snd_soc_dai_set_dma_data(snd_soc_rtd_to_cpu(rtd, 0), substream, dma_data); - spin_lock_irqsave(&spdif->lock, flags); + guard(spinlock_irqsave)(&spdif->lock); con = readl(regs + CON) & CON_MASK; cstas = readl(regs + CSTAS) & CSTAS_MASK; @@ -214,7 +210,7 @@ static int spdif_hw_params(struct snd_pcm_substream *substream, break; default: dev_err(spdif->dev, "Unsupported data size.\n"); - goto err; + return -EINVAL; } ratio = spdif->clk_rate / params_rate(params); @@ -224,7 +220,7 @@ static int spdif_hw_params(struct snd_pcm_substream *substream, if (i == ARRAY_SIZE(spdif_sysclk_ratios)) { dev_err(spdif->dev, "Invalid clock ratio %ld/%d\n", spdif->clk_rate, params_rate(params)); - goto err; + return -EINVAL; } con &= ~CON_MCLKDIV_MASK; @@ -257,7 +253,7 @@ static int spdif_hw_params(struct snd_pcm_substream *substream, default: dev_err(spdif->dev, "Invalid sampling rate %d\n", params_rate(params)); - goto err; + return -EINVAL; } cstas &= ~CSTAS_CATEGORY_MASK; @@ -268,12 +264,7 @@ static int spdif_hw_params(struct snd_pcm_substream *substream, writel(cstas, regs + CSTAS); writel(clkcon, regs + CLKCON); - spin_unlock_irqrestore(&spdif->lock, flags); - return 0; -err: - spin_unlock_irqrestore(&spdif->lock, flags); - return -EINVAL; } static void spdif_shutdown(struct snd_pcm_substream *substream,