Lines Matching refs:i2s
27 #include "jz4740-i2s.h"
116 static inline uint32_t jz4740_i2s_read(const struct jz4740_i2s *i2s,
119 return readl(i2s->base + reg);
122 static inline void jz4740_i2s_write(const struct jz4740_i2s *i2s,
125 writel(value, i2s->base + reg);
128 static inline void jz4740_i2s_set_bits(const struct jz4740_i2s *i2s,
131 uint32_t value = jz4740_i2s_read(i2s, reg);
133 jz4740_i2s_write(i2s, reg, value);
139 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
148 if (!i2s->soc_info->shared_fifo_flush) {
150 jz4740_i2s_set_bits(i2s, JZ_REG_AIC_CTRL, JZ_AIC_CTRL_TFLUSH);
152 jz4740_i2s_set_bits(i2s, JZ_REG_AIC_CTRL, JZ_AIC_CTRL_RFLUSH);
164 if (i2s->soc_info->shared_fifo_flush)
165 jz4740_i2s_set_bits(i2s, JZ_REG_AIC_CTRL, JZ_AIC_CTRL_TFLUSH);
167 ret = clk_prepare_enable(i2s->clk_i2s);
171 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF);
173 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf);
181 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
187 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF);
189 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf);
191 clk_disable_unprepare(i2s->clk_i2s);
197 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
207 ctrl = jz4740_i2s_read(i2s, JZ_REG_AIC_CTRL);
224 jz4740_i2s_write(i2s, JZ_REG_AIC_CTRL, ctrl);
231 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
236 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF);
274 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf);
275 jz4740_i2s_write(i2s, JZ_REG_AIC_I2S_FMT, format);
283 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
288 ctrl = jz4740_i2s_read(i2s, JZ_REG_AIC_CTRL);
290 div_reg = jz4740_i2s_read(i2s, JZ_REG_AIC_CLK_DIV);
291 div = clk_get_rate(i2s->clk_i2s) / (64 * params_rate(params));
318 if (i2s->soc_info->version >= JZ_I2S_JZ4770) {
327 jz4740_i2s_write(i2s, JZ_REG_AIC_CTRL, ctrl);
328 jz4740_i2s_write(i2s, JZ_REG_AIC_CLK_DIV, div_reg);
336 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
345 clk_set_parent(i2s->clk_i2s, parent);
351 clk_set_parent(i2s->clk_i2s, parent);
352 ret = clk_set_rate(i2s->clk_i2s, freq);
364 struct jz4740_i2s *i2s = snd_soc_component_get_drvdata(component);
368 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF);
370 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf);
372 clk_disable_unprepare(i2s->clk_i2s);
375 clk_disable_unprepare(i2s->clk_aic);
382 struct jz4740_i2s *i2s = snd_soc_component_get_drvdata(component);
386 ret = clk_prepare_enable(i2s->clk_aic);
391 ret = clk_prepare_enable(i2s->clk_i2s);
393 clk_disable_unprepare(i2s->clk_aic);
397 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF);
399 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf);
405 static void jz4740_i2c_init_pcm_config(struct jz4740_i2s *i2s)
410 dma_data = &i2s->playback_dma_data;
413 dma_data->addr = i2s->phys_base + JZ_REG_AIC_FIFO;
416 dma_data = &i2s->capture_dma_data;
419 dma_data->addr = i2s->phys_base + JZ_REG_AIC_FIFO;
424 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
428 ret = clk_prepare_enable(i2s->clk_aic);
432 jz4740_i2c_init_pcm_config(i2s);
433 snd_soc_dai_init_dma_data(dai, &i2s->playback_dma_data,
434 &i2s->capture_dma_data);
436 if (i2s->soc_info->version >= JZ_I2S_JZ4760) {
450 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, JZ_AIC_CONF_RESET);
451 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf);
458 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
460 clk_disable_unprepare(i2s->clk_aic);
535 .name = "jz4740-i2s",
541 { .compatible = "ingenic,jz4740-i2s", .data = &jz4740_i2s_soc_info },
542 { .compatible = "ingenic,jz4760-i2s", .data = &jz4760_i2s_soc_info },
543 { .compatible = "ingenic,jz4770-i2s", .data = &jz4770_i2s_soc_info },
544 { .compatible = "ingenic,jz4780-i2s", .data = &jz4780_i2s_soc_info },
552 struct jz4740_i2s *i2s;
556 i2s = devm_kzalloc(dev, sizeof(*i2s), GFP_KERNEL);
557 if (!i2s)
560 i2s->soc_info = device_get_match_data(dev);
563 i2s->base = devm_ioremap_resource(dev, mem);
564 if (IS_ERR(i2s->base))
565 return PTR_ERR(i2s->base);
567 i2s->phys_base = mem->start;
569 i2s->clk_aic = devm_clk_get(dev, "aic");
570 if (IS_ERR(i2s->clk_aic))
571 return PTR_ERR(i2s->clk_aic);
573 i2s->clk_i2s = devm_clk_get(dev, "i2s");
574 if (IS_ERR(i2s->clk_i2s))
575 return PTR_ERR(i2s->clk_i2s);
577 platform_set_drvdata(pdev, i2s);
580 i2s->soc_info->dai, 1);
591 .name = "jz4740-i2s",
601 MODULE_ALIAS("platform:jz4740-i2s");