Lines Matching refs:rt5514_dsp

38 struct rt5514_dsp {
75 struct rt5514_dsp *rt5514_dsp =
76 container_of(work, struct rt5514_dsp, copy_work.work);
82 mutex_lock(&rt5514_dsp->dma_lock);
83 if (!rt5514_dsp->substream) {
84 dev_err(rt5514_dsp->dev, "No pcm substream\n");
88 runtime = rt5514_dsp->substream->runtime;
89 period_bytes = snd_pcm_lib_period_bytes(rt5514_dsp->substream);
91 schedule_delayed_work(&rt5514_dsp->copy_work, 5);
95 if (rt5514_dsp->buf_size % period_bytes)
96 rt5514_dsp->buf_size = (rt5514_dsp->buf_size / period_bytes) *
99 if (rt5514_dsp->get_size >= rt5514_dsp->buf_size) {
105 if (cur_wp >= rt5514_dsp->buf_rp)
106 remain_data = (cur_wp - rt5514_dsp->buf_rp);
109 (rt5514_dsp->buf_limit - rt5514_dsp->buf_rp) +
110 (cur_wp - rt5514_dsp->buf_base);
113 schedule_delayed_work(&rt5514_dsp->copy_work, 5);
118 if (rt5514_dsp->buf_rp + period_bytes <= rt5514_dsp->buf_limit) {
119 rt5514_spi_burst_read(rt5514_dsp->buf_rp,
120 runtime->dma_area + rt5514_dsp->dma_offset,
123 if (rt5514_dsp->buf_rp + period_bytes == rt5514_dsp->buf_limit)
124 rt5514_dsp->buf_rp = rt5514_dsp->buf_base;
126 rt5514_dsp->buf_rp += period_bytes;
128 truncated_bytes = rt5514_dsp->buf_limit - rt5514_dsp->buf_rp;
129 rt5514_spi_burst_read(rt5514_dsp->buf_rp,
130 runtime->dma_area + rt5514_dsp->dma_offset,
133 rt5514_spi_burst_read(rt5514_dsp->buf_base,
134 runtime->dma_area + rt5514_dsp->dma_offset +
137 rt5514_dsp->buf_rp = rt5514_dsp->buf_base + period_bytes -
141 rt5514_dsp->get_size += period_bytes;
142 rt5514_dsp->dma_offset += period_bytes;
143 if (rt5514_dsp->dma_offset >= runtime->dma_bytes)
144 rt5514_dsp->dma_offset = 0;
146 snd_pcm_period_elapsed(rt5514_dsp->substream);
148 schedule_delayed_work(&rt5514_dsp->copy_work, 5);
151 mutex_unlock(&rt5514_dsp->dma_lock);
154 static void rt5514_schedule_copy(struct rt5514_dsp *rt5514_dsp)
158 if (!rt5514_dsp->substream)
161 rt5514_dsp->get_size = 0;
170 rt5514_dsp->buf_base = buf[0] | buf[1] << 8 | buf[2] << 16 |
175 rt5514_dsp->buf_limit = buf[0] | buf[1] << 8 | buf[2] << 16 |
180 rt5514_dsp->buf_rp = buf[0] | buf[1] << 8 | buf[2] << 16 |
183 if (rt5514_dsp->buf_rp % 8)
184 rt5514_dsp->buf_rp = (rt5514_dsp->buf_rp / 8) * 8;
186 rt5514_dsp->buf_size = rt5514_dsp->buf_limit - rt5514_dsp->buf_base;
188 if (rt5514_dsp->buf_base && rt5514_dsp->buf_limit &&
189 rt5514_dsp->buf_rp && rt5514_dsp->buf_size)
190 schedule_delayed_work(&rt5514_dsp->copy_work, 0);
195 struct rt5514_dsp *rt5514_dsp = data;
197 rt5514_schedule_copy(rt5514_dsp);
215 struct rt5514_dsp *rt5514_dsp =
219 mutex_lock(&rt5514_dsp->dma_lock);
220 rt5514_dsp->substream = substream;
221 rt5514_dsp->dma_offset = 0;
226 rt5514_schedule_copy(rt5514_dsp);
228 mutex_unlock(&rt5514_dsp->dma_lock);
236 struct rt5514_dsp *rt5514_dsp =
239 mutex_lock(&rt5514_dsp->dma_lock);
240 rt5514_dsp->substream = NULL;
241 mutex_unlock(&rt5514_dsp->dma_lock);
243 cancel_delayed_work_sync(&rt5514_dsp->copy_work);
253 struct rt5514_dsp *rt5514_dsp =
256 return bytes_to_frames(runtime, rt5514_dsp->dma_offset);
262 struct rt5514_dsp *rt5514_dsp;
265 rt5514_dsp = devm_kzalloc(component->dev, sizeof(*rt5514_dsp),
267 if (!rt5514_dsp)
270 rt5514_dsp->dev = &rt5514_spi->dev;
271 mutex_init(&rt5514_dsp->dma_lock);
272 INIT_DELAYED_WORK(&rt5514_dsp->copy_work, rt5514_spi_copy_work);
273 snd_soc_component_set_drvdata(component, rt5514_dsp);
279 rt5514_dsp);
285 device_init_wakeup(rt5514_dsp->dev, true);
473 struct rt5514_dsp *rt5514_dsp = dev_get_drvdata(dev);
480 if (rt5514_dsp) {
481 if (rt5514_dsp->substream) {
485 rt5514_schedule_copy(rt5514_dsp);