未验证 提交 215450eb 编写于 作者: C Claudiu Beznea 提交者: Mark Brown

ASoC: mchp-spdiftx: simplify locking around ctrl->ch_stat

Use a temporary variable to keep the AES3 value. With this a
spin_unlock_irqrestore() call has been removed from the final code.
Signed-off-by: NClaudiu Beznea <claudiu.beznea@microchip.com>
Link: https://lore.kernel.org/r/20221117123750.291911-2-claudiu.beznea@microchip.comSigned-off-by: NMark Brown <broonie@kernel.org>
上级 82b21ca1
...@@ -355,6 +355,7 @@ static int mchp_spdiftx_hw_params(struct snd_pcm_substream *substream, ...@@ -355,6 +355,7 @@ static int mchp_spdiftx_hw_params(struct snd_pcm_substream *substream,
struct mchp_spdiftx_mixer_control *ctrl = &dev->control; struct mchp_spdiftx_mixer_control *ctrl = &dev->control;
u32 mr; u32 mr;
unsigned int bps = params_physical_width(params) / 8; unsigned int bps = params_physical_width(params) / 8;
unsigned char aes3;
int ret; int ret;
dev_dbg(dev->dev, "%s() rate=%u format=%#x width=%u channels=%u\n", dev_dbg(dev->dev, "%s() rate=%u format=%#x width=%u channels=%u\n",
...@@ -440,48 +441,48 @@ static int mchp_spdiftx_hw_params(struct snd_pcm_substream *substream, ...@@ -440,48 +441,48 @@ static int mchp_spdiftx_hw_params(struct snd_pcm_substream *substream,
mr |= SPDIFTX_MR_BPS(bps); mr |= SPDIFTX_MR_BPS(bps);
spin_lock_irqsave(&ctrl->lock, flags);
ctrl->ch_stat[3] &= ~IEC958_AES3_CON_FS;
switch (params_rate(params)) { switch (params_rate(params)) {
case 22050: case 22050:
ctrl->ch_stat[3] |= IEC958_AES3_CON_FS_22050; aes3 = IEC958_AES3_CON_FS_22050;
break; break;
case 24000: case 24000:
ctrl->ch_stat[3] |= IEC958_AES3_CON_FS_24000; aes3 = IEC958_AES3_CON_FS_24000;
break; break;
case 32000: case 32000:
ctrl->ch_stat[3] |= IEC958_AES3_CON_FS_32000; aes3 = IEC958_AES3_CON_FS_32000;
break; break;
case 44100: case 44100:
ctrl->ch_stat[3] |= IEC958_AES3_CON_FS_44100; aes3 = IEC958_AES3_CON_FS_44100;
break; break;
case 48000: case 48000:
ctrl->ch_stat[3] |= IEC958_AES3_CON_FS_48000; aes3 = IEC958_AES3_CON_FS_48000;
break; break;
case 88200: case 88200:
ctrl->ch_stat[3] |= IEC958_AES3_CON_FS_88200; aes3 = IEC958_AES3_CON_FS_88200;
break; break;
case 96000: case 96000:
ctrl->ch_stat[3] |= IEC958_AES3_CON_FS_96000; aes3 = IEC958_AES3_CON_FS_96000;
break; break;
case 176400: case 176400:
ctrl->ch_stat[3] |= IEC958_AES3_CON_FS_176400; aes3 = IEC958_AES3_CON_FS_176400;
break; break;
case 192000: case 192000:
ctrl->ch_stat[3] |= IEC958_AES3_CON_FS_192000; aes3 = IEC958_AES3_CON_FS_192000;
break; break;
case 8000: case 8000:
case 11025: case 11025:
case 16000: case 16000:
case 64000: case 64000:
ctrl->ch_stat[3] |= IEC958_AES3_CON_FS_NOTID; aes3 = IEC958_AES3_CON_FS_NOTID;
break; break;
default: default:
dev_err(dev->dev, "unsupported sample frequency: %u\n", dev_err(dev->dev, "unsupported sample frequency: %u\n",
params_rate(params)); params_rate(params));
spin_unlock_irqrestore(&ctrl->lock, flags);
return -EINVAL; return -EINVAL;
} }
spin_lock_irqsave(&ctrl->lock, flags);
ctrl->ch_stat[3] &= ~IEC958_AES3_CON_FS;
ctrl->ch_stat[3] |= aes3;
mchp_spdiftx_channel_status_write(dev); mchp_spdiftx_channel_status_write(dev);
spin_unlock_irqrestore(&ctrl->lock, flags); spin_unlock_irqrestore(&ctrl->lock, flags);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册