Lines Matching full:i2s
27 #include "jz4740-i2s.h"
113 static inline uint32_t jz4740_i2s_read(const struct jz4740_i2s *i2s, in jz4740_i2s_read() argument
116 return readl(i2s->base + reg); in jz4740_i2s_read()
119 static inline void jz4740_i2s_write(const struct jz4740_i2s *i2s, in jz4740_i2s_write() argument
122 writel(value, i2s->base + reg); in jz4740_i2s_write()
128 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); in jz4740_i2s_startup() local
135 ctrl = jz4740_i2s_read(i2s, JZ_REG_AIC_CTRL); in jz4740_i2s_startup()
137 jz4740_i2s_write(i2s, JZ_REG_AIC_CTRL, ctrl); in jz4740_i2s_startup()
139 ret = clk_prepare_enable(i2s->clk_i2s); in jz4740_i2s_startup()
143 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF); in jz4740_i2s_startup()
145 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf); in jz4740_i2s_startup()
153 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); in jz4740_i2s_shutdown() local
159 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF); in jz4740_i2s_shutdown()
161 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf); in jz4740_i2s_shutdown()
163 clk_disable_unprepare(i2s->clk_i2s); in jz4740_i2s_shutdown()
169 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); in jz4740_i2s_trigger() local
179 ctrl = jz4740_i2s_read(i2s, JZ_REG_AIC_CTRL); in jz4740_i2s_trigger()
196 jz4740_i2s_write(i2s, JZ_REG_AIC_CTRL, ctrl); in jz4740_i2s_trigger()
203 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); in jz4740_i2s_set_fmt() local
208 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF); in jz4740_i2s_set_fmt()
246 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf); in jz4740_i2s_set_fmt()
247 jz4740_i2s_write(i2s, JZ_REG_AIC_I2S_FMT, format); in jz4740_i2s_set_fmt()
255 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); in jz4740_i2s_hw_params() local
260 ctrl = jz4740_i2s_read(i2s, JZ_REG_AIC_CTRL); in jz4740_i2s_hw_params()
262 div_reg = jz4740_i2s_read(i2s, JZ_REG_AIC_CLK_DIV); in jz4740_i2s_hw_params()
263 div = clk_get_rate(i2s->clk_i2s) / (64 * params_rate(params)); in jz4740_i2s_hw_params()
290 if (i2s->soc_info->version >= JZ_I2S_JZ4770) { in jz4740_i2s_hw_params()
299 jz4740_i2s_write(i2s, JZ_REG_AIC_CTRL, ctrl); in jz4740_i2s_hw_params()
300 jz4740_i2s_write(i2s, JZ_REG_AIC_CLK_DIV, div_reg); in jz4740_i2s_hw_params()
308 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); in jz4740_i2s_set_sysclk() local
317 clk_set_parent(i2s->clk_i2s, parent); in jz4740_i2s_set_sysclk()
323 clk_set_parent(i2s->clk_i2s, parent); in jz4740_i2s_set_sysclk()
324 ret = clk_set_rate(i2s->clk_i2s, freq); in jz4740_i2s_set_sysclk()
336 struct jz4740_i2s *i2s = snd_soc_component_get_drvdata(component); in jz4740_i2s_suspend() local
340 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF); in jz4740_i2s_suspend()
342 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf); in jz4740_i2s_suspend()
344 clk_disable_unprepare(i2s->clk_i2s); in jz4740_i2s_suspend()
347 clk_disable_unprepare(i2s->clk_aic); in jz4740_i2s_suspend()
354 struct jz4740_i2s *i2s = snd_soc_component_get_drvdata(component); in jz4740_i2s_resume() local
358 ret = clk_prepare_enable(i2s->clk_aic); in jz4740_i2s_resume()
363 ret = clk_prepare_enable(i2s->clk_i2s); in jz4740_i2s_resume()
365 clk_disable_unprepare(i2s->clk_aic); in jz4740_i2s_resume()
369 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF); in jz4740_i2s_resume()
371 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf); in jz4740_i2s_resume()
377 static void jz4740_i2c_init_pcm_config(struct jz4740_i2s *i2s) in jz4740_i2c_init_pcm_config() argument
382 dma_data = &i2s->playback_dma_data; in jz4740_i2c_init_pcm_config()
385 dma_data->addr = i2s->phys_base + JZ_REG_AIC_FIFO; in jz4740_i2c_init_pcm_config()
388 dma_data = &i2s->capture_dma_data; in jz4740_i2c_init_pcm_config()
391 dma_data->addr = i2s->phys_base + JZ_REG_AIC_FIFO; in jz4740_i2c_init_pcm_config()
396 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); in jz4740_i2s_dai_probe() local
400 ret = clk_prepare_enable(i2s->clk_aic); in jz4740_i2s_dai_probe()
404 jz4740_i2c_init_pcm_config(i2s); in jz4740_i2s_dai_probe()
405 snd_soc_dai_init_dma_data(dai, &i2s->playback_dma_data, in jz4740_i2s_dai_probe()
406 &i2s->capture_dma_data); in jz4740_i2s_dai_probe()
408 if (i2s->soc_info->version >= JZ_I2S_JZ4760) { in jz4740_i2s_dai_probe()
422 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, JZ_AIC_CONF_RESET); in jz4740_i2s_dai_probe()
423 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf); in jz4740_i2s_dai_probe()
430 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); in jz4740_i2s_dai_remove() local
432 clk_disable_unprepare(i2s->clk_aic); in jz4740_i2s_dai_remove()
506 .name = "jz4740-i2s",
512 { .compatible = "ingenic,jz4740-i2s", .data = &jz4740_i2s_soc_info },
513 { .compatible = "ingenic,jz4760-i2s", .data = &jz4760_i2s_soc_info },
514 { .compatible = "ingenic,jz4770-i2s", .data = &jz4770_i2s_soc_info },
515 { .compatible = "ingenic,jz4780-i2s", .data = &jz4780_i2s_soc_info },
523 struct jz4740_i2s *i2s; in jz4740_i2s_dev_probe() local
527 i2s = devm_kzalloc(dev, sizeof(*i2s), GFP_KERNEL); in jz4740_i2s_dev_probe()
528 if (!i2s) in jz4740_i2s_dev_probe()
531 i2s->soc_info = device_get_match_data(dev); in jz4740_i2s_dev_probe()
534 i2s->base = devm_ioremap_resource(dev, mem); in jz4740_i2s_dev_probe()
535 if (IS_ERR(i2s->base)) in jz4740_i2s_dev_probe()
536 return PTR_ERR(i2s->base); in jz4740_i2s_dev_probe()
538 i2s->phys_base = mem->start; in jz4740_i2s_dev_probe()
540 i2s->clk_aic = devm_clk_get(dev, "aic"); in jz4740_i2s_dev_probe()
541 if (IS_ERR(i2s->clk_aic)) in jz4740_i2s_dev_probe()
542 return PTR_ERR(i2s->clk_aic); in jz4740_i2s_dev_probe()
544 i2s->clk_i2s = devm_clk_get(dev, "i2s"); in jz4740_i2s_dev_probe()
545 if (IS_ERR(i2s->clk_i2s)) in jz4740_i2s_dev_probe()
546 return PTR_ERR(i2s->clk_i2s); in jz4740_i2s_dev_probe()
548 platform_set_drvdata(pdev, i2s); in jz4740_i2s_dev_probe()
551 i2s->soc_info->dai, 1); in jz4740_i2s_dev_probe()
562 .name = "jz4740-i2s",
570 MODULE_DESCRIPTION("Ingenic JZ4740 SoC I2S driver");
572 MODULE_ALIAS("platform:jz4740-i2s");