Skip to content

Commit 4f5d649

Browse files
committed
register cpu dai
1 parent 562c0c8 commit 4f5d649

File tree

1 file changed

+118
-0
lines changed

1 file changed

+118
-0
lines changed

debug/codec/rk_i2s.c

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414

1515
#define I2S_DEFAULT_FREQ (11289600)
1616
#define I2S_DMA_BURST_SIZE (16) /* size * width: 16*4 = 64 bytes */
17+
#define ROCKCHIP_I2S_RATES SNDRV_PCM_RATE_8000_192000
18+
#define ROCKCHIP_I2S_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
19+
SNDRV_PCM_FMTBIT_S20_3LE | \
20+
SNDRV_PCM_FMTBIT_S24_LE | \
21+
SNDRV_PCM_FORMAT_S32_LE)
1722

1823
/* I2S regname and offset */
1924
#define I2S_TXCR (0x0000)
@@ -178,6 +183,107 @@ static const struct regmap_config rockchip_i2s_regmap_config = {
178183
.cache_type = REGCACHE_FLAT,
179184
};
180185

186+
/* value of /sys/kernel/debug/asoc/dais */
187+
static const struct snd_soc_component_driver rockchip_i2s_component = {
188+
.name = "rockchip-i2s",
189+
};
190+
191+
static int rockchip_i2s_dai_probe(struct snd_soc_dai *dai)
192+
{
193+
struct rk_i2s_dev *i2s = snd_soc_dai_get_drvdata(dai);
194+
195+
dai->capture_dma_data = &i2s->capture_dma_data;
196+
dai->playback_dma_data = &i2s->playback_dma_data;
197+
198+
return 0;
199+
}
200+
201+
static int rockchip_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
202+
struct snd_soc_dai *dai)
203+
{
204+
printk("%s, %d\n", __FUNCTION__, __LINE__);
205+
return 0;
206+
}
207+
208+
static int rockchip_i2s_hw_params(struct snd_pcm_substream *substream,
209+
struct snd_pcm_hw_params *params,
210+
struct snd_soc_dai *dai)
211+
{
212+
printk("%s, %d\n", __FUNCTION__, __LINE__);
213+
return 0;
214+
}
215+
216+
static int rockchip_i2s_set_fmt(struct snd_soc_dai *cpu_dai,
217+
unsigned int fmt)
218+
{
219+
printk("%s, %d\n", __FUNCTION__, __LINE__);
220+
return 0;
221+
}
222+
223+
static int rockchip_i2s_set_clkdiv(struct snd_soc_dai *cpu_dai,
224+
int div_id, int div)
225+
{
226+
printk("%s, %d\n", __FUNCTION__, __LINE__);
227+
return 0;
228+
}
229+
230+
static int rockchip_i2s_set_sysclk(struct snd_soc_dai *cpu_dai,
231+
int clk_id, unsigned int freq, int dir)
232+
{
233+
printk("%s, %d\n", __FUNCTION__, __LINE__);
234+
return 0;
235+
}
236+
237+
static struct snd_soc_dai_ops rockchip_i2s_dai_ops = {
238+
.trigger = rockchip_i2s_trigger,
239+
.hw_params = rockchip_i2s_hw_params,
240+
.set_fmt = rockchip_i2s_set_fmt,
241+
.set_clkdiv = rockchip_i2s_set_clkdiv,
242+
.set_sysclk = rockchip_i2s_set_sysclk,
243+
};
244+
245+
/* 这里有两个dai driver, 根据dts里的i2s-id来选择 */
246+
struct snd_soc_dai_driver rockchip_i2s_dai[] = {
247+
{
248+
.probe = rockchip_i2s_dai_probe,
249+
.name = "rockchip-i2s.0",
250+
.id = 0,
251+
.playback = {
252+
.channels_min = 2,
253+
.channels_max = 8,
254+
.rates = ROCKCHIP_I2S_RATES,
255+
.formats = ROCKCHIP_I2S_FORMATS,
256+
},
257+
.capture = {
258+
.channels_min = 2,
259+
.channels_max = 2,
260+
.rates = ROCKCHIP_I2S_RATES,
261+
.formats = ROCKCHIP_I2S_FORMATS,
262+
},
263+
.ops = &rockchip_i2s_dai_ops,
264+
.symmetric_rates = 1,
265+
},
266+
{
267+
.probe = rockchip_i2s_dai_probe,
268+
.name = "rockchip-i2s.1",
269+
.id = 1,
270+
.playback = {
271+
.channels_min = 2,
272+
.channels_max = 2,
273+
.rates = ROCKCHIP_I2S_RATES,
274+
.formats = ROCKCHIP_I2S_FORMATS,
275+
},
276+
.capture = {
277+
.channels_min = 2,
278+
.channels_max = 2,
279+
.rates = ROCKCHIP_I2S_RATES,
280+
.formats = ROCKCHIP_I2S_FORMATS,
281+
},
282+
.ops = &rockchip_i2s_dai_ops,
283+
.symmetric_rates = 1,
284+
},
285+
};
286+
181287
static int rockchip_i2s_probe(struct platform_device *pdev)
182288
{
183289
struct rk_i2s_dev *i2s;
@@ -243,6 +349,18 @@ static int rockchip_i2s_probe(struct platform_device *pdev)
243349
i2s->dev = &pdev->dev;
244350
dev_set_drvdata(&pdev->dev, i2s);
245351

352+
/*
353+
* register component(dai)
354+
* 根据dts里i2s-id的值来选择注册哪个dai
355+
*/
356+
ret = snd_soc_register_component(&pdev->dev, &rockchip_i2s_component,
357+
&rockchip_i2s_dai[pdev->id], 1);
358+
359+
if (ret) {
360+
dev_err(&pdev->dev, "Could not register DAI: %d\n", ret);
361+
ret = -ENOMEM;
362+
goto EXIT;
363+
}
246364
printk("%s, %d\n", __FUNCTION__, __LINE__);
247365

248366
EXIT:

0 commit comments

Comments
 (0)