Lines Matching defs:i2s

60 	struct axi_i2s *i2s = snd_soc_dai_get_drvdata(dai);
83 regmap_update_bits(i2s->regmap, AXI_I2S_REG_CTRL, mask, val);
91 struct axi_i2s *i2s = snd_soc_dai_get_drvdata(dai);
98 bclk_div = DIV_ROUND_UP(clk_get_rate(i2s->clk_ref), bclk_rate) / 2 - 1;
100 regmap_write(i2s->regmap, AXI_I2S_REG_CLK_CTRL, (word_size << 16) |
109 struct axi_i2s *i2s = snd_soc_dai_get_drvdata(dai);
118 regmap_write(i2s->regmap, AXI_I2S_REG_RESET, mask);
122 &i2s->rate_constraints);
126 return clk_prepare_enable(i2s->clk_ref);
132 struct axi_i2s *i2s = snd_soc_dai_get_drvdata(dai);
134 clk_disable_unprepare(i2s->clk_ref);
139 struct axi_i2s *i2s = snd_soc_dai_get_drvdata(dai);
143 i2s->has_playback ? &i2s->playback_dma_data : NULL,
144 i2s->has_capture ? &i2s->capture_dma_data : NULL);
163 .name = "axi-i2s",
174 static void axi_i2s_parse_of(struct axi_i2s *i2s, const struct device_node *np)
181 i2s->has_capture = true;
183 i2s->has_playback = true;
190 struct axi_i2s *i2s;
194 i2s = devm_kzalloc(&pdev->dev, sizeof(*i2s), GFP_KERNEL);
195 if (!i2s)
198 platform_set_drvdata(pdev, i2s);
200 axi_i2s_parse_of(i2s, pdev->dev.of_node);
206 i2s->regmap = devm_regmap_init_mmio(&pdev->dev, base,
208 if (IS_ERR(i2s->regmap))
209 return PTR_ERR(i2s->regmap);
211 i2s->clk = devm_clk_get(&pdev->dev, "axi");
212 if (IS_ERR(i2s->clk))
213 return PTR_ERR(i2s->clk);
215 i2s->clk_ref = devm_clk_get(&pdev->dev, "ref");
216 if (IS_ERR(i2s->clk_ref))
217 return PTR_ERR(i2s->clk_ref);
219 ret = clk_prepare_enable(i2s->clk);
223 if (i2s->has_playback) {
230 i2s->playback_dma_data.addr = res->start + AXI_I2S_REG_TX_FIFO;
231 i2s->playback_dma_data.addr_width = 4;
232 i2s->playback_dma_data.maxburst = 1;
235 if (i2s->has_capture) {
242 i2s->capture_dma_data.addr = res->start + AXI_I2S_REG_RX_FIFO;
243 i2s->capture_dma_data.addr_width = 4;
244 i2s->capture_dma_data.maxburst = 1;
247 i2s->ratnum.num = clk_get_rate(i2s->clk_ref) / 2 / AXI_I2S_BITS_PER_FRAME;
248 i2s->ratnum.den_step = 1;
249 i2s->ratnum.den_min = 1;
250 i2s->ratnum.den_max = 64;
252 i2s->rate_constraints.rats = &i2s->ratnum;
253 i2s->rate_constraints.nrats = 1;
255 regmap_write(i2s->regmap, AXI_I2S_REG_RESET, AXI_I2S_RESET_GLOBAL);
267 i2s->has_capture ? "enabled" : "disabled",
268 i2s->has_playback ? "enabled" : "disabled");
273 clk_disable_unprepare(i2s->clk);
279 struct axi_i2s *i2s = platform_get_drvdata(pdev);
281 clk_disable_unprepare(i2s->clk);
285 { .compatible = "adi,axi-i2s-1.00.a", },
292 .name = "axi-i2s",