• Home
  • Raw
  • Download

Lines Matching +full:conf +full:- +full:clk

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
15 #include <linux/clk.h>
18 #include <linux/dma-mapping.h>
27 #include "jz4740-i2s.h"
107 struct clk *clk_aic;
108 struct clk *clk_i2s;
119 return readl(i2s->base + reg); in jz4740_i2s_read()
125 writel(value, i2s->base + reg); in jz4740_i2s_write()
140 uint32_t conf; in jz4740_i2s_startup() local
148 if (!i2s->soc_info->shared_fifo_flush) { in jz4740_i2s_startup()
149 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) in jz4740_i2s_startup()
164 if (i2s->soc_info->shared_fifo_flush) in jz4740_i2s_startup()
167 ret = clk_prepare_enable(i2s->clk_i2s); in jz4740_i2s_startup()
171 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF); in jz4740_i2s_startup()
172 conf |= JZ_AIC_CONF_ENABLE; in jz4740_i2s_startup()
173 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf); in jz4740_i2s_startup()
182 uint32_t conf; in jz4740_i2s_shutdown() local
187 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF); in jz4740_i2s_shutdown()
188 conf &= ~JZ_AIC_CONF_ENABLE; in jz4740_i2s_shutdown()
189 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf); in jz4740_i2s_shutdown()
191 clk_disable_unprepare(i2s->clk_i2s); in jz4740_i2s_shutdown()
202 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) in jz4740_i2s_trigger()
221 return -EINVAL; in jz4740_i2s_trigger()
234 uint32_t conf; in jz4740_i2s_set_fmt() local
236 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF); in jz4740_i2s_set_fmt()
238 conf &= ~(JZ_AIC_CONF_BIT_CLK_MASTER | JZ_AIC_CONF_SYNC_CLK_MASTER); in jz4740_i2s_set_fmt()
242 conf |= JZ_AIC_CONF_BIT_CLK_MASTER | JZ_AIC_CONF_SYNC_CLK_MASTER; in jz4740_i2s_set_fmt()
246 conf |= JZ_AIC_CONF_SYNC_CLK_MASTER; in jz4740_i2s_set_fmt()
249 conf |= JZ_AIC_CONF_BIT_CLK_MASTER; in jz4740_i2s_set_fmt()
254 return -EINVAL; in jz4740_i2s_set_fmt()
264 return -EINVAL; in jz4740_i2s_set_fmt()
271 return -EINVAL; in jz4740_i2s_set_fmt()
274 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf); in jz4740_i2s_set_fmt()
291 div = clk_get_rate(i2s->clk_i2s) / (64 * params_rate(params)); in jz4740_i2s_hw_params()
301 return -EINVAL; in jz4740_i2s_hw_params()
304 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in jz4740_i2s_hw_params()
313 div_reg |= (div - 1) << I2SDIV_DV_SHIFT; in jz4740_i2s_hw_params()
318 if (i2s->soc_info->version >= JZ_I2S_JZ4770) { in jz4740_i2s_hw_params()
320 div_reg |= (div - 1) << I2SDIV_IDV_SHIFT; in jz4740_i2s_hw_params()
323 div_reg |= (div - 1) << I2SDIV_DV_SHIFT; in jz4740_i2s_hw_params()
337 struct clk *parent; in jz4740_i2s_set_sysclk()
345 clk_set_parent(i2s->clk_i2s, parent); in jz4740_i2s_set_sysclk()
351 clk_set_parent(i2s->clk_i2s, parent); in jz4740_i2s_set_sysclk()
352 ret = clk_set_rate(i2s->clk_i2s, freq); in jz4740_i2s_set_sysclk()
355 return -EINVAL; in jz4740_i2s_set_sysclk()
365 uint32_t conf; in jz4740_i2s_suspend() local
368 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF); in jz4740_i2s_suspend()
369 conf &= ~JZ_AIC_CONF_ENABLE; in jz4740_i2s_suspend()
370 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf); in jz4740_i2s_suspend()
372 clk_disable_unprepare(i2s->clk_i2s); in jz4740_i2s_suspend()
375 clk_disable_unprepare(i2s->clk_aic); in jz4740_i2s_suspend()
383 uint32_t conf; in jz4740_i2s_resume() local
386 ret = clk_prepare_enable(i2s->clk_aic); in jz4740_i2s_resume()
391 ret = clk_prepare_enable(i2s->clk_i2s); in jz4740_i2s_resume()
393 clk_disable_unprepare(i2s->clk_aic); in jz4740_i2s_resume()
397 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF); in jz4740_i2s_resume()
398 conf |= JZ_AIC_CONF_ENABLE; in jz4740_i2s_resume()
399 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf); in jz4740_i2s_resume()
410 dma_data = &i2s->playback_dma_data; in jz4740_i2c_init_pcm_config()
411 dma_data->maxburst = 16; in jz4740_i2c_init_pcm_config()
412 dma_data->slave_id = JZ4740_DMA_TYPE_AIC_TRANSMIT; in jz4740_i2c_init_pcm_config()
413 dma_data->addr = i2s->phys_base + JZ_REG_AIC_FIFO; in jz4740_i2c_init_pcm_config()
416 dma_data = &i2s->capture_dma_data; in jz4740_i2c_init_pcm_config()
417 dma_data->maxburst = 16; in jz4740_i2c_init_pcm_config()
418 dma_data->slave_id = JZ4740_DMA_TYPE_AIC_RECEIVE; in jz4740_i2c_init_pcm_config()
419 dma_data->addr = i2s->phys_base + JZ_REG_AIC_FIFO; in jz4740_i2c_init_pcm_config()
425 uint32_t conf; in jz4740_i2s_dai_probe() local
428 ret = clk_prepare_enable(i2s->clk_aic); in jz4740_i2s_dai_probe()
433 snd_soc_dai_init_dma_data(dai, &i2s->playback_dma_data, in jz4740_i2s_dai_probe()
434 &i2s->capture_dma_data); in jz4740_i2s_dai_probe()
436 if (i2s->soc_info->version >= JZ_I2S_JZ4760) { in jz4740_i2s_dai_probe()
437 conf = (7 << JZ4760_AIC_CONF_FIFO_RX_THRESHOLD_OFFSET) | in jz4740_i2s_dai_probe()
443 conf = (7 << JZ_AIC_CONF_FIFO_RX_THRESHOLD_OFFSET) | in jz4740_i2s_dai_probe()
451 jz4740_i2s_write(i2s, JZ_REG_AIC_CONF, conf); in jz4740_i2s_dai_probe()
460 clk_disable_unprepare(i2s->clk_aic); in jz4740_i2s_dai_remove()
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 },
551 struct device *dev = &pdev->dev; in jz4740_i2s_dev_probe()
558 return -ENOMEM; in jz4740_i2s_dev_probe()
560 i2s->soc_info = device_get_match_data(dev); in jz4740_i2s_dev_probe()
563 i2s->base = devm_ioremap_resource(dev, mem); in jz4740_i2s_dev_probe()
564 if (IS_ERR(i2s->base)) in jz4740_i2s_dev_probe()
565 return PTR_ERR(i2s->base); in jz4740_i2s_dev_probe()
567 i2s->phys_base = mem->start; in jz4740_i2s_dev_probe()
569 i2s->clk_aic = devm_clk_get(dev, "aic"); in jz4740_i2s_dev_probe()
570 if (IS_ERR(i2s->clk_aic)) in jz4740_i2s_dev_probe()
571 return PTR_ERR(i2s->clk_aic); in jz4740_i2s_dev_probe()
573 i2s->clk_i2s = devm_clk_get(dev, "i2s"); in jz4740_i2s_dev_probe()
574 if (IS_ERR(i2s->clk_i2s)) in jz4740_i2s_dev_probe()
575 return PTR_ERR(i2s->clk_i2s); in jz4740_i2s_dev_probe()
580 i2s->soc_info->dai, 1); in jz4740_i2s_dev_probe()
591 .name = "jz4740-i2s",
598 MODULE_AUTHOR("Lars-Peter Clausen, <lars@metafoo.de>");
601 MODULE_ALIAS("platform:jz4740-i2s");