Skip to content

Commit 4c22b04

Browse files
AaronDotbroonie
authored andcommitted
ASoC: loongson: Factor out loongson i2s enable clock functions
There are a few i2s clock enable operations in loongson_i2s_set_fmt(), convert them to simple helper functions called loongson_i2s_enable_mclk() and loongson_i2s_enable_bclk(). Signed-off-by: Binbin Zhou <zhoubinbin@loongson.cn> Link: https://patch.msgid.link/d6f6c818b0ecee87277f704b6a801cbbf5e712ce.1725844530.git.zhoubinbin@loongson.cn Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent ddb538a commit 4c22b04

1 file changed

Lines changed: 47 additions & 39 deletions

File tree

sound/soc/loongson/loongson_i2s.c

Lines changed: 47 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
#define LOONGSON_I2S_TX_ENABLE (I2S_CTRL_TX_EN | I2S_CTRL_TX_DMA_EN)
2525
#define LOONGSON_I2S_RX_ENABLE (I2S_CTRL_RX_EN | I2S_CTRL_RX_DMA_EN)
2626

27+
#define LOONGSON_I2S_DEF_DELAY 10
28+
#define LOONGSON_I2S_DEF_TIMEOUT 500000
29+
2730
static int loongson_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
2831
struct snd_soc_dai *dai)
2932
{
@@ -119,10 +122,40 @@ static int loongson_i2s_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
119122
return 0;
120123
}
121124

125+
static int loongson_i2s_enable_mclk(struct loongson_i2s *i2s)
126+
{
127+
u32 val;
128+
129+
if (i2s->rev_id == 0)
130+
return 0;
131+
132+
regmap_update_bits(i2s->regmap, LS_I2S_CTRL,
133+
I2S_CTRL_MCLK_EN, I2S_CTRL_MCLK_EN);
134+
135+
return regmap_read_poll_timeout_atomic(i2s->regmap,
136+
LS_I2S_CTRL, val,
137+
val & I2S_CTRL_MCLK_READY,
138+
LOONGSON_I2S_DEF_DELAY,
139+
LOONGSON_I2S_DEF_TIMEOUT);
140+
}
141+
142+
static int loongson_i2s_enable_bclk(struct loongson_i2s *i2s)
143+
{
144+
u32 val;
145+
146+
if (i2s->rev_id == 0)
147+
return 0;
148+
149+
return regmap_read_poll_timeout_atomic(i2s->regmap,
150+
LS_I2S_CTRL, val,
151+
val & I2S_CTRL_CLK_READY,
152+
LOONGSON_I2S_DEF_DELAY,
153+
LOONGSON_I2S_DEF_TIMEOUT);
154+
}
155+
122156
static int loongson_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
123157
{
124158
struct loongson_i2s *i2s = snd_soc_dai_get_drvdata(dai);
125-
u32 val;
126159
int ret;
127160

128161
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
@@ -144,54 +177,29 @@ static int loongson_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
144177
/* Enable master mode */
145178
regmap_update_bits(i2s->regmap, LS_I2S_CTRL, I2S_CTRL_MASTER,
146179
I2S_CTRL_MASTER);
147-
if (i2s->rev_id == 1) {
148-
ret = regmap_read_poll_timeout_atomic(i2s->regmap,
149-
LS_I2S_CTRL, val,
150-
val & I2S_CTRL_CLK_READY,
151-
10, 500000);
152-
if (ret < 0)
153-
dev_warn(dai->dev, "wait BCLK ready timeout\n");
154-
}
180+
ret = loongson_i2s_enable_bclk(i2s);
181+
if (ret < 0)
182+
dev_warn(dai->dev, "wait BCLK ready timeout\n");
155183
break;
156184
case SND_SOC_DAIFMT_BC_FP:
157185
/* Enable MCLK */
158-
if (i2s->rev_id == 1) {
159-
regmap_update_bits(i2s->regmap, LS_I2S_CTRL,
160-
I2S_CTRL_MCLK_EN,
161-
I2S_CTRL_MCLK_EN);
162-
ret = regmap_read_poll_timeout_atomic(i2s->regmap,
163-
LS_I2S_CTRL, val,
164-
val & I2S_CTRL_MCLK_READY,
165-
10, 500000);
166-
if (ret < 0)
167-
dev_warn(dai->dev, "wait MCLK ready timeout\n");
168-
}
186+
ret = loongson_i2s_enable_mclk(i2s);
187+
if (ret < 0)
188+
dev_warn(dai->dev, "wait MCLK ready timeout\n");
169189
break;
170190
case SND_SOC_DAIFMT_BP_FP:
171191
/* Enable MCLK */
172-
if (i2s->rev_id == 1) {
173-
regmap_update_bits(i2s->regmap, LS_I2S_CTRL,
174-
I2S_CTRL_MCLK_EN,
175-
I2S_CTRL_MCLK_EN);
176-
ret = regmap_read_poll_timeout_atomic(i2s->regmap,
177-
LS_I2S_CTRL, val,
178-
val & I2S_CTRL_MCLK_READY,
179-
10, 500000);
180-
if (ret < 0)
181-
dev_warn(dai->dev, "wait MCLK ready timeout\n");
182-
}
192+
ret = loongson_i2s_enable_mclk(i2s);
193+
if (ret < 0)
194+
dev_warn(dai->dev, "wait MCLK ready timeout\n");
183195

184196
/* Enable master mode */
185197
regmap_update_bits(i2s->regmap, LS_I2S_CTRL, I2S_CTRL_MASTER,
186198
I2S_CTRL_MASTER);
187-
if (i2s->rev_id == 1) {
188-
ret = regmap_read_poll_timeout_atomic(i2s->regmap,
189-
LS_I2S_CTRL, val,
190-
val & I2S_CTRL_CLK_READY,
191-
10, 500000);
192-
if (ret < 0)
193-
dev_warn(dai->dev, "wait BCLK ready timeout\n");
194-
}
199+
200+
ret = loongson_i2s_enable_bclk(i2s);
201+
if (ret < 0)
202+
dev_warn(dai->dev, "wait BCLK ready timeout\n");
195203
break;
196204
default:
197205
return -EINVAL;

0 commit comments

Comments
 (0)